Skip to content

Commit

Permalink
Bring @glimmer/component into ember repo
Browse files Browse the repository at this point in the history
The glimmerjs/glimmer.js monorepo is littered with
"standalone Glimmer.js" functionality that we
don't use and that is not being maintained. But it
also contains two packages that are critical to
ember: `@glimmer/component` and
`@glimmer/tracking`.

I want to bring both of those packages into here
instead, while jettisoning their extra complexity
that exists only to make them portable to the
"standalone Glimmer.js" use case.

This PR brings over @glimmer/component, and simplifies it by:
 - dropping support for Ember < 3.13.
 - converting to a v2 addon

This also adds end-to-end test coverage exercising
an interactive glimmer component.

valid v2 addon

expanding end-to-end test coverage to exercise glimmer component and glimmer tracking
  • Loading branch information
ef4 committed Sep 13, 2024
1 parent 5c99785 commit 9bcde59
Show file tree
Hide file tree
Showing 17 changed files with 684 additions and 111 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@
"@babel/preset-env": "^7.16.11",
"@babel/types": "^7.22.5",
"@embroider/shared-internals": "^2.5.0",
"@glimmer/component": "^1.1.2",
"@glimmer/component": "workspace:^",
"@rollup/plugin-babel": "^6.0.4",
"@simple-dom/document": "^1.4.0",
"@swc-node/register": "^1.6.8",
Expand Down Expand Up @@ -173,7 +173,7 @@
}
},
"peerDependencies": {
"@glimmer/component": "^1.1.2"
"@glimmer/component": "workspace:^"
},
"engines": {
"node": ">= 18.*"
Expand Down
5 changes: 3 additions & 2 deletions packages/@ember/-internals/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"version": "0.0.0",
"description": "Internal APIs shared by Ember packages. Warning: this package does not follow SemVer and is subject to break at any time!",
"type": "module",
"private": true,
"exports": {
"./browser-environment": "./browser-environment/index.ts",
"./container": "./container/index.ts",
Expand All @@ -23,7 +24,7 @@
"@ember/application": "workspace:*",
"@ember/array": "workspace:*",
"@ember/canary-features": "workspace:*",
"@ember/component": "workspace:*",
"@ember/component": "workspace:^",
"@ember/controller": "workspace:*",
"@ember/debug": "workspace:*",
"@ember/destroyable": "workspace:*",
Expand All @@ -40,7 +41,7 @@
"@ember/template-factory": "workspace:*",
"@ember/utils": "workspace:*",
"@glimmer/compiler": "0.92.0",
"@glimmer/component": "^1.1.2",
"@glimmer/component": "workspace:^",
"@glimmer/destroyable": "0.92.0",
"@glimmer/env": "^0.1.7",
"@glimmer/global-context": "0.92.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/@ember/owner/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
"@ember/object": "workspace:*",
"@ember/routing": "workspace:*",
"@ember/runloop": "workspace:*",
"@glimmer/component": "^1.1.2",
"@glimmer/component": "workspace:^",
"@glimmer/env": "^0.1.7",
"expect-type": "^0.15.0"
}
}
}
5 changes: 5 additions & 0 deletions packages/@glimmer/component/addon-main.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/* eslint-env node */
'use strict';

const { addonV1Shim } = require('@embroider/addon-shim');
module.exports = addonV1Shim(__dirname);
41 changes: 41 additions & 0 deletions packages/@glimmer/component/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"name": "@glimmer/component",
"version": "2.0.0",
"description": "Glimmer component library",
"exports": {
".": "./dist/index.js"
},
"keywords": [
"ember-addon"
],
"license": "MIT",
"contributors": [
"Dan Gebhardt <dan@cerebris.com>",
"Robert Jackson <me@rwjblue.com>",
"Tom Dale <tom@tomdale.net>"
],
"repository": "https://github.com/emberjs/ember.js",
"scripts": {},
"dependencies": {
"@embroider/addon-shim": "^1.8.9",
"@glimmer/env": "^0.1.7"
},
"devDependencies": {
"typescript": "5.1"
},
"engines": {
"node": ">= 18"
},
"typesVersions": {
"*": {
"*": [
"dist/*"
]
}
},
"ember-addon": {
"type": "addon",
"version": 2,
"main": "addon-main.cjs"
}
}
34 changes: 34 additions & 0 deletions packages/@glimmer/component/src/-private/base-component-manager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { DEBUG } from '@glimmer/env';
import type { Arguments, ComponentManager, ComponentCapabilities } from '@glimmer/interfaces';
import { type default as BaseComponent, ARGS_SET } from './component';

export interface Constructor<T> {
new (owner: unknown, args: Record<string, unknown>): T;
}

export default abstract class BaseComponentManager<GlimmerComponent extends BaseComponent>
implements ComponentManager<GlimmerComponent>
{
abstract capabilities: ComponentCapabilities;

private owner: unknown;

constructor(owner: unknown) {
this.owner = owner;
}

createComponent(
ComponentClass: Constructor<GlimmerComponent>,
args: Arguments
): GlimmerComponent {
if (DEBUG) {
ARGS_SET.set(args.named, true);
}

return new ComponentClass(this.owner, args.named);
}

getContext(component: GlimmerComponent): GlimmerComponent {
return component;
}
}
Loading

0 comments on commit 9bcde59

Please sign in to comment.