diff --git a/package.json b/package.json index 9aaf940c7d2..925715ff222 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "@babel/helper-module-imports": "^7.16.0", "@babel/plugin-transform-block-scoping": "^7.16.0", "@ember/edition-utils": "^1.2.0", - "@glimmer/vm-babel-plugins": "0.80.2", + "@glimmer/vm-babel-plugins": "0.83.1", "babel-plugin-debug-macros": "^0.3.4", "babel-plugin-filter-imports": "^4.0.0", "broccoli-concat": "^4.2.5", @@ -73,19 +73,19 @@ }, "devDependencies": { "@babel/preset-env": "^7.9.5", - "@glimmer/compiler": "0.80.2", - "@glimmer/destroyable": "0.80.2", + "@glimmer/compiler": "0.83.1", + "@glimmer/destroyable": "0.83.1", "@glimmer/env": "^0.1.7", - "@glimmer/global-context": "0.80.2", - "@glimmer/interfaces": "0.80.2", - "@glimmer/manager": "0.80.2", - "@glimmer/node": "0.80.2", - "@glimmer/opcode-compiler": "0.80.2", - "@glimmer/owner": "0.80.2", - "@glimmer/program": "0.80.2", - "@glimmer/reference": "0.80.2", - "@glimmer/runtime": "0.80.2", - "@glimmer/validator": "0.80.2", + "@glimmer/global-context": "0.83.1", + "@glimmer/interfaces": "0.83.1", + "@glimmer/manager": "0.83.1", + "@glimmer/node": "0.83.1", + "@glimmer/opcode-compiler": "0.83.1", + "@glimmer/owner": "0.83.1", + "@glimmer/program": "0.83.1", + "@glimmer/reference": "0.83.1", + "@glimmer/runtime": "0.83.1", + "@glimmer/validator": "0.83.1", "@simple-dom/document": "^1.4.0", "@types/qunit": "^2.11.1", "@types/rsvp": "^4.0.4", diff --git a/packages/@ember/-internals/environment/lib/env.ts b/packages/@ember/-internals/environment/lib/env.ts index 93f3d1ac326..f8b196b7aad 100644 --- a/packages/@ember/-internals/environment/lib/env.ts +++ b/packages/@ember/-internals/environment/lib/env.ts @@ -155,23 +155,6 @@ export const ENV = { */ _RERENDER_LOOP_LIMIT: 1000, - /** - Allows disabling the implicit this property fallback deprecation. This could be useful - as a way to control the volume of deprecations that are issued by temporarily disabling - the implicit this fallback deprecations, which would allow the other deprecations to be more easily - identified in the console). - - NOTE: The fallback behavior **will be removed** in Ember 4.0.0, disabling **_IS NOT_** - a viable strategy for handling this deprecation. - - @property _DISABLE_PROPERTY_FALLBACK_DEPRECATION - @for EmberENV - @type boolean - @default false - @private - */ - _DISABLE_PROPERTY_FALLBACK_DEPRECATION: false, - EMBER_LOAD_HOOKS: {} as { [hook: string]: Function[]; }, diff --git a/packages/@ember/-internals/glimmer/lib/environment.ts b/packages/@ember/-internals/glimmer/lib/environment.ts index 12a91fcb41d..35700fd1a2e 100644 --- a/packages/@ember/-internals/glimmer/lib/environment.ts +++ b/packages/@ember/-internals/glimmer/lib/environment.ts @@ -98,24 +98,6 @@ const VM_DEPRECATION_OVERRIDES: (DeprecationOptions & { disabled?: boolean; message?: string; })[] = [ - { - id: 'autotracking.mutation-after-consumption', - until: '4.0.0', - for: 'ember-source', - since: { - enabled: '3.21.0', - }, - }, - { - id: 'this-property-fallback', - disabled: ENV._DISABLE_PROPERTY_FALLBACK_DEPRECATION, - url: 'https://deprecations.emberjs.com/v3.x#toc_this-property-fallback', - until: '4.0.0', - for: 'ember-source', - since: { - enabled: '3.26.0', - }, - }, { id: 'argument-less-helper-paren-less-invocation', url: 'https://deprecations.emberjs.com/v3.x#toc_argument-less-helper-paren-less-invocation', diff --git a/packages/@ember/-internals/glimmer/lib/helper.ts b/packages/@ember/-internals/glimmer/lib/helper.ts index a1f163da60c..253de1031f0 100644 --- a/packages/@ember/-internals/glimmer/lib/helper.ts +++ b/packages/@ember/-internals/glimmer/lib/helper.ts @@ -6,15 +6,9 @@ import { Factory, Owner, setOwner } from '@ember/-internals/owner'; import { FrameworkObject } from '@ember/-internals/runtime'; import { getDebugName, symbol } from '@ember/-internals/utils'; import { join } from '@ember/runloop'; -import { DEBUG } from '@glimmer/env'; import { Arguments, Dict, HelperManager } from '@glimmer/interfaces'; import { getInternalHelperManager, helperCapabilities, setHelperManager } from '@glimmer/manager'; -import { - consumeTag, - createTag, - deprecateMutationsInTrackingTransaction, - dirtyTag, -} from '@glimmer/validator'; +import { consumeTag, createTag, dirtyTag } from '@glimmer/validator'; export const RECOMPUTE_TAG = symbol('RECOMPUTE_TAG'); @@ -175,16 +169,9 @@ class ClassicHelperManager implements HelperManager { } getValue({ instance, args }: ClassicHelperStateBucket) { - let ret; let { positional, named } = args; - if (DEBUG) { - deprecateMutationsInTrackingTransaction!(() => { - ret = instance.compute(positional as unknown[], named); - }); - } else { - ret = instance.compute(positional as unknown[], named); - } + let ret = instance.compute(positional as unknown[], named); consumeTag(instance[RECOMPUTE_TAG]); @@ -225,18 +212,6 @@ class SimpleClassicHelperManager implements HelperManager<() => unknown> { createHelper(definition: Wrapper, args: Arguments) { let { compute } = definition; - if (DEBUG) { - return () => { - let ret; - - deprecateMutationsInTrackingTransaction!(() => { - ret = compute.call(null, args.positional as unknown[], args.named); - }); - - return ret; - }; - } - return () => compute.call(null, args.positional as unknown[], args.named); } diff --git a/packages/@ember/-internals/glimmer/lib/utils/managers.ts b/packages/@ember/-internals/glimmer/lib/utils/managers.ts index 0073b4e1991..21cc5c55ff1 100644 --- a/packages/@ember/-internals/glimmer/lib/utils/managers.ts +++ b/packages/@ember/-internals/glimmer/lib/utils/managers.ts @@ -1,6 +1,4 @@ import { Owner } from '@ember/-internals/owner'; -import { deprecate } from '@ember/debug'; -import { DEBUG } from '@glimmer/env'; import { ComponentManager } from '@glimmer/interfaces'; import { componentCapabilities as glimmerComponentCapabilities, @@ -17,41 +15,3 @@ export function setComponentManager( export let componentCapabilities = glimmerComponentCapabilities; export let modifierCapabilities = glimmerModifierCapabilities; - -if (DEBUG) { - componentCapabilities = (version, options) => { - deprecate( - 'Versions of component manager capabilities prior to 3.13 have been deprecated. You must update to the 3.13 capabilities.', - version === '3.13', - { - id: 'manager-capabilities.components-3-4', - url: 'https://deprecations.emberjs.com/v3.x#toc_manager-capabilities-components-3-4', - until: '4.0.0', - for: 'ember-source', - since: { - enabled: '3.26.0', - }, - } - ); - - return glimmerComponentCapabilities(version, options); - }; - - modifierCapabilities = (version, options) => { - deprecate( - 'Versions of modifier manager capabilities prior to 3.22 have been deprecated. You must update to the 3.22 capabilities.', - version === '3.22', - { - id: 'manager-capabilities.modifiers-3-13', - url: 'https://deprecations.emberjs.com/v3.x#toc_manager-capabilities-modifiers-3-13', - until: '4.0.0', - for: 'ember-source', - since: { - enabled: '3.26.0', - }, - } - ); - - return glimmerModifierCapabilities(version, options); - }; -} diff --git a/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js b/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js index 71bc1b74107..e321647ffe9 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js @@ -178,7 +178,7 @@ moduleFor( } ['@test sharing a template between engine and application has separate refinements']() { - this.assert.expect(2); + this.assert.expect(1); let sharedTemplate = compile(strip`

{{this.contextType}}

@@ -187,10 +187,6 @@ moduleFor( {{outlet}} `); - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.add('template:application', sharedTemplate); this.add( 'controller:application', @@ -231,16 +227,12 @@ moduleFor( ); return this.visit('/blog').then(() => { - this.assertText('ApplicationController Data!EngineComponent!'); + this.assertText('ApplicationEngineComponent!'); }); } ['@test sharing a layout between engine and application has separate refinements']() { - this.assert.expect(2); - - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); + this.assert.expect(1); let sharedLayout = compile(strip` {{ambiguous-curlies}} @@ -293,7 +285,7 @@ moduleFor( ); return this.visit('/blog').then(() => { - this.assertText('ApplicationLocal Data!EngineComponent!'); + this.assertText('ApplicationEngineComponent!'); }); } diff --git a/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js b/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js index ba43210274c..2eee0f6cf63 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js @@ -105,47 +105,7 @@ moduleFor( }); } - ['@test it can access the model provided by the route via implicit this fallback']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - - this.add( - 'route:application', - Route.extend({ - model() { - return ['red', 'yellow', 'blue']; - }, - }) - ); - - this.addTemplate( - 'application', - strip` - - ` - ); - - return this.visit('/').then(() => { - this.assertInnerHTML(strip` - - `); - }); - } - async ['@test interior mutations on the model with set'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.router.map(function () { this.route('color', { path: '/:color' }); }); @@ -164,7 +124,7 @@ moduleFor( strip` [@model: {{@model.color}}] [this.model: {{this.model.color}}] - [model: {{model.color}}] + [model: {{this.model.color}}] ` ); @@ -203,10 +163,6 @@ moduleFor( } async ['@test interior mutations on the model with tracked properties'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - class Model { @tracked color; @@ -233,7 +189,7 @@ moduleFor( strip` [@model: {{@model.color}}] [this.model: {{this.model.color}}] - [model: {{model.color}}] + [model: {{this.model.color}}] ` ); @@ -271,10 +227,6 @@ moduleFor( } async ['@test exterior mutations on the model with set'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.router.map(function () { this.route('color', { path: '/:color' }); }); @@ -293,7 +245,7 @@ moduleFor( strip` [@model: {{@model}}] [this.model: {{this.model}}] - [model: {{model}}] + [model: {{this.model}}] ` ); @@ -332,10 +284,6 @@ moduleFor( } async ['@test exterior mutations on the model with tracked properties'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.router.map(function () { this.route('color', { path: '/:color' }); }); @@ -361,7 +309,7 @@ moduleFor( strip` [@model: {{@model}}] [this.model: {{this.model}}] - [model: {{model}}] + [model: {{this.model}}] ` ); 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 34a696ab571..1bb86b5c4c2 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 @@ -9,7 +9,7 @@ import { Component } from '../../utils/helpers'; class CustomModifierManager { constructor(owner) { - this.capabilities = modifierCapabilities('3.13'); + this.capabilities = modifierCapabilities('3.22'); this.owner = owner; } diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js index 759a7e7b347..dc374855c77 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js @@ -3515,24 +3515,6 @@ moduleFor( this.assertComponentElement(this.firstChild, { content: 'hello' }); } - ['@test can use `{{component.foo}}` in a template GH#19313']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - - this.registerComponent('foo-bar', { - template: '{{component.foo}}', - }); - - this.render('{{foo-bar component=(hash foo="bar")}}'); - - this.assertComponentElement(this.firstChild, { content: 'bar' }); - - runTask(() => this.rerender()); - - this.assertComponentElement(this.firstChild, { content: 'bar' }); - } - ['@test can use `{{@component.foo}}` in a template GH#19313']() { this.registerComponent('foo-bar', { template: '{{@component.foo}}', diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js index 22896382648..033188083ac 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js @@ -197,11 +197,7 @@ if (ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS) { } ['@test it renders named arguments as reflected properties']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - - this.registerTemplateOnlyComponent('foo-bar', '|{{foo}}|{{this.bar}}|'); + this.registerTemplateOnlyComponent('foo-bar', '|{{this.foo}}|{{this.bar}}|'); this.render('{{foo-bar foo=this.foo bar=this.bar}}', { foo: 'foo', diff --git a/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js b/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js index 21b94917b80..62e9b576a3b 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js @@ -3,11 +3,11 @@ import { moduleFor, RenderingTestCase, runTask, strip } from 'internal-test-help import { componentCapabilities } from '@glimmer/manager'; import { Object as EmberObject } from '@ember/-internals/runtime'; -import { set, setProperties, computed, tracked } from '@ember/-internals/metal'; +import { set, setProperties, computed } from '@ember/-internals/metal'; import { setComponentManager } from '@ember/-internals/glimmer'; const BasicComponentManager = EmberObject.extend({ - capabilities: componentCapabilities('3.4'), + capabilities: componentCapabilities('3.13'), createComponent(factory, args) { return factory.create({ args }); @@ -39,7 +39,7 @@ class ComponentManagerTest extends RenderingTestCase { super(...arguments); InstrumentedComponentManager = EmberObject.extend({ - capabilities: componentCapabilities('3.4', { + capabilities: componentCapabilities('3.13', { destructor: true, asyncLifecycleCallbacks: true, }), @@ -119,7 +119,7 @@ moduleFor( ['@test it can have no template context']() { let ComponentClass = setComponentManager(() => { return EmberObject.create({ - capabilities: componentCapabilities('3.4'), + capabilities: componentCapabilities('3.13'), createComponent() { return null; @@ -147,7 +147,7 @@ moduleFor( class Base {} setComponentManager(() => { return EmberObject.create({ - capabilities: componentCapabilities('3.4'), + capabilities: componentCapabilities('3.13'), createComponent(Factory, args) { return new Factory(args); @@ -206,7 +206,7 @@ moduleFor( let ComponentClass = setComponentManager( () => { return EmberObject.create({ - capabilities: componentCapabilities('3.4'), + capabilities: componentCapabilities('3.13'), createComponent(factory) { return factory.create(); @@ -411,7 +411,7 @@ moduleFor( let ComponentClass = setComponentManager( () => { return EmberObject.create({ - capabilities: componentCapabilities('3.4', { + capabilities: componentCapabilities('3.13', { destructor: true, }), @@ -461,8 +461,9 @@ moduleFor( let ComponentClass = setComponentManager( () => { return EmberObject.create({ - capabilities: componentCapabilities('3.4', { + capabilities: componentCapabilities('3.13', { asyncLifecycleCallbacks: true, + updateHook: true, }), createComponent(factory, args) { @@ -570,7 +571,7 @@ moduleFor( assert.throws(() => { this.render('{{foo-bar name=this.name}}', { name: 'world' }); - }, /Custom component managers must have a `capabilities` property that is the result of calling the `capabilities\('3.4' \| '3.13'\)` \(imported via `import \{ capabilities \} from '@ember\/component';`\). /); + }, /Custom component managers must have a `capabilities` property that is the result of calling the `capabilities\('3.13'\)` \(imported via `import \{ capabilities \} from '@ember\/component';`\). /); assert.verifySteps([]); } @@ -665,9 +666,10 @@ moduleFor( ['@test updating attributes triggers updateComponent and didUpdateComponent'](assert) { let TestManager = EmberObject.extend({ - capabilities: componentCapabilities('3.4', { + capabilities: componentCapabilities('3.13', { destructor: true, asyncLifecycleCallbacks: true, + updateHook: true, }), createComponent(factory, args) { @@ -883,39 +885,9 @@ moduleFor( assert.throws(() => { this.render('', { name: 'world' }); - }, /Custom component managers must have a `capabilities` property that is the result of calling the `capabilities\('3.4' \| '3.13'\)` \(imported via `import \{ capabilities \} from '@ember\/component';`\). /); + }, /Custom component managers must have a `capabilities` property that is the result of calling the `capabilities\('3.13'\)` \(imported via `import \{ capabilities \} from '@ember\/component';`\). /); assert.verifySteps([]); } - - '@test tracked property mutation in constructor issues a deprecation'() { - let ComponentClass = setComponentManager( - createBasicManager, - class extends EmberObject { - @tracked itemCount = 0; - - init() { - super.init(...arguments); - - // first read the tracked property - let { itemCount } = this; - - // then attempt to update the tracked property - this.itemCount = itemCount + 1; - } - } - ); - - this.registerComponent('foo-bar', { - template: `{{this.itemCount}}`, - ComponentClass, - }); - - expectDeprecation(() => { - this.render(''); - }, /You attempted to update `itemCount` on `<.*>`, but it had already been used previously in the same computation/); - - this.assertHTML(`1`); - } } ); diff --git a/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js b/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js index 51f639d9e18..144f5dff9a4 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/custom-modifier-manager-test.js @@ -241,50 +241,6 @@ class ModifierManagerTest extends RenderingTestCase { assert.equal(updateCount, 2); } - '@test provides a helpful deprecation when mutating a tracked value that was consumed already within constructor'( - assert - ) { - let ModifierClass = setModifierManager( - (owner) => { - return new this.CustomModifierManager(owner); - }, - class { - static create() { - return new this(); - } - - @tracked foo = 123; - - constructor() { - // first read the tracked property - this.foo; - - // then attempt to update the tracked property - this.foo = 456; - } - - didInsertElement() {} - didUpdate() {} - willDestroyElement() {} - } - ); - - this.registerModifier( - 'foo-bar', - class extends ModifierClass { - didInsertElement() { - assert.ok(true, 'modifiers didInsertElement was called'); - } - } - ); - - let expectedMessage = backtrackingMessageFor('foo'); - - expectDeprecation(() => { - this.render('

hello world

'); - }, expectedMessage); - } - '@test provides a helpful assertion when mutating a value that was consumed already'() { class Person { @tracked name = 'bob'; @@ -360,96 +316,12 @@ class ModifierManagerTest extends RenderingTestCase { assert.throws(() => { this.render('

hello world

'); - }, /Custom modifier managers must have a `capabilities` property that is the result of calling the `capabilities\('3.13' \| '3.22'\)` \(imported via `import \{ capabilities \} from '@ember\/modifier';`\). /); + }, /Custom modifier managers must have a `capabilities` property that is the result of calling the `capabilities\('3.22'\)` \(imported via `import \{ capabilities \} from '@ember\/modifier';`\). /); assert.verifySteps([]); } } -moduleFor( - 'Basic Custom Modifier Manager: 3.13', - class extends ModifierManagerTest { - CustomModifierManager = class CustomModifierManager { - capabilities = modifierCapabilities('3.13'); - - constructor(owner) { - this.owner = owner; - } - - createModifier(factory, args) { - // factory is the owner.factoryFor result - 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(); - } - }; - - '@test modifers consume all arguments'(assert) { - let insertCount = 0; - let updateCount = 0; - - let ModifierClass = setModifierManager( - (owner) => { - return new this.CustomModifierManager(owner); - }, - EmberObject.extend({ - didInsertElement() {}, - didUpdate() {}, - willDestroyElement() {}, - }) - ); - - this.registerModifier( - 'foo-bar', - ModifierClass.extend({ - didInsertElement(_positional, named) { - insertCount++; - - // consume qux - named.qux; - }, - - didUpdate(_positiona, named) { - updateCount++; - - // consume qux - named.qux; - }, - }) - ); - - this.render('

hello world

', { - bar: 'bar', - qux: 'quz', - }); - - this.assertHTML(`

hello world

`); - - assert.equal(insertCount, 1); - assert.equal(updateCount, 0); - - runTask(() => set(this.context, 'bar', 'other bar')); - assert.equal(updateCount, 1); - - runTask(() => set(this.context, 'qux', 'quuuuxxxxxx')); - assert.equal(updateCount, 2); - } - } -); - moduleFor( 'Basic Custom Modifier Manager: 3.22', class extends ModifierManagerTest { @@ -674,60 +546,6 @@ moduleFor( return { isInteractive: false }; } - [`@test doesn't trigger lifecycle hooks when non-interactive: modifierCapabilities('3.13')`]( - assert - ) { - class CustomModifierManager { - capabilities = modifierCapabilities('3.13'); - - 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 ModifierClass = setModifierManager( - (owner) => { - return new CustomModifierManager(owner); - }, - EmberObject.extend({ - didInsertElement() { - assert.ok(false); - }, - didUpdate() { - assert.ok(false); - }, - willDestroyElement() { - assert.ok(false); - }, - }) - ); - - this.registerModifier('foo-bar', ModifierClass); - - this.render('

hello world

'); - runTask(() => this.context.set('baz', 'Hello')); - - this.assertHTML('

hello world

'); - } - [`@test doesn't trigger lifecycle hooks when non-interactive: modifierCapabilities('3.22')`]( assert ) { diff --git a/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js b/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js index dcba0e131bf..6043edf5ef8 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js @@ -8,8 +8,7 @@ import { defineSimpleHelper, } from 'internal-test-helpers'; import { Helper, Component } from '@ember/-internals/glimmer'; -import { set, tracked } from '@ember/-internals/metal'; -import { backtrackingMessageFor } from '../../utils/debug-stack'; +import { set } from '@ember/-internals/metal'; moduleFor( 'Helpers test: custom helpers', @@ -34,36 +33,19 @@ moduleFor( this.assertText('hello | hello world'); } - ['@test it does not resolve helpers with a `.` (period)']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); + ['@test it does not resolve helpers with a `.` (period)'](assert) { + if (!DEBUG) { + assert.ok(true, 'nothing to do in prod builds, assertion is stripped'); + return; + } this.registerHelper('hello.world', () => 'hello world'); - this.render('{{hello.world}}', { - hello: { - world: '', - }, - }); - - this.assertText(''); - - this.assertStableRerender(); - - this.assertText(''); - - runTask(() => set(this.context, 'hello', { world: 'hello world!' })); - - this.assertText('hello world!'); - - runTask(() => { - set(this.context, 'hello', { - world: '', - }); - }); - - this.assertText(''); + // cannot use `expectAssertion` because the error is thrown in glimmer-vm + // (and doesn't go through Ember's own assertion internals) + assert.throws(() => { + this.render('{{hello.world}}'); + }, /Attempted to resolve a value in a strict mode template, but that value was not in scope: hello/); } ['@test it can resolve custom class-based helpers with or without dashes']() { @@ -731,55 +713,6 @@ moduleFor( this.assertText('huzza!'); } - ['@test class-based helper gives helpful warning when mutating a value that was tracked already']() { - this.add( - 'helper:hello-world', - class extends Helper { - compute() { - this.get('value'); - this.set('value', 123); - } - } - ); - - let expectedMessage = backtrackingMessageFor('value', '<.+?>', { - renderTree: ['\\(result of a `<\\(unknown\\).*?>` helper\\)'], - }); - - expectDeprecation(() => { - // TODO: this must be a bug?? - expectDeprecation( - backtrackingMessageFor('undefined', undefined, { - renderTree: ['\\(result of a `<\\(unknown\\).*?>` helper\\)'], - }) - ); - - this.render('{{hello-world}}'); - }, expectedMessage); - } - - ['@test class-based helper gives helpful deprecation when mutating a tracked property that was tracked already']() { - this.add( - 'helper:hello-world', - class HelloWorld extends Helper { - @tracked value; - - compute() { - this.value; - this.value = 123; - } - } - ); - - let expectedMessage = backtrackingMessageFor('value', '', { - renderTree: ['\\(result of a `` helper\\)'], - }); - - expectDeprecation(() => { - this.render('{{hello-world}}'); - }, expectedMessage); - } - '@feature(EMBER_DYNAMIC_HELPERS_AND_MODIFIERS) Can resolve a helper'() { this.registerHelper('hello-world', ([text]) => text ?? 'Hello, world!'); diff --git a/packages/@ember/-internals/glimmer/tests/integration/helpers/tracked-test.js b/packages/@ember/-internals/glimmer/tests/integration/helpers/tracked-test.js index 5e74332aff2..8b42f331c2f 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/helpers/tracked-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/helpers/tracked-test.js @@ -1,7 +1,5 @@ import { Object as EmberObject, A, MutableArray } from '@ember/-internals/runtime'; import { - get, - set, tracked, nativeDescDecorator as descriptor, notifyPropertyChange, @@ -9,7 +7,6 @@ import { import Service, { service } from '@ember/service'; import { moduleFor, RenderingTestCase, strip, runTask } from 'internal-test-helpers'; -import { backtrackingMessageFor } from '../../utils/debug-stack'; import { Component } from '../../utils/helpers'; moduleFor( @@ -406,46 +403,5 @@ moduleFor( this.assertText('12'); } - - '@test simple helper gives helpful warning when mutating a value that was tracked already'() { - this.registerHelper('hello-world', function helloWorld([person]) { - get(person, 'name'); - set(person, 'name', 'sam'); - }); - - let expectedMessage = backtrackingMessageFor('name', '\\(unknown object\\)', { - renderTree: ['\\(result of a `.*` helper\\)'], - }); - - expectDeprecation(() => { - // TODO: this must be a bug?? - expectDeprecation( - backtrackingMessageFor('undefined', undefined, { - renderTree: ['\\(result of a `.*` helper\\)'], - }) - ); - - this.render('{{hello-world this.model}}', { model: {} }); - }, expectedMessage); - } - - '@test simple helper gives helpful deprecation when mutating a tracked property that was tracked already'() { - class Person { - @tracked name = 'bob'; - } - - this.registerHelper('hello-world', ([person]) => { - person.name; - person.name = 'sam'; - }); - - let expectedMessage = backtrackingMessageFor('name', 'Person', { - renderTree: ['\\(result of a `\\(unknown function\\)` helper\\)'], - }); - - expectDeprecation(() => { - this.render('{{hello-world this.model}}', { model: new Person() }); - }, expectedMessage); - } } ); diff --git a/packages/@ember/-internals/glimmer/tests/integration/mount-test.js b/packages/@ember/-internals/glimmer/tests/integration/mount-test.js index fd223eaccd6..5d6e7279026 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/mount-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/mount-test.js @@ -6,6 +6,7 @@ import { runTask, } from 'internal-test-helpers'; +import { DEBUG } from '@ember/debug'; import { set } from '@ember/-internals/metal'; import { getOwner } from '@ember/-internals/owner'; import Controller from '@ember/controller'; @@ -113,6 +114,11 @@ moduleFor( } async ['@test it emits a useful backtracking re-render assertion message'](assert) { + if (!DEBUG) { + assert.ok(true, 'nothing to do in prod builds, assertion is stripped'); + return; + } + this.router.map(function () { this.route('route-with-mount'); }); diff --git a/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js b/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js index 2959fda9f77..0781841d78c 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js @@ -725,34 +725,28 @@ class EachTest extends AbstractEachTest { } ['@test the scoped variable is not available outside the {{#each}} block.']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.makeList(['Yehuda']); - this.render(`{{name}}-{{#each this.list as |name|}}{{name}}{{/each}}-{{name}}`, { - name: 'Stef', - }); + this.render(`{{name}}-{{#each this.list as |name|}}{{name}}{{/each}}-{{name}}`); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => this.rerender()); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => this.pushObjects([' ', 'Katz'])); - this.assertText('Stef-Yehuda Katz-Stef'); + this.assertText('-Yehuda Katz-'); runTask(() => set(this.context, 'name', 'Tom')); - this.assertText('Tom-Yehuda Katz-Tom'); + this.assertText('-Yehuda Katz-'); runTask(() => set(this.context, 'name', 'Stef')); this.replaceList(['Yehuda']); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); } ['@test inverse template is displayed with context']() { @@ -946,10 +940,6 @@ class EachTest extends AbstractEachTest { } ['@test the scoped variable is not available outside the {{#each}} block']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - let first = this.createList(['Limbo']); let fifth = this.createList(['Wrath']); let ninth = this.createList(['Treachery']); @@ -957,41 +947,38 @@ class EachTest extends AbstractEachTest { this.render( `{{ring}}-{{#each this.first as |ring|}}{{ring}}-{{#each this.fifth as |ring|}}{{ring}}-{{#each this.ninth as |ring|}}{{ring}}-{{/each}}{{ring}}-{{/each}}{{ring}}-{{/each}}{{ring}}`, { - ring: 'Greed', first: first.list, fifth: fifth.list, ninth: ninth.list, } ); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => this.rerender()); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => { - set(this.context, 'ring', 'O'); fifth.delegate.insertAt(0, 'D'); }); - this.assertText('O-Limbo-D-Treachery-D-Wrath-Treachery-Wrath-Limbo-O'); + this.assertText('-Limbo-D-Treachery-D-Wrath-Treachery-Wrath-Limbo-'); runTask(() => { first.delegate.pushObject('I'); ninth.delegate.replace(0, 1, ['K']); }); - this.assertText('O-Limbo-D-K-D-Wrath-K-Wrath-Limbo-I-D-K-D-Wrath-K-Wrath-I-O'); + this.assertText('-Limbo-D-K-D-Wrath-K-Wrath-Limbo-I-D-K-D-Wrath-K-Wrath-I-'); runTask(() => { - set(this.context, 'ring', 'Greed'); set(this.context, 'first', this.createList(['Limbo']).list); set(this.context, 'fifth', this.createList(['Wrath']).list); set(this.context, 'ninth', this.createList(['Treachery']).list); }); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); } ['@test it should support {{#each this.name as |foo|}}, then {{#each foo as |bar|}}']() { diff --git a/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js b/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js index a08c411f2a9..a3f8ef73c9f 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js @@ -96,35 +96,29 @@ moduleFor( } ['@test the scoped variable is not available outside the {{#let}} block.']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.render(`{{name}}-{{#let this.other as |name|}}{{name}}{{/let}}-{{name}}`, { - name: 'Stef', other: 'Yehuda', }); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => this.rerender()); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => set(this.context, 'other', 'Chad')); - this.assertText('Stef-Chad-Stef'); + this.assertText('-Chad-'); runTask(() => set(this.context, 'name', 'Tom')); - this.assertText('Tom-Chad-Tom'); + this.assertText('-Chad-'); runTask(() => { - set(this.context, 'name', 'Stef'); set(this.context, 'other', 'Yehuda'); }); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); } ['@test can access alias of a proxy']() { @@ -246,48 +240,41 @@ moduleFor( } ['@test the scoped variable is not available outside the {{#let}} block']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.render( `{{ring}}-{{#let this.first as |ring|}}{{ring}}-{{#let this.fifth as |ring|}}{{ring}}-{{#let this.ninth as |ring|}}{{ring}}-{{/let}}{{ring}}-{{/let}}{{ring}}-{{/let}}{{ring}}`, { - ring: 'Greed', first: 'Limbo', fifth: 'Wrath', ninth: 'Treachery', } ); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => this.rerender()); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => { - set(this.context, 'ring', 'O'); set(this.context, 'fifth', 'D'); }); - this.assertText('O-Limbo-D-Treachery-D-Limbo-O'); + this.assertText('-Limbo-D-Treachery-D-Limbo-'); runTask(() => { set(this.context, 'first', 'I'); set(this.context, 'ninth', 'K'); }); - this.assertText('O-I-D-K-D-I-O'); + this.assertText('-I-D-K-D-I-'); runTask(() => { - set(this.context, 'ring', 'Greed'); set(this.context, 'first', 'Limbo'); set(this.context, 'fifth', 'Wrath'); set(this.context, 'ninth', 'Treachery'); }); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); } ['@test it should support {{#let name as |foo|}}, then {{#let foo as |bar|}}']() { @@ -331,10 +318,6 @@ moduleFor( } ['@test nested {{#let}} blocks should have access to root context']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.render( strip` {{name}} @@ -362,30 +345,26 @@ moduleFor( } ); - this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn'); + this.assertText('[trek[machty]trek][machty[trek]machty]'); runTask(() => this.rerender()); - this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn'); + this.assertText('[trek[machty]trek][machty[trek]machty]'); runTask(() => set(this.context, 'name', 'chancancode')); - this.assertText('chancancode[trek[machty]trek]chancancode[machty[trek]machty]chancancode'); + this.assertText('[trek[machty]trek][machty[trek]machty]'); runTask(() => set(this.context, 'committer1', { name: 'krisselden' })); - this.assertText( - 'chancancode[krisselden[machty]krisselden]chancancode[machty[krisselden]machty]chancancode' - ); + this.assertText('[krisselden[machty]krisselden][machty[krisselden]machty]'); runTask(() => { set(this.context, 'committer1.name', 'wycats'); set(this.context, 'committer2', { name: 'rwjblue' }); }); - this.assertText( - 'chancancode[wycats[rwjblue]wycats]chancancode[rwjblue[wycats]rwjblue]chancancode' - ); + this.assertText('[wycats[rwjblue]wycats][rwjblue[wycats]rwjblue]'); runTask(() => { set(this.context, 'name', 'ebryn'); @@ -393,7 +372,7 @@ moduleFor( set(this.context, 'committer2', { name: 'machty' }); }); - this.assertText('ebryn[trek[machty]trek]ebryn[machty[trek]machty]ebryn'); + this.assertText('[trek[machty]trek][machty[trek]machty]'); } } ); diff --git a/packages/@ember/-internals/metal/lib/property_get.ts b/packages/@ember/-internals/metal/lib/property_get.ts index 7d6d1183c4c..96ebda31109 100644 --- a/packages/@ember/-internals/metal/lib/property_get.ts +++ b/packages/@ember/-internals/metal/lib/property_get.ts @@ -4,13 +4,7 @@ import { isEmberArray, setProxy, symbol } from '@ember/-internals/utils'; import { assert } from '@ember/debug'; import { DEBUG } from '@glimmer/env'; -import { - consumeTag, - deprecateMutationsInTrackingTransaction, - isTracking, - tagFor, - track, -} from '@glimmer/validator'; +import { consumeTag, isTracking, tagFor, track } from '@glimmer/validator'; import { isPath } from './path_cache'; export const PROXY_CONTENT = symbol('PROXY_CONTENT'); @@ -118,13 +112,7 @@ export function _getProp(obj: object, keyName: string) { !(keyName in obj) && typeof (obj as MaybeHasUnknownProperty).unknownProperty === 'function' ) { - if (DEBUG) { - deprecateMutationsInTrackingTransaction!(() => { - value = (obj as MaybeHasUnknownProperty).unknownProperty!(keyName); - }); - } else { - value = (obj as MaybeHasUnknownProperty).unknownProperty!(keyName); - } + value = (obj as MaybeHasUnknownProperty).unknownProperty!(keyName); } if (isTracking()) { diff --git a/packages/@ember/-internals/metal/tests/tracked/validation_test.js b/packages/@ember/-internals/metal/tests/tracked/validation_test.js index 1aa090cd903..47e5ba1a231 100644 --- a/packages/@ember/-internals/metal/tests/tracked/validation_test.js +++ b/packages/@ember/-internals/metal/tests/tracked/validation_test.js @@ -378,25 +378,6 @@ moduleFor( }, /You attempted to update `value` on `EmberObject`, but it had already been used previously in the same computation/); } - ['@test gives helpful deprecation when a tracked property is mutated after access within unknownProperty within an autotracking transaction']() { - class EmberObject { - @tracked foo; - - unknownProperty() { - this.foo; - this.foo = 123; - } - } - - let obj = new EmberObject(); - - expectDeprecation(() => { - track(() => { - get(obj, 'bar'); - }); - }, /You attempted to update `foo` on `EmberObject`, but it had already been used previously in the same computation/); - } - ['@test get() does not entangle in the autotracking stack until after retrieving the value']( assert ) { diff --git a/tests/docs/expected.js b/tests/docs/expected.js index 16c014156a2..fe34722c264 100644 --- a/tests/docs/expected.js +++ b/tests/docs/expected.js @@ -8,7 +8,6 @@ module.exports = { 'LOG_VERSION', '[]', '_APPLICATION_TEMPLATE_WRAPPER', - '_DISABLE_PROPERTY_FALLBACK_DEPRECATION', '_DEBUG_RENDER_TREE', '_DEFAULT_ASYNC_OBSERVERS', '_RERENDER_LOOP_LIMIT', diff --git a/tests/node/app-boot-test.js b/tests/node/app-boot-test.js index ae040dd4559..331e2b9126e 100644 --- a/tests/node/app-boot-test.js +++ b/tests/node/app-boot-test.js @@ -16,7 +16,7 @@ QUnit.module('App Boot', function (hooks) { this.template( 'components/root-component', "\ -

Hello {{#if hasExistence}}{{location}}{{/if}}

\ +

Hello {{#if this.hasExistence}}{{this.location}}{{/if}}

\
{{component 'foo-bar'}}
\ " ); @@ -57,7 +57,7 @@ QUnit.module('App Boot', function (hooks) { this.route('photos'); }); - this.template('application', '

{{{title}}}

'); + this.template('application', '

{{{this.title}}}

'); this.controller('application', { title: 'Hello world', }); diff --git a/tests/node/component-rendering-test.js b/tests/node/component-rendering-test.js index 2d23b4f9a90..c9398f3707f 100644 --- a/tests/node/component-rendering-test.js +++ b/tests/node/component-rendering-test.js @@ -12,7 +12,7 @@ QUnit.module('Components can be rendered without a DOM dependency', function (ho QUnit.test('Component with dynamic value', function (assert) { this.set('location', 'World'); - let html = this.render('

Hello {{location}}

'); + let html = this.render('

Hello {{this.location}}

'); assert.ok(html.match(/

Hello World<\/h1>/)); }); diff --git a/tests/node/visit-test.js b/tests/node/visit-test.js index 517542483f3..2814b298d59 100644 --- a/tests/node/visit-test.js +++ b/tests/node/visit-test.js @@ -51,7 +51,7 @@ QUnit.module('Ember.Application - visit() Integration Tests', function (hooks) { this.template('application', '

Hello world

\n{{outlet}}'); this.template('a', '

Welcome to {{x-foo page="A"}}

'); this.template('b', '

{{x-foo page="B"}}

'); - this.template('components/x-foo', 'Page {{page}}'); + this.template('components/x-foo', 'Page {{this.page}}'); let initCalled = false; let didInsertElementCalled = false; @@ -135,7 +135,7 @@ QUnit.module('Ember.Application - visit() Integration Tests', function (hooks) { }); QUnit.test('FastBoot: attributes are sanitized', function (assert) { - this.template('application', ''); + this.template('application', ''); this.controller('application', { test: 'javascript:alert("hello")', diff --git a/yarn.lock b/yarn.lock index 4c91962f553..2dfdfb9c456 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2341,52 +2341,52 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@glimmer/compiler@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.80.2.tgz#730001221f7240709f5952f30427f2352aa8b05d" - integrity sha512-oWl0A3lvGjlArlYAosUQStCAgboCOaf7GZCJ/A3cGCuy1BlP/pFCBFkgG60SODJwr+zeJLRAh0adroaisH66SA== - dependencies: - "@glimmer/interfaces" "0.80.2" - "@glimmer/syntax" "0.80.2" - "@glimmer/util" "0.80.2" - "@glimmer/wire-format" "0.80.2" +"@glimmer/compiler@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.83.1.tgz#d6b7d22a95c99be19959e7c41cd95eceda54d970" + integrity sha512-7Ou4cTVfQjsAklFcZl3nMMTvDQ9P3DH9iOMM7q/Ezpu/fM3fDdYofywmBOi7hHbXCxtfvj4MhLlMlMokFrM32Q== + dependencies: + "@glimmer/interfaces" "0.83.1" + "@glimmer/syntax" "0.83.1" + "@glimmer/util" "0.83.1" + "@glimmer/wire-format" "0.83.1" "@simple-dom/interface" "^1.4.0" -"@glimmer/destroyable@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/destroyable/-/destroyable-0.80.2.tgz#da199504eb91cf2513f2c3ac6d0d899d83b74878" - integrity sha512-RdquK8byB/uvwEIzUxXL3dX0wnPW6yLooBmrR/QKOyiP0f23DdLLdT2tc7etITkF0NOFjtRApFr3Kwxm2vsHfA== +"@glimmer/destroyable@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/destroyable/-/destroyable-0.83.1.tgz#ccf912bf1d07b1ad47eaf7387af1ee742963470f" + integrity sha512-QPTKAg0UToCxtcq+AjhdsSZb4HhYn1CTJ2b2/5Qe9InRCPpnwFsMpLKModCLi3VRKtkBGBprxwP/ht5Ma7ok1A== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/global-context" "0.80.2" - "@glimmer/interfaces" "0.80.2" - "@glimmer/util" "0.80.2" + "@glimmer/global-context" "0.83.1" + "@glimmer/interfaces" "0.83.1" + "@glimmer/util" "0.83.1" -"@glimmer/encoder@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.80.2.tgz#30dd5aed6b56362388a2e3ed1069a318c76132ca" - integrity sha512-16D7VVy2Riqc2+q/374auzcJ/KpIIxEactAkPlPUgexwzUEuJSPcg1hcEh0medwPQlNn1YkL+5YFPh9zFUgoWQ== +"@glimmer/encoder@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.83.1.tgz#6c1619462a46980551d6a74f19266230a04eeb59" + integrity sha512-PADybj7+khwSyfcvRpmXpYnfZDsSmw/NpSqtCLolAvtnn7uyFfmKirTc89AWi/9iPtbqfe2XtWv3Dz/R5RnAAA== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.80.2" - "@glimmer/vm" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/vm" "0.83.1" "@glimmer/env@0.1.7", "@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/global-context@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.80.2.tgz#aaa389f1055a056d0f911a7e9d101cbcc06f133b" - integrity sha512-XskcLaDUoXJYa/RLhkFNZSywzLoeMDQk6UTxvWrCtfE8hKXfeKSKq1FKyYenzB3SMF2ESX5yHOSd/xKBIYVypg== +"@glimmer/global-context@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/global-context/-/global-context-0.83.1.tgz#3e2d97f10ff623bcfb5b7dc29a858d546a6c6d66" + integrity sha512-OwlgqpbOJU73EjZOZdftab0fKbtdJ4x/QQeJseL9cvaAUiK3+w52M5ONFxD1T/yPBp2Mf7NCYqA/uL8tRbzY2A== dependencies: "@glimmer/env" "^0.1.7" -"@glimmer/interfaces@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.80.2.tgz#3937610ada436102ff9f92a6ea89e6d4531c1432" - integrity sha512-s5xhjoRNwp2fJty8/LpOY2qRLRlevYZFxEDD+Jl44YTRdU68DZJdSYd0cBknp1qDSi+C74zIg7S5cGwS3ulkUw== +"@glimmer/interfaces@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.83.1.tgz#fb16f5f683ddc55f130887b6141f58c0751350fe" + integrity sha512-rjAztghzX97v8I4rk3+NguM3XGYcFjc/GbJ8qrEj19KF2lUDoDBW1sB7f0tov3BD5HlrGXei/vOh4+DHfjeB5w== dependencies: "@simple-dom/interface" "^1.4.0" @@ -2395,140 +2395,140 @@ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.78.2.tgz#bca5f666760ce98345e87c5b3e37096e772cb2de" integrity sha512-0S6TWOOd0fzLLysw1pWZN0TgasaHmYs1Sjz9Til1mTByIXU1S+1rhdyr2veSQPO/aRjPuEQyKXZQHvx23Zax6w== -"@glimmer/manager@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/manager/-/manager-0.80.2.tgz#739d9766a21d62965bb322f5c57a7e984af35a1f" - integrity sha512-9Fz+R67cqXeDkFBBfag3HNE4bla0Y2BCmzo/VSPzt6dI/2qzWl+MTDyiu85RffAnMZgXuqMUElizcsuq3hWERg== +"@glimmer/manager@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/manager/-/manager-0.83.1.tgz#07e02a40f89cba3eee86b05a2557daa2ef151f6f" + integrity sha512-w3JXvtB/S3Bbiv/zIoUP9QmIliIPlmKrF9r4aVeyq24NIE7Dig/R+7/2pkEbqS3nOWizIRswEPqmvWRpMCilmA== dependencies: - "@glimmer/destroyable" "0.80.2" + "@glimmer/destroyable" "0.83.1" "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.80.2" - "@glimmer/reference" "0.80.2" - "@glimmer/util" "0.80.2" - "@glimmer/validator" "0.80.2" - -"@glimmer/node@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.80.2.tgz#651055876ca4c95fc5159f7918da1ea715e222e6" - integrity sha512-Urtey5+Jla2sjJSeYnjIYii9pei7bLr/8dPxbVkmJEh8oK3YIcz7YNymFjXxce2Vxdnj1A1KussGzBcK0FP3pA== - dependencies: - "@glimmer/interfaces" "0.80.2" - "@glimmer/runtime" "0.80.2" - "@glimmer/util" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/reference" "0.83.1" + "@glimmer/util" "0.83.1" + "@glimmer/validator" "0.83.1" + +"@glimmer/node@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.83.1.tgz#a9c87ee9196ab317b9221f4cfe3443a83da447d5" + integrity sha512-qog6RV0iLenedxBU2ItLiukP9AP9Wtm/eJK/UbzYHVJjE/9ty4IcrIMHPjs56cGdHfRJO7G9E5XcEBy3W0bKZg== + dependencies: + "@glimmer/interfaces" "0.83.1" + "@glimmer/runtime" "0.83.1" + "@glimmer/util" "0.83.1" "@simple-dom/document" "^1.4.0" "@simple-dom/interface" "^1.4.0" -"@glimmer/opcode-compiler@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.80.2.tgz#be6fe3d0c7e82e1d903a9b594b017236c035018b" - integrity sha512-STGh/F8NaYxDVG6rPM97t/A9fnOpU+uK0BQEhRLsx/iGvq8PyE966p4LKyRAbmbuFTLhbZE7E/68Y0k0eWQc6Q== +"@glimmer/opcode-compiler@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.83.1.tgz#22aa25711326a2d9e02f618ea01788349303d15a" + integrity sha512-fkkRRp+Xoe8khGqHg4DNtT6IDgxxozo5ZZiy6eG7YtDAOx2ZGO3K3rZrp7v148T0q+u47Z++aotS5z4pakFK/A== dependencies: - "@glimmer/encoder" "0.80.2" + "@glimmer/encoder" "0.83.1" "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.80.2" - "@glimmer/reference" "0.80.2" - "@glimmer/util" "0.80.2" - "@glimmer/vm" "0.80.2" - "@glimmer/wire-format" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/reference" "0.83.1" + "@glimmer/util" "0.83.1" + "@glimmer/vm" "0.83.1" + "@glimmer/wire-format" "0.83.1" -"@glimmer/owner@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/owner/-/owner-0.80.2.tgz#34cf1b70ab3f061d8675c941cecaf3fcc319af3b" - integrity sha512-jEwaRA0oEEPaJDHs/5MlWm3fEmhN8qp3NJlLYs5Duviks+tEhtmB1zr3Jg+7TAMrJloRo9iadt4TrZzezgRAIQ== +"@glimmer/owner@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/owner/-/owner-0.83.1.tgz#b55261035d8a62dc26c9243e5a521c615dea83d1" + integrity sha512-OrYPJsn/BZ3Bij17Nnno+GuBgLh7z31DRaRZEZbPCZ1i6FyZMOI1qqZo3taOeOTUTKxLaNhxG5BqyiJPFwxUyA== dependencies: - "@glimmer/util" "0.80.2" + "@glimmer/util" "0.83.1" -"@glimmer/program@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.80.2.tgz#dc1a582c564f735f4021d3eb6c54047c237c264f" - integrity sha512-MpPJgeCc/yj9uawG4kqBxzVOuJNky3WB9g3Cm21k0Z+YACdguC2UjXUoA9PvjfrLEj+7eajE0wQ+QTbztOwVtQ== +"@glimmer/program@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.83.1.tgz#2a589f369ce06a37b7a7ec7fd550db708ddc6ee5" + integrity sha512-imQx5s6P69simF8oBtruX9Pn9j+aHt6MiAehTiWq+c8kvSsTZnQlYVHCQWfczDRrOcEOb2FvIuuo7C3+TcsKNQ== dependencies: - "@glimmer/encoder" "0.80.2" + "@glimmer/encoder" "0.83.1" "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.80.2" - "@glimmer/manager" "0.80.2" - "@glimmer/opcode-compiler" "0.80.2" - "@glimmer/util" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/manager" "0.83.1" + "@glimmer/opcode-compiler" "0.83.1" + "@glimmer/util" "0.83.1" -"@glimmer/reference@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.80.2.tgz#db14f64592bd7f505d47527eacc298a1ba7f8ea5" - integrity sha512-uXRc912/kAoXgNu2MIWcqARyMUq+h+N82LiNXg0mYo/SYaxT1ag3uVw6nM82ou9ii0lLWKY1fP/4knuSwu0rbA== +"@glimmer/reference@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.83.1.tgz#0345b95431b5bb19843b308e6311d1ef81e36192" + integrity sha512-BThEwDlMkJB1WBPWDrww+VxgGyDbwxh5FFPvGhkovvCZnCb7fAMUCt9pi6CUZtviugkWOBFtE9P4eZZbOLkXeg== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.80.2" - "@glimmer/interfaces" "0.80.2" - "@glimmer/util" "0.80.2" - "@glimmer/validator" "0.80.2" + "@glimmer/global-context" "0.83.1" + "@glimmer/interfaces" "0.83.1" + "@glimmer/util" "0.83.1" + "@glimmer/validator" "0.83.1" -"@glimmer/runtime@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.80.2.tgz#14895a6d2a0c7214163a21579a7980f8784dfd6c" - integrity sha512-7g12Eyo/fQpKICXXW/+cQCA/mYr4ugOrM7YiZSYtAdm1gIQqQFbxnod2iLgFgISDqRHf8cKTsuZw7+yeIwQNIA== +"@glimmer/runtime@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.83.1.tgz#fe285189b0ec51e00e558204b53ea761690c620f" + integrity sha512-el1SxV6SIq3bEB9h0Tz2RWy9AHpEZOjmeyf/cu4sneoDQi3POURJZWf1ptxBs62A0Ae2Rq32SFtuYte/THucQQ== dependencies: - "@glimmer/destroyable" "0.80.2" + "@glimmer/destroyable" "0.83.1" "@glimmer/env" "0.1.7" - "@glimmer/global-context" "0.80.2" - "@glimmer/interfaces" "0.80.2" + "@glimmer/global-context" "0.83.1" + "@glimmer/interfaces" "0.83.1" "@glimmer/low-level" "0.78.2" - "@glimmer/owner" "0.80.2" - "@glimmer/program" "0.80.2" - "@glimmer/reference" "0.80.2" - "@glimmer/util" "0.80.2" - "@glimmer/validator" "0.80.2" - "@glimmer/vm" "0.80.2" - "@glimmer/wire-format" "0.80.2" + "@glimmer/owner" "0.83.1" + "@glimmer/program" "0.83.1" + "@glimmer/reference" "0.83.1" + "@glimmer/util" "0.83.1" + "@glimmer/validator" "0.83.1" + "@glimmer/vm" "0.83.1" + "@glimmer/wire-format" "0.83.1" "@simple-dom/interface" "^1.4.0" -"@glimmer/syntax@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.80.2.tgz#2123a0c28c9a9d39b42392aaa3df8b7f3706645b" - integrity sha512-30H1RtmjCW5miO4codNPWgyO0UOeBaDuc7ohSuG0E85djh444ImfJwlLE/cW6C4pLb38OeG8vEPODnppWV3XUg== +"@glimmer/syntax@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.83.1.tgz#7e18dd445871c157ba0281f12a4fbf316fa49b41" + integrity sha512-n3vEd0GtjtgkOsd2gqkSimp8ecqq5KrHyana/s1XJZvVAPD5rMWT9WvAVWG8XAktns8BxjwLIUoj/vkOfA+eHg== dependencies: - "@glimmer/interfaces" "0.80.2" - "@glimmer/util" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/util" "0.83.1" "@handlebars/parser" "~2.0.0" - simple-html-tokenizer "^0.5.10" + simple-html-tokenizer "^0.5.11" -"@glimmer/util@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.80.2.tgz#a1dbb11575255a478c0ba161d521cdbad8c3410d" - integrity sha512-GniMILqLJ+dWiwmO/UOBPCqwMYEPYoFW3e/mInUbKn0YBenf/M6hJhnPI7Z11NpObknq3s5nNLkDcmR3gdFmHA== +"@glimmer/util@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.83.1.tgz#cc7511b03164d658cf6e3262fce5a0fcb82edceb" + integrity sha512-amvjtl9dvrkxsoitXAly9W5NUaLIE3A2J2tWhBWIL1Z6DOFotfX7ytIosOIcPhJLZCtiXPHzMutQRv0G/MSMsA== dependencies: "@glimmer/env" "0.1.7" - "@glimmer/interfaces" "0.80.2" + "@glimmer/interfaces" "0.83.1" "@simple-dom/interface" "^1.4.0" -"@glimmer/validator@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.80.2.tgz#4ac1faf608913c88d0dab54a37068bbdf6edc62a" - integrity sha512-m5K0IxStWHM5vJbJDDXhnr2LGAnC469RclA6jazbtl3fVHEg5njzsQYUIfRTxFpgPK3QEyRJrR6r3PG9RCMnDw== +"@glimmer/validator@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.83.1.tgz#7578cb2284f728c8e9302c51fc6e7660b570ac54" + integrity sha512-LaILSNnQgDHZpaUsfjVndbS1JfVn0xdTlJdFJblPbhoVklOBSReZVekens3EQ6xOr3BC612sRm1hBnEPixOY6A== dependencies: "@glimmer/env" "^0.1.7" - "@glimmer/global-context" "0.80.2" + "@glimmer/global-context" "0.83.1" -"@glimmer/vm-babel-plugins@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/vm-babel-plugins/-/vm-babel-plugins-0.80.2.tgz#6e3b6b0ec06994084b44fca1f19c20fd945df454" - integrity sha512-ufdz76tVz3TivS8Bb92n/v6yXNX8zgREDwR3ju45ZO48yWexySllUBFOvwCAmPIoHSQGq8LyIwJGESIJLacr6A== +"@glimmer/vm-babel-plugins@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/vm-babel-plugins/-/vm-babel-plugins-0.83.1.tgz#5da67e3d84199352bbf0c5bc3f1ce71bf2b2ddfc" + integrity sha512-Cz0e/SrOo1gSNA0PXZRYI1WGmlQSAQCpiERBlXjjpwoLgiqx2kvsjfFiCUC/CfpsO6WN6wuPMeTFGJuhSSeL5A== dependencies: babel-plugin-debug-macros "^0.3.4" -"@glimmer/vm@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.80.2.tgz#33f875b0b8e2cc5a6c3d5c1548dbbc333631f6ac" - integrity sha512-5dk76zuc2wRR6L2FVHJIX0MQ3AuawXoO2JW/i5nP8wu3r3jXXrvUbtwtR2DCq6lasmyjk5pygtf+DSaawrezqg== +"@glimmer/vm@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.83.1.tgz#ee9611d8a13e7b5923721258600c6085fe165d0b" + integrity sha512-mZguahHZJKWwlcU0n5U7mcpxwcIlogHkecYyOsOPPZe2mnAID/8xmZZcFlRAShA/Z98mo4S0WLE6sY/jJ9M1WA== dependencies: - "@glimmer/interfaces" "0.80.2" - "@glimmer/util" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/util" "0.83.1" -"@glimmer/wire-format@0.80.2": - version "0.80.2" - resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.80.2.tgz#ae7c7bd2e2a56aca6110b6d7048dae6ac99d340e" - integrity sha512-UE7P2AJNs9snKr8LRd4LDZYRmOybYJodUl4vfdntmBeYHiGNWWKpft1tgg5IDdBgmYPvoOEaRQUoIkdMhMT6aA== +"@glimmer/wire-format@0.83.1": + version "0.83.1" + resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.83.1.tgz#a36f0b80d9cf9f57498bfea5ddbf6d118f96475d" + integrity sha512-2WZ7c7tqHXDrznnFFguw7QJOgUUglnHEHzpSqPFvw1S46NecFMG0v9Q7LQRjeCKH+cwExeD6LbbF2dpKIhoJcg== dependencies: - "@glimmer/interfaces" "0.80.2" - "@glimmer/util" "0.80.2" + "@glimmer/interfaces" "0.83.1" + "@glimmer/util" "0.83.1" "@handlebars/parser@~2.0.0": version "2.0.0" @@ -10533,10 +10533,10 @@ simple-dom@^1.4.0: "@simple-dom/serializer" "^1.4.0" "@simple-dom/void-map" "^1.4.0" -simple-html-tokenizer@^0.5.10: - version "0.5.10" - resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.10.tgz#0843e4f00c9677f1c81e3dfeefcee0a4aca8e5d0" - integrity sha512-1DHMUmvUOGuUZ9/+cX/+hOhWhRD5dEw6lodn8WuV+T+cQ31hhBcCu1dcDsNotowi4mMaNhrLyKoS+DtB81HdDA== +simple-html-tokenizer@^0.5.11: + version "0.5.11" + resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.5.11.tgz#4c5186083c164ba22a7b477b7687ac056ad6b1d9" + integrity sha512-C2WEK/Z3HoSFbYq8tI7ni3eOo/NneSPRoPpcM7WdLjFOArFuyXEjAoCdOC3DgMfRyziZQ1hCNR4mrNdWEvD0og== slash@^3.0.0: version "3.0.0"