From 32b79662675b2a1ba0db836f72fd8fb5f433be85 Mon Sep 17 00:00:00 2001
From: Steven Footea
Date: Mon, 6 Nov 2017 15:16:34 -0700
Subject: [PATCH 001/135] WIP: Upgrade glimmer-vm to 0.29.10
There is much left to do here. This is just the first pass, where I have
done nothing but try to clear out the errors caused by the upgrade. Not
all of the errors are cleared yet, largely because several exports from
glimmer-vm have been removed and I don't know how to replace them (help
wanted). Below is a list of the needed changes and problems I have
encountered in the upgrade process.
UPGRADE NOTES (starting at glimmer-vm 0.25.6)
* Simple is now in @glimmer/interfaces
* ComponentManager.getSelf cannot return null (returns RootReference?)
* ComponentManager.getTag returns ComponentStateBucket.tag (: Tag)
* Some code moved from ComponentManager.update to
* ComponentManager.didUpdate
* ComponentManager -->
* ComponentManager
* ComponentManager.create signature changed
* ComponentStateBucket's defintion is now DefinitionState instead of
* ComponentDefinition
* ComponentManager.prepareArgs signature changed
* ComponentManager.getCapabilities is new
* CompiledDynamicTemplate is gone (no longer in runtime, anyway) see
* https://github.com/glimmerjs/glimmer-vm/commit/79f2b4521f5a7d48d04e3fd34e224ddf5bc4c241#diff-d561208b0ad153d9273c2188e16c7442
* Must implicitly include @glimmer/vm and @glimmer/opcode-compiler and
* @glimmer/encoder in ember-cli-build.js
* compileLayout -> scanLayout -> prepareLayout -> new WrappedBuilder
* isSafeString is no longer exported publicly. Is that intentional?
* normalizeTextValue is no longer exported publicly. Is that
* intentional?
* isComponentDefinition is gone, kind of replaced by
* `isCurriedComponentDefinition`. Neither is exported.
* getComponentDefintion is no longer part of Environment.
* referenceFromParts has been removed.
* f3444e9ae0c7751047bdcd856e61344bfb548e12
* readDOMAttr has been removed. 316805b9175e01698120b9566ec51c88d075026a
---
ember-cli-build.js | 18 +-
package.json | 14 +-
.../lib/component-managers/abstract.ts | 20 +-
.../lib/component-managers/curly.ts | 68 ++++---
.../component-managers/definition-state.ts | 28 +++
.../lib/component-managers/mount.ts | 35 +++-
.../lib/component-managers/outlet.ts | 44 +++--
.../lib/component-managers/render.ts | 53 ++++--
.../lib/component-managers/root.ts | 36 ++--
packages/ember-glimmer/lib/environment.ts | 54 +++---
.../ember-glimmer/lib/helpers/component.ts | 3 +-
packages/ember-glimmer/lib/helpers/concat.ts | 1 -
.../ember-glimmer/lib/modifiers/action.ts | 19 +-
packages/ember-glimmer/lib/syntax/mount.ts | 1 +
packages/ember-glimmer/lib/template.ts | 2 -
packages/ember-glimmer/lib/utils/bindings.ts | 36 ++--
yarn.lock | 173 +++++++++++-------
17 files changed, 402 insertions(+), 203 deletions(-)
create mode 100644 packages/ember-glimmer/lib/component-managers/definition-state.ts
diff --git a/ember-cli-build.js b/ember-cli-build.js
index d51fa4a89b2..b4dfcea47cb 100644
--- a/ember-cli-build.js
+++ b/ember-cli-build.js
@@ -65,8 +65,11 @@ module.exports = function(options) {
glimmerPkgES('@glimmer/compiler', ['@glimmer/util', '@glimmer/wire-format', '@glimmer/syntax']),
{ annotation: '@glimmer/compiler' }
);
+ let glimmerEncoder = toES5(glimmerPkgES('@glimmer/encoder'));
+ let glimmerOpcodeComiler = toES5(glimmerPkgES('@glimmer/opcode-compiler', ['@glimmer/encoder']));
let glimmerReference = toES5(glimmerPkgES('@glimmer/reference', ['@glimmer/util']));
let glimmerUtil = toES5(glimmerPkgES('@glimmer/util'));
+ let glimmerVM = toES5(glimmerPkgES('@glimmer/vm'));
let glimmerWireFormat = toES5(glimmerPkgES('@glimmer/wire-format', ['@glimmer/util']));
let babelDebugHelpersES5 = toES5(babelHelpers('debug'), { annotation: 'babel helpers debug' });
let inlineParser = toES5(handlebarsES(), { annotation: 'handlebars' });
@@ -136,8 +139,11 @@ module.exports = function(options) {
emberMetalES5,
emberConsoleES5,
emberDebugES5,
+ glimmerEncoder,
+ glimmerOpcodeComiler,
glimmerReference,
glimmerUtil,
+ glimmerVM,
glimmerWireFormat,
backburner,
version,
@@ -197,8 +203,11 @@ module.exports = function(options) {
emberDebugES5,
glimmerSyntax,
glimmerCompiler,
+ glimmerEncoder,
+ glimmerOpcodeComiler,
glimmerReference,
glimmerUtil,
+ glimmerVM,
glimmerWireFormat,
backburner,
debugFeatures,
@@ -229,8 +238,11 @@ module.exports = function(options) {
});
let depsProd = [
+ glimmerEncoder,
+ glimmerOpcodeComiler,
glimmerReference,
glimmerUtil,
+ glimmerVM,
glimmerWireFormat,
backburner,
rsvp
@@ -344,9 +356,11 @@ function dependenciesES6() {
routeRecognizerES(),
glimmerPkgES('@glimmer/node', ['@glimmer/runtime']),
glimmerPkgES('@glimmer/runtime', [
- '@glimmer/util',
+ '@glimmer/opcode-compiler',
'@glimmer/reference',
- '@glimmer/wire-format'
+ '@glimmer/wire-format',
+ '@glimmer/util',
+ '@glimmer/vm'
])
];
}
diff --git a/package.json b/package.json
index f6c82063310..1d0bb5df2f5 100644
--- a/package.json
+++ b/package.json
@@ -42,6 +42,11 @@
"test:testem": "testem -f testem.dist.json"
},
"dependencies": {
+ "@glimmer/compiler": "^0.29.10",
+ "@glimmer/node": "^0.29.10",
+ "@glimmer/reference": "^0.29.10",
+ "@glimmer/runtime": "^0.29.10",
+ "@glimmer/vm": "^0.29.10",
"broccoli-funnel": "^2.0.1",
"broccoli-merge-trees": "^2.0.0",
"ember-cli-get-component-path-option": "^1.0.0",
@@ -58,10 +63,11 @@
"resolve": "^1.3.3"
},
"devDependencies": {
- "@glimmer/compiler": "^0.25.6",
- "@glimmer/node": "^0.25.6",
- "@glimmer/reference": "^0.25.6",
- "@glimmer/runtime": "^0.25.6",
+ "@glimmer/compiler": "^0.29.10",
+ "@glimmer/node": "^0.29.10",
+ "@glimmer/reference": "^0.29.10",
+ "@glimmer/runtime": "^0.29.10",
+ "@glimmer/vm": "^0.29.10",
"aws-sdk": "^2.46.0",
"babel-plugin-check-es2015-constants": "^6.22.0",
"babel-plugin-debug-macros": "^0.1.10",
diff --git a/packages/ember-glimmer/lib/component-managers/abstract.ts b/packages/ember-glimmer/lib/component-managers/abstract.ts
index 3dd6ac47fb6..fa07aabafe9 100644
--- a/packages/ember-glimmer/lib/component-managers/abstract.ts
+++ b/packages/ember-glimmer/lib/component-managers/abstract.ts
@@ -1,13 +1,14 @@
-import { ProgramSymbolTable } from '@glimmer/interfaces';
+import {
+ ComponentCapabilities,
+} from '@glimmer/interfaces';
import { Tag, VersionedPathReference } from '@glimmer/reference';
import {
Bounds,
- CompiledDynamicTemplate,
- ComponentDefinition,
ComponentManager,
DynamicScope,
ElementOperations,
Environment,
+ Invocation,
PreparedArguments,
} from '@glimmer/runtime';
import { IArguments } from '@glimmer/runtime/dist/types/lib/vm/arguments';
@@ -23,7 +24,7 @@ import DebugStack from '../utils/debug-stack';
// tslint:disable-next-line:max-line-length
// https://github.com/glimmerjs/glimmer-vm/blob/v0.24.0-beta.4/packages/%40glimmer/runtime/lib/component/interfaces.ts#L21
-export default abstract class AbstractManager implements ComponentManager {
+export default abstract class AbstractManager implements ComponentManager {
public debugStack: typeof DebugStack;
public _pushToDebugStack: (name: string, environment: any) => void;
public _pushEngineToDebugStack: (name: string, environment: any) => void;
@@ -32,7 +33,7 @@ export default abstract class AbstractManager implements ComponentManager
this.debugStack = undefined;
}
- prepareArgs(_definition: ComponentDefinition, _args: IArguments): Option {
+ prepareArgs(_state: U, _args: IArguments): Option {
return null;
}
@@ -42,16 +43,17 @@ export default abstract class AbstractManager implements ComponentManager
abstract create(
env: Environment,
- definition: ComponentDefinition,
+ definition: U,
args: IArguments,
dynamicScope: DynamicScope,
caller: VersionedPathReference,
hasDefaultBlock: boolean): T;
abstract layoutFor(
- definition: ComponentDefinition,
+ definition: any,
component: T,
- env: Environment): CompiledDynamicTemplate;
+ env: Environment): Invocation;
abstract getSelf(component: T): VersionedPathReference;
+ abstract getCapabilities(state: U): ComponentCapabilities;
didCreateElement(_component: T, _element: Element, _operations: ElementOperations): void {
// noop
@@ -68,7 +70,7 @@ export default abstract class AbstractManager implements ComponentManager
// noop
}
- getTag(_bucket: T): Option { return null; }
+ abstract getTag(_bucket: T): Tag;
// inheritors should also call `this._pushToDebugStack`
// to ensure the rerendering assertion messages are
diff --git a/packages/ember-glimmer/lib/component-managers/curly.ts b/packages/ember-glimmer/lib/component-managers/curly.ts
index 33161af7cda..76525127821 100644
--- a/packages/ember-glimmer/lib/component-managers/curly.ts
+++ b/packages/ember-glimmer/lib/component-managers/curly.ts
@@ -1,4 +1,3 @@
-import { Option } from '@glimmer/interfaces';
import {
combineTagged,
Tag,
@@ -7,19 +6,22 @@ import {
import {
Arguments,
Bounds,
- CompiledDynamicProgram,
- ComponentClass,
ComponentDefinition,
- ComponentManager,
ElementOperations,
+ Invocation,
NamedArguments,
PositionalArguments,
PreparedArguments,
PrimitiveReference,
- Simple,
VM,
} from '@glimmer/runtime';
import { Destroyable, Opaque } from '@glimmer/util';
+import {
+ ComponentCapabilities,
+ Option,
+ Simple,
+ VMHandle
+} from '@glimmer/interfaces';
import { privatize as P } from 'container';
import {
assert,
@@ -53,6 +55,7 @@ import ComponentStateBucket, { Component } from '../utils/curly-component-state-
import { processComponentArgs } from '../utils/process-args';
import { PropertyReference } from '../utils/references';
import AbstractManager from './abstract';
+import DefinitionState, { CAPABILITIES } from './definition-state';
const DEFAULT_LAYOUT = P`template:components/-default`;
@@ -85,7 +88,7 @@ function applyAttributeBindings(element: Simple.Element, attributeBindings: any,
}
if (seen.indexOf('id') === -1) {
- operations.addStaticAttribute(element, 'id', component.elementId);
+ operations.setAttribute('id', PrimitiveReference.create(component.elementId), true, null);
}
if (seen.indexOf('style') === -1) {
@@ -140,9 +143,14 @@ export class PositionalArgumentReference {
}
}
-export default class CurlyComponentManager extends AbstractManager {
- prepareArgs(definition: CurlyComponentDefinition, args: Arguments): Option {
- let componentPositionalParamsDefinition = definition.ComponentClass.class.positionalParams;
+export default class CurlyComponentManager extends AbstractManager {
+
+ getCapabilities(state: DefinitionState): ComponentCapabilities {
+ return state.capabilities;
+ }
+
+ prepareArgs(state: DefinitionState, args: Arguments): Option {
+ let componentPositionalParamsDefinition = state.ComponentClass.class.positionalParams;
if (DEBUG && componentPositionalParamsDefinition) {
validatePositionalParameters(args.named, args.positional, componentPositionalParamsDefinition);
@@ -152,7 +160,7 @@ export default class CurlyComponentManager extends AbstractManager 0;
let needsPositionalParamMunging = componentHasPositionalParams && args.positional.length !== 0;
- let isClosureComponent = definition.args;
+ let isClosureComponent = args;
if (!needsPositionalParamMunging && !isClosureComponent) {
return null;
@@ -164,10 +172,10 @@ export default class CurlyComponentManager extends AbstractManager, hasBlock: boolean): ComponentStateBucket {
+ create(environment: Environment, state: DefinitionState, args: Arguments, dynamicScope: DynamicScope, callerSelfRef: VersionedPathReference, hasBlock: boolean): ComponentStateBucket {
if (DEBUG) {
- this._pushToDebugStack(`component:${definition.name}`, environment);
+ this._pushToDebugStack(`component:${state.name}`, environment);
}
let parentView = dynamicScope.view;
- let factory = definition.ComponentClass;
+ let factory = state.ComponentClass;
let capturedArgs = args.named.capture();
let props = processComponentArgs(capturedArgs);
@@ -250,7 +258,7 @@ export default class CurlyComponentManager extends AbstractManager {
- operations.addStaticAttribute(element, 'class', name);
+ operations.setAttribute('class', PrimitiveReference.create(name), false, null);
});
}
@@ -323,7 +330,7 @@ export default class CurlyComponentManager extends AbstractManager {
+ getTag({ component }: ComponentStateBucket): Tag {
return component[DIRTY_TAG];
}
@@ -442,16 +449,21 @@ export function rerenderInstrumentDetails(component: any): any {
return component.instrumentDetails({ initialRender: false });
}
-const MANAGER = new CurlyComponentManager();
-
-export class CurlyComponentDefinition extends ComponentDefinition {
+export class CurlyComponentDefinition implements ComponentDefinition {
public template: OwnedTemplate;
public args: Arguments | undefined;
+ public state: DefinitionState;
// tslint:disable-next-line:no-shadowed-variable
- constructor(name: string, ComponentClass: ComponentClass, template: OwnedTemplate, args: Arguments | undefined, customManager?: ComponentManager) {
- super(name, customManager || MANAGER, ComponentClass);
+ constructor(public name: string, public manager: CurlyComponentManager, public ComponentClass: any, public handle: Option, template: OwnedTemplate, args?: Arguments) {
this.template = template;
this.args = args;
+ this.manager = manager;
+ this.state = {
+ name,
+ ComponentClass,
+ handle,
+ capabilities: CAPABILITIES
+ };
}
}
diff --git a/packages/ember-glimmer/lib/component-managers/definition-state.ts b/packages/ember-glimmer/lib/component-managers/definition-state.ts
new file mode 100644
index 00000000000..55f1841657d
--- /dev/null
+++ b/packages/ember-glimmer/lib/component-managers/definition-state.ts
@@ -0,0 +1,28 @@
+import {
+ ComponentCapabilities,
+ ProgramSymbolTable,
+ VMHandle
+} from '@glimmer/interfaces';
+import {
+ Option
+} from '@glimmer/util';
+
+export const CAPABILITIES: ComponentCapabilities = {
+ dynamicLayout: true,
+ dynamicTag: true,
+ prepareArgs: false,
+ createArgs: true,
+ attributeHook: true,
+ elementHook: true
+};
+
+export default interface DefinitionState {
+ capabilities: ComponentCapabilities;
+
+ name: string;
+ ComponentClass: any;
+ handle: Option;
+ symbolTable?: ProgramSymbolTable;
+ template?: any;
+ outletName?: string;
+}
diff --git a/packages/ember-glimmer/lib/component-managers/mount.ts b/packages/ember-glimmer/lib/component-managers/mount.ts
index 32d74fbc2d2..37ed1401b69 100644
--- a/packages/ember-glimmer/lib/component-managers/mount.ts
+++ b/packages/ember-glimmer/lib/component-managers/mount.ts
@@ -2,21 +2,29 @@ import {
Arguments,
ComponentDefinition,
} from '@glimmer/runtime';
+import {
+ ComponentCapabilities,
+ VMHandle
+} from '@glimmer/interfaces';
import {
Destroyable,
Opaque,
Option
} from '@glimmer/util';
import {
+ Tag,
VersionedPathReference
} from '@glimmer/reference';
import { DEBUG } from 'ember-env-flags';
import { generateControllerFactory } from 'ember-routing';
import { EMBER_ENGINES_MOUNT_PARAMS } from 'ember/features';
+import { Component } from '../utils/curly-component-state-bucket';
+import { DIRTY_TAG } from '../component';
import { RootReference } from '../utils/references';
import Environment from '../environment';
import AbstractManager from './abstract';
+import DefinitionState, { CAPABILITIES } from './definition-state';
import { OutletLayoutCompiler } from './outlet';
// TODO: remove these stubbed interfaces when better typing is in place
@@ -29,13 +37,18 @@ interface EngineType {
interface EngineBucket {
engine: EngineType;
+ component?: Component;
controller?: any;
modelReference?: any;
modelRevision?: any;
}
-class MountManager extends AbstractManager {
- create(environment: Environment, { name }: ComponentDefinition, args: Arguments) {
+class MountManager extends AbstractManager {
+ getCapabilities(state: DefinitionState): ComponentCapabilities {
+ return state.capabilities;
+ }
+
+ create(environment: Environment, { name }: DefinitionState, args: Arguments) {
if (DEBUG) {
this._pushEngineToDebugStack(`engine:${name}`, environment);
}
@@ -74,6 +87,11 @@ class MountManager extends AbstractManager {
return new RootReference(controller);
}
+ getTag({ component }: EngineBucket): Tag {
+ // TODO: is this the right tag?
+ return component[DIRTY_TAG];
+ }
+
getDestructor({ engine }: EngineBucket): Option {
return engine;
}
@@ -97,10 +115,15 @@ class MountManager extends AbstractManager {
}
}
-const MOUNT_MANAGER = new MountManager();
+export class MountDefinition implements ComponentDefinition {
+ public state: DefinitionState;
-export class MountDefinition extends ComponentDefinition {
- constructor(name: string) {
- super(name, MOUNT_MANAGER, null);
+ constructor(public name: string, public manager: MountManager, public ComponentClass: any, public handle: Option) {
+ this.state = {
+ name,
+ ComponentClass,
+ handle,
+ capabilities: CAPABILITIES
+ };
}
}
diff --git a/packages/ember-glimmer/lib/component-managers/outlet.ts b/packages/ember-glimmer/lib/component-managers/outlet.ts
index c194d936430..36b3d90c533 100644
--- a/packages/ember-glimmer/lib/component-managers/outlet.ts
+++ b/packages/ember-glimmer/lib/component-managers/outlet.ts
@@ -1,10 +1,16 @@
-import { Option } from '@glimmer/interfaces';
+import {
+ ComponentCapabilities,
+ Option
+} from '@glimmer/interfaces';
import {
Arguments,
ComponentDefinition,
DynamicScope,
- Environment,
+ Environment
} from '@glimmer/runtime';
+import {
+ Tag
+} from '@glimmer/reference';
import { Destroyable } from '@glimmer/util/dist/types';
import { DEBUG } from 'ember-env-flags';
import { _instrumentStart } from 'ember-metal';
@@ -16,6 +22,9 @@ import {
} from '../template';
import { RootReference } from '../utils/references';
import AbstractManager from './abstract';
+import { Component } from '../utils/curly-component-state-bucket';
+import DefinitionState from './definition-state';
+import { DIRTY_TAG } from '../component';
function instrumentationPayload({ render: { name, outlet } }: {render: {name: string, outlet: string}}) {
return { object: `${name}:${outlet}` };
@@ -30,6 +39,7 @@ interface OutletDynamicScope extends DynamicScope {
class StateBucket {
public outletState: any;
public finalizer: any;
+ public component: Component;
constructor(outletState: any) {
this.outletState = outletState;
@@ -47,9 +57,9 @@ class StateBucket {
}
}
-class OutletComponentManager extends AbstractManager {
+class OutletComponentManager extends AbstractManager {
create(environment: Environment,
- definition: OutletComponentDefinition,
+ definition: DefinitionState,
_args: Arguments,
dynamicScope: OutletDynamicScope) {
if (DEBUG) {
@@ -62,6 +72,10 @@ class OutletComponentManager extends AbstractManager {
return new StateBucket(outletState);
}
+ getCapabilities(state: DefinitionState): ComponentCapabilities {
+ return state.capabilities;
+ }
+
layoutFor(definition: OutletComponentDefinition, _bucket: StateBucket, env: Environment) {
return (env as EmberEnvironment).getCompiledBlock(OutletLayoutCompiler, definition.template);
}
@@ -70,6 +84,11 @@ class OutletComponentManager extends AbstractManager {
return new RootReference(outletState.render.controller);
}
+ getTag({ component }: StateBucket): Tag {
+ // TODO: is this the right tag?
+ return component[DIRTY_TAG];
+ }
+
didRenderLayout(bucket: StateBucket) {
bucket.finalize();
@@ -83,10 +102,8 @@ class OutletComponentManager extends AbstractManager {
}
}
-const MANAGER = new OutletComponentManager();
-
class TopLevelOutletComponentManager extends OutletComponentManager {
- create(environment: Environment, definition: OutletComponentDefinition, _args: Arguments, dynamicScope: OutletDynamicScope) {
+ create(environment: Environment, definition: DefinitionState, _args: Arguments, dynamicScope: OutletDynamicScope) {
if (DEBUG) {
this._pushToDebugStack(`template:${definition.template.meta.moduleName}`, environment);
}
@@ -98,12 +115,12 @@ class TopLevelOutletComponentManager extends OutletComponentManager {
}
}
-const TOP_LEVEL_MANAGER = new TopLevelOutletComponentManager();
-
-export class TopLevelOutletComponentDefinition extends ComponentDefinition {
+export class TopLevelOutletComponentDefinition implements ComponentDefinition {
public template: WrappedTemplateFactory;
+ public state: DefinitionState;
+ public manager: TopLevelOutletComponentManager;
+
constructor(instance: any) {
- super('outlet', TOP_LEVEL_MANAGER, instance);
this.template = instance.template;
generateGuid(this);
}
@@ -126,12 +143,13 @@ class TopLevelOutletLayoutCompiler {
TopLevelOutletLayoutCompiler.id = 'top-level-outlet';
-export class OutletComponentDefinition extends ComponentDefinition {
+export class OutletComponentDefinition implements ComponentDefinition {
public outletName: string;
public template: OwnedTemplate;
+ public state: DefinitionState;
+ public manager: OutletComponentManager;
constructor(outletName: string, template: OwnedTemplate) {
- super('outlet', MANAGER, null);
this.outletName = outletName;
this.template = template;
generateGuid(this);
diff --git a/packages/ember-glimmer/lib/component-managers/render.ts b/packages/ember-glimmer/lib/component-managers/render.ts
index 352dde6b538..933a4fd4198 100644
--- a/packages/ember-glimmer/lib/component-managers/render.ts
+++ b/packages/ember-glimmer/lib/component-managers/render.ts
@@ -1,20 +1,27 @@
import {
- ComponentDefinition,
- ComponentManager,
+ ComponentCapabilities,
+} from '@glimmer/interfaces';
+import {
+ Tag
+} from '@glimmer/reference';
+import {
+ Arguments,
+ ComponentDefinition
} from '@glimmer/runtime';
-import { IArguments } from '@glimmer/runtime/dist/types/lib/vm/arguments';
import { assert } from 'ember-debug';
import { DEBUG } from 'ember-env-flags';
import { generateController, generateControllerFactory } from 'ember-routing';
+import { DIRTY_TAG } from '../component';
import Environment from '../environment';
import { DynamicScope } from '../renderer';
import { OwnedTemplate } from '../template';
import { RootReference } from '../utils/references';
import AbstractManager from './abstract';
+import DefinitionState from './definition-state';
import { OutletLayoutCompiler } from './outlet';
-export abstract class AbstractRenderManager extends AbstractManager {
+export abstract class AbstractRenderManager extends AbstractManager {
layoutFor(definition: RenderDefinition, _bucket: RenderState, env: Environment) {
// only curly components can have lazy layout
assert('definition is missing a template', !!definition.template);
@@ -35,12 +42,13 @@ if (DEBUG) {
export interface RenderState {
controller: any;
model: any;
+ component: any;
}
class SingletonRenderManager extends AbstractRenderManager {
create(env: Environment,
- definition: ComponentDefinition,
- _args: IArguments,
+ definition: DefinitionState,
+ _args: Arguments,
dynamicScope: DynamicScope) {
let { name } = definition;
let controller = env.owner.lookup(`controller:${name}`) || generateController(env.owner, name);
@@ -56,6 +64,15 @@ class SingletonRenderManager extends AbstractRenderManager {
return { controller } as RenderState;
}
+ getCapabilities(state: DefinitionState): ComponentCapabilities {
+ return state.capabilities;
+ }
+
+ getTag({ component }: RenderState): Tag {
+ // TODO: is this the right tag?
+ return component[DIRTY_TAG];
+ }
+
getDestructor() {
return null;
}
@@ -64,7 +81,10 @@ class SingletonRenderManager extends AbstractRenderManager {
export const SINGLETON_RENDER_MANAGER = new SingletonRenderManager();
class NonSingletonRenderManager extends AbstractRenderManager {
- create(environment: Environment, definition: RenderDefinition, args: IArguments, dynamicScope: DynamicScope) {
+ create(environment: Environment,
+ definition: DefinitionState,
+ args: Arguments,
+ dynamicScope: DynamicScope) {
let { name, env } = definition;
let modelRef = args.positional.at(0);
let controllerFactory = env.owner.factoryFor(`controller:${name}`);
@@ -80,13 +100,22 @@ class NonSingletonRenderManager extends AbstractRenderManager {
dynamicScope.outletState = dynamicScope.rootOutletState.getOrphan(name);
}
- return { controller, model: modelRef };
+ return { controller, model: modelRef };
}
update({ controller, model }: RenderState) {
controller.set('model', model.value());
}
+ getCapabilities(state: DefinitionState): ComponentCapabilities {
+ return state.capabilities;
+ }
+
+ getTag({ component }: RenderState): Tag {
+ // TODO: is this the right tag?
+ return component[DIRTY_TAG];
+ }
+
getDestructor({ controller }: RenderState) {
return controller;
}
@@ -94,16 +123,18 @@ class NonSingletonRenderManager extends AbstractRenderManager {
export const NON_SINGLETON_RENDER_MANAGER = new NonSingletonRenderManager();
-export class RenderDefinition extends ComponentDefinition {
+export class RenderDefinition implements ComponentDefinition {
public name: string;
public template: OwnedTemplate | undefined;
public env: Environment;
+ public state: DefinitionState;
+ public manager: SingletonRenderManager | NonSingletonRenderManager;
- constructor(name: string, template: OwnedTemplate | undefined, env: Environment, manager: ComponentManager) {
- super('render', manager, null);
+ constructor(name: string, template: OwnedTemplate, env: Environment, manager: SingletonRenderManager | NonSingletonRenderManager) {
this.name = name;
this.template = template;
this.env = env;
+ this.manager = manager;
}
}
diff --git a/packages/ember-glimmer/lib/component-managers/root.ts b/packages/ember-glimmer/lib/component-managers/root.ts
index ef1b6167b14..1ebfb054a66 100644
--- a/packages/ember-glimmer/lib/component-managers/root.ts
+++ b/packages/ember-glimmer/lib/component-managers/root.ts
@@ -1,7 +1,13 @@
+import {
+ VMHandle
+} from '@glimmer/interfaces';
import {
Arguments,
ComponentDefinition
} from '@glimmer/runtime';
+import {
+ Option
+} from '@glimmer/util';
import { DEBUG } from 'ember-env-flags';
import {
_instrumentStart,
@@ -10,13 +16,16 @@ import ComponentStateBucket from '../utils/curly-component-state-bucket';
import CurlyComponentManager, {
initialRenderInstrumentDetails,
processComponentInitializationAssertions,
- CurlyComponentDefinition
} from './curly';
import { DynamicScope } from '../renderer';
import Environment from '../environment';
+import DefintionState, { CAPABILITIES } from './definition-state';
class RootComponentManager extends CurlyComponentManager {
- create(environment: Environment, definition: CurlyComponentDefinition, args: Arguments, dynamicScope: DynamicScope) {
+ create(environment: Environment,
+ definition: DefintionState,
+ args: Arguments,
+ dynamicScope: DynamicScope) {
let component = definition.ComponentClass.create();
if (DEBUG) {
@@ -48,19 +57,16 @@ class RootComponentManager extends CurlyComponentManager {
}
}
-const ROOT_MANAGER = new RootComponentManager();
+export class RootComponentDefinition implements ComponentDefinition {
+ public state: DefintionState;
+ public manager: RootComponentManager;
-export class RootComponentDefinition extends ComponentDefinition {
- public template: any;
- public args: any;
- constructor(instance: ComponentStateBucket) {
- super('-root', ROOT_MANAGER, {
- class: instance.constructor,
- create() {
- return instance;
- },
- });
- this.template = undefined;
- this.args = undefined;
+ constructor(name: string, _manager: RootComponentManager, ComponentClass: any, handle: Option) {
+ this.state = {
+ name,
+ ComponentClass,
+ handle,
+ capabilities: CAPABILITIES
+ }
}
}
diff --git a/packages/ember-glimmer/lib/environment.ts b/packages/ember-glimmer/lib/environment.ts
index 4ca35ffd61c..86b04d730e9 100644
--- a/packages/ember-glimmer/lib/environment.ts
+++ b/packages/ember-glimmer/lib/environment.ts
@@ -1,20 +1,22 @@
+import {
+ Simple,
+ VMHandle
+} from '@glimmer/interfaces';
+import {
+ WrappedBuilder
+} from '@glimmer/opcode-compiler';
import {
Reference,
} from '@glimmer/reference';
import {
- AttributeManager,
- CompilableLayout,
- CompiledDynamicProgram,
- compileLayout,
ComponentDefinition,
+ DynamicAttributeFactory,
Environment as GlimmerEnvironment,
getDynamicVar,
Helper,
- isSafeString,
ModifierManager,
PrimitiveReference,
PartialDefinition,
- Simple,
} from '@glimmer/runtime';
import {
Destroyable, Opaque,
@@ -33,8 +35,8 @@ import {
CurlyComponentDefinition,
} from './component-managers/curly';
import {
- populateMacros,
-} from './syntax';
+ CAPABILITIES
+} from './component-managers/definition-state';
import DebugStack from './utils/debug-stack';
import createIterable from './utils/iterable';
import {
@@ -85,7 +87,7 @@ function isTemplateFactory(template: OwnedTemplate | WrappedTemplateFactory): te
export interface CompilerFactory {
id: string;
- new (template: OwnedTemplate | undefined): CompilableLayout;
+ new (template: OwnedTemplate): any;
}
export default class Environment extends GlimmerEnvironment {
@@ -113,7 +115,7 @@ export default class Environment extends GlimmerEnvironment {
Template: WrappedTemplateFactory | OwnedTemplate;
owner: Container;
}, OwnedTemplate>;
- private _compilerCache: Cache>;
+ private _compilerCache: Cache>;
constructor(injections: any) {
super(injections);
@@ -136,7 +138,7 @@ export default class Environment extends GlimmerEnvironment {
customManager = owner.factoryFor(`component-manager:${managerId}`).class;
}
}
- return new CurlyComponentDefinition(name, componentFactory, layout, undefined, customManager);
+ return new CurlyComponentDefinition(name, customManager, undefined, layout, customManager);
}
return undefined;
}, ({ name, source, owner }) => {
@@ -144,7 +146,7 @@ export default class Environment extends GlimmerEnvironment {
let ownerGuid = guidFor(owner);
- return ownerGuid + '|' + expandedName;
+ return `${ownerGuid}|${expandedName}`;
});
this._templateCache = new Cache(1000, ({ Template, owner }) => {
@@ -155,14 +157,14 @@ export default class Environment extends GlimmerEnvironment {
// we were provided an instance already
return Template;
}
- }, ({ Template, owner }) => guidFor(owner) + '|' + Template.id);
+ }, ({ Template, owner }) => `${guidFor(owner)}|${Template.id}`);
this._compilerCache = new Cache(10, (Compiler) => {
return new Cache(2000, (template) => {
let compilable = new Compiler(template);
- return compileLayout(compilable, this);
+ return new WrappedBuilder({asPartial: false, referrer: null}, compilable, CAPABILITIES);
}, (template) => {
- let owner = template.meta.owner;
+ let owner = template.owner;
return guidFor(owner) + '|' + template.id;
});
}, (Compiler) => Compiler.id);
@@ -208,11 +210,13 @@ export default class Environment extends GlimmerEnvironment {
: owner._resolveLocalLookupName(name, source);
}
+ /*
macros() {
let macros = super.macros();
populateMacros(macros.blocks, macros.inlines);
return macros;
}
+ */
hasComponentDefinition() {
return false;
@@ -245,13 +249,11 @@ export default class Environment extends GlimmerEnvironment {
return hasPartial(name, meta.owner);
}
- lookupPartial(name: string, meta: any): PartialDefinition {
- let partial = {
- name,
- template: lookupPartial(name, meta.owner),
- };
+ lookupPartial(name: string, meta: any): PartialDefinition {
+ const template = lookupPartial(name, meta.owner);
+ const partial = new PartialDefinition( name, lookupPartial(name, meta.owner));
- if (partial.template) {
+ if (template) {
return partial;
} else {
throw new Error(`${name} is not a partial`);
@@ -355,29 +357,27 @@ export default class Environment extends GlimmerEnvironment {
}
if (DEBUG) {
- class StyleAttributeManager extends AttributeManager {
- setAttribute(dom: Environment, element: Simple.Element, value: Opaque) {
+ class StyleAttributeManager implements DynamicAttributeFactory {
+ setAttribute(_dom: Environment, _element: Simple.Element, value: Opaque) {
warn(constructStyleDeprecationMessage(value), (() => {
if (value === null || value === undefined || isSafeString(value)) {
return true;
}
return false;
})(), { id: 'ember-htmlbars.style-xss-warning' });
- super.setAttribute(dom, element, value);
}
- updateAttribute(dom: Environment, element: Element, value: Opaque) {
+ updateAttribute(_dom: Environment, _element: Element, value: Opaque) {
warn(constructStyleDeprecationMessage(value), (() => {
if (value === null || value === undefined || isSafeString(value)) {
return true;
}
return false;
})(), { id: 'ember-htmlbars.style-xss-warning' });
- super.updateAttribute(dom, element, value);
}
}
- let STYLE_ATTRIBUTE_MANANGER = new StyleAttributeManager('style');
+ let STYLE_ATTRIBUTE_MANANGER = new StyleAttributeManager();
Environment.prototype.attributeFor = function(element, attribute, isTrusting) {
if (attribute === 'style' && !isTrusting) {
diff --git a/packages/ember-glimmer/lib/helpers/component.ts b/packages/ember-glimmer/lib/helpers/component.ts
index d6a78ce368d..454f9a97632 100644
--- a/packages/ember-glimmer/lib/helpers/component.ts
+++ b/packages/ember-glimmer/lib/helpers/component.ts
@@ -4,7 +4,6 @@
import {
Arguments,
Environment,
- isComponentDefinition,
VM
} from '@glimmer/runtime';
import { assert } from 'ember-debug';
@@ -217,7 +216,9 @@ function createCurriedDefinition(definition: CurlyComponentDefinition, args: Arg
return new CurlyComponentDefinition(
definition.name,
+ definition.manager,
definition.ComponentClass,
+ definition.state.handle,
definition.template,
curriedArgs,
);
diff --git a/packages/ember-glimmer/lib/helpers/concat.ts b/packages/ember-glimmer/lib/helpers/concat.ts
index 52ae7760ece..69d5d82fdc5 100644
--- a/packages/ember-glimmer/lib/helpers/concat.ts
+++ b/packages/ember-glimmer/lib/helpers/concat.ts
@@ -1,7 +1,6 @@
import {
Arguments,
CapturedArguments,
- normalizeTextValue,
VM
} from '@glimmer/runtime';
import { InternalHelperReference } from '../utils/references';
diff --git a/packages/ember-glimmer/lib/modifiers/action.ts b/packages/ember-glimmer/lib/modifiers/action.ts
index 47e2b430ec9..490e98e8ef2 100644
--- a/packages/ember-glimmer/lib/modifiers/action.ts
+++ b/packages/ember-glimmer/lib/modifiers/action.ts
@@ -1,11 +1,19 @@
+import {
+ Simple
+} from '@glimmer/interfaces';
+import {
+ TagWrapper
+} from '@glimmer/reference';
import {
Arguments,
CapturedNamedArguments,
CapturedPositionalArguments,
DynamicScope,
- Simple
+ ModifierManager,
} from '@glimmer/runtime';
-import { Destroyable } from '@glimmer/util';
+import {
+ Destroyable
+} from '@glimmer/util';
import { assert } from 'ember-debug';
import { flaggedInstrument, run } from 'ember-metal';
import { uuid } from 'ember-utils';
@@ -172,7 +180,7 @@ export class ActionState {
}
// implements ModifierManager
-export default class ActionModifierManager {
+export default class ActionModifierManager implements ModifierManager {
create(element: Simple.Element, args: Arguments, _dynamicScope: DynamicScope, dom: any) {
let { named, positional } = args.capture();
let implicitTarget;
@@ -238,6 +246,11 @@ export default class ActionModifierManager {
actionState.eventName = actionState.getEventName();
}
+ getTag() {
+ // TODO: ModifierManager needs a getTag method. Where does this tag come from?
+ return new TagWrapper();
+ }
+
getDestructor(modifier: Destroyable) {
return modifier;
}
diff --git a/packages/ember-glimmer/lib/syntax/mount.ts b/packages/ember-glimmer/lib/syntax/mount.ts
index bc636b0c5bb..a93b9fcd07b 100644
--- a/packages/ember-glimmer/lib/syntax/mount.ts
+++ b/packages/ember-glimmer/lib/syntax/mount.ts
@@ -113,6 +113,7 @@ class DynamicEngineReference {
}
this._lastName = nameOrDef;
+ // TODO: maybe I've got the MountDefinition constructor wrong...
this._lastDef = new MountDefinition(nameOrDef);
return this._lastDef;
diff --git a/packages/ember-glimmer/lib/template.ts b/packages/ember-glimmer/lib/template.ts
index 8131b7af028..83962ae9dec 100644
--- a/packages/ember-glimmer/lib/template.ts
+++ b/packages/ember-glimmer/lib/template.ts
@@ -25,8 +25,6 @@ export class WrappedTemplateFactory {
constructor(public factory: TemplateFactory<{
moduleName: string;
- }, {
- owner: Container;
}>) {
this.id = factory.id;
this.meta = factory.meta;
diff --git a/packages/ember-glimmer/lib/utils/bindings.ts b/packages/ember-glimmer/lib/utils/bindings.ts
index 67c9ec0b3a2..846920cf57c 100644
--- a/packages/ember-glimmer/lib/utils/bindings.ts
+++ b/packages/ember-glimmer/lib/utils/bindings.ts
@@ -1,15 +1,17 @@
-import { Opaque, Option } from '@glimmer/interfaces';
+import {
+ Opaque,
+ Option,
+ Simple
+} from '@glimmer/interfaces';
import {
CachedReference,
combine,
map,
Reference,
- referenceFromParts,
Tag,
} from '@glimmer/reference';
import {
- ElementOperations,
- Simple
+ ElementOperations
} from '@glimmer/runtime';
import {
Ops,
@@ -80,7 +82,7 @@ export const AttributeBinding = {
}
},
- install(element: Simple.Element, component: Component, parsed: [string, string, boolean], operations: ElementOperations) {
+ install(_element: Simple.Element, component: Component, parsed: [string, string, boolean], operations: ElementOperations) {
let [prop, attribute, isSimple] = parsed;
if (attribute === 'id') {
@@ -88,7 +90,8 @@ export const AttributeBinding = {
if (elementId === undefined || elementId === null) {
elementId = component.elementId;
}
- operations.addStaticAttribute(element, 'id', elementId);
+ operations.setAttribute('id', elementId, true, null);
+ // operations.addStaticAttribute(element, 'id', elementId);
return;
}
@@ -101,7 +104,8 @@ export const AttributeBinding = {
reference = new StyleBindingReference(reference, referenceForKey(component, 'isVisible'));
}
- operations.addDynamicAttribute(element, attribute, reference, false);
+ operations.setAttribute(attribute, reference, false, null);
+ // operations.addDynamicAttribute(element, attribute, reference, false);
},
};
@@ -132,8 +136,14 @@ class StyleBindingReference extends CachedReference {
}
export const IsVisibleBinding = {
- install(element: Simple.Element, component: Component, operations: ElementOperations) {
- operations.addDynamicAttribute(element, 'style', map(referenceForKey(component, 'isVisible'), this.mapStyleValue), false);
+ install(_element: Simple.Element, component: Component, operations: ElementOperations) {
+ operations.setAttribute(
+ 'style',
+ map(referenceForKey(component, 'isVisible'), this.mapStyleValue),
+ false,
+ null
+ );
+ // operations.addDynamicAttribute(element, 'style', map(referenceForKey(component, 'isVisible'), this.mapStyleValue), false);
},
mapStyleValue(isVisible: boolean) {
@@ -142,12 +152,13 @@ export const IsVisibleBinding = {
};
export const ClassNameBinding = {
- install(element: Simple.Element, component: Component, microsyntax: string, operations: ElementOperations) {
+ install(_element: Simple.Element, component: Component, microsyntax: string, operations: ElementOperations) {
let [ prop, truthy, falsy ] = microsyntax.split(':');
let isStatic = prop === '';
if (isStatic) {
- operations.addStaticAttribute(element, 'class', truthy);
+ operations.setAttribute('class', truthy, true, null);
+ // operations.addStaticAttribute(element, 'class', truthy);
} else {
let isPath = prop.indexOf('.') > -1;
let parts = isPath ? prop.split('.') : [];
@@ -160,7 +171,8 @@ export const ClassNameBinding = {
ref = new ColonClassNameBindingReference(value, truthy, falsy);
}
- operations.addDynamicAttribute(element, 'class', ref, false);
+ operations.setAttribute('class', ref, false, null);
+ // operations.addDynamicAttribute(element, 'class', ref, false);
}
},
};
diff --git a/yarn.lock b/yarn.lock
index 52e7bb63b19..9507c05780e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,78 +2,117 @@
# yarn lockfile v1
-"@glimmer/compiler@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.25.6.tgz#dcc2b8bfa6f36b70c34e41e85626f888315d3ad7"
- dependencies:
- "@glimmer/interfaces" "^0.25.6"
- "@glimmer/syntax" "^0.25.6"
- "@glimmer/util" "^0.25.6"
- "@glimmer/wire-format" "^0.25.6"
- simple-html-tokenizer "^0.3.0"
-
-"@glimmer/interfaces@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.25.6.tgz#88a6cdb4f414c3a82662cc5fc5cb5bfd91d4ef10"
- dependencies:
- "@glimmer/wire-format" "^0.25.6"
-
-"@glimmer/node@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.25.6.tgz#3887a79d8fd2cf9376511245babe87647e4349df"
- dependencies:
- "@glimmer/runtime" "^0.25.6"
+"@glimmer/compiler@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.29.10.tgz#b0a3d53069605d78fdf1bf1bc3be28ae81402342"
+ dependencies:
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/syntax" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+ "@glimmer/wire-format" "^0.29.10"
+ simple-html-tokenizer "^0.4.1"
+
+"@glimmer/encoder@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.29.10.tgz#a49c61a0794d2e1b218ec0a563d0f84dca08334c"
+
+"@glimmer/interfaces@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.29.10.tgz#7744451ca329a42c62b08fa460808bccbddeb2ab"
+ dependencies:
+ "@glimmer/wire-format" "^0.29.10"
+
+"@glimmer/node@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.29.10.tgz#ba8a5cb45784a46bbb50c454c56d2188b82d97ab"
+ dependencies:
+ "@glimmer/compiler" "^0.29.10"
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/object-reference" "^0.29.10"
+ "@glimmer/runtime" "^0.29.10"
simple-dom "^0.3.0"
-"@glimmer/object-reference@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/object-reference/-/object-reference-0.25.6.tgz#ab45f51c9416bdaff402a0ea3cedd3b1807b1158"
- dependencies:
- "@glimmer/reference" "^0.25.6"
- "@glimmer/util" "^0.25.6"
-
-"@glimmer/object@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/object/-/object-0.25.6.tgz#a07860e551980488c2839c6393f7a2c071d68a6e"
- dependencies:
- "@glimmer/object-reference" "^0.25.6"
- "@glimmer/util" "^0.25.6"
-
-"@glimmer/reference@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.25.6.tgz#bc57ccc351fc4bcc5750bdb7760cec4b9ef628f4"
- dependencies:
- "@glimmer/util" "^0.25.6"
+"@glimmer/object-reference@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/object-reference/-/object-reference-0.29.10.tgz#9e0acc15779611d306b66819088b0aee2cf06a48"
+ dependencies:
+ "@glimmer/reference" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+
+"@glimmer/object@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/object/-/object-0.29.10.tgz#ce450757598274e476f73f61a3a36a26f81642e5"
+ dependencies:
+ "@glimmer/object-reference" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+
+"@glimmer/opcode-compiler@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.29.10.tgz#37bb4413e614e442c908d2a38725c9358e4c7e45"
+ dependencies:
+ "@glimmer/encoder" "^0.29.10"
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/program" "^0.29.10"
+ "@glimmer/syntax" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+ "@glimmer/vm" "^0.29.10"
+ "@glimmer/wire-format" "^0.29.10"
+ simple-html-tokenizer "^0.4.1"
+
+"@glimmer/program@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.29.10.tgz#c9a2facda2812b6314f3f7f2153cd51f5e51bfba"
+ dependencies:
+ "@glimmer/encoder" "^0.29.10"
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+
+"@glimmer/reference@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.29.10.tgz#fc5db84f5b2a9aeef28e1407a54679cf5817acab"
+ dependencies:
+ "@glimmer/util" "^0.29.10"
+
+"@glimmer/runtime@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.29.10.tgz#90dce95aa6b596ff1134a11de1c77f50110c38b9"
+ dependencies:
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/object" "^0.29.10"
+ "@glimmer/object-reference" "^0.29.10"
+ "@glimmer/opcode-compiler" "^0.29.10"
+ "@glimmer/program" "^0.29.10"
+ "@glimmer/reference" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+ "@glimmer/vm" "^0.29.10"
+ "@glimmer/wire-format" "^0.29.10"
+
+"@glimmer/syntax@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.29.10.tgz#2a074223fc3b42d49c8b9345684a80b5133dc030"
+ dependencies:
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
+ handlebars "^4.0.6"
+ simple-html-tokenizer "^0.4.1"
-"@glimmer/runtime@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.25.6.tgz#2a776dcdd3b8f844e1f6b4e7ca4478b6dc560133"
- dependencies:
- "@glimmer/interfaces" "^0.25.6"
- "@glimmer/object" "^0.25.6"
- "@glimmer/object-reference" "^0.25.6"
- "@glimmer/reference" "^0.25.6"
- "@glimmer/util" "^0.25.6"
- "@glimmer/wire-format" "^0.25.6"
+"@glimmer/util@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.29.10.tgz#8662daf273ffef9254b8d943d39aa396ed7225a5"
-"@glimmer/syntax@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.25.6.tgz#aeed43004ece8715d09189b61037c793225b4e88"
+"@glimmer/vm@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.29.10.tgz#e723ea7d23960dd470cc73ec31e02fd74cab2cd8"
dependencies:
- "@glimmer/interfaces" "^0.25.6"
- "@glimmer/util" "^0.25.6"
- handlebars "^4.0.6"
- simple-html-tokenizer "^0.3.0"
-
-"@glimmer/util@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.25.6.tgz#de8dde7f5d30f9c0e3e2f083e3f6d3426a92b302"
+ "@glimmer/interfaces" "^0.29.10"
+ "@glimmer/program" "^0.29.10"
+ "@glimmer/util" "^0.29.10"
-"@glimmer/wire-format@^0.25.6":
- version "0.25.6"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.25.6.tgz#f0543801d234e133bf72d2bdec68dd2c36c06eca"
+"@glimmer/wire-format@^0.29.10":
+ version "0.29.10"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.29.10.tgz#90e82f67a6325468d6fee4f8dd7affc1070a9557"
dependencies:
- "@glimmer/util" "^0.25.6"
+ "@glimmer/util" "^0.29.10"
abbrev@1:
version "1.1.0"
@@ -5580,10 +5619,6 @@ simple-fmt@~0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b"
-simple-html-tokenizer@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.3.0.tgz#9b8b5559d80e331a544dd13dd59382e5d0d94411"
-
simple-html-tokenizer@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.4.1.tgz#028988bb7fe8b2e6645676d82052587d440b02d3"
From 9155a4ea35e2186f8cdeb8e7af89ea3875303b14 Mon Sep 17 00:00:00 2001
From: Steven Footea
Date: Fri, 17 Nov 2017 16:35:42 -0700
Subject: [PATCH 002/135] WIP Add skeleton resolvers, more upgrade work
---
ember-cli-build.js | 4 ++
package.json | 1 +
.../ember-glimmer/lib/compile-time-lookup.ts | 41 +++++++++++++++++++
.../lib/component-managers/abstract.ts | 8 ++--
.../lib/component-managers/curly.ts | 7 ++--
.../lib/component-managers/root.ts | 17 +++++---
packages/ember-glimmer/lib/component.ts | 1 -
packages/ember-glimmer/lib/environment.ts | 4 ++
packages/ember-glimmer/lib/index.ts | 2 +-
packages/ember-glimmer/lib/renderer.ts | 10 +++--
packages/ember-glimmer/lib/resolver.ts | 39 ++++++++++++++++++
packages/ember-glimmer/lib/template.ts | 22 +++++++++-
.../ember-glimmer/lib/template_registry.ts | 2 +-
13 files changed, 137 insertions(+), 21 deletions(-)
create mode 100644 packages/ember-glimmer/lib/compile-time-lookup.ts
create mode 100644 packages/ember-glimmer/lib/resolver.ts
diff --git a/ember-cli-build.js b/ember-cli-build.js
index b4dfcea47cb..a0ca7cb7026 100644
--- a/ember-cli-build.js
+++ b/ember-cli-build.js
@@ -67,6 +67,7 @@ module.exports = function(options) {
);
let glimmerEncoder = toES5(glimmerPkgES('@glimmer/encoder'));
let glimmerOpcodeComiler = toES5(glimmerPkgES('@glimmer/opcode-compiler', ['@glimmer/encoder']));
+ let glimmerProgram = toES5(glimmerPkgES('@glimmer/program'));
let glimmerReference = toES5(glimmerPkgES('@glimmer/reference', ['@glimmer/util']));
let glimmerUtil = toES5(glimmerPkgES('@glimmer/util'));
let glimmerVM = toES5(glimmerPkgES('@glimmer/vm'));
@@ -141,6 +142,7 @@ module.exports = function(options) {
emberDebugES5,
glimmerEncoder,
glimmerOpcodeComiler,
+ glimmerProgram,
glimmerReference,
glimmerUtil,
glimmerVM,
@@ -205,6 +207,7 @@ module.exports = function(options) {
glimmerCompiler,
glimmerEncoder,
glimmerOpcodeComiler,
+ glimmerProgram,
glimmerReference,
glimmerUtil,
glimmerVM,
@@ -240,6 +243,7 @@ module.exports = function(options) {
let depsProd = [
glimmerEncoder,
glimmerOpcodeComiler,
+ glimmerProgram,
glimmerReference,
glimmerUtil,
glimmerVM,
diff --git a/package.json b/package.json
index 1d0bb5df2f5..16433db381d 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,7 @@
"dependencies": {
"@glimmer/compiler": "^0.29.10",
"@glimmer/node": "^0.29.10",
+ "@glimmer/program": "^0.29.10",
"@glimmer/reference": "^0.29.10",
"@glimmer/runtime": "^0.29.10",
"@glimmer/vm": "^0.29.10",
diff --git a/packages/ember-glimmer/lib/compile-time-lookup.ts b/packages/ember-glimmer/lib/compile-time-lookup.ts
new file mode 100644
index 00000000000..6e98c0aa95e
--- /dev/null
+++ b/packages/ember-glimmer/lib/compile-time-lookup.ts
@@ -0,0 +1,41 @@
+import { CompileTimeLookup as ICompileTimeLookup, Specifier } from '@glimmer/opcode-compiler';
+import {
+ CAPABILITIES
+} from './component-managers/definition-state';
+import RuntimeResolver from './resolver';
+import { CurlyComponentDefinition } from 'ember-glimmer/lib/component-managers/curly';
+
+export default class CompileTimeLookup implements ICompileTimeLookup {
+ constructor(private resolver: RuntimeResolver) {}
+ private getComponentDefinition(handle: number) {
+ return this.resolver.resolve
+ {{validationError}}
{{/if}}
First name:
{{/labeled-textfield}}
diff --git a/packages/ember-glimmer/lib/renderer.ts b/packages/ember-glimmer/lib/renderer.ts
index c69136593cb..04596d3316d 100644
--- a/packages/ember-glimmer/lib/renderer.ts
+++ b/packages/ember-glimmer/lib/renderer.ts
@@ -1,6 +1,7 @@
import { Option, Simple } from '@glimmer/interfaces';
import { CURRENT_TAG, VersionedPathReference } from '@glimmer/reference';
import {
+ clientBuilder,
DynamicScope as GlimmerDynamicScope,
IteratorResult,
} from '@glimmer/runtime';
@@ -78,7 +79,6 @@ class RootState {
alwaysRevalidate: boolean;
};
public render: () => void;
- private _removing: boolean;
constructor(
root: Opaque,
@@ -95,14 +95,18 @@ class RootState {
this.result = undefined;
this.shouldReflush = false;
this.destroyed = false;
- this._removing = false;
let options = this.options = {
alwaysRevalidate: false,
};
this.render = () => {
- let iterator = template.render(self, parentElement, dynamicScope);
+ let iterator = template.renderLayout({
+ self,
+ env,
+ builder: clientBuilder(env, { element: parentElement, nextSibling: null}),
+ dynamicScope
+ });
let iteratorResult: IteratorResult;
do {
diff --git a/packages/ember-glimmer/lib/resolver.ts b/packages/ember-glimmer/lib/resolver.ts
new file mode 100644
index 00000000000..4eeaea545ff
--- /dev/null
+++ b/packages/ember-glimmer/lib/resolver.ts
@@ -0,0 +1,39 @@
+import {
+ RuntimeResolver as IRuntimeResolver
+} from '@glimmer/interfaces';
+import { Specifier } from '@glimmer/opcode-compiler';
+import { PartialDefinition } from '@glimmer/runtime/dist/types/lib/partial';
+
+import {
+ lookupComponent,
+ lookupPartial,
+} from 'ember-views';
+
+export default class RuntimeResolver implements IRuntimeResolver {
+ private partialsCache: PartialDefinition[];
+
+ constructor(public owner: any) {
+ this.partialsCache = [];
+ }
+
+ lookupComponent(name: string, meta: Specifier) {
+ return lookupComponent(name, this.owner, meta);
+ }
+
+ lookupPartial(name: string, _meta: Specifier) {
+ const partial = this.partialsCache.find(partial => partial.name === name);
+ let idx;
+ if (partial) {
+ idx = this.partialsCache.indexOf(partial);
+ } else {
+ this.partialsCache.push(lookupPartial(name, this.owner));
+ idx = this.partialsCache.length - 1;
+ }
+ return idx;
+ }
+
+ resolve(specifier: number) {
+ const cache = this.cacheFor[specifier];
+ return cache[specifier] as T;
+ }
+}
\ No newline at end of file
diff --git a/packages/ember-glimmer/lib/template.ts b/packages/ember-glimmer/lib/template.ts
index 83962ae9dec..0dedce1a81f 100644
--- a/packages/ember-glimmer/lib/template.ts
+++ b/packages/ember-glimmer/lib/template.ts
@@ -1,10 +1,22 @@
+import {
+ LazyConstants,
+ Program
+} from '@glimmer/program';
import {
Template,
templateFactory,
TemplateFactory,
} from '@glimmer/runtime';
+import {
+ EagerOpcodeBuilder,
+ OpcodeBuilderConstructor,
+ Macros
+} from '@glimmer/opcode-compiler';
import { OWNER } from 'ember-utils';
+import RuntimeResolver from './resolver';
+import CompileTimeLookup from './compile-time-lookup';
+
export interface Container {
lookup(name: string): T;
factoryFor(name: string): T;
@@ -31,8 +43,14 @@ export class WrappedTemplateFactory {
}
create(props: any): OwnedTemplate {
- let owner = props[OWNER];
- return this.factory.create(props.env, { owner });
+ const owner = props[OWNER];
+ const resolver = new RuntimeResolver(owner);
+ return this.factory.create({
+ program: new Program(new LazyConstants(resolver)),
+ macros: new Macros(),
+ lookup: new CompileTimeLookup(resolver),
+ Builder: EagerOpcodeBuilder as OpcodeBuilderConstructor
+ }, { owner });
}
}
diff --git a/packages/ember-glimmer/lib/template_registry.ts b/packages/ember-glimmer/lib/template_registry.ts
index cdc842de852..2a8896dc3fd 100644
--- a/packages/ember-glimmer/lib/template_registry.ts
+++ b/packages/ember-glimmer/lib/template_registry.ts
@@ -3,7 +3,7 @@ import { WrappedTemplateFactory } from './template';
// to support Ember.TEMPLATES but shield ember internals from this legacy
// global API.
interface TemplatesRegistry {
- [name: string]: WrappedTemplateFactory
+ [name: string]: WrappedTemplateFactory;
}
let TEMPLATES: TemplatesRegistry = {};
From a09f6bb781ef415de58b529affcf1205e71fb369 Mon Sep 17 00:00:00 2001
From: Kris Selden
Date: Fri, 17 Nov 2017 15:43:29 -0800
Subject: [PATCH 003/135] simple type fixes
---
packages/ember-glimmer/lib/helpers/get.ts | 6 +++---
packages/ember-views/lib/index.d.ts | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/packages/ember-glimmer/lib/helpers/get.ts b/packages/ember-glimmer/lib/helpers/get.ts
index 5398f1c3042..f67f53999df 100644
--- a/packages/ember-glimmer/lib/helpers/get.ts
+++ b/packages/ember-glimmer/lib/helpers/get.ts
@@ -3,7 +3,7 @@ import {
CONSTANT_TAG,
isConst,
PathReference,
- referenceFromParts,
+ referenceForParts,
TagWrapper,
UpdatableTag,
} from '@glimmer/reference';
@@ -78,7 +78,7 @@ class GetHelperReference extends CachedReference {
static create(sourceReference: any, pathReference: PathReference) {
if (isConst(pathReference)) {
let parts = pathReference.value().split('.');
- return referenceFromParts(sourceReference, parts);
+ return referenceForParts(sourceReference, parts);
} else {
return new GetHelperReference(sourceReference, pathReference);
}
@@ -107,7 +107,7 @@ class GetHelperReference extends CachedReference {
let pathType = typeof path;
if (pathType === 'string') {
- innerReference = referenceFromParts(this.sourceReference, path.split('.'));
+ innerReference = referenceForParts(this.sourceReference, path.split('.'));
} else if (pathType === 'number') {
innerReference = this.sourceReference.get('' + path);
}
diff --git a/packages/ember-views/lib/index.d.ts b/packages/ember-views/lib/index.d.ts
index 179f14209b3..eae29b2cd8d 100644
--- a/packages/ember-views/lib/index.d.ts
+++ b/packages/ember-views/lib/index.d.ts
@@ -1,5 +1,5 @@
import { Opaque } from '@glimmer/util';
-import { Simple } from '@glimmer/runtime';
+import { Simple } from '@glimmer/interfaces';
export const ActionSupport: any;
export const ChildViewsSupport: any;
From 9f61acdde04719b84b9bbe654fc43418055ee3ad Mon Sep 17 00:00:00 2001
From: Kris Selden
Date: Fri, 17 Nov 2017 17:54:21 -0800
Subject: [PATCH 004/135] bump glimmer-vm because Tom's done cleanup in the
resolver area.
---
package.json | 22 ++--
packages/ember-utils/lib/index.d.ts | 13 ++-
packages/ember-views/lib/index.d.ts | 3 +-
yarn.lock | 164 ++++++++++++++--------------
4 files changed, 107 insertions(+), 95 deletions(-)
diff --git a/package.json b/package.json
index 16433db381d..0bdff53550c 100644
--- a/package.json
+++ b/package.json
@@ -42,12 +42,12 @@
"test:testem": "testem -f testem.dist.json"
},
"dependencies": {
- "@glimmer/compiler": "^0.29.10",
- "@glimmer/node": "^0.29.10",
- "@glimmer/program": "^0.29.10",
- "@glimmer/reference": "^0.29.10",
- "@glimmer/runtime": "^0.29.10",
- "@glimmer/vm": "^0.29.10",
+ "@glimmer/compiler": "^0.30.2",
+ "@glimmer/node": "^0.30.2",
+ "@glimmer/program": "^0.30.2",
+ "@glimmer/reference": "^0.30.2",
+ "@glimmer/runtime": "^0.30.2",
+ "@glimmer/vm": "^0.30.2",
"broccoli-funnel": "^2.0.1",
"broccoli-merge-trees": "^2.0.0",
"ember-cli-get-component-path-option": "^1.0.0",
@@ -64,11 +64,11 @@
"resolve": "^1.3.3"
},
"devDependencies": {
- "@glimmer/compiler": "^0.29.10",
- "@glimmer/node": "^0.29.10",
- "@glimmer/reference": "^0.29.10",
- "@glimmer/runtime": "^0.29.10",
- "@glimmer/vm": "^0.29.10",
+ "@glimmer/compiler": "^0.30.2",
+ "@glimmer/node": "^0.30.2",
+ "@glimmer/reference": "^0.30.2",
+ "@glimmer/runtime": "^0.30.2",
+ "@glimmer/vm": "^0.30.2",
"aws-sdk": "^2.46.0",
"babel-plugin-check-es2015-constants": "^6.22.0",
"babel-plugin-debug-macros": "^0.1.10",
diff --git a/packages/ember-utils/lib/index.d.ts b/packages/ember-utils/lib/index.d.ts
index 04694a4db12..b6e4c921ed2 100644
--- a/packages/ember-utils/lib/index.d.ts
+++ b/packages/ember-utils/lib/index.d.ts
@@ -1,7 +1,18 @@
import { Opaque } from '@glimmer/interfaces';
+export interface Factory {
+ create(options: any): T;
+}
+
+export interface Owner {
+ lookup(fullName: string, options?: { source: string }): T;
+ lookup(fullName: string, options?: { source: string }): any;
+ factoryFor(fullName: string, options?: { source: string }): Factory;
+ factoryFor(fullName: string, options?: { source: string }): Factory;
+}
+
export const NAME_KEY: string;
-export function getOwner(obj: any): any;
+export function getOwner(obj: {}): Owner;
export function symbol(debugName: string): string;
export function assign(original: any, ...args: any[]): any;
export const OWNER: string;
diff --git a/packages/ember-views/lib/index.d.ts b/packages/ember-views/lib/index.d.ts
index eae29b2cd8d..f5af9fb9bdc 100644
--- a/packages/ember-views/lib/index.d.ts
+++ b/packages/ember-views/lib/index.d.ts
@@ -1,5 +1,6 @@
import { Opaque } from '@glimmer/util';
import { Simple } from '@glimmer/interfaces';
+import { Owner } from 'ember-utils';
export const ActionSupport: any;
export const ChildViewsSupport: any;
@@ -18,7 +19,7 @@ export function constructStyleDeprecationMessage(affectedStyle: any): string;
export function hasPartial(name: string, owner: any): boolean;
-export function lookupComponent(owner: any, name: string, options: any): any;
+export function lookupComponent(owner: Owner, name: string, options?: { source?: string }): any;
export function lookupPartial(templateName: string, owner: any): any;
diff --git a/yarn.lock b/yarn.lock
index 9507c05780e..14fa4fb1a9c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,117 +2,117 @@
# yarn lockfile v1
-"@glimmer/compiler@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.29.10.tgz#b0a3d53069605d78fdf1bf1bc3be28ae81402342"
- dependencies:
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/syntax" "^0.29.10"
- "@glimmer/util" "^0.29.10"
- "@glimmer/wire-format" "^0.29.10"
+"@glimmer/compiler@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.30.2.tgz#30dd08ca2473ca3b258f9b236e06a1cb7947288f"
+ dependencies:
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/syntax" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
+ "@glimmer/wire-format" "^0.30.2"
simple-html-tokenizer "^0.4.1"
-"@glimmer/encoder@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.29.10.tgz#a49c61a0794d2e1b218ec0a563d0f84dca08334c"
+"@glimmer/encoder@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.30.2.tgz#a9ae83636caa4890fd26fd9c34410cab54e15391"
-"@glimmer/interfaces@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.29.10.tgz#7744451ca329a42c62b08fa460808bccbddeb2ab"
+"@glimmer/interfaces@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.30.2.tgz#5b34ec121e23ee73e518902f09b6d4f60d3bf507"
dependencies:
- "@glimmer/wire-format" "^0.29.10"
+ "@glimmer/wire-format" "^0.30.2"
-"@glimmer/node@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.29.10.tgz#ba8a5cb45784a46bbb50c454c56d2188b82d97ab"
+"@glimmer/node@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.30.2.tgz#de2548558164a03dea2dcc901e6fc6c2c33c83c5"
dependencies:
- "@glimmer/compiler" "^0.29.10"
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/object-reference" "^0.29.10"
- "@glimmer/runtime" "^0.29.10"
+ "@glimmer/compiler" "^0.30.2"
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/object-reference" "^0.30.2"
+ "@glimmer/runtime" "^0.30.2"
simple-dom "^0.3.0"
-"@glimmer/object-reference@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/object-reference/-/object-reference-0.29.10.tgz#9e0acc15779611d306b66819088b0aee2cf06a48"
+"@glimmer/object-reference@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/object-reference/-/object-reference-0.30.2.tgz#6b08dfd3aabc5279dc137dd8224d145cf1511a01"
dependencies:
- "@glimmer/reference" "^0.29.10"
- "@glimmer/util" "^0.29.10"
+ "@glimmer/reference" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
-"@glimmer/object@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/object/-/object-0.29.10.tgz#ce450757598274e476f73f61a3a36a26f81642e5"
+"@glimmer/object@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/object/-/object-0.30.2.tgz#b66a2beaa1de28987ff0d4155d8d658527756b82"
dependencies:
- "@glimmer/object-reference" "^0.29.10"
- "@glimmer/util" "^0.29.10"
+ "@glimmer/object-reference" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
-"@glimmer/opcode-compiler@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.29.10.tgz#37bb4413e614e442c908d2a38725c9358e4c7e45"
+"@glimmer/opcode-compiler@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.30.2.tgz#4fe6f06302af2381e6cfb315c306092c0ea3a34e"
dependencies:
- "@glimmer/encoder" "^0.29.10"
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/program" "^0.29.10"
- "@glimmer/syntax" "^0.29.10"
- "@glimmer/util" "^0.29.10"
- "@glimmer/vm" "^0.29.10"
- "@glimmer/wire-format" "^0.29.10"
+ "@glimmer/encoder" "^0.30.2"
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/program" "^0.30.2"
+ "@glimmer/syntax" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
+ "@glimmer/vm" "^0.30.2"
+ "@glimmer/wire-format" "^0.30.2"
simple-html-tokenizer "^0.4.1"
-"@glimmer/program@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.29.10.tgz#c9a2facda2812b6314f3f7f2153cd51f5e51bfba"
+"@glimmer/program@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.30.2.tgz#189ff3fe126a4104d2495b8b35bffda4ef835d04"
dependencies:
- "@glimmer/encoder" "^0.29.10"
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/util" "^0.29.10"
+ "@glimmer/encoder" "^0.30.2"
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
-"@glimmer/reference@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.29.10.tgz#fc5db84f5b2a9aeef28e1407a54679cf5817acab"
+"@glimmer/reference@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.30.2.tgz#4a06d3c03b4f490cec38451342fdce8aa7af4d30"
dependencies:
- "@glimmer/util" "^0.29.10"
+ "@glimmer/util" "^0.30.2"
-"@glimmer/runtime@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.29.10.tgz#90dce95aa6b596ff1134a11de1c77f50110c38b9"
+"@glimmer/runtime@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.30.2.tgz#ef876cec85049c8cef0c4a0a6cee1a93e5be9bb6"
dependencies:
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/object" "^0.29.10"
- "@glimmer/object-reference" "^0.29.10"
- "@glimmer/opcode-compiler" "^0.29.10"
- "@glimmer/program" "^0.29.10"
- "@glimmer/reference" "^0.29.10"
- "@glimmer/util" "^0.29.10"
- "@glimmer/vm" "^0.29.10"
- "@glimmer/wire-format" "^0.29.10"
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/object" "^0.30.2"
+ "@glimmer/object-reference" "^0.30.2"
+ "@glimmer/opcode-compiler" "^0.30.2"
+ "@glimmer/program" "^0.30.2"
+ "@glimmer/reference" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
+ "@glimmer/vm" "^0.30.2"
+ "@glimmer/wire-format" "^0.30.2"
-"@glimmer/syntax@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.29.10.tgz#2a074223fc3b42d49c8b9345684a80b5133dc030"
+"@glimmer/syntax@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.30.2.tgz#c1acbf44d4c73e7b112192c398e71476cd24e825"
dependencies:
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/util" "^0.29.10"
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
handlebars "^4.0.6"
simple-html-tokenizer "^0.4.1"
-"@glimmer/util@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.29.10.tgz#8662daf273ffef9254b8d943d39aa396ed7225a5"
+"@glimmer/util@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.30.2.tgz#dd3ed4293b97ce7d89f3b8682381e666c43ba6d7"
-"@glimmer/vm@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.29.10.tgz#e723ea7d23960dd470cc73ec31e02fd74cab2cd8"
+"@glimmer/vm@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.30.2.tgz#cb2bc6f29ebcfceb6506ecd6d97c832a22aa8106"
dependencies:
- "@glimmer/interfaces" "^0.29.10"
- "@glimmer/program" "^0.29.10"
- "@glimmer/util" "^0.29.10"
+ "@glimmer/interfaces" "^0.30.2"
+ "@glimmer/program" "^0.30.2"
+ "@glimmer/util" "^0.30.2"
-"@glimmer/wire-format@^0.29.10":
- version "0.29.10"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.29.10.tgz#90e82f67a6325468d6fee4f8dd7affc1070a9557"
+"@glimmer/wire-format@^0.30.2":
+ version "0.30.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.30.2.tgz#ce4a4c903ada28ee2c62b857b69dfdc06512f53a"
dependencies:
- "@glimmer/util" "^0.29.10"
+ "@glimmer/util" "^0.30.2"
abbrev@1:
version "1.1.0"
From c3a8ba3a209b25f6a64dfba1aeec82ae0fbc3d3f Mon Sep 17 00:00:00 2001
From: Kris Selden
Date: Sat, 18 Nov 2017 02:33:06 -0800
Subject: [PATCH 005/135] improve types
---
packages/container/lib/index.d.ts | 3 +-
packages/ember-glimmer/lib/template.ts | 48 +++++++++++++-------------
packages/ember-utils/lib/index.d.ts | 22 +++++++++---
packages/ember-views/lib/index.d.ts | 20 ++++++++---
4 files changed, 58 insertions(+), 35 deletions(-)
diff --git a/packages/container/lib/index.d.ts b/packages/container/lib/index.d.ts
index fe97d1abc0f..8dbde3f5450 100644
--- a/packages/container/lib/index.d.ts
+++ b/packages/container/lib/index.d.ts
@@ -1,6 +1,7 @@
+import { Owner } from 'ember-utils';
interface Container {
registry: any;
- owner: any | null;
+ owner: Owner | null;
cache: any | null;
factoryManagerCache: any | null;
isDestroyed: boolean;
diff --git a/packages/ember-glimmer/lib/template.ts b/packages/ember-glimmer/lib/template.ts
index 0dedce1a81f..ffe6ae7db5a 100644
--- a/packages/ember-glimmer/lib/template.ts
+++ b/packages/ember-glimmer/lib/template.ts
@@ -1,3 +1,9 @@
+import {
+ EagerOpcodeBuilder,
+ Macros,
+ OpcodeBuilderConstructor,
+ TemplateOptions
+} from '@glimmer/opcode-compiler';
import {
LazyConstants,
Program
@@ -7,58 +13,52 @@ import {
templateFactory,
TemplateFactory,
} from '@glimmer/runtime';
-import {
- EagerOpcodeBuilder,
- OpcodeBuilderConstructor,
- Macros
-} from '@glimmer/opcode-compiler';
-import { OWNER } from 'ember-utils';
-
-import RuntimeResolver from './resolver';
+import { OWNER, Owner } from 'ember-utils';
+import { TemplateMeta } from 'ember-views';
import CompileTimeLookup from './compile-time-lookup';
+import RuntimeResolver from './resolver';
-export interface Container {
- lookup(name: string): T;
- factoryFor(name: string): T;
- buildChildEngineInstance(name: string): T;
- hasRegistration(name: string, options?: any): boolean;
-}
-
-export type OwnedTemplate = Template<{
- moduleName: string;
- owner: Container;
-}>;
+export type OwnedTemplate = Template;
export class WrappedTemplateFactory {
id: string;
meta: {
moduleName: string;
+ managerId?: string;
};
constructor(public factory: TemplateFactory<{
moduleName: string;
+ managerId?: string;
}>) {
this.id = factory.id;
this.meta = factory.meta;
}
create(props: any): OwnedTemplate {
- const owner = props[OWNER];
+ const owner: Owner = props[OWNER];
const resolver = new RuntimeResolver(owner);
- return this.factory.create({
+ // I'm pretty sure there is only supposed to be one of these
+ // injected into all templates.
+ const options: TemplateOptions<{
+ moduleName: string;
+ managerId?: string;
+ }> = {
program: new Program(new LazyConstants(resolver)),
macros: new Macros(),
- lookup: new CompileTimeLookup(resolver),
+ resolver: new CompileTimeLookup(resolver),
Builder: EagerOpcodeBuilder as OpcodeBuilderConstructor
- }, { owner });
+ };
+ return this.factory.create(options, { owner });
}
}
export default function template(json: any) {
const factory = templateFactory<{
moduleName: string;
+ managerId?: string;
}, {
- owner: Container;
+ owner: Owner;
}>(json);
return new WrappedTemplateFactory(factory);
}
diff --git a/packages/ember-utils/lib/index.d.ts b/packages/ember-utils/lib/index.d.ts
index b6e4c921ed2..234f5648c9b 100644
--- a/packages/ember-utils/lib/index.d.ts
+++ b/packages/ember-utils/lib/index.d.ts
@@ -1,14 +1,26 @@
import { Opaque } from '@glimmer/interfaces';
export interface Factory {
- create(options: any): T;
+ class: any;
+ fullName: string;
+ normalizedName: string;
+ create(props?: { [prop: string]: any; }): T;
+}
+
+export interface LookupOptions {
+ source: string;
}
export interface Owner {
- lookup(fullName: string, options?: { source: string }): T;
- lookup(fullName: string, options?: { source: string }): any;
- factoryFor(fullName: string, options?: { source: string }): Factory;
- factoryFor(fullName: string, options?: { source: string }): Factory;
+ lookup(fullName: string, options?: LookupOptions): T;
+ lookup(fullName: string, options?: LookupOptions): any;
+ factoryFor(fullName: string, options?: LookupOptions): Factory;
+ factoryFor(fullName: string, options?: LookupOptions): Factory;
+ buildChildEngineInstance(name: string): T;
+ hasRegistration(name: string, options?: LookupOptions): boolean;
+
+ // maybe not needed, we were only using for cache key
+ _resolveLocalLookupName(name: string, source: string): any;
}
export const NAME_KEY: string;
diff --git a/packages/ember-views/lib/index.d.ts b/packages/ember-views/lib/index.d.ts
index f5af9fb9bdc..210c5f17d12 100644
--- a/packages/ember-views/lib/index.d.ts
+++ b/packages/ember-views/lib/index.d.ts
@@ -1,6 +1,13 @@
import { Opaque } from '@glimmer/util';
import { Simple } from '@glimmer/interfaces';
-import { Owner } from 'ember-utils';
+import { Template } from '@glimmer/runtime';
+import { Owner, Factory } from 'ember-utils';
+
+export interface TemplateMeta {
+ owner: Owner;
+ moduleName: string;
+ managerId?: string;
+}
export const ActionSupport: any;
export const ChildViewsSupport: any;
@@ -10,8 +17,8 @@ export const ViewMixin: any;
export const ViewStateSupport: any;
export const TextSupport: any;
-export function getViewElement(view: Opaque): Element;
-export function setViewElement(view: Opaque, element: Element | null): void;
+export function getViewElement(view: Opaque): Simple.Element;
+export function setViewElement(view: Opaque, element: Simple.Element | null): void;
export function isSimpleClick(event: Event): boolean;
@@ -19,9 +26,12 @@ export function constructStyleDeprecationMessage(affectedStyle: any): string;
export function hasPartial(name: string, owner: any): boolean;
-export function lookupComponent(owner: Owner, name: string, options?: { source?: string }): any;
+export function lookupComponent(owner: Owner, name: string, options?: { source?: string }): {
+ layout: Template;
+ component: Factory;
+};
-export function lookupPartial(templateName: string, owner: any): any;
+export function lookupPartial(templateName: string, owner: Owner): any;
export function getViewId(view: any): string;
From 636f95bfe835c12d20df2de7f7484665c4dd627d Mon Sep 17 00:00:00 2001
From: Kris Selden
Date: Sat, 18 Nov 2017 02:39:40 -0800
Subject: [PATCH 006/135] more resolver stuff
---
.../ember-glimmer/lib/compile-time-lookup.ts | 49 ++--
.../lib/component-managers/curly.ts | 50 ++--
.../lib/component-managers/root.ts | 17 +-
packages/ember-glimmer/lib/environment.ts | 233 +-----------------
packages/ember-glimmer/lib/renderer.ts | 12 +-
packages/ember-glimmer/lib/resolver.ts | 212 ++++++++++++++--
.../lib/utils/curly-component-state-bucket.ts | 1 +
tslint.json | 7 +-
8 files changed, 267 insertions(+), 314 deletions(-)
diff --git a/packages/ember-glimmer/lib/compile-time-lookup.ts b/packages/ember-glimmer/lib/compile-time-lookup.ts
index 6e98c0aa95e..a8ed20a3510 100644
--- a/packages/ember-glimmer/lib/compile-time-lookup.ts
+++ b/packages/ember-glimmer/lib/compile-time-lookup.ts
@@ -1,41 +1,36 @@
-import { CompileTimeLookup as ICompileTimeLookup, Specifier } from '@glimmer/opcode-compiler';
-import {
- CAPABILITIES
-} from './component-managers/definition-state';
+import { ComponentCapabilities, Option, ProgramSymbolTable } from '@glimmer/interfaces';
+import { CompileTimeLookup as ICompileTimeLookup } from '@glimmer/opcode-compiler';
+import { CompilableTemplate, ComponentDefinition } from '@glimmer/runtime';
+import { TemplateMeta } from 'ember-views';
import RuntimeResolver from './resolver';
-import { CurlyComponentDefinition } from 'ember-glimmer/lib/component-managers/curly';
-export default class CompileTimeLookup implements ICompileTimeLookup {
+export default class CompileTimeLookup implements ICompileTimeLookup {
constructor(private resolver: RuntimeResolver) {}
- private getComponentDefinition(handle: number) {
- return this.resolver.resolve