diff --git a/.travis.yml b/.travis.yml
index df134e95ce5..8f4b2de6cda 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -102,7 +102,7 @@ jobs:
- if: branch = master
env:
- BUILD_TYPE=alpha
- - OVERRIDE_FEATURES=EMBER_METAL_TRACKED_PROPERTIES,EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS,EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP,EMBER_NATIVE_DECORATOR_SUPPORT
+ - OVERRIDE_FEATURES=EMBER_METAL_TRACKED_PROPERTIES,EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS,EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP,EMBER_NATIVE_DECORATOR_SUPPORT,EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES
- PUBLISH=true
script:
- "./bin/publish_builds"
diff --git a/FEATURES.md b/FEATURES.md
index abe424ae4ed..64a735dce04 100644
--- a/FEATURES.md
+++ b/FEATURES.md
@@ -50,3 +50,10 @@ for a detailed explanation.
with the angle bracket invocation sytnax.
See [RFC #459](https://github.com/emberjs/rfcs/pull/459).
+
+* `ember-glimmer-forward-modifiers-with-splattributes`
+
+ Allows element modifiers to be applied to components that use angle-bracket syntax, and applies
+ those modifiers to the element or elements receiving the splattributes.
+
+ See [RFC #435](https://github.com/emberjs/rfcs/pull/435).
\ No newline at end of file
diff --git a/package.json b/package.json
index 233aeb64c1b..665a9704366 100644
--- a/package.json
+++ b/package.json
@@ -91,14 +91,14 @@
"@babel/plugin-transform-shorthand-properties": "^7.2.0",
"@babel/plugin-transform-spread": "^7.2.2",
"@babel/plugin-transform-template-literals": "^7.2.0",
- "@glimmer/compiler": "^0.38.1",
+ "@glimmer/compiler": "0.38.2-alpha.2",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.38.1",
- "@glimmer/node": "^0.38.1",
- "@glimmer/opcode-compiler": "^0.38.1",
- "@glimmer/program": "^0.38.1",
- "@glimmer/reference": "^0.38.1",
- "@glimmer/runtime": "^0.38.1",
+ "@glimmer/interfaces": "0.38.2-alpha.2",
+ "@glimmer/node": "0.38.2-alpha.2",
+ "@glimmer/opcode-compiler": "0.38.2-alpha.2",
+ "@glimmer/program": "0.38.2-alpha.2",
+ "@glimmer/reference": "0.38.2-alpha.2",
+ "@glimmer/runtime": "0.38.2-alpha.2",
"@types/qunit": "^2.5.4",
"@types/rsvp": "^4.0.2",
"auto-dist-tag": "^1.0.0",
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js
index 0ecfea65700..e4b93c911a6 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js
@@ -1,10 +1,50 @@
import { moduleFor, RenderingTestCase, strip, classes, runTask } from 'internal-test-helpers';
+import { setModifierManager } from '@ember/-internals/glimmer';
+import { Object as EmberObject } from '@ember/-internals/runtime';
-import { EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP } from '@ember/canary-features';
-import { set } from '@ember/-internals/metal';
+import {
+ EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP,
+ EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES,
+} from '@ember/canary-features';
+import { set, setProperties } from '@ember/-internals/metal';
import { Component } from '../../utils/helpers';
+class CustomModifierManager {
+ constructor(owner) {
+ this.owner = owner;
+ }
+
+ createModifier(factory, args) {
+ return factory.create(args);
+ }
+
+ installModifier(instance, element, args) {
+ instance.element = element;
+ let { positional, named } = args;
+ instance.didInsertElement(positional, named);
+ }
+
+ updateModifier(instance, args) {
+ let { positional, named } = args;
+ instance.didUpdate(positional, named);
+ }
+
+ destroyModifier(instance) {
+ instance.willDestroyElement();
+ }
+}
+let BaseModifier = setModifierManager(
+ owner => {
+ return new CustomModifierManager(owner);
+ },
+ EmberObject.extend({
+ didInsertElement() {},
+ didUpdate() {},
+ willDestroyElement() {},
+ })
+);
+
moduleFor(
'AngleBracket Invocation',
class extends RenderingTestCase {
@@ -1064,3 +1104,246 @@ if (EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP) {
}
);
}
+
+if (EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES) {
+ moduleFor(
+ 'Element modifiers on AngleBracket components',
+ class extends RenderingTestCase {
+ '@test modifiers are forwarded to a single element receiving the splattributes'(assert) {
+ let modifierParams = null;
+ let modifierNamedArgs = null;
+ let modifiedElement;
+ this.registerComponent('the-foo', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '
Foo
',
+ });
+ this.registerModifier(
+ 'bar',
+ BaseModifier.extend({
+ didInsertElement(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ })
+ );
+ this.render('', {});
+ assert.deepEqual(modifierParams, ['something']);
+ assert.deepEqual(modifierNamedArgs, { foo: 'else' });
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ }
+
+ '@test modifiers are forwarded to all the elements receiving the splattributes'(assert) {
+ let elementIds = [];
+ this.registerComponent('the-foo', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template:
+ 'Foo
Bar
',
+ });
+ this.registerModifier(
+ 'bar',
+ BaseModifier.extend({
+ didInsertElement(params, namedArgs) {
+ assert.deepEqual(params, ['something']);
+ assert.deepEqual(namedArgs, { foo: 'else' });
+ if (this.element) {
+ elementIds.push(this.element.getAttribute('id'));
+ }
+ },
+ })
+ );
+ this.render('');
+ assert.deepEqual(
+ elementIds,
+ ['inner-one', 'inner-two'],
+ 'The modifier has been instantiated twice, once for each element with splattributes'
+ );
+ }
+
+ '@test modifiers on components accept bound arguments and track changes on the'(assert) {
+ let modifierParams = null;
+ let modifierNamedArgs = null;
+ let modifiedElement;
+ this.registerComponent('the-foo', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: 'Foo
',
+ });
+ this.registerModifier(
+ 'bar',
+ BaseModifier.extend({
+ didInsertElement(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ didUpdate(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ })
+ );
+ this.render('', {
+ something: 'something',
+ foo: 'else',
+ });
+ assert.deepEqual(modifierParams, ['something']);
+ assert.deepEqual(modifierNamedArgs, { foo: 'else' });
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ runTask(() => setProperties(this.context, { something: 'another', foo: 'thingy' }));
+ assert.deepEqual(modifierParams, ['another']);
+ assert.deepEqual(modifierNamedArgs, { foo: 'thingy' });
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ }
+
+ '@test modifiers on components accept `this` in both positional params and named arguments, and updates when it changes'(
+ assert
+ ) {
+ let modifierParams = null;
+ let modifierNamedArgs = null;
+ let modifiedElement;
+ let context = { id: 1 };
+ let context2 = { id: 2 };
+ this.registerComponent('the-foo', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: 'Foo
',
+ });
+ this.registerModifier(
+ 'bar',
+ BaseModifier.extend({
+ didInsertElement(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ didUpdate(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ })
+ );
+ this.render('', context);
+ assert.equal(modifierParams[1].id, 1);
+ assert.equal(modifierNamedArgs.foo.id, 1);
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ runTask(() => setProperties(this.context, context2));
+ assert.equal(modifierParams[1].id, 2);
+ assert.equal(modifierNamedArgs.foo.id, 2);
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ }
+
+ '@test modifiers on components accept local variables in both positional params and named arguments, and updates when they change'(
+ assert
+ ) {
+ let modifierParams = null;
+ let modifierNamedArgs = null;
+ let modifiedElement;
+ this.registerComponent('the-foo', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: 'Foo
',
+ });
+ this.registerModifier(
+ 'bar',
+ BaseModifier.extend({
+ didInsertElement(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ didUpdate(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ modifiedElement = this.element;
+ },
+ })
+ );
+ this.render(
+ `
+ {{#let this.foo as |v|}}
+
+ {{/let}}`,
+ { foo: 'bar' }
+ );
+ assert.deepEqual(modifierParams, ['bar']);
+ assert.deepEqual(modifierNamedArgs, { foo: 'bar' });
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ runTask(() => setProperties(this.context, { foo: 'qux' }));
+ assert.deepEqual(modifierParams, ['qux']);
+ assert.deepEqual(modifierNamedArgs, { foo: 'qux' });
+ assert.equal(
+ modifiedElement && modifiedElement.getAttribute('id'),
+ 'inner-div',
+ 'Modifier is called on the element receiving the splattributes'
+ );
+ }
+
+ '@test modifiers on components can be received and forwarded to inner component'(assert) {
+ let modifierParams = null;
+ let modifierNamedArgs = null;
+ let elementIds = [];
+
+ this.registerComponent('the-inner', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '{{yield}}
',
+ });
+ this.registerComponent('the-foo', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template:
+ 'Outer
Hello',
+ });
+ this.registerModifier(
+ 'bar',
+ BaseModifier.extend({
+ didInsertElement(params, namedArgs) {
+ modifierParams = params;
+ modifierNamedArgs = namedArgs;
+ if (this.element) {
+ elementIds.push(this.element.getAttribute('id'));
+ }
+ },
+ })
+ );
+ this.render(
+ `
+ {{#let this.foo as |v|}}
+
+ {{/let}}
+ `,
+ { foo: 'bar' }
+ );
+ assert.deepEqual(modifierParams, ['bar']);
+ assert.deepEqual(modifierNamedArgs, { foo: 'bar' });
+ assert.deepEqual(
+ elementIds,
+ ['outer-div', 'inner-div'],
+ 'Modifiers are called on all levels'
+ );
+ }
+ }
+ );
+}
diff --git a/packages/@ember/canary-features/index.ts b/packages/@ember/canary-features/index.ts
index 503c779c916..5992b3a5c22 100644
--- a/packages/@ember/canary-features/index.ts
+++ b/packages/@ember/canary-features/index.ts
@@ -17,6 +17,7 @@ export const DEFAULT_FEATURES = {
EMBER_IMPROVED_INSTRUMENTATION: null,
EMBER_MODULE_UNIFICATION: null,
EMBER_METAL_TRACKED_PROPERTIES: null,
+ EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES: null,
EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS: true,
EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP: true,
EMBER_ROUTING_BUILD_ROUTEINFO_METADATA: true,
@@ -76,6 +77,9 @@ export const EMBER_METAL_TRACKED_PROPERTIES = featureValue(FEATURES.EMBER_METAL_
export const EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP = featureValue(
FEATURES.EMBER_GLIMMER_ANGLE_BRACKET_NESTED_LOOKUP
);
+export const EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES = featureValue(
+ FEATURES.EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES
+);
export const EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS = featureValue(
FEATURES.EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS
);
diff --git a/packages/ember-template-compiler/lib/plugins/assert-modifiers-not-in-components.ts b/packages/ember-template-compiler/lib/plugins/assert-modifiers-not-in-components.ts
new file mode 100644
index 00000000000..a365a2da451
--- /dev/null
+++ b/packages/ember-template-compiler/lib/plugins/assert-modifiers-not-in-components.ts
@@ -0,0 +1,56 @@
+import { assert } from '@ember/debug';
+import { AST, ASTPlugin, ASTPluginEnvironment } from '@glimmer/syntax';
+import calculateLocationDisplay from '../system/calculate-location-display';
+
+export default function assertModifiersNotInComponents(env: ASTPluginEnvironment): ASTPlugin {
+ let { moduleName } = env.meta;
+ let scopes: string[][] = [];
+
+ function isComponentInvocation(node: AST.ElementNode) {
+ return (
+ node.tag[0] === '@' ||
+ node.tag[0].toUpperCase() === node.tag[0] ||
+ node.tag.indexOf('.') > -1 ||
+ scopes.some(params => params.some(p => p === node.tag))
+ );
+ }
+
+ return {
+ name: 'assert-modifiers-not-in-components',
+
+ visitor: {
+ Program: {
+ enter(node: AST.Program) {
+ scopes.push(node.blockParams);
+ },
+
+ exit() {
+ scopes.pop();
+ },
+ },
+ ElementNode: {
+ keys: {
+ children: {
+ enter(node: AST.ElementNode) {
+ scopes.push(node.blockParams);
+ },
+
+ exit() {
+ scopes.pop();
+ },
+ },
+ },
+ enter(node: AST.ElementNode) {
+ if (node.modifiers.length > 0 && isComponentInvocation(node)) {
+ assert(
+ `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ${calculateLocationDisplay(
+ moduleName,
+ node.loc
+ )}`
+ );
+ }
+ },
+ },
+ },
+ };
+}
diff --git a/packages/ember-template-compiler/lib/plugins/index.ts b/packages/ember-template-compiler/lib/plugins/index.ts
index 6667b39c4bc..6a168cf6f95 100644
--- a/packages/ember-template-compiler/lib/plugins/index.ts
+++ b/packages/ember-template-compiler/lib/plugins/index.ts
@@ -1,6 +1,7 @@
import AssertIfHelperWithoutArguments from './assert-if-helper-without-arguments';
import AssertInputHelperWithoutBlock from './assert-input-helper-without-block';
import AssertLocalVariableShadowingHelperInvocation from './assert-local-variable-shadowing-helper-invocation';
+import AssertModifiersNotInComponents from './assert-modifiers-not-in-components';
import AssertReservedNamedArguments from './assert-reserved-named-arguments';
import AssertSplattributeExpressions from './assert-splattribute-expression';
import DeprecateSendAction from './deprecate-send-action';
@@ -15,7 +16,10 @@ import TransformLinkTo from './transform-link-to';
import TransformOldClassBindingSyntax from './transform-old-class-binding-syntax';
import TransformQuotedBindingsIntoJustBindings from './transform-quoted-bindings-into-just-bindings';
-import { EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS } from '@ember/canary-features';
+import {
+ EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS,
+ EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES,
+} from '@ember/canary-features';
import { SEND_ACTION } from '@ember/deprecated-features';
import { ASTPlugin, ASTPluginEnvironment } from '@glimmer/syntax';
@@ -42,6 +46,10 @@ if (!EMBER_GLIMMER_ANGLE_BRACKET_BUILT_INS) {
transforms.push(TransformInputTypeSyntax);
}
+if (!EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES) {
+ transforms.push(AssertModifiersNotInComponents);
+}
+
if (SEND_ACTION) {
transforms.push(DeprecateSendAction);
}
diff --git a/packages/ember-template-compiler/tests/plugins/assert-modifiers-not-in-components-test.js b/packages/ember-template-compiler/tests/plugins/assert-modifiers-not-in-components-test.js
new file mode 100644
index 00000000000..f6e6447cd5e
--- /dev/null
+++ b/packages/ember-template-compiler/tests/plugins/assert-modifiers-not-in-components-test.js
@@ -0,0 +1,51 @@
+import { compile } from '../../index';
+import { moduleFor, AbstractTestCase } from 'internal-test-helpers';
+import { EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES } from '@ember/canary-features';
+
+if (!EMBER_GLIMMER_FORWARD_MODIFIERS_WITH_SPLATTRIBUTES) {
+ moduleFor(
+ 'ember-template-compiler: assert-modifiers-not-in-components',
+ class extends AbstractTestCase {
+ [`@test modifiers are not allowed in components`]() {
+ expectAssertion(() => {
+ compile(``, {
+ moduleName: 'the-foo',
+ });
+ }, `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ('the-foo' @ L1:C0) `);
+
+ expectAssertion(() => {
+ compile(``, {
+ moduleName: 'the-foo',
+ });
+ }, `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ('the-foo' @ L1:C0) `);
+
+ expectAssertion(() => {
+ compile(``, {
+ moduleName: 'the-foo',
+ });
+ }, `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ('the-foo' @ L1:C0) `);
+
+ expectAssertion(() => {
+ compile(`<@foo {{bar "something" foo="else"}}>@foo>`, {
+ moduleName: 'the-foo',
+ });
+ }, `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ('the-foo' @ L1:C0) `);
+
+ expectAssertion(() => {
+ compile(
+ `{{#let this.foo as |local|}}{{/let}}`,
+ {
+ moduleName: 'the-foo',
+ }
+ );
+ }, `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ('the-foo' @ L1:C28) `);
+
+ expectAssertion(() => {
+ compile(``, {
+ moduleName: 'the-foo',
+ });
+ }, `Passing modifiers to components require the "ember-glimmer-forward-modifiers-with-splattributes" canary feature, which has not been stabilized yet. See RFC #435 for details. ('the-foo' @ L1:C19) `);
+ }
+ }
+ );
+}
diff --git a/yarn.lock b/yarn.lock
index f5d90321538..e5ea0cd45b3 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -747,122 +747,122 @@
lodash "^4.17.11"
to-fast-properties "^2.0.0"
-"@glimmer/compiler@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.38.1.tgz#03b43a2a8a04b1ed39517862158e8897d0f6798b"
- integrity sha512-V4wRYRPH6FSVZw9dNfZn3IRxBofUBL0oGeBLm7wNdUOg4oXE26BMmxRVtYzTsBmmSj7SqB+B6VKuH1jEuvOOhQ==
+"@glimmer/compiler@0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.38.2-alpha.2.tgz#bd13b1194c622cdc03a85cf606ffc3adff6bd4c7"
+ integrity sha512-63uiXrYgHUPSexnHZZy5gSXzUgwL/RC8JJMVE3i8Uf0I3vouf6hAob3YpmpPnmnhqANZsQwn0bAUO5qpF1c5rA==
dependencies:
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/syntax" "^0.38.1"
- "@glimmer/util" "^0.38.1"
- "@glimmer/wire-format" "^0.38.1"
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/syntax" "^0.38.2-alpha.2"
+ "@glimmer/util" "^0.38.2-alpha.2"
+ "@glimmer/wire-format" "^0.38.2-alpha.2"
-"@glimmer/encoder@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.38.1.tgz#1b7fd08a83e4412148126d50cbc9c6a08739caa7"
- integrity sha512-E5d15cy0F/qiFCJ67KVOxJLkbV5pebiiczjzf/zHTmL250Fj4reISoKsBt0SBWc2IJAj2En3RLEyq6WS8U1sZQ==
+"@glimmer/encoder@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.38.2-alpha.2.tgz#3e1e015aa4e01018ae7c92b0523c58921879854d"
+ integrity sha512-mXLJndVeOgflOZUfVBrQiljHc7rMAyqm3Fr8cuTmgLiJmleU6thMpo5MrvqrLEag1sr4tAUpfh8kyHgEhXuaRg==
dependencies:
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/vm" "^0.38.1"
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/vm" "^0.38.2-alpha.2"
"@glimmer/env@^0.1.7":
version "0.1.7"
resolved "https://registry.yarnpkg.com/@glimmer/env/-/env-0.1.7.tgz#fd2d2b55a9029c6b37a6c935e8c8871ae70dfa07"
integrity sha1-/S0rVakCnGs3psk16MiHGucN+gc=
-"@glimmer/interfaces@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.38.1.tgz#5b1c174363396b99d6a6bddb35538151e4c4c989"
- integrity sha512-YXnzRR7IviHdN+k2Llp8rQ+ADrdzme++A5EFZRxcUoD14Eu1u2S3al7FlLLfwHhp5R2leO+x3zSYoWsuzfvsqw==
+"@glimmer/interfaces@0.38.2-alpha.2", "@glimmer/interfaces@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.38.2-alpha.2.tgz#10d3deadbf2393ff989373124962c36fe78fa74f"
+ integrity sha512-McCv9kzbV8UN97cscCetgNEV6RMRSisZPhD5bF6OSX8cfhAgWrdAt43Ba/RdzfKCtN+cXV8P2a9U9/LZ++NZOA==
dependencies:
- "@glimmer/wire-format" "^0.38.1"
+ "@glimmer/wire-format" "^0.38.2-alpha.2"
"@simple-dom/interface" "1.4.0"
-"@glimmer/low-level@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.38.1.tgz#101147d71a4f1ca1874e45e16a7a777fa8f65d46"
- integrity sha512-XydeZ5XzLFKLxtnwsy4Zu3WHJfL4/XYzs24KLaW4HeDxKfhVnJxr2hVWfpF17I3Q35yCOLdbSWp+igVHFA4/7w==
-
-"@glimmer/node@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.38.1.tgz#46d18041207953218bf841110b5c4d1db11eb3ac"
- integrity sha512-okAyjPhrUy4d4txuz2qXxo5z2gGZg3e4gjFPpTDKOZRGhWZMAa1mu0KEtnCHtJ4unvhJBBNI7TdSHQX+492Tlw==
- dependencies:
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/runtime" "^0.38.1"
-
-"@glimmer/opcode-compiler@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.38.1.tgz#da4e871e13ca87c8d80ebb905d0ff2c51c7d9a84"
- integrity sha512-p5VdtZDWrW8F3gKS6/DoFGIwpWoquiswAP2XyyQPlXI7IsbnxUhwLd0uQa/rjTPkOIH3okDW/h6ZVAEqEdwTKg==
- dependencies:
- "@glimmer/encoder" "^0.38.1"
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/program" "^0.38.1"
- "@glimmer/reference" "^0.38.1"
- "@glimmer/util" "^0.38.1"
- "@glimmer/vm" "^0.38.1"
- "@glimmer/wire-format" "^0.38.1"
-
-"@glimmer/program@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.38.1.tgz#cb50934749fc88843f925d5c9c43ba673de9f473"
- integrity sha512-nipMJiYx9ufZkt2iKlNdoi22U2asZ16NUhEllsd/fVw07+CwjI2Ylf93CFtWGDxjQ0qr9ZGPWFk1D7O7Gm6kmA==
- dependencies:
- "@glimmer/encoder" "^0.38.1"
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/util" "^0.38.1"
-
-"@glimmer/reference@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.38.1.tgz#555bcf90b7e5ea8d39d1089e2bd6a2da14b56184"
- integrity sha512-iGuTZhHc0NTw9i7eVdCnbENPGHzJecfPCNNQ1GUm5rsY1/NnLB4tNAEioDz81HAJygOHhnMZgb9YqLEwcwnONw==
- dependencies:
- "@glimmer/util" "^0.38.1"
-
-"@glimmer/runtime@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.38.1.tgz#abe0b4affbe29dfe5b15307713a1c03a83fdc41b"
- integrity sha512-zArtVsLNXV7VY+1Y8iaouOKvvAdNx1Ios5od7EH3RqAvkx4wxXNBKEAEG4ecj2avxELw+SwhajB/eGBbgBB8ng==
- dependencies:
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/low-level" "^0.38.1"
- "@glimmer/program" "^0.38.1"
- "@glimmer/reference" "^0.38.1"
- "@glimmer/util" "^0.38.1"
- "@glimmer/vm" "^0.38.1"
- "@glimmer/wire-format" "^0.38.1"
+"@glimmer/low-level@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.38.2-alpha.2.tgz#166f72f0c5e531db4b2b55999b6aca2004b7006f"
+ integrity sha512-5I1n1aaqdlBalsmoMAnUnM8SunUIH6Vt1EXmRyzyT5FaieBuOswnzeBL0wSndtM72Ly7Q1nDm18VItXKCHjr6A==
+
+"@glimmer/node@0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.38.2-alpha.2.tgz#6c11e9a833143fd192af6c61e4390964094b7b78"
+ integrity sha512-RD3mlNh0fKtZ3lILaWE5QqG3NX2oses62/d/c3Jn5xY5jmRwQUj0UQMVDkD2xNTWt3zM6SIZLDDU19tUhIuPow==
+ dependencies:
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/runtime" "^0.38.2-alpha.2"
+
+"@glimmer/opcode-compiler@0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.38.2-alpha.2.tgz#ef68e0404106cee05eaa3473cb21ff51a0dfc08d"
+ integrity sha512-gZmG46GFQPI0vwGAxKuRTDBF5ibudxUBye/8gmOs1LVnEaE+rA9jgzSR6pTfTL56PBPO4GCD5tCRAeHJ867XOg==
+ dependencies:
+ "@glimmer/encoder" "^0.38.2-alpha.2"
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/program" "^0.38.2-alpha.2"
+ "@glimmer/reference" "^0.38.2-alpha.2"
+ "@glimmer/util" "^0.38.2-alpha.2"
+ "@glimmer/vm" "^0.38.2-alpha.2"
+ "@glimmer/wire-format" "^0.38.2-alpha.2"
+
+"@glimmer/program@0.38.2-alpha.2", "@glimmer/program@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.38.2-alpha.2.tgz#c5e428ee66a7a46cafaf0907e3a1829ba2a79605"
+ integrity sha512-9jckpJdtYFB7arBBTehNbO34UaGybeqg7ym713yLKW5HptVEw+MfC1DAghUciZIugSY2RLxAsiJW8F9IUYFqcA==
+ dependencies:
+ "@glimmer/encoder" "^0.38.2-alpha.2"
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/util" "^0.38.2-alpha.2"
+
+"@glimmer/reference@0.38.2-alpha.2", "@glimmer/reference@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.38.2-alpha.2.tgz#c4f9930904739ca0db47426bbd757a9124956be6"
+ integrity sha512-AxlGMCET0LWWRkhVkMFXWHSgLOmBndbxAyBo2aGYDfNS0DalSyT+NuZXiIj9LEQwnx0dnx+OILrGx6EADZ+xYw==
+ dependencies:
+ "@glimmer/util" "^0.38.2-alpha.2"
+
+"@glimmer/runtime@0.38.2-alpha.2", "@glimmer/runtime@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.38.2-alpha.2.tgz#48b27620f0835979c774cb12789b9ea4d1119f8d"
+ integrity sha512-ERBCBOa80rMjuHPBrxdxeYmHdTTo38rGBWg6XjL/snbeCj+NmLoFRA7E+GMXEhUevwyjoO/p3yTIxZBjyP2BCA==
+ dependencies:
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/low-level" "^0.38.2-alpha.2"
+ "@glimmer/program" "^0.38.2-alpha.2"
+ "@glimmer/reference" "^0.38.2-alpha.2"
+ "@glimmer/util" "^0.38.2-alpha.2"
+ "@glimmer/vm" "^0.38.2-alpha.2"
+ "@glimmer/wire-format" "^0.38.2-alpha.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/syntax@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.38.1.tgz#625875da5f1e827ad5806fdaa23e2cd00369fda8"
- integrity sha512-tzc1NeUd7hbBWqIlgSY5Oq8bEiMpp7ClawVt8hWUarbr9G+qR0toDEQYqZmeRtCXjHAIh9M9oYbpbzLP6+iiag==
+"@glimmer/syntax@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.38.2-alpha.2.tgz#035f7c9e4fd07c1e0f3bf276e2b657bbc7261a67"
+ integrity sha512-RkVVKFINZvlHdU8sv3hWkTMmaFAGv9CKaTgKiNF94OH4GW9OBHpl4LQsT6B11cswxsQ28SQkVl6XkHJVy4Tekg==
dependencies:
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/util" "^0.38.1"
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/util" "^0.38.2-alpha.2"
handlebars "^4.0.6"
simple-html-tokenizer "^0.5.6"
-"@glimmer/util@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.38.1.tgz#41ca0544f95ec980bc492f4f0e5a85564964c028"
- integrity sha512-WAe+bqJSFBR8EmA/NsxcqWmyi2AfOyW9x1jpWczZHJiBkvssiRF6nre39CJVwwMPlFDtdKzvnRQkWVl8ZBhcNw==
+"@glimmer/util@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.38.2-alpha.2.tgz#139c0aed8736fa95d2a27b78d702be13406d6ec6"
+ integrity sha512-KqdR/mj58UdCW93gW45BnyrfuhR2YsmeKivJSYP5B2DTwpfMl1FYUtXhLV6VUoh3ryejCOmaJM5RmyLtUyIODA==
-"@glimmer/vm@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.38.1.tgz#30f5bb659c42fbe69a6b5cf42a06c6bd815721ac"
- integrity sha512-pxmdJp0GskbwBz7WFvBNWaeoP1+977A0cFnEc3U+GbLBCmyrCq7mRQwFYSRBI8B5/6CkzWhsGXj42Qrkk34m3Q==
+"@glimmer/vm@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.38.2-alpha.2.tgz#3599017df6e2014d546f97830c590948504250c2"
+ integrity sha512-WQdlOwC+2cMUTDZynI/KmJDn9bnorEwqezwOyHBc2YYgqsJlv/ie5TF4MnuQSmGLvGt0tehr70J6UTapdPLDmA==
dependencies:
- "@glimmer/interfaces" "^0.38.1"
- "@glimmer/util" "^0.38.1"
+ "@glimmer/interfaces" "^0.38.2-alpha.2"
+ "@glimmer/util" "^0.38.2-alpha.2"
-"@glimmer/wire-format@^0.38.1":
- version "0.38.1"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.38.1.tgz#a77963cf7193ab23cbce242116aac613f17cd3dc"
- integrity sha512-AT1dToybQxbY29XpkNra9/j7svq65ZNnSXmRs1zUKAarvgh6qxOBsnYeVBNrxBFduNuNJOxP8G0Y+nXEGrUoRQ==
+"@glimmer/wire-format@^0.38.2-alpha.2":
+ version "0.38.2-alpha.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.38.2-alpha.2.tgz#a580f9079b164f9db37cbde4169dc1aecd6d1015"
+ integrity sha512-g3zKL3xjLfhrQmSArKivz65FLWEhL8Y5T+UIjbnisEUp1vC8HKwM9+LfceaUFsop9o6OLE/7ZyE8YE3iCWjgTQ==
dependencies:
- "@glimmer/util" "^0.38.1"
+ "@glimmer/util" "^0.38.2-alpha.2"
"@simple-dom/document@^1.4.0":
version "1.4.0"