Skip to content

Commit b88ce4b

Browse files
committed
demo-app
1 parent 2b7474f commit b88ce4b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+2604
-159
lines changed

packages/@ember/-internals/glimmer/lib/component-managers/curly.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import type {
2828
import type { Reference } from '@glimmer/reference';
2929
import { childRefFor, createComputeRef, createPrimitiveRef, valueForRef } from '@glimmer/reference';
3030
import { reifyPositional } from '@glimmer/runtime';
31-
import { EMPTY_ARRAY, unwrapTemplate } from '@glimmer/util';
31+
import { unwrapTemplate } from '@glimmer/utils';
3232
import {
3333
beginTrackFrame,
3434
beginUntrackFrame,
@@ -54,6 +54,7 @@ import { processComponentArgs } from '../utils/process-args';
5454

5555
export const ARGS = enumerableSymbol('ARGS');
5656
export const HAS_BLOCK = enumerableSymbol('HAS_BLOCK');
57+
const EMPTY_ARRAY = [];
5758

5859
export const DIRTY_TAG = Symbol('DIRTY_TAG');
5960
export const IS_DISPATCHING_ATTRS = Symbol('IS_DISPATCHING_ATTRS');

packages/@ember/-internals/glimmer/lib/component-managers/mount.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import type { Nullable } from '@ember/-internals/utility-types';
2121
import { capabilityFlagsFrom } from '@glimmer/manager';
2222
import type { Reference } from '@glimmer/reference';
2323
import { createConstRef, valueForRef } from '@glimmer/reference';
24-
import { unwrapTemplate } from '@glimmer/util';
24+
import { unwrapTemplate } from '@glimmer/utils';
2525
import type RuntimeResolver from '../resolver';
2626

2727
interface EngineState {

packages/@ember/-internals/glimmer/lib/component-managers/outlet.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { capabilityFlagsFrom } from '@glimmer/manager';
2121
import type { Reference } from '@glimmer/reference';
2222
import { createConstRef, valueForRef } from '@glimmer/reference';
2323
import { EMPTY_ARGS } from '@glimmer/runtime';
24-
import { unwrapTemplate } from '@glimmer/util';
24+
import { unwrapTemplate } from '@glimmer/utils';
2525

2626
import type { DynamicScope } from '../renderer';
2727
import type { OutletState } from '../utils/outlet';
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import type { InternalOwner } from '@ember/-internals/owner';
22
import type { Helper, HelperDefinitionState } from '@glimmer/interfaces';
3-
import { setInternalHelperManager } from '@glimmer/manager';
3+
// import { setInternalHelperManager } from '@glimmer/manager';
44

55
export function internalHelper(helper: Helper<InternalOwner>): HelperDefinitionState {
6-
return setInternalHelperManager(helper, {});
6+
return function () {
7+
console.log('internal helper', this, [...arguments]);
8+
return helper(...arguments);
9+
}
710
}

packages/@ember/-internals/glimmer/lib/renderer.ts

+38-22
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import type { InternalOwner } from '@ember/-internals/owner';
44
import { getOwner } from '@ember/-internals/owner';
55
import { guidFor } from '@ember/-internals/utils';
66
import { getViewElement, getViewId } from '@ember/-internals/views';
7+
import { renderComponent, runDestructors } from '@lifeart/gxt';
78
import { assert } from '@ember/debug';
89
import { _backburner, _getCurrentRunLoop } from '@ember/runloop';
910
import { destroy } from '@glimmer/destroyable';
@@ -31,14 +32,14 @@ import { createConstRef, UNDEFINED_REFERENCE, valueForRef } from '@glimmer/refer
3132
import type { CurriedValue } from '@glimmer/runtime';
3233
import {
3334
clientBuilder,
34-
curry,
35+
// curry,
3536
DOMChanges,
3637
DOMTreeConstruction,
3738
inTransaction,
3839
renderMain,
3940
runtimeContext,
4041
} from '@glimmer/runtime';
41-
import { unwrapTemplate } from '@glimmer/util';
42+
import { unwrapTemplate } from '@glimmer/utils';
4243
import { CURRENT_TAG, validateTag, valueForTag } from '@glimmer/validator';
4344
import type { SimpleDocument, SimpleElement, SimpleNode } from '@simple-dom/interface';
4445
import RSVP from 'rsvp';
@@ -64,6 +65,23 @@ export interface View {
6465
[BOUNDS]: Bounds | null;
6566
}
6667

68+
function curry(
69+
type: T,
70+
spec: object | string | any,
71+
owner: any,
72+
args: any | null,
73+
resolved = false
74+
) {
75+
console.log('curry');
76+
return {
77+
type,
78+
spec,
79+
owner,
80+
args,
81+
resolved,
82+
};
83+
}
84+
6785
export class DynamicScope implements GlimmerDynamicScope {
6886
constructor(public view: View | null, public outletState: Reference<OutletState | undefined>) {}
6987

@@ -129,13 +147,13 @@ class RootState {
129147
constructor(
130148
public root: Component | OutletView,
131149
public runtime: RuntimeContext,
132-
context: CompileTimeCompilationContext,
150+
_context: CompileTimeCompilationContext,
133151
owner: InternalOwner,
134152
template: Template,
135153
self: Reference<unknown>,
136154
parentElement: SimpleElement,
137-
dynamicScope: DynamicScope,
138-
builder: IBuilder
155+
_dynamicScope: DynamicScope,
156+
_builder: IBuilder
139157
) {
140158
assert(
141159
`You cannot render \`${valueForRef(self)}\` without a template.`,
@@ -146,23 +164,16 @@ class RootState {
146164
this.result = undefined;
147165
this.destroyed = false;
148166

149-
this.render = errorLoopTransaction(() => {
150-
let layout = unwrapTemplate(template).asLayout();
151-
152-
let iterator = renderMain(
153-
runtime,
154-
context,
155-
owner,
156-
self,
157-
builder(runtime.env, { element: parentElement, nextSibling: null }),
158-
layout,
159-
dynamicScope
160-
);
161-
162-
let result = (this.result = iterator.sync());
167+
// console.log(layout);
163168

164-
// override .render function after initial render
165-
this.render = errorLoopTransaction(() => result.rerender({ alwaysRevalidate: false }));
169+
this.render = errorLoopTransaction(() => {
170+
let layout = unwrapTemplate(template).asLayout().compile();
171+
const layoutInstance = new layout(this);
172+
// @ts-expect-error fine
173+
this.result = renderComponent(layoutInstance, parentElement, owner);
174+
this.render = errorLoopTransaction(() => {
175+
// fine
176+
});
166177
});
167178
}
168179

@@ -195,7 +206,11 @@ class RootState {
195206
196207
*/
197208

198-
inTransaction(env, () => destroy(result!));
209+
inTransaction(env, () => {
210+
// @ts-expect-error foo-bar
211+
runDestructors(result.ctx);
212+
destroy(result!);
213+
});
199214
}
200215
}
201216
}
@@ -370,6 +385,7 @@ export class Renderer {
370385
// renderer HOOKS
371386

372387
appendOutletView(view: OutletView, target: SimpleElement): void {
388+
console.log('appendOutletView', view, target);
373389
let definition = createRootOutlet(view);
374390
this._appendDefinition(
375391
view,
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { precompileTemplate } from '@ember/template-compilation';
2-
export default precompileTemplate('', {
3-
moduleName: 'packages/@ember/-internals/glimmer/lib/templates/empty.hbs',
4-
strictMode: true,
5-
});
1+
import { hbs } from '@lifeart/gxt';
2+
export default function emptyTemplate() {
3+
return hbs``;
4+
};
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
import { precompileTemplate } from '@ember/template-compilation';
2-
import { on } from '@ember/modifier';
3-
export default precompileTemplate(
4-
`<input
1+
import { hbs } from '@lifeart/gxt';
2+
export default function InputTemplate() {
3+
hbs`<input
54
{{!-- for compatibility --}}
65
id={{this.id}}
76
class={{this.class}}
@@ -17,12 +16,5 @@ export default precompileTemplate(
1716
{{on "keyup" this.keyUp}}
1817
{{on "paste" this.valueDidChange}}
1918
{{on "cut" this.valueDidChange}}
20-
/>`,
21-
{
22-
moduleName: 'packages/@ember/-internals/glimmer/lib/templates/input.hbs',
23-
strictMode: true,
24-
scope() {
25-
return { on };
26-
},
27-
}
28-
);
19+
/>`;
20+
}
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
1-
import { precompileTemplate } from '@ember/template-compilation';
2-
import { on } from '@ember/modifier';
1+
import { hbs } from '@lifeart/gxt';
32

4-
export default precompileTemplate(
5-
`<a
6-
{{!-- for compatibility --}}
7-
id={{this.id}}
8-
class={{this.class}}
3+
export default function LinkToTemplate() {
4+
return hbs`<a
5+
{{!-- for compatibility --}}
6+
id={{this.id}}
7+
class={{this.class}}
98
10-
{{!-- deprecated attribute bindings --}}
11-
role={{this.role}}
12-
title={{this.title}}
13-
rel={{this.rel}}
14-
tabindex={{this.tabindex}}
15-
target={{this.target}}
9+
{{!-- deprecated attribute bindings --}}
10+
role={{this.role}}
11+
title={{this.title}}
12+
rel={{this.rel}}
13+
tabindex={{this.tabindex}}
14+
target={{this.target}}
1615
17-
...attributes
16+
...attributes
1817
19-
href={{this.href}}
18+
href={{this.href}}
2019
21-
{{on 'click' this.click}}
22-
>{{yield}}</a>`,
23-
{
24-
moduleName: 'packages/@ember/-internals/glimmer/lib/templates/link-to.hbs',
25-
strictMode: true,
26-
scope() {
27-
return { on };
28-
},
29-
}
30-
);
20+
{{on 'click' this.click}} >{{yield}}</a>`;
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { Component } from '@lifeart/gxt';
2+
3+
interface State {
4+
outlets: {
5+
main: State | undefined,
6+
},
7+
render: {
8+
template(): () => unknown,
9+
controller: unknown,
10+
name: string,
11+
}
12+
}
13+
14+
export default class OutletHelper extends Component {
15+
get state() {
16+
return this.args.state().outlets.main || this.args.state();
17+
}
18+
get nextState() {
19+
return () => {
20+
return this.hasNext;
21+
}
22+
}
23+
get hasNext() {
24+
return this.state.outlets.main;
25+
}
26+
get canRender() {
27+
return !!this?.state?.render;
28+
}
29+
get MyComponent() {
30+
31+
const state = this.state;
32+
const render = state.render;
33+
const tpl = render.template();
34+
const args = {
35+
get model() {
36+
return render.model;
37+
}
38+
}
39+
if (tpl.instance) {
40+
return tpl.instance.template;
41+
}
42+
render.controller['args'] = args;
43+
const tplComponentInstance = new tpl(args);
44+
tplComponentInstance.template = tplComponentInstance.template.bind(render.controller);
45+
// we need to provide stable refs here to avoid re-renders
46+
tpl.instance = tplComponentInstance;
47+
return tplComponentInstance.template;
48+
}
49+
get model() {
50+
const state = this.state;
51+
const render = state.render;
52+
return render.model;
53+
}
54+
<template>
55+
{{#if this.canRender}}
56+
<this.MyComponent @model={{this.model}}>
57+
{{#if this.hasNext}}
58+
<OutletHelper @state={{this.nextState}} @root={{false}} />
59+
{{/if}}
60+
</this.MyComponent>
61+
62+
{{/if}}
63+
</template>
64+
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import { precompileTemplate } from '@ember/template-compilation';
2+
import { hbs } from '@lifeart/gxt';
23
import { outletHelper } from '../syntax/outlet';
4+
import Outlet from './outlet-helper-component';
35

4-
export default precompileTemplate(`{{component (outletHelper)}}`, {
5-
moduleName: 'packages/@ember/-internals/glimmer/lib/templates/outlet.hbs',
6-
strictMode: true,
7-
scope() {
8-
return { outletHelper };
9-
},
10-
});
6+
export default (owner) => {
7+
console.log('outlet factory', owner);
8+
9+
return function(args) {
10+
console.log('outlet', this, owner, ...arguments);
11+
return hbs`{{#let (component Outlet state=(args.state)) as |Outlet|}}
12+
<div>[main outlet template]<Outlet /></div>
13+
{{/let}}`;
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
1-
import { precompileTemplate } from '@ember/template-compilation';
2-
export default precompileTemplate(`{{component this}}`, {
3-
moduleName: 'packages/@ember/-internals/glimmer/lib/templates/root.hbs',
4-
strictMode: true,
5-
});
1+
import { hbs, $_fin } from '@lifeart/gxt';
2+
export default function(owner) {
3+
console.log('root-template init', owner);
4+
return function(rootState) {
5+
// console.log('root-template - render', [this], [...arguments]);
6+
// temp1.root.template
7+
// console.log(...arguments);
8+
// return function() {
9+
// console.log(...arguments);
10+
// return $_fin([...rootState.root.template()], this);
11+
// }
12+
// debugger;
13+
const state = rootState.root.ref;
14+
console.log('rootState', state);
15+
return hbs`
16+
{{log 'root-template-create' this rootState}}
17+
{{#let (component rootState.root.template state=state root=true) as |Layout|}}
18+
<Layout />
19+
{{/let}}
20+
`;
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import { precompileTemplate } from '@ember/template-compilation';
2-
import { on } from '@ember/modifier';
1+
import { hbs } from '@lifeart/gxt';
32

4-
export default precompileTemplate(
5-
`<textarea
3+
export default function TextareaTemplate() {
4+
return hbs`<textarea
65
{{!-- for compatibility --}}
76
id={{this.id}}
87
class={{this.class}}
@@ -16,12 +15,5 @@ export default precompileTemplate(
1615
{{on "keyup" this.keyUp}}
1716
{{on "paste" this.valueDidChange}}
1817
{{on "cut" this.valueDidChange}}
19-
/>`,
20-
{
21-
moduleName: 'packages/@ember/-internals/glimmer/lib/templates/textarea.hbs',
22-
strictMode: true,
23-
scope() {
24-
return { on };
25-
},
26-
}
27-
);
18+
/>`;
19+
}

0 commit comments

Comments
 (0)