Skip to content

Commit 816c17c

Browse files
committed
Bring @glimmer/component into ember repo
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
1 parent 5c99785 commit 816c17c

File tree

18 files changed

+685
-111
lines changed

18 files changed

+685
-111
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ jobs:
4343
steps:
4444
- uses: actions/checkout@v4
4545
- uses: ./.github/actions/setup
46+
- name: build types
47+
run: pnpm build:types
4648
- name: Check published and internal types
4749
run: pnpm type-check
4850

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
"@babel/preset-env": "^7.16.11",
114114
"@babel/types": "^7.22.5",
115115
"@embroider/shared-internals": "^2.5.0",
116-
"@glimmer/component": "^1.1.2",
116+
"@glimmer/component": "workspace:^",
117117
"@rollup/plugin-babel": "^6.0.4",
118118
"@simple-dom/document": "^1.4.0",
119119
"@swc-node/register": "^1.6.8",
@@ -173,7 +173,7 @@
173173
}
174174
},
175175
"peerDependencies": {
176-
"@glimmer/component": "^1.1.2"
176+
"@glimmer/component": "workspace:^"
177177
},
178178
"engines": {
179179
"node": ">= 18.*"

packages/@ember/-internals/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"version": "0.0.0",
44
"description": "Internal APIs shared by Ember packages. Warning: this package does not follow SemVer and is subject to break at any time!",
55
"type": "module",
6+
"private": true,
67
"exports": {
78
"./browser-environment": "./browser-environment/index.ts",
89
"./container": "./container/index.ts",
@@ -23,7 +24,7 @@
2324
"@ember/application": "workspace:*",
2425
"@ember/array": "workspace:*",
2526
"@ember/canary-features": "workspace:*",
26-
"@ember/component": "workspace:*",
27+
"@ember/component": "workspace:^",
2728
"@ember/controller": "workspace:*",
2829
"@ember/debug": "workspace:*",
2930
"@ember/destroyable": "workspace:*",
@@ -40,7 +41,7 @@
4041
"@ember/template-factory": "workspace:*",
4142
"@ember/utils": "workspace:*",
4243
"@glimmer/compiler": "0.92.0",
43-
"@glimmer/component": "^1.1.2",
44+
"@glimmer/component": "workspace:^",
4445
"@glimmer/destroyable": "0.92.0",
4546
"@glimmer/env": "^0.1.7",
4647
"@glimmer/global-context": "0.92.0",

packages/@ember/owner/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
"@ember/object": "workspace:*",
1414
"@ember/routing": "workspace:*",
1515
"@ember/runloop": "workspace:*",
16-
"@glimmer/component": "^1.1.2",
16+
"@glimmer/component": "workspace:^",
1717
"@glimmer/env": "^0.1.7",
1818
"expect-type": "^0.15.0"
1919
}
20-
}
20+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* eslint-env node */
2+
'use strict';
3+
4+
const { addonV1Shim } = require('@embroider/addon-shim');
5+
module.exports = addonV1Shim(__dirname);
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{
2+
"name": "@glimmer/component",
3+
"version": "2.0.0",
4+
"description": "Glimmer component library",
5+
"exports": {
6+
".": "./dist/index.js"
7+
},
8+
"keywords": [
9+
"ember-addon"
10+
],
11+
"license": "MIT",
12+
"contributors": [
13+
"Dan Gebhardt <[email protected]>",
14+
"Robert Jackson <[email protected]>",
15+
"Tom Dale <[email protected]>"
16+
],
17+
"repository": "https://github.com/emberjs/ember.js",
18+
"scripts": {},
19+
"dependencies": {
20+
"@embroider/addon-shim": "^1.8.9",
21+
"@glimmer/env": "^0.1.7"
22+
},
23+
"devDependencies": {
24+
"typescript": "5.1"
25+
},
26+
"engines": {
27+
"node": ">= 18"
28+
},
29+
"typesVersions": {
30+
"*": {
31+
"*": [
32+
"dist/*"
33+
]
34+
}
35+
},
36+
"ember-addon": {
37+
"type": "addon",
38+
"version": 2,
39+
"main": "addon-main.cjs"
40+
}
41+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { DEBUG } from '@glimmer/env';
2+
import type { Arguments, ComponentManager, ComponentCapabilities } from '@glimmer/interfaces';
3+
import { type default as BaseComponent, ARGS_SET } from './component';
4+
5+
export interface Constructor<T> {
6+
new (owner: unknown, args: Record<string, unknown>): T;
7+
}
8+
9+
export default abstract class BaseComponentManager<GlimmerComponent extends BaseComponent>
10+
implements ComponentManager<GlimmerComponent>
11+
{
12+
abstract capabilities: ComponentCapabilities;
13+
14+
private owner: unknown;
15+
16+
constructor(owner: unknown) {
17+
this.owner = owner;
18+
}
19+
20+
createComponent(
21+
ComponentClass: Constructor<GlimmerComponent>,
22+
args: Arguments
23+
): GlimmerComponent {
24+
if (DEBUG) {
25+
ARGS_SET.set(args.named, true);
26+
}
27+
28+
return new ComponentClass(this.owner, args.named);
29+
}
30+
31+
getContext(component: GlimmerComponent): GlimmerComponent {
32+
return component;
33+
}
34+
}

0 commit comments

Comments
 (0)