From 7d8c3e6050a16e125578441f49cafeba8d426d46 Mon Sep 17 00:00:00 2001
From: Rich Glazerman
Date: Fri, 26 Apr 2019 11:43:48 -0400
Subject: [PATCH 0001/1405] Make hasListeners public
Allow for determining whether listeners exist on an object before calling removeListeners.
Method already exists, just making it public.
---
packages/@ember/-internals/metal/lib/events.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/@ember/-internals/metal/lib/events.ts b/packages/@ember/-internals/metal/lib/events.ts
index 0dd230bc06e..636242616e8 100644
--- a/packages/@ember/-internals/metal/lib/events.ts
+++ b/packages/@ember/-internals/metal/lib/events.ts
@@ -156,7 +156,7 @@ export function sendEvent(
}
/**
- @private
+ @public
@method hasListeners
@static
@for @ember/object/events
From 5360550e9117f78a70bb2d5db5af30c879863d70 Mon Sep 17 00:00:00 2001
From: Eric White
Date: Wed, 14 Aug 2019 16:49:59 -0400
Subject: [PATCH 0002/1405] Fix #18268
---
packages/@ember/-internals/routing/lib/system/route.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/@ember/-internals/routing/lib/system/route.ts b/packages/@ember/-internals/routing/lib/system/route.ts
index fd15750a08d..bed3f7370ef 100644
--- a/packages/@ember/-internals/routing/lib/system/route.ts
+++ b/packages/@ember/-internals/routing/lib/system/route.ts
@@ -307,7 +307,8 @@ class Route extends EmberObject implements IRoute {
@property _optionsForQueryParam
*/
_optionsForQueryParam(qp: QueryParam) {
- return get(this, `queryParams.${qp.urlKey}`) || get(this, `queryParams.${qp.prop}`) || {};
+ const queryParams = get(this, 'queryParams')
+ return get(queryParams, qp.urlKey) || get(queryParams, qp.prop) || queryParams[qp.urlKey] || queryParams[qp.prop] || {}
}
/**
From 786ad9b6f5387a6e818244110b8c8e2377040cb9 Mon Sep 17 00:00:00 2001
From: Eric White
Date: Wed, 14 Aug 2019 17:17:30 -0400
Subject: [PATCH 0003/1405] Write test for _optionsForQueryParam
---
.../routing/tests/system/route_test.js | 28 +++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/packages/@ember/-internals/routing/tests/system/route_test.js b/packages/@ember/-internals/routing/tests/system/route_test.js
index 870db3fbfea..5aa26d8ad12 100644
--- a/packages/@ember/-internals/routing/tests/system/route_test.js
+++ b/packages/@ember/-internals/routing/tests/system/route_test.js
@@ -163,6 +163,34 @@ moduleFor(
runDestroy(owner);
}
+ ["@test _optionsForQueryParam should work with nested properties"](assert) {
+ let route = EmberRoute.extend({
+ queryParams: {
+ 'nested.foo': {
+ // By default, controller query param properties don't
+ // cause a full transition when they are changed, but
+ // rather only cause the URL to update. Setting
+ // `refreshModel` to true will cause an "in-place"
+ // transition to occur, whereby the model hooks for
+ // this route (and any child routes) will re-fire, allowing
+ // you to reload models (e.g., from the server) using the
+ // updated query param values.
+ refreshModel: true,
+
+ // By default, the query param URL key is the same name as
+ // the controller property name. Use `as` to specify a
+ // different URL key.
+ as: 'foobar'
+ }
+ }
+ }).create();
+
+ assert.strictEqual(route._optionsForQueryParam({
+ prop: 'nested.foo',
+ urlKey: 'foobar'
+ }), route.queryParams['nested.foo']);
+ }
+
["@test modelFor doesn't require the routerMicrolib"](assert) {
let route = EmberRoute.create({
_router: { _routerMicrolib: null },
From 7f8bc8f248d1cfa07bd472ac1a9a5a1945486086 Mon Sep 17 00:00:00 2001
From: Eric White
Date: Thu, 15 Aug 2019 10:08:12 -0400
Subject: [PATCH 0004/1405] fix linting
---
packages/@ember/-internals/routing/lib/system/route.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/@ember/-internals/routing/lib/system/route.ts b/packages/@ember/-internals/routing/lib/system/route.ts
index bed3f7370ef..fb5e6fc5926 100644
--- a/packages/@ember/-internals/routing/lib/system/route.ts
+++ b/packages/@ember/-internals/routing/lib/system/route.ts
@@ -308,7 +308,7 @@ class Route extends EmberObject implements IRoute {
*/
_optionsForQueryParam(qp: QueryParam) {
const queryParams = get(this, 'queryParams')
- return get(queryParams, qp.urlKey) || get(queryParams, qp.prop) || queryParams[qp.urlKey] || queryParams[qp.prop] || {}
+ return get(queryParams, qp.urlKey) || get(queryParams, qp.prop) || queryParams[qp.urlKey] || queryParams[qp.prop] || {}
}
/**
From f1303e2fb0ca4f4bb259fff26b1096f143def38a Mon Sep 17 00:00:00 2001
From: Eric White
Date: Thu, 15 Aug 2019 10:31:20 -0400
Subject: [PATCH 0005/1405] Actually fix linting
---
.../-internals/routing/lib/system/route.ts | 10 ++++++++--
.../routing/tests/system/route_test.js | 19 +++++++++++--------
2 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/packages/@ember/-internals/routing/lib/system/route.ts b/packages/@ember/-internals/routing/lib/system/route.ts
index fb5e6fc5926..404e435d2aa 100644
--- a/packages/@ember/-internals/routing/lib/system/route.ts
+++ b/packages/@ember/-internals/routing/lib/system/route.ts
@@ -307,8 +307,14 @@ class Route extends EmberObject implements IRoute {
@property _optionsForQueryParam
*/
_optionsForQueryParam(qp: QueryParam) {
- const queryParams = get(this, 'queryParams')
- return get(queryParams, qp.urlKey) || get(queryParams, qp.prop) || queryParams[qp.urlKey] || queryParams[qp.prop] || {}
+ const queryParams = get(this, 'queryParams');
+ return (
+ get(queryParams, qp.urlKey) ||
+ get(queryParams, qp.prop) ||
+ queryParams[qp.urlKey] ||
+ queryParams[qp.prop] ||
+ {}
+ );
}
/**
diff --git a/packages/@ember/-internals/routing/tests/system/route_test.js b/packages/@ember/-internals/routing/tests/system/route_test.js
index 5aa26d8ad12..d0b828a923b 100644
--- a/packages/@ember/-internals/routing/tests/system/route_test.js
+++ b/packages/@ember/-internals/routing/tests/system/route_test.js
@@ -163,7 +163,7 @@ moduleFor(
runDestroy(owner);
}
- ["@test _optionsForQueryParam should work with nested properties"](assert) {
+ ['@test _optionsForQueryParam should work with nested properties'](assert) {
let route = EmberRoute.extend({
queryParams: {
'nested.foo': {
@@ -180,15 +180,18 @@ moduleFor(
// By default, the query param URL key is the same name as
// the controller property name. Use `as` to specify a
// different URL key.
- as: 'foobar'
- }
- }
+ as: 'foobar',
+ },
+ },
}).create();
- assert.strictEqual(route._optionsForQueryParam({
- prop: 'nested.foo',
- urlKey: 'foobar'
- }), route.queryParams['nested.foo']);
+ assert.strictEqual(
+ route._optionsForQueryParam({
+ prop: 'nested.foo',
+ urlKey: 'foobar',
+ }),
+ route.queryParams['nested.foo']
+ );
}
["@test modelFor doesn't require the routerMicrolib"](assert) {
From 512e2b0a34f3f2be1edaed20bdf37067ace01f0f Mon Sep 17 00:00:00 2001
From: bekzod
Date: Wed, 6 Feb 2019 20:36:07 +0500
Subject: [PATCH 0006/1405] [BUGFIX] avoid tampering `queryParam` argument in
RouterService#isActive
---
.../-internals/routing/lib/services/router.ts | 3 +++
.../router_service_test/isActive_test.js | 25 +++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/packages/@ember/-internals/routing/lib/services/router.ts b/packages/@ember/-internals/routing/lib/services/router.ts
index 60b23bd4430..4079bb1f484 100644
--- a/packages/@ember/-internals/routing/lib/services/router.ts
+++ b/packages/@ember/-internals/routing/lib/services/router.ts
@@ -1,6 +1,7 @@
import { Evented } from '@ember/-internals/runtime';
import { assert } from '@ember/debug';
import { readOnly } from '@ember/object/computed';
+import { assign } from '@ember/polyfills';
import Service from '@ember/service';
import { DEBUG } from '@glimmer/env';
import { Transition } from 'router_js';
@@ -319,6 +320,7 @@ export default class RouterService extends Service {
let hasQueryParams = Object.keys(queryParams).length > 0;
if (hasQueryParams) {
+ queryParams = assign({}, queryParams);
this._router._prepareQueryParams(
// UNSAFE: casting `routeName as string` here encodes the existing
// assumption but may be wrong: `extractRouteArgs` correctly returns it
@@ -334,6 +336,7 @@ export default class RouterService extends Service {
queryParams as QueryParam,
true /* fromRouterService */
);
+
return shallowEqual(queryParams, routerMicrolib.state!.queryParams);
}
diff --git a/packages/ember/tests/routing/router_service_test/isActive_test.js b/packages/ember/tests/routing/router_service_test/isActive_test.js
index 0fec62fcaa2..d638ea1d1c4 100644
--- a/packages/ember/tests/routing/router_service_test/isActive_test.js
+++ b/packages/ember/tests/routing/router_service_test/isActive_test.js
@@ -105,5 +105,30 @@ moduleFor(
);
});
}
+
+ ['@test RouterService#isActive does not alter query params hash'](assert) {
+ assert.expect(3);
+
+ this.add(
+ 'controller:parent.child',
+ Controller.extend({
+ queryParams: ['sort', 'page'],
+ sort: 'ASC',
+ page: 1,
+ })
+ );
+
+ let qp = this.buildQueryParams({ sort: 'ascending' });
+
+ return this.visit('/')
+ .then(() => {
+ return this.routerService.transitionTo('parent.child', qp);
+ })
+ .then(() => {
+ assert.ok(this.routerService.isActive('parent.child', qp));
+ assert.ok(this.routerService.isActive('parent.child', qp)); // using same qp second time should not fail
+ assert.deepEqual(qp.queryParams, { sort: 'ascending' });
+ });
+ }
}
);
From 77c03bedb91e9934e7e8c069737e3899293dd46b Mon Sep 17 00:00:00 2001
From: Chris Ng
Date: Thu, 28 May 2020 17:38:34 -0400
Subject: [PATCH 0007/1405] [FEATURE deprecate-get-with-default] Deprecate
getWithDefault based on RFC 0554
---
.../-internals/metal/lib/property_get.ts | 12 +-
.../metal/tests/accessors/get_test.js | 120 +++++++++---------
2 files changed, 74 insertions(+), 58 deletions(-)
diff --git a/packages/@ember/-internals/metal/lib/property_get.ts b/packages/@ember/-internals/metal/lib/property_get.ts
index feb503394f9..b4413397525 100644
--- a/packages/@ember/-internals/metal/lib/property_get.ts
+++ b/packages/@ember/-internals/metal/lib/property_get.ts
@@ -2,7 +2,7 @@
@module @ember/object
*/
import { HAS_NATIVE_PROXY, isEmberArray, isProxy, symbol } from '@ember/-internals/utils';
-import { assert } from '@ember/debug';
+import { assert, deprecate } from '@ember/debug';
import { DEBUG } from '@glimmer/env';
import {
consumeTag,
@@ -181,12 +181,22 @@ export function _getPath(root: T, path: string | string[]): an
@param {Object} defaultValue The value to return if the property value is undefined
@return {Object} The property value or the defaultValue.
@public
+ @deprecated
*/
export function getWithDefault>(
root: T,
key: K,
defaultValue: T[K]
): T[K] {
+ deprecate(
+ 'Using getWithDefault has been deprecated. Instead, consider using Ember get and explicitly checking for undefined.',
+ false,
+ {
+ id: 'ember-metal.get-with-default',
+ until: '4.0.0',
+ }
+ );
+
let value = get(root, key);
if (value === undefined) {
diff --git a/packages/@ember/-internals/metal/tests/accessors/get_test.js b/packages/@ember/-internals/metal/tests/accessors/get_test.js
index 9765be3872a..30596be0db0 100644
--- a/packages/@ember/-internals/metal/tests/accessors/get_test.js
+++ b/packages/@ember/-internals/metal/tests/accessors/get_test.js
@@ -207,35 +207,37 @@ moduleFor(
'getWithDefault',
class extends AbstractTestCase {
['@test should get arbitrary properties on an object'](assert) {
- let obj = {
- string: 'string',
- number: 23,
- boolTrue: true,
- boolFalse: false,
- nullValue: null,
- };
+ expectDeprecation(() => {
+ let obj = {
+ string: 'string',
+ number: 23,
+ boolTrue: true,
+ boolFalse: false,
+ nullValue: null,
+ };
- for (let key in obj) {
- if (!Object.prototype.hasOwnProperty.call(obj, key)) {
- continue;
+ for (let key in obj) {
+ if (!Object.prototype.hasOwnProperty.call(obj, key)) {
+ continue;
+ }
+ assert.equal(getWithDefault(obj, key, 'fail'), obj[key], key);
}
- assert.equal(getWithDefault(obj, key, 'fail'), obj[key], key);
- }
- obj = {
- undef: undefined,
- };
+ obj = {
+ undef: undefined,
+ };
- assert.equal(
- getWithDefault(obj, 'undef', 'default'),
- 'default',
- 'explicit undefined retrieves the default'
- );
- assert.equal(
- getWithDefault(obj, 'not-present', 'default'),
- 'default',
- 'non-present key retrieves the default'
- );
+ assert.equal(
+ getWithDefault(obj, 'undef', 'default'),
+ 'default',
+ 'explicit undefined retrieves the default'
+ );
+ assert.equal(
+ getWithDefault(obj, 'not-present', 'default'),
+ 'default',
+ 'non-present key retrieves the default'
+ );
+ }, /Using getWithDefault has been deprecated. Instead, consider using Ember get and explicitly checking for undefined./);
}
['@test should call unknownProperty if defined and value is undefined'](assert) {
@@ -253,24 +255,26 @@ moduleFor(
}
['@test if unknownProperty is present, it is called using getFromEmberMetal()/set()'](assert) {
- let obj = {
- unknownProperty(key) {
- if (key === 'foo') {
- assert.equal(key, 'foo', 'should pass key');
- return 'FOO';
- }
- },
- };
- assert.equal(
- getWithDefault(obj, 'foo', 'fail'),
- 'FOO',
- 'should return value from unknownProperty'
- );
- assert.equal(
- getWithDefault(obj, 'bar', 'default'),
- 'default',
- 'should convert undefined from unknownProperty into default'
- );
+ expectDeprecation(() => {
+ let obj = {
+ unknownProperty(key) {
+ if (key === 'foo') {
+ assert.equal(key, 'foo', 'should pass key');
+ return 'FOO';
+ }
+ },
+ };
+ assert.equal(
+ getWithDefault(obj, 'foo', 'fail'),
+ 'FOO',
+ 'should return value from unknownProperty'
+ );
+ assert.equal(
+ getWithDefault(obj, 'bar', 'default'),
+ 'default',
+ 'should convert undefined from unknownProperty into default'
+ );
+ }, /Using getWithDefault has been deprecated. Instead, consider using Ember get and explicitly checking for undefined./);
}
['@test if unknownProperty is present, it is called using accessors'](assert) {
@@ -320,23 +324,25 @@ moduleFor(
['@test (regression) watched properties on unmodified inherited objects should still return their original value'](
assert
) {
- let MyMixin = Mixin.create({
- someProperty: 'foo',
- propertyDidChange: observer('someProperty', () => {
- /* nothing to do */
- }),
- });
+ expectDeprecation(() => {
+ let MyMixin = Mixin.create({
+ someProperty: 'foo',
+ propertyDidChange: observer('someProperty', () => {
+ /* nothing to do */
+ }),
+ });
- let baseObject = MyMixin.apply({});
- let theRealObject = Object.create(baseObject);
+ let baseObject = MyMixin.apply({});
+ let theRealObject = Object.create(baseObject);
- assert.equal(
- getWithDefault(theRealObject, 'someProperty', 'fail'),
- 'foo',
- 'should return the set value, not false'
- );
+ assert.equal(
+ getWithDefault(theRealObject, 'someProperty', 'fail'),
+ 'foo',
+ 'should return the set value, not false'
+ );
- run(() => destroy(baseObject));
+ run(() => destroy(baseObject));
+ }, /Using getWithDefault has been deprecated. Instead, consider using Ember get and explicitly checking for undefined./);
}
['@test should respect prototypical inheritance when subclasses override CPs'](assert) {
From f2d836404616a942bdbd2a5c3818009f094fbd34 Mon Sep 17 00:00:00 2001
From: Chris Ng
Date: Thu, 28 May 2020 18:54:31 -0400
Subject: [PATCH 0008/1405] Add url for deprecate getWithDefault, Add
expectDeprecation for get_test and computed_test, Add docs for getWithDefault
in observable
---
.../-internals/metal/lib/property_get.ts | 1 +
.../metal/tests/tracked/get_test.js | 38 ++++++++++---------
.../runtime/lib/mixins/observable.js | 1 +
.../tests/system/object/computed_test.js | 6 ++-
4 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/packages/@ember/-internals/metal/lib/property_get.ts b/packages/@ember/-internals/metal/lib/property_get.ts
index b4413397525..4f891b6c3c2 100644
--- a/packages/@ember/-internals/metal/lib/property_get.ts
+++ b/packages/@ember/-internals/metal/lib/property_get.ts
@@ -194,6 +194,7 @@ export function getWithDefault {
+ let obj = createObj();
- for (let key in obj) {
- this.assert.equal(getWithDefault(obj, key, 'fail'), obj[key], key);
- }
+ for (let key in obj) {
+ this.assert.equal(getWithDefault(obj, key, 'fail'), obj[key], key);
+ }
- class Obj {
- @tracked undef = undefined;
- }
+ class Obj {
+ @tracked undef = undefined;
+ }
- let obj2 = new Obj();
+ let obj2 = new Obj();
- this.assert.equal(
- getWithDefault(obj2, 'undef', 'default'),
- 'default',
- 'explicit undefined retrieves the default'
- );
- this.assert.equal(
- getWithDefault(obj2, 'not-present', 'default'),
- 'default',
- 'non-present key retrieves the default'
- );
+ this.assert.equal(
+ getWithDefault(obj2, 'undef', 'default'),
+ 'default',
+ 'explicit undefined retrieves the default'
+ );
+ this.assert.equal(
+ getWithDefault(obj2, 'not-present', 'default'),
+ 'default',
+ 'non-present key retrieves the default'
+ );
+ }, /Using getWithDefault has been deprecated. Instead, consider using Ember get and explicitly checking for undefined./);
}
}
);
diff --git a/packages/@ember/-internals/runtime/lib/mixins/observable.js b/packages/@ember/-internals/runtime/lib/mixins/observable.js
index 06c8e59cf5b..840bda8f4ca 100644
--- a/packages/@ember/-internals/runtime/lib/mixins/observable.js
+++ b/packages/@ember/-internals/runtime/lib/mixins/observable.js
@@ -417,6 +417,7 @@ export default Mixin.create({
@param {Object} defaultValue The value to return if the property value is undefined
@return {Object} The property value or the defaultValue.
@public
+ @deprecated
*/
getWithDefault(keyName, defaultValue) {
return getWithDefault(this, keyName, defaultValue);
diff --git a/packages/@ember/-internals/runtime/tests/system/object/computed_test.js b/packages/@ember/-internals/runtime/tests/system/object/computed_test.js
index 03ed6291321..9eeecd27211 100644
--- a/packages/@ember/-internals/runtime/tests/system/object/computed_test.js
+++ b/packages/@ember/-internals/runtime/tests/system/object/computed_test.js
@@ -18,8 +18,10 @@ function K() {
function testWithDefault(assert, expect, x, y, z) {
assert.equal(get(x, y), expect);
- assert.equal(getWithDefault(x, y, z), expect);
- assert.equal(x.getWithDefault(y, z), expect);
+ expectDeprecation(() => {
+ assert.equal(getWithDefault(x, y, z), expect);
+ assert.equal(x.getWithDefault(y, z), expect);
+ }, /Using getWithDefault has been deprecated. Instead, consider using Ember get and explicitly checking for undefined./);
}
moduleFor(
From bb8cd68ee0f0a893faea1e010c3ec384f039ad73 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Tue, 26 May 2020 16:54:53 -0400
Subject: [PATCH 0009/1405] Add v3.20.0-beta.1 to CHANGELOG [ci skip]
(cherry picked from commit 3a9206aeb4147232e3e659007af5fb2868d8a842)
---
CHANGELOG.md | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1b2b830f141..b0c15ff3e40 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# Ember Changelog
+### v3.20.0-beta.1 (May 26, 2020)
+
+- [#18926](https://github.com/emberjs/ember.js/pull/18926) / [#18852](https://github.com/emberjs/ember.js/pull/18852) [FEATURE] Implement the [Yieldable Named Blocks](https://github.com/emberjs/rfcs/blob/master/text/0460-yieldable-named-blocks.md) RFC.
+- [#18867](https://github.com/emberjs/ember.js/pull/18867) / [#18927](https://github.com/emberjs/ember.js/pull/18927) / [#18928](https://github.com/emberjs/ember.js/pull/18928) [FEATURE] [Promote `{{in-element}}` to public API](https://github.com/emberjs/rfcs/blob/master/text/0287-promote-in-element-to-public-api.md) RFC.
+- [#18859](https://github.com/emberjs/ember.js/pull/18859) Fix transitionTo with scoped aliased queryParam.
+- [#18961](https://github.com/emberjs/ember.js/pull/18961) [BUGFIX] Remove assertions for updating auto-tracked state without Ember.set / this.set
+
### v3.19.0 (May 26, 2020)
- [#18982](https://github.com/emberjs/ember.js/pull/18982) / [#18913](https://github.com/emberjs/ember.js/pull/18913) [BUGFIX] Update rendering engine to latest version.
From c0606a44eeb522ed4e533945836a29d3a8da1e66 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Tue, 26 May 2020 17:03:30 -0400
Subject: [PATCH 0010/1405] Post-release version bump
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index fb2bf5c70f5..7d0d5646c01 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ember-source",
- "version": "3.20.0",
+ "version": "3.21.0",
"description": "A JavaScript framework for creating ambitious web applications",
"keywords": [
"ember-addon"
From f16d174763be6641b0ff50a256feac5e1fa4e2c3 Mon Sep 17 00:00:00 2001
From: Chris Krycho
Date: Fri, 29 May 2020 14:01:49 -0600
Subject: [PATCH 0011/1405] [BUGFIX LTS] invoke methods correctly in
TextSupport sendAction
The introduction of the `attrs` API in Ember 3.13 included wrapping
items passed to components with `MutableCell`, to support two-way
binding. Although two-way binding is gone from much of Ember, the text
input components (`Input` and `Textarea`) continue to support it, via
the `TextSupport` mixins. The `sendAction` function used by the mixin
previously assumed that the only options were for an action to be a
string or a function -- not a function wrapped in a `MutableCell`.
The result was that this code, which would be expected to work, did not:
it would simply never be invoked.
Accordingly, add logic to `sendAction` in `text_support.js` to unwrap a
mutable cell if it is set, and otherwise to carry on with the logic as
it was previously.
Resolves #18994
---
.../components/input-angle-test.js | 11 +++++++++
.../components/input-curly-test.js | 11 +++++++++
.../components/textarea-angle-test.js | 11 +++++++++
.../components/textarea-curly-test.js | 11 +++++++++
.../views/lib/mixins/text_support.js | 23 +++++++++++++------
5 files changed, 60 insertions(+), 7 deletions(-)
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/input-angle-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/input-angle-test.js
index 3edda7cdb7d..c6a029c2429 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/input-angle-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/input-angle-test.js
@@ -1,5 +1,6 @@
import { RenderingTestCase, moduleFor, runDestroy, runTask } from 'internal-test-helpers';
+import { action } from '@ember/object';
import { assign } from '@ember/polyfills';
import { set } from '@ember/-internals/metal';
import { jQueryDisabled, jQuery } from '@ember/-internals/views';
@@ -780,6 +781,16 @@ moduleFor(
['@test sends an action with `` for native DOM events']() {
this.assertTriggersNativeDOMEvents();
}
+
+ ['@test triggers a method with ``'](assert) {
+ this.render(``, {
+ didTrigger: action(function() {
+ assert.ok(true, 'action was triggered');
+ }),
+ });
+
+ this.triggerEvent('keyup', { keyCode: 65 });
+ }
}
);
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/input-curly-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/input-curly-test.js
index 948d7a1cc6e..47f91bf60b1 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/input-curly-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/input-curly-test.js
@@ -1,5 +1,6 @@
import { RenderingTestCase, moduleFor, runDestroy, runTask } from 'internal-test-helpers';
+import { action } from '@ember/object';
import { assign } from '@ember/polyfills';
import { set } from '@ember/-internals/metal';
import { jQueryDisabled, jQuery } from '@ember/-internals/views';
@@ -631,6 +632,16 @@ moduleFor(
['@test sends an action with `{{input EVENT=(action "foo")}}` for native DOM events']() {
this.assertTriggersNativeDOMEvents();
}
+
+ ['@test triggers a method with `{{input key-up=this.didTrigger}}`'](assert) {
+ this.render(`{{input key-up=this.didTrigger}}`, {
+ didTrigger: action(function() {
+ assert.ok(true, 'action was triggered');
+ }),
+ });
+
+ this.triggerEvent('keyup', { keyCode: 65 });
+ }
}
);
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/textarea-angle-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/textarea-angle-test.js
index 592107c7143..63dda4652c8 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/textarea-angle-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/textarea-angle-test.js
@@ -1,5 +1,6 @@
import { RenderingTestCase, moduleFor, classes, applyMixins, runTask } from 'internal-test-helpers';
+import { action } from '@ember/object';
import { assign } from '@ember/polyfills';
import { set } from '@ember/-internals/metal';
@@ -209,5 +210,15 @@ moduleFor(
runTask(() => set(this.context, 'model', { val: 'A beautiful day in Seattle' }));
this.assertTextArea({ value: 'A beautiful day in Seattle' });
}
+
+ ['@test triggers a method with ``'](assert) {
+ this.render(``, {
+ didTrigger: action(function() {
+ assert.ok(true, 'action was triggered');
+ }),
+ });
+
+ this.triggerEvent('keyup', { keyCode: 65 });
+ }
}
);
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/textarea-curly-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/textarea-curly-test.js
index 18636e19692..b15ca7166bd 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/textarea-curly-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/textarea-curly-test.js
@@ -1,5 +1,6 @@
import { RenderingTestCase, moduleFor, classes, applyMixins, runTask } from 'internal-test-helpers';
+import { action } from '@ember/object';
import { assign } from '@ember/polyfills';
import { set } from '@ember/-internals/metal';
@@ -161,5 +162,15 @@ moduleFor(
runTask(() => set(this.context, 'model', { val: 'A beautiful day in Seattle' }));
this.assertTextArea({ value: 'A beautiful day in Seattle' });
}
+
+ ['@test triggers a method with `{{textarea key-up=this.didTrigger}}`'](assert) {
+ this.render(`{{textarea key-up=this.didTrigger}}`, {
+ didTrigger: action(function() {
+ assert.ok(true, 'action was triggered');
+ }),
+ });
+
+ this.triggerEvent('keyup', { keyCode: 65 });
+ }
}
);
diff --git a/packages/@ember/-internals/views/lib/mixins/text_support.js b/packages/@ember/-internals/views/lib/mixins/text_support.js
index 8f32ddac8aa..f26be5ef22b 100644
--- a/packages/@ember/-internals/views/lib/mixins/text_support.js
+++ b/packages/@ember/-internals/views/lib/mixins/text_support.js
@@ -6,6 +6,7 @@ import { get, set, Mixin } from '@ember/-internals/metal';
import { TargetActionSupport } from '@ember/-internals/runtime';
import { deprecate } from '@ember/debug';
import { SEND_ACTION } from '@ember/deprecated-features';
+import { MUTABLE_CELL } from '@ember/-internals/views';
const KEY_EVENTS = {
13: 'insertNewline',
@@ -306,11 +307,19 @@ export default Mixin.create(TargetActionSupport, {
// sendAction semantics for TextField are different from
// the component semantics so this method normalizes them.
function sendAction(eventName, view, event) {
- let actionName = get(view, `attrs.${eventName}`) || get(view, eventName);
+ let action = get(view, `attrs.${eventName}`);
+ if (action !== null && typeof action === 'object' && action[MUTABLE_CELL] === true) {
+ action = action.value;
+ }
+
+ if (action === undefined) {
+ action = get(view, eventName);
+ }
+
let value = get(view, 'value');
- if (SEND_ACTION && typeof actionName === 'string') {
- let message = `Passing actions to components as strings (like \`\`) is deprecated. Please use closure actions instead (\`\`).`;
+ if (SEND_ACTION && typeof action === 'string') {
+ let message = `Passing actions to components as strings (like \`\`) is deprecated. Please use closure actions instead (\`\`).`;
deprecate(message, false, {
id: 'ember-component.send-action',
@@ -319,14 +328,14 @@ function sendAction(eventName, view, event) {
});
view.triggerAction({
- action: actionName,
+ action: action,
actionContext: [value, event],
});
- } else if (typeof actionName === 'function') {
- actionName(value, event);
+ } else if (typeof action === 'function') {
+ action(value, event);
}
- if (actionName && !get(view, 'bubbles')) {
+ if (action && !get(view, 'bubbles')) {
event.stopPropagation();
}
}
From ef67e4a18465f1e23b3112a65843594179a9a6f7 Mon Sep 17 00:00:00 2001
From: bekzod
Date: Sun, 31 May 2020 14:35:10 +0500
Subject: [PATCH 0012/1405] [CLEANUP]: remove redundant `-input-type` helper
---
.../-internals/glimmer/lib/helpers/-input-type.ts | 14 --------------
packages/@ember/-internals/glimmer/lib/resolver.ts | 2 --
2 files changed, 16 deletions(-)
delete mode 100644 packages/@ember/-internals/glimmer/lib/helpers/-input-type.ts
diff --git a/packages/@ember/-internals/glimmer/lib/helpers/-input-type.ts b/packages/@ember/-internals/glimmer/lib/helpers/-input-type.ts
deleted file mode 100644
index 58286e7f6fe..00000000000
--- a/packages/@ember/-internals/glimmer/lib/helpers/-input-type.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { CapturedArguments, VM, VMArguments } from '@glimmer/interfaces';
-import { HelperRootReference } from '@glimmer/reference';
-
-function inputTypeHelper({ positional }: CapturedArguments) {
- let type = positional.at(0).value();
- if (type === 'checkbox') {
- return '-checkbox';
- }
- return '-text-field';
-}
-
-export default function(args: VMArguments, vm: VM) {
- return new HelperRootReference(inputTypeHelper, args.capture(), vm.env);
-}
diff --git a/packages/@ember/-internals/glimmer/lib/resolver.ts b/packages/@ember/-internals/glimmer/lib/resolver.ts
index 29c977b6e80..90fdedbad1e 100644
--- a/packages/@ember/-internals/glimmer/lib/resolver.ts
+++ b/packages/@ember/-internals/glimmer/lib/resolver.ts
@@ -30,7 +30,6 @@ import InternalComponentManager, {
import { TemplateOnlyComponentDefinition } from './component-managers/template-only';
import { isClassHelper, isHelperFactory } from './helper';
import { default as componentAssertionHelper } from './helpers/-assert-implicit-component-helper-argument';
-import { default as inputTypeHelper } from './helpers/-input-type';
import { default as normalizeClassHelper } from './helpers/-normalize-class';
import { default as trackArray } from './helpers/-track-array';
import { default as action } from './helpers/action';
@@ -257,7 +256,6 @@ const BUILTINS_HELPERS: IBuiltInHelpers = {
unless: inlineUnless,
'-hash': hash,
'-each-in': eachIn,
- '-input-type': inputTypeHelper,
'-normalize-class': normalizeClassHelper,
'-track-array': trackArray,
'-get-dynamic-var': getDynamicVar,
From b17c5e3dcdd0525e0aa7707afbf4858496732af1 Mon Sep 17 00:00:00 2001
From: "dependabot-preview[bot]"
<27856297+dependabot-preview[bot]@users.noreply.github.com>
Date: Mon, 1 Jun 2020 13:23:41 +0000
Subject: [PATCH 0013/1405] Bump aws-sdk from 2.674.0 to 2.686.0
Bumps [aws-sdk](https://github.com/aws/aws-sdk-js) from 2.674.0 to 2.686.0.
- [Release notes](https://github.com/aws/aws-sdk-js/releases)
- [Changelog](https://github.com/aws/aws-sdk-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js/compare/v2.674.0...v2.686.0)
Signed-off-by: dependabot-preview[bot]
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index 7d0d5646c01..093ac1759e2 100644
--- a/package.json
+++ b/package.json
@@ -88,7 +88,7 @@
"@types/rsvp": "^4.0.3",
"@typescript-eslint/parser": "^2.33.0",
"auto-dist-tag": "^1.0.0",
- "aws-sdk": "^2.674.0",
+ "aws-sdk": "^2.686.0",
"babel-eslint": "^10.1.0",
"babel-plugin-module-resolver": "^4.0.0",
"babel-template": "^6.26.0",
diff --git a/yarn.lock b/yarn.lock
index 5928287f981..7e9e447915c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1580,10 +1580,10 @@ auto-dist-tag@^1.0.0:
pkg-up "^2.0.0"
semver "^5.3.0"
-aws-sdk@^2.0.9, aws-sdk@^2.674.0:
- version "2.674.0"
- resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.674.0.tgz#aa015f77f11d073089bf080031f3936bb16c423d"
- integrity sha512-C0hBwsA779y3xbS1AClDcsg8ZBJE+BJC4vt1eHpI2mEbr0/qIwOcR2hl1DjXyp3RwHKoa/LPOTHRSSHDq01PxA==
+aws-sdk@^2.0.9, aws-sdk@^2.686.0:
+ version "2.686.0"
+ resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.686.0.tgz#c58c3874eff4c76c763d137df617e87971321eb7"
+ integrity sha512-QhYhJ5y8tUG5SlmY3CSf9RBaa3EFbta28oarOyiwceHKmY80cMCafRI1YypT6CVDx/q91dbnSNQfWhs0cZPbBQ==
dependencies:
buffer "4.9.1"
events "1.1.1"
From 7676db612c554ce49b1c6917762e0242e6c5d802 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Tue, 2 Jun 2020 15:34:22 -0400
Subject: [PATCH 0014/1405] Add v3.20.0-beta.2 to CHANGELOG [ci skip]
(cherry picked from commit 74d757e6bc4b77845e61372b682f2218e6ed2535)
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0c15ff3e40..82c701b84f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Ember Changelog
+### v3.20.0-beta.2 (June 2, 2020)
+
+- [#18997](https://github.com/emberjs/ember.js/pull/18997) [BUGFIX] Fix components `` and `
-
-
+
+
-
-
+
+
diff --git a/RELEASE.md b/RELEASE.md
index d7d665f8e92..0d73816ad68 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -19,7 +19,7 @@
1. Check out `beta` branch and `git pull`
1. Make sure any master commits that are conceptually `[{BUGFIX,DOC} {beta,release}]` are cherry-picked.
-1. `git push origin beta`, and `let travisBranch = kick off a travis build`
+1. `git push origin beta`, and `let ciBranch = kick off a CI build`
1. `PRIOR_VERSION=v2.5.0-beta.1 ./bin/changelog.js | uniq | pbcopy`
1. Open `CHANGELOG.md`, paste in the results of the previous script, and clean it up for human-readability.
1. e.g. [BUGFIX beta] -> [BUGFIX], [DEPRECATE beta] -> [DEPRECATE], ...
@@ -27,14 +27,14 @@
1. rm [DOC] (usually)
1. rm other trivial things
1. Backport CHANGELOG to master
-1. `await travisBranch`
- 1. if travis succeeds, process
- 1. if travis fails and it's a fix that doesn't need to be on master (e.g. linting or merge conflicts accidentally checked in), fix and retry.
+1. `await ciBranch`
+ 1. if CI succeeds, process
+ 1. if CI fails and it's a fix that doesn't need to be on master (e.g. linting or merge conflicts accidentally checked in), fix and retry.
1. otherwise, start over
1. Update `package.json` and `VERSION` file to use new version number
1. git add/commit -m "Release v2.5.0-beta.2."
1. `git tag v2.5.0-beta.2`
-1. `git push origin v2.5.0-beta.2`, and `let travisTag = kick off a travis build` (to produce the assets)
+1. `git push origin v2.5.0-beta.2`, and `let ciTag = kick off a CI build` (to produce the assets)
1. `git push origin beta`
1. `git checkout beta`
1. `rm -rf dist && mkdir dist && cp ../components-ember/* dist/`
@@ -73,7 +73,7 @@ Starting point: [https://gist.github.com/rwjblue/fb945e55c70d698d4074](https://g
### Build Changelog
-1. Push `beta` branch to get Travis to run
+1. Push `beta` branch to get CI to run
1. Run `PRIOR_VERSION= ./bin/changelog.js | uniq | pbcopy`
1. Clean up commits in CHANGELOG
1. e.g. [BUGFIX beta] -> [BUGFIX], [DEPRECATE beta] -> [DEPRECATE], ...
@@ -94,8 +94,8 @@ Starting point: [https://gist.github.com/rwjblue/fb945e55c70d698d4074](https://g
### Release
-1. `git push origin v2.4.0` to push JUST the tag. This lets us run the tag first on Travis CI, which does the correct deploy to S3, Bower, etc.
-1. THEN wait for Travis CI build to finish
+1. `git push origin v2.4.0` to push JUST the tag. This lets us run the tag first on CI, which does the correct deploy to S3, Bower, etc.
+1. THEN wait for CI build to finish
1. Go to github and disable branch protection for the **release** branch
1. Backup the current release branch: `git push origin release:release-version`
1. To make this the current `release` branch: `git push -f origin beta:release`
@@ -132,9 +132,8 @@ end
1. Any feature that has been GOed gets changed to true
1. Run `ember s -prod`
1. Run tests at `http://localhost:4200/tests/index.html`
-2. Run production tests `http://localhost:4200/tests/index.html?dist=prod&prod=true`
-3. In `.travis.yml`, remove `branches:` section e.g. [this commit](https://github.com/emberjs/ember.js/commit/e38ec5d910721a9e02a819b4105a4875723f4b1b).
-4. Now we have to look at the commit just prior to branching 2.4.0.beta-1. Then find the commit after that to start the new branch at.
+1. Run production tests `http://localhost:4200/tests/index.html?dist=prod&prod=true`
+1. Now we have to look at the commit just prior to branching 2.4.0.beta-1. Then find the commit after that to start the new branch at.
### Changelog
diff --git a/bin/build-for-publishing.js b/bin/build-for-publishing.js
index 3128997b06a..5f8ffc72a50 100755
--- a/bin/build-for-publishing.js
+++ b/bin/build-for-publishing.js
@@ -56,7 +56,7 @@ Promise.resolve()
.then(() => {
updatePackageJSONVersion();
// ensures that we tag this correctly
- return exec('auto-dist-tag', ['--write']);
+ return exec('node_modules/.bin/auto-dist-tag', ['--write']);
})
.then(() => {
// do a production build
diff --git a/bin/publish_builds b/bin/publish_builds
deleted file mode 100755
index fdf49065016..00000000000
--- a/bin/publish_builds
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env bash
-
-# ensure the first failure, stops the script
-set -e
-
-echo -e "CURRENT_BRANCH: ${TRAVIS_BRANCH}\n"
-echo -e "PULL_REQUEST: ${TRAVIS_PULL_REQUEST}\n"
-
-if [ "$TRAVIS_PULL_REQUEST" == "false" ] && [ "$PUBLISH" == "true" ]; then
-
- node ./bin/build-for-publishing.js
-
- node ./bin/publish_to_s3.js
-
- #### NPM PUBLISHING
- if [[ "$TRAVIS_TAG" =~ ^v[0-9.]+ ]]; then
- echo -e "CURRENT_TAG: ${TRAVIS_TAG}\n"
- echo "//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}"> ~/.npmrc
-
- NPM_USER=$(npm whoami)
- echo -e "Publishing to npm as $NPM_USER...\n"
-
- # auto-dist-tag is ran by bin/build-for-publishing.js
- # this ensures that the `publishConfig` object in the `package.json`
- # indicates the correct tag to be published
- npm publish
- fi
-fi
diff --git a/bin/publish_to_s3.js b/bin/publish_to_s3.js
index 54db6c0681e..fa329fcd197 100755
--- a/bin/publish_to_s3.js
+++ b/bin/publish_to_s3.js
@@ -5,9 +5,6 @@ const buildInfo = require('../broccoli/build-info').buildInfo();
// To invoke this from the commandline you need the following to env vars to exist:
//
// S3_BUCKET_NAME
-// TRAVIS_BRANCH
-// TRAVIS_TAG
-// TRAVIS_COMMIT
// S3_SECRET_ACCESS_KEY
// S3_ACCESS_KEY_ID
//
@@ -21,7 +18,11 @@ if (!buildInfo.isBuildForTag) {
const S3Publisher = require('ember-publisher');
const configPath = require('path').join(__dirname, '../config/s3ProjectConfig.js');
- let publisher = new S3Publisher({ projectConfigPath: configPath });
+ let publisher = new S3Publisher({
+ projectConfigPath: configPath,
+ TRAVIS_TAG: buildInfo.tag,
+ TRAVIS_COMMIT: buildInfo.sha,
+ });
publisher.currentBranch = function() {
return buildInfo.channel;
diff --git a/bin/run-browserstack-tests.js b/bin/run-browserstack-tests.js
index 8dd345a363f..f03a67bdd09 100755
--- a/bin/run-browserstack-tests.js
+++ b/bin/run-browserstack-tests.js
@@ -34,7 +34,7 @@ function run(command, args = []) {
console.log('success');
process.exit(0);
} finally {
- if (process.env.TRAVIS_JOB_NUMBER) {
+ if (process.env.GITHUB_RUN_ID) {
await run('ember', ['browserstack:results']);
}
await run('ember', ['browserstack:disconnect']);
diff --git a/bin/run-tests.js b/bin/run-tests.js
index 4d5e6d284d3..8dffd016540 100755
--- a/bin/run-tests.js
+++ b/bin/run-tests.js
@@ -89,12 +89,6 @@ function generateStandardTests() {
testFunctions.push(() => run('enableoptionalfeatures=true'));
}
-function generateOldJQueryTests() {
- testFunctions.push(() => run('jquery=1.10.2'));
- testFunctions.push(() => run('jquery=1.12.4'));
- testFunctions.push(() => run('jquery=2.2.4'));
-}
-
function generateExtendPrototypeTests() {
testFunctions.push(() => run('extendprototypes=true'));
testFunctions.push(() => run('extendprototypes=true&enableoptionalfeatures=true'));
@@ -137,15 +131,13 @@ switch (process.env.TEST_SUITE) {
generateEachPackageTests();
runAndExit();
break;
- case 'old-jquery-and-extend-prototypes':
- console.log('suite: old-jquery-and-extend-prototypes');
- generateOldJQueryTests();
+ case 'extend-prototypes':
+ console.log('suite: extend-prototypes');
generateExtendPrototypeTests();
runAndExit();
break;
case 'all':
console.log('suite: all');
- generateOldJQueryTests();
generateExtendPrototypeTests();
generateEachPackageTests();
runAndExit();
diff --git a/broccoli/build-info.js b/broccoli/build-info.js
index e611bb3f39c..98e77db0919 100644
--- a/broccoli/build-info.js
+++ b/broccoli/build-info.js
@@ -20,12 +20,7 @@ function buildInfo(options) {
let root = (options && options.root) || path.resolve(__dirname, '..');
let packageVersion = (options && options.packageVersion) || readPackageVersion(root);
let gitInfo = (options && options.gitInfo) || buildGitInfo(root);
- let buildInfo = buildFromParts(
- packageVersion,
- gitInfo,
- process.env.TRAVIS,
- process.env.TRAVIS_BRANCH
- );
+ let buildInfo = buildFromParts(packageVersion, gitInfo);
if (!options) {
cached = buildInfo;
}
@@ -75,47 +70,44 @@ function buildGitInfo(root) {
* Build info object from parts.
* @param {string} packageVersion
* @param {GitInfo} gitInfo
- * @param {boolean} isCI
- * @param {string} travisBranch
* @returns {BuildInfo}
*/
-function buildFromParts(packageVersion, gitInfo, isCI = false, travisBranch = '') {
+function buildFromParts(packageVersion, gitInfo) {
let { tag, branch, sha } = gitInfo;
-
- let tagVersion = parseTagVersion(tag);
let shortSha = sha.slice(0, 8);
- branch = travisBranch || branch; // Travis builds are always detached
- let channel =
- branch === 'master'
- ? process.env.BUILD_TYPE === 'alpha'
- ? 'alpha'
- : 'canary'
- : branch && escapeSemVerIdentifier(branch);
-
- let isBuildForTag = isTagBuild(tag, branch, isCI);
- let version = isBuildForTag ? tagVersion : buildVersion(packageVersion, shortSha, channel);
-
- return {
- tag,
- branch,
- sha,
- shortSha,
- channel,
- packageVersion,
- tagVersion,
- version,
- isBuildForTag,
- };
-}
-
-function isTagBuild(tag, branch, isCI) {
- if (!tag) {
- return false;
+ if (tag) {
+ let tagVersion = parseTagVersion(tag);
+ return {
+ tag,
+ branch: null,
+ sha,
+ shortSha,
+ channel: 'tag',
+ packageVersion,
+ tagVersion,
+ version: tagVersion,
+ isBuildForTag: true,
+ };
+ } else {
+ let channel =
+ branch === 'master'
+ ? process.env.BUILD_TYPE === 'alpha'
+ ? 'alpha'
+ : 'canary'
+ : branch && escapeSemVerIdentifier(branch);
+ let version = buildVersion(packageVersion, shortSha, channel);
+ return {
+ tag: null,
+ branch,
+ sha,
+ shortSha,
+ channel,
+ packageVersion,
+ tagVersion: null,
+ version,
+ isBuildForTag: false,
+ };
}
- if (isCI) {
- return branch === tag;
- }
- return true;
}
/**
@@ -133,11 +125,7 @@ function readPackageVersion(root) {
* @param {string} tag
*/
function parseTagVersion(tag) {
- try {
- return tag && semver.parse(tag).version;
- } catch (e) {
- return;
- }
+ return tag && semver.parse(tag).version;
}
/**
@@ -182,4 +170,3 @@ module.exports.buildInfo = buildInfo;
module.exports.buildFromParts = buildFromParts;
module.exports.buildVersion = buildVersion;
module.exports.parseTagVersion = parseTagVersion;
-module.exports.isTagBuild = isTagBuild;
diff --git a/package.json b/package.json
index 054a230ce58..3d4079274f0 100644
--- a/package.json
+++ b/package.json
@@ -107,7 +107,7 @@
"dag-map": "^2.0.2",
"ember-cli": "^3.12.0",
"ember-cli-blueprint-test-helpers": "^0.19.2",
- "ember-cli-browserstack": "^1.0.1",
+ "ember-cli-browserstack": "^1.1.0",
"ember-cli-dependency-checker": "^3.2.0",
"ember-cli-yuidoc": "^0.9.1",
"ember-publisher": "0.0.7",
diff --git a/testem.travis-browsers.js b/testem.ci-browsers.js
similarity index 100%
rename from testem.travis-browsers.js
rename to testem.ci-browsers.js
diff --git a/tests/node/build-info-test.js b/tests/node/build-info-test.js
index 166ef934544..500ae0c2eb7 100644
--- a/tests/node/build-info-test.js
+++ b/tests/node/build-info-test.js
@@ -1,11 +1,6 @@
'use strict';
-const {
- buildVersion,
- parseTagVersion,
- buildFromParts,
- isTagBuild,
-} = require('../../broccoli/build-info');
+const { buildVersion, parseTagVersion, buildFromParts } = require('../../broccoli/build-info');
QUnit.module('buildVersion', () => {
flatMap(
@@ -53,15 +48,17 @@ QUnit.module('parseTagVersion', () => {
tag: 'v3.1.1-beta.2',
expected: '3.1.1-beta.2',
},
- {
- tag: 'some-non-version-tag',
- expected: undefined,
- },
].forEach(({ tag, expected }) => {
QUnit.test(JSON.stringify(tag), assert => {
assert.equal(parseTagVersion(tag), expected);
});
});
+
+ QUnit.test('parseTagVersion raises on non-semver tags', assert => {
+ assert.throws(() => {
+ parseTagVersion('some-non-version-tag');
+ });
+ });
});
QUnit.module('buildFromParts', () => {
@@ -89,73 +86,46 @@ QUnit.module('buildFromParts', () => {
},
{
args: [
- '3.4.4', // Channel build on CI, tag
+ '3.4.4', // Channel build
{
sha: 'f572d396fae9206628714fb2ce00f72e94f2258f',
- branch: '',
- tag: 'v3.4.4-beta.2',
+ branch: 'beta',
+ tag: null,
},
- true,
- 'beta',
],
expected: {
- tag: 'v3.4.4-beta.2',
+ tag: null,
branch: 'beta',
sha: 'f572d396fae9206628714fb2ce00f72e94f2258f',
shortSha: 'f572d396',
channel: 'beta',
packageVersion: '3.4.4',
- tagVersion: '3.4.4-beta.2',
+ tagVersion: null,
version: '3.4.4-beta+f572d396',
isBuildForTag: false,
},
},
{
args: [
- '3.4.4', // Tag build, CI
+ '3.4.4', // Tag build
{
sha: 'f572d396fae9206628714fb2ce00f72e94f2258f',
- branch: '',
+ branch: null,
tag: 'v3.4.4-beta.2',
},
- true,
- 'v3.4.4-beta.2',
],
expected: {
tag: 'v3.4.4-beta.2',
- branch: 'v3.4.4-beta.2',
+ branch: null,
sha: 'f572d396fae9206628714fb2ce00f72e94f2258f',
shortSha: 'f572d396',
- channel: 'v3-4-4-beta-2',
+ channel: 'tag',
packageVersion: '3.4.4',
tagVersion: '3.4.4-beta.2',
version: '3.4.4-beta.2',
isBuildForTag: true,
},
},
- {
- args: [
- '3.4.4',
- {
- sha: 'f572d396fae9206628714fb2ce00f72e94f2258f',
- branch: '',
- tag: 'some weird tag',
- },
- true,
- 'a "funky" branch',
- ],
- expected: {
- tag: 'some weird tag',
- branch: 'a "funky" branch',
- sha: 'f572d396fae9206628714fb2ce00f72e94f2258f',
- shortSha: 'f572d396',
- channel: 'a--funky--branch',
- packageVersion: '3.4.4',
- tagVersion: undefined,
- version: '3.4.4-a--funky--branch+f572d396',
- isBuildForTag: false,
- },
- },
].forEach(({ args, expected }) => {
QUnit.test(JSON.stringify(args), assert => {
assert.deepEqual(buildFromParts(...args), expected);
@@ -163,22 +133,6 @@ QUnit.module('buildFromParts', () => {
});
});
-QUnit.module('isTagBuild', () => {
- QUnit.test('on CI', assert => {
- assert.equal(isTagBuild('v3.4.4', 'v3.4.4', true), true);
- assert.equal(isTagBuild('v3.4.4', 'release', true), false);
- assert.equal(isTagBuild('v3.4.4-beta.4', 'random-branch', true), false);
- assert.equal(isTagBuild(null, 'release', true), false);
- });
-
- QUnit.test('not on CI', assert => {
- assert.equal(isTagBuild('v3.4.4', 'release', false), true);
- assert.equal(isTagBuild('v3.4.4', null, false), true);
- assert.equal(isTagBuild('v3.4.4-beta.4', 'random-branch', false), true);
- assert.equal(isTagBuild(null, 'release', false), false);
- });
-});
-
/**
* @typedef {Object} MatrixEntry
* @property {any[]} args
diff --git a/yarn.lock b/yarn.lock
index bc5cd756630..454c3033c20 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3385,10 +3385,10 @@ ember-cli-broccoli-sane-watcher@^3.0.0:
rsvp "^3.0.18"
sane "^4.0.0"
-ember-cli-browserstack@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ember-cli-browserstack/-/ember-cli-browserstack-1.0.1.tgz#ecca7bd72503b58f8185effb14215d703826b0c1"
- integrity sha512-jujodiUQrt7NddYTeoYXesmQE6SzRP7mla2FYikR49DBCoTIVUOg2J9tfqQL5AroMxmeRIsDveVJPseDyrOyaw==
+ember-cli-browserstack@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ember-cli-browserstack/-/ember-cli-browserstack-1.1.0.tgz#1d2bcf84370c196dc0c091ee65d54193072dadfc"
+ integrity sha512-nSYHa5YP0RjthfMBpasLJt4bnodV2AgKR4KZ4DaFrboiW+FVfqNZ8MRLBrTfaH3NqDWofcnCQTfqriByAcqbRA==
dependencies:
browserstack "^1.5.3"
browserstack-local "^1.4.2"
From 0d25d3b7d910a35603654ab08d78ebe8ee041903 Mon Sep 17 00:00:00 2001
From: Arthi Ravi Shankar
Date: Fri, 17 Jul 2020 15:46:28 -0700
Subject: [PATCH 0037/1405] Parallelize inject-babel-helpers plugin
---
lib/index.js | 5 ++-
lib/transforms/inject-babel-helpers.js | 53 ++++++++++++++++----------
2 files changed, 35 insertions(+), 23 deletions(-)
diff --git a/lib/index.js b/lib/index.js
index d1c637a7cce..5fc92120dbd 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -7,7 +7,7 @@ const resolve = require('resolve');
const concatBundle = require('./concat-bundle');
const buildDebugMacroPlugin = require('./build-debug-macro-plugin');
const buildStripClassCallcheckPlugin = require('./build-strip-class-callcheck-plugin');
-const injectBabelHelpers = require('./transforms/inject-babel-helpers');
+const injectBabelHelpers = require('./transforms/inject-babel-helpers').injectBabelHelpers;
const debugTree = require('broccoli-debug').buildDebugCallback('ember-source:addon');
const PRE_BUILT_TARGETS = [
@@ -138,6 +138,7 @@ module.exports = {
// We want to enable async/generator helpers if we are developing locally,
// but not for any other project.
let isEmberSource = this.project.name() === 'ember-source';
+ let babelHelperPlugin = injectBabelHelpers(isEmberSource);
let options = {
'ember-cli-babel': {
@@ -147,7 +148,7 @@ module.exports = {
babel: Object.assign({}, babelOptions, {
loose: true,
plugins: [
- injectBabelHelpers(isEmberSource),
+ babelHelperPlugin,
buildDebugMacroPlugin(!isProduction),
[
require.resolve('@babel/plugin-transform-block-scoping'),
diff --git a/lib/transforms/inject-babel-helpers.js b/lib/transforms/inject-babel-helpers.js
index 18cc33ed212..c01efbf413d 100644
--- a/lib/transforms/inject-babel-helpers.js
+++ b/lib/transforms/inject-babel-helpers.js
@@ -3,29 +3,40 @@
const { addNamed } = require('@babel/helper-module-imports');
function injectBabelHelpers(isEmberSource = false) {
- function injectBabelHelpersPlugin() {
- return {
- pre(file) {
- file.set('helperGenerator', function(name) {
- if (name === 'extends') {
- return addNamed(file.path, 'assign', '@ember/polyfills');
- } else if (isEmberSource && name === 'asyncToGenerator') {
- // Returning a falsy value will cause the helper to be inlined,
- // which is fine for local tests
- return false;
- }
-
- return addNamed(file.path, name, 'ember-babel');
- });
- },
- };
- }
-
- injectBabelHelpersPlugin.baseDir = function() {
+
+ let helperplugin = injectBabelHelpersPlugin;
+ helperplugin._parallelBabel = {
+ requireFile: __filename,
+ buildUsing: 'injectBabelHelpersPlugin',
+ params : { isEmberSource },
+ };
+
+ helperplugin.baseDir = function() {
return 'babel-core';
};
- return injectBabelHelpersPlugin;
+ return helperplugin;
+}
+
+function injectBabelHelpersPlugin(isEmberSource) {
+ return {
+ pre(file) {
+ file.set('helperGenerator', function(name) {
+ if (name === 'extends') {
+ return addNamed(file.path, 'assign', '@ember/polyfills');
+ } else if (isEmberSource && name === 'asyncToGenerator') {
+ // Returning a falsy value will cause the helper to be inlined,
+ // which is fine for local tests
+ return false;
+ }
+
+ return addNamed(file.path, name, 'ember-babel');
+ });
+ },
+ };
}
-module.exports = injectBabelHelpers;
+module.exports = {
+ injectBabelHelpers,
+ injectBabelHelpersPlugin
+};
From 104265a63c8dd4e9f28972223be7ddfbb914381f Mon Sep 17 00:00:00 2001
From: Arthi Ravi Shankar
Date: Fri, 17 Jul 2020 15:46:28 -0700
Subject: [PATCH 0038/1405] Parallelize inject-babel-helpers plugin
---
lib/index.js | 5 +--
lib/transforms/inject-babel-helpers.js | 50 +++++++++++++++-----------
2 files changed, 33 insertions(+), 22 deletions(-)
diff --git a/lib/index.js b/lib/index.js
index d1c637a7cce..02051db7d9d 100644
--- a/lib/index.js
+++ b/lib/index.js
@@ -7,7 +7,7 @@ const resolve = require('resolve');
const concatBundle = require('./concat-bundle');
const buildDebugMacroPlugin = require('./build-debug-macro-plugin');
const buildStripClassCallcheckPlugin = require('./build-strip-class-callcheck-plugin');
-const injectBabelHelpers = require('./transforms/inject-babel-helpers');
+const injectBabelHelpers = require('./transforms/inject-babel-helpers').injectBabelHelpers;
const debugTree = require('broccoli-debug').buildDebugCallback('ember-source:addon');
const PRE_BUILT_TARGETS = [
@@ -138,6 +138,7 @@ module.exports = {
// We want to enable async/generator helpers if we are developing locally,
// but not for any other project.
let isEmberSource = this.project.name() === 'ember-source';
+ let babelHelperPlugin = injectBabelHelpers(isEmberSource);
let options = {
'ember-cli-babel': {
@@ -147,7 +148,7 @@ module.exports = {
babel: Object.assign({}, babelOptions, {
loose: true,
plugins: [
- injectBabelHelpers(isEmberSource),
+ babelHelperPlugin,
buildDebugMacroPlugin(!isProduction),
[
require.resolve('@babel/plugin-transform-block-scoping'),
diff --git a/lib/transforms/inject-babel-helpers.js b/lib/transforms/inject-babel-helpers.js
index 18cc33ed212..2cb4c90564e 100644
--- a/lib/transforms/inject-babel-helpers.js
+++ b/lib/transforms/inject-babel-helpers.js
@@ -3,29 +3,39 @@
const { addNamed } = require('@babel/helper-module-imports');
function injectBabelHelpers(isEmberSource = false) {
- function injectBabelHelpersPlugin() {
- return {
- pre(file) {
- file.set('helperGenerator', function(name) {
- if (name === 'extends') {
- return addNamed(file.path, 'assign', '@ember/polyfills');
- } else if (isEmberSource && name === 'asyncToGenerator') {
- // Returning a falsy value will cause the helper to be inlined,
- // which is fine for local tests
- return false;
- }
-
- return addNamed(file.path, name, 'ember-babel');
- });
- },
- };
- }
+ let helperplugin = injectBabelHelpersPlugin;
+ helperplugin._parallelBabel = {
+ requireFile: __filename,
+ buildUsing: 'injectBabelHelpersPlugin',
+ params: { isEmberSource },
+ };
- injectBabelHelpersPlugin.baseDir = function() {
+ helperplugin.baseDir = function() {
return 'babel-core';
};
- return injectBabelHelpersPlugin;
+ return helperplugin;
+}
+
+function injectBabelHelpersPlugin(isEmberSource) {
+ return {
+ pre(file) {
+ file.set('helperGenerator', function(name) {
+ if (name === 'extends') {
+ return addNamed(file.path, 'assign', '@ember/polyfills');
+ } else if (isEmberSource && name === 'asyncToGenerator') {
+ // Returning a falsy value will cause the helper to be inlined,
+ // which is fine for local tests
+ return false;
+ }
+
+ return addNamed(file.path, name, 'ember-babel');
+ });
+ },
+ };
}
-module.exports = injectBabelHelpers;
+module.exports = {
+ injectBabelHelpers,
+ injectBabelHelpersPlugin,
+};
From eff98d676611a5e366f19ebce62fca5c7b10a4c2 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Mon, 20 Jul 2020 14:26:12 -0400
Subject: [PATCH 0039/1405] Add v3.20.1 to CHANGELOG [ci skip]
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 49fb815cdac..54457de767a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@
- [#18993](https://github.com/emberjs/ember.js/pull/18993) [DEPRECATION] Deprecate `getWithDefault` per [RFC #554](https://github.com/emberjs/rfcs/blob/master/text/0554-deprecate-getwithdefault.md).
- [#17571](https://github.com/emberjs/ember.js/pull/17571) [BUGFIX] Avoid tampering `queryParam` argument in RouterService#isActive
+### v3.20.1 (July 13, 2020)
+
+- [#19040](https://github.com/emberjs/ember.js/pull/19040) [BUGFIX] Fix a memory leak that occurred when changing the array passed to `{{each}}`
+
### v3.20.0 (July 13, 2020)
- [#18867](https://github.com/emberjs/ember.js/pull/18867) / [#18927](https://github.com/emberjs/ember.js/pull/18927) / [#18928](https://github.com/emberjs/ember.js/pull/18928) [FEATURE] [Promote `{{in-element}}` to public API](https://github.com/emberjs/rfcs/blob/master/text/0287-promote-in-element-to-public-api.md) RFC.
From a43f203010669f22fca0277a9edf0231a3e94079 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Mon, 20 Jul 2020 14:30:46 -0400
Subject: [PATCH 0040/1405] Add v3.21.0-beta.2 to CHANGELOG [ci skip]
(cherry picked from commit 1be10910593f135cdefb2b8ecfbb932dba061c1e)
---
CHANGELOG.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 54457de767a..a61d30ed78a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# Ember Changelog
+### v3.21.0-beta.2 (July 20, 2020)
+
+- [#19040](https://github.com/emberjs/ember.js/pull/19040) [BUGFIX] Fix a memory leak that occurred when changing the array passed to `{{each}}`
+- [#19047](https://github.com/emberjs/ember.js/pull/19047) [BUGFIX] Ensure `inject-babel-helpers` plugin can be parallelized
+
### v3.21.0-beta.1 (July 13, 2020)
- [#18993](https://github.com/emberjs/ember.js/pull/18993) [DEPRECATION] Deprecate `getWithDefault` per [RFC #554](https://github.com/emberjs/rfcs/blob/master/text/0554-deprecate-getwithdefault.md).
From 17ddeee07df018752423fc8ea54263b03c098318 Mon Sep 17 00:00:00 2001
From: Rich Glazerman
Date: Mon, 20 Jul 2020 18:02:28 -0400
Subject: [PATCH 0041/1405] [BUGFIX lts] Update router.js to ensure
transition.abort works for query param only transitions
---
package.json | 2 +-
yarn.lock | 15 ++++-----------
2 files changed, 5 insertions(+), 12 deletions(-)
diff --git a/package.json b/package.json
index 054a230ce58..478abb42e94 100644
--- a/package.json
+++ b/package.json
@@ -137,7 +137,7 @@
"rollup-plugin-commonjs": "^9.3.4",
"rollup-plugin-node-resolve": "^4.2.4",
"route-recognizer": "^0.3.4",
- "router_js": "^6.2.5",
+ "router_js": "^6.2.6",
"rsvp": "^4.8.5",
"serve-static": "^1.14.1",
"simple-dom": "^1.4.0",
diff --git a/yarn.lock b/yarn.lock
index bc5cd756630..784f4932d83 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1144,11 +1144,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.13.2.tgz#dc85dde46aa8740bb4aed54b8104250f8f849503"
integrity sha512-HOtU5KqROKT7qX/itKHuTtt5fV0iXbheQvrgbLNXFJQBY/eh+VS5vmmTAVlo3qIGMsypm0G4N1t2AXjy1ZicaQ==
-"@types/node@^10.5.5":
- version "10.9.4"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-10.9.4.tgz#0f4cb2dc7c1de6096055357f70179043c33e9897"
- integrity sha512-fCHV45gS+m3hH17zgkgADUSi2RR1Vht6wOZ0jyHP8rjiQra9f+mIcgwPQHllmDocYOstIEbKlxbFDYlgrTPYqw==
-
"@types/node@^9.6.0":
version "9.6.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-9.6.0.tgz#d3480ee666df9784b1001a1872a2f6ccefb6c2d7"
@@ -7983,12 +7978,10 @@ route-recognizer@^0.3.4:
resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3"
integrity sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==
-router_js@^6.2.5:
- version "6.2.5"
- resolved "https://registry.yarnpkg.com/router_js/-/router_js-6.2.5.tgz#b23b70d50548423744e4b1ad236055fcfe8ad3f4"
- integrity sha512-mvDbwtF/B9bUyawg42aKRWed92lPRQe15bMEu09f2KJfqJYiyjg9mG2Bwof1t0XqJ2z1QeiYgDwFdFL7pyzyZw==
- dependencies:
- "@types/node" "^10.5.5"
+router_js@^6.2.6:
+ version "6.2.6"
+ resolved "https://registry.yarnpkg.com/router_js/-/router_js-6.2.6.tgz#148288fbfa87cb726b8a2f138b07f1fb549ebcb7"
+ integrity sha1-FIKI+/qHy3Jrii8Tiwfx+1SevLc=
rsvp@3.0.14:
version "3.0.14"
From 5cbf51e8e6b24c43c6d1e54ff6e2ce2fc3684078 Mon Sep 17 00:00:00 2001
From: Thomas Wang
Date: Mon, 20 Jul 2020 20:26:55 -0700
Subject: [PATCH 0042/1405] Bump router_js to v7.0.0
---
package.json | 2 +-
packages/@ember/-internals/routing/lib/system/route.ts | 9 ++++++++-
packages/@ember/-internals/routing/lib/system/router.ts | 6 +++++-
yarn.lock | 8 ++++----
4 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/package.json b/package.json
index 478abb42e94..96e1fb56b85 100644
--- a/package.json
+++ b/package.json
@@ -137,7 +137,7 @@
"rollup-plugin-commonjs": "^9.3.4",
"rollup-plugin-node-resolve": "^4.2.4",
"route-recognizer": "^0.3.4",
- "router_js": "^6.2.6",
+ "router_js": "^7.0.0",
"rsvp": "^4.8.5",
"serve-static": "^1.14.1",
"simple-dom": "^1.4.0",
diff --git a/packages/@ember/-internals/routing/lib/system/route.ts b/packages/@ember/-internals/routing/lib/system/route.ts
index 75b586f0a9e..3cebc41ebda 100644
--- a/packages/@ember/-internals/routing/lib/system/route.ts
+++ b/packages/@ember/-internals/routing/lib/system/route.ts
@@ -98,7 +98,14 @@ class Route extends EmberObject implements IRoute {
_internalName!: string;
_names: unknown;
- serialize!: (model: {}, params: string[]) => object | undefined;
+ serialize!: (
+ model: {},
+ params: string[]
+ ) =>
+ | {
+ [key: string]: unknown;
+ }
+ | undefined;
_router!: EmberRouter;
diff --git a/packages/@ember/-internals/routing/lib/system/router.ts b/packages/@ember/-internals/routing/lib/system/router.ts
index db18367809b..55ebc2588ad 100644
--- a/packages/@ember/-internals/routing/lib/system/router.ts
+++ b/packages/@ember/-internals/routing/lib/system/router.ts
@@ -1438,7 +1438,11 @@ function calculatePostTransitionState(
// If the routeInfo is not resolved, we serialize the context into params
if (!routeInfo.isResolved) {
- params[routeInfo.name] = routeInfo.serialize(routeInfo.context);
+ params[routeInfo.name] = routeInfo.serialize(routeInfo.context as
+ | {
+ [key: string]: unknown;
+ }
+ | undefined);
} else {
params[routeInfo.name] = routeInfo.params;
}
diff --git a/yarn.lock b/yarn.lock
index 784f4932d83..02dbd01b3a4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7978,10 +7978,10 @@ route-recognizer@^0.3.4:
resolved "https://registry.yarnpkg.com/route-recognizer/-/route-recognizer-0.3.4.tgz#39ab1ffbce1c59e6d2bdca416f0932611e4f3ca3"
integrity sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==
-router_js@^6.2.6:
- version "6.2.6"
- resolved "https://registry.yarnpkg.com/router_js/-/router_js-6.2.6.tgz#148288fbfa87cb726b8a2f138b07f1fb549ebcb7"
- integrity sha1-FIKI+/qHy3Jrii8Tiwfx+1SevLc=
+router_js@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/router_js/-/router_js-7.0.0.tgz#92eb56141ee2cb59e04271e5f2d685cdfa836c37"
+ integrity sha512-pJ+W6SyPmMkZ/qawWyaDaAue1bXOx4FOuMMpxvYW/1r6Hifpp06+jURFbR8ryZszYopPYKS5OUQnv1izd3iPKA==
rsvp@3.0.14:
version "3.0.14"
From 35f2b1e02cb29792e7c0268be0623d6e7f090040 Mon Sep 17 00:00:00 2001
From: Akanksha Dharkar
Date: Wed, 22 Jul 2020 17:34:18 +0530
Subject: [PATCH 0043/1405] Minor fix for Tom Dale's missplelled name in code
examples documentation
---
packages/@ember/-internals/glimmer/lib/helpers/array.ts | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/packages/@ember/-internals/glimmer/lib/helpers/array.ts b/packages/@ember/-internals/glimmer/lib/helpers/array.ts
index f076c374ecb..2b43f0294b0 100644
--- a/packages/@ember/-internals/glimmer/lib/helpers/array.ts
+++ b/packages/@ember/-internals/glimmer/lib/helpers/array.ts
@@ -11,7 +11,7 @@ import { PathReference } from '@glimmer/reference';
```handlebars
@@ -19,7 +19,7 @@ import { PathReference } from '@glimmer/reference';
or
```handlebars
{{my-component people=(array
- 'Tom Dade'
+ 'Tom Dale'
'Yehuda Katz'
this.myOtherPerson)
}}
@@ -28,7 +28,7 @@ import { PathReference } from '@glimmer/reference';
Would result in an object such as:
```js
- ['Tom Date', 'Yehuda Katz', this.get('myOtherPerson')]
+ ['Tom Dale', 'Yehuda Katz', this.get('myOtherPerson')]
```
Where the 3rd item in the array is bound to updates of the `myOtherPerson` property.
From 563c8111629e3ac83a0a70716eee4a62b41da063 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Sat, 25 Jul 2020 15:25:04 -0400
Subject: [PATCH 0044/1405] Update CONTRIBUTING.md
Co-authored-by: Isaac Lee <16869656+ijlee2@users.noreply.github.com>
---
CONTRIBUTING.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index efa15e7100f..f3dc7d00eb9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -252,7 +252,7 @@ NOTE: Partially copied from https://raw.github.com/thoughtbot/factory_girl_rails
# CI (Github Actions) Tests
-We use [GitHub Actions](https://github.com/ember.js/ember.js/actions?query=workflow%3ABuild+event%3Apull_request) to test each PR before it is merged.
+We use [GitHub Actions](https://github.com/emberjs/ember.js/actions?query=workflow%3ABuild+event%3Apull_request) to test each PR before it is merged.
When you submit your PR (or later change that code), a CI build will automatically be kicked off. A note will be added to the PR, and will indicate the current status of the build.
From 6532c0da0a2e323f1e0f021e2dd37b40007a344a Mon Sep 17 00:00:00 2001
From: Rich Glazerman
Date: Sat, 25 Jul 2020 19:04:23 -0400
Subject: [PATCH 0045/1405] Fix keyName binding issue
---
.../@ember/-internals/glimmer/lib/component-managers/curly.ts | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts b/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts
index a79357c7a1a..1d5859fcac5 100644
--- a/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts
+++ b/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts
@@ -323,9 +323,7 @@ export default class CurlyComponentManager
addObserver(
component,
keyName,
- () => {
- component[PROPERTY_DID_CHANGE](keyName);
- },
+ component[PROPERTY_DID_CHANGE].bind(component, keyName),
undefined,
true
);
From bdc02d999c96306981e7331ac9ff0d1e2ca086e0 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Sat, 25 Jul 2020 22:11:26 -0400
Subject: [PATCH 0046/1405] Update .github/workflows/cron.yml
Co-authored-by: Godfrey Chan
---
.github/workflows/cron.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml
index e4603797d04..9386d198ec6 100644
--- a/.github/workflows/cron.yml
+++ b/.github/workflows/cron.yml
@@ -52,5 +52,5 @@ jobs:
- name: Cleanup
# Always cleanup the cron-* branches
- if: ${{ success() }} || ${{ failure() }}
+ if: always()
run: git push https://${GITHUB_ACTOR}:${{ secrets.PERSONAL_TOKEN}}@github.com/${GITHUB_REPOSITORY} --delete cron-${{matrix.branch}}-${{env.SHA}} || true # Don't fail build if cleanup fails
From 54f87f6dd0d195e575b7efeeb54de0d82b2c5c47 Mon Sep 17 00:00:00 2001
From: bekzod
Date: Sun, 26 Jul 2020 17:44:16 +0500
Subject: [PATCH 0047/1405] remove `_viewRegistry` inject to view
---
packages/@ember/application/tests/application_test.js | 1 -
packages/@ember/engine/index.js | 1 -
packages/@ember/engine/tests/engine_test.js | 1 -
packages/internal-test-helpers/lib/test-cases/rendering.js | 1 -
4 files changed, 4 deletions(-)
diff --git a/packages/@ember/application/tests/application_test.js b/packages/@ember/application/tests/application_test.js
index 321febb4909..f10e7cec725 100644
--- a/packages/@ember/application/tests/application_test.js
+++ b/packages/@ember/application/tests/application_test.js
@@ -129,7 +129,6 @@ moduleFor(
verifyRegistration(assert, application, 'controller:basic');
verifyRegistration(assert, application, '-view-registry:main');
- verifyInjection(assert, application, 'view', '_viewRegistry', '-view-registry:main');
verifyInjection(assert, application, 'route', '_topLevelViewTemplate', 'template:-outlet');
verifyRegistration(assert, application, 'route:basic');
verifyRegistration(assert, application, 'event_dispatcher:main');
diff --git a/packages/@ember/engine/index.js b/packages/@ember/engine/index.js
index cc67b527c4b..7bd6caeec5c 100644
--- a/packages/@ember/engine/index.js
+++ b/packages/@ember/engine/index.js
@@ -495,7 +495,6 @@ function commonSetupRegistry(registry) {
registry.register('controller:basic', Controller, { instantiate: false });
- registry.injection('view', '_viewRegistry', '-view-registry:main');
registry.injection('renderer', '_viewRegistry', '-view-registry:main');
registry.injection('route', '_topLevelViewTemplate', 'template:-outlet');
diff --git a/packages/@ember/engine/tests/engine_test.js b/packages/@ember/engine/tests/engine_test.js
index e3fb1e7cc04..4dd6b754f1f 100644
--- a/packages/@ember/engine/tests/engine_test.js
+++ b/packages/@ember/engine/tests/engine_test.js
@@ -62,7 +62,6 @@ moduleFor(
`optionsForType 'view'`
);
verifyRegistration(assert, engine, 'controller:basic');
- verifyInjection(assert, engine, 'view', '_viewRegistry', '-view-registry:main');
verifyInjection(assert, engine, 'renderer', '_viewRegistry', '-view-registry:main');
verifyInjection(assert, engine, 'route', '_topLevelViewTemplate', 'template:-outlet');
verifyInjection(assert, engine, 'view:-outlet', 'namespace', 'application:main');
diff --git a/packages/internal-test-helpers/lib/test-cases/rendering.js b/packages/internal-test-helpers/lib/test-cases/rendering.js
index 405bfa028ca..ab152b5e70c 100644
--- a/packages/internal-test-helpers/lib/test-cases/rendering.js
+++ b/packages/internal-test-helpers/lib/test-cases/rendering.js
@@ -25,7 +25,6 @@ export default class RenderingTestCase extends AbstractTestCase {
owner.register('event_dispatcher:main', EventDispatcher);
// TODO: why didn't buildOwner do this for us?
- owner.inject('view', '_viewRegistry', '-view-registry:main');
owner.inject('renderer', '_viewRegistry', '-view-registry:main');
this.renderer = this.owner.lookup('renderer:-dom');
From cc892c0160c2dd21fd31235476ac45cc84f14ec4 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Sun, 26 Jul 2020 18:07:26 -0400
Subject: [PATCH 0048/1405] [BUGFIX release] Update glimmer-vm to 0.54.2.
Fixes issues with the (still private) `assertDestroyablesDestroyed`
API that was introduced with the Destroyables RFC.
See https://github.com/glimmerjs/glimmer-vm/pull/1119 for details.
---
package.json | 16 ++---
yarn.lock | 196 +++++++++++++++++++++++++--------------------------
2 files changed, 106 insertions(+), 106 deletions(-)
diff --git a/package.json b/package.json
index 96e1fb56b85..bdcac6e87a2 100644
--- a/package.json
+++ b/package.json
@@ -74,15 +74,15 @@
},
"devDependencies": {
"@babel/preset-env": "^7.9.5",
- "@glimmer/compiler": "^0.54.1",
+ "@glimmer/compiler": "^0.54.2",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.54.1",
- "@glimmer/node": "^0.54.1",
- "@glimmer/opcode-compiler": "^0.54.1",
- "@glimmer/program": "^0.54.1",
- "@glimmer/reference": "^0.54.1",
- "@glimmer/runtime": "^0.54.1",
- "@glimmer/validator": "^0.54.1",
+ "@glimmer/interfaces": "^0.54.2",
+ "@glimmer/node": "^0.54.2",
+ "@glimmer/opcode-compiler": "^0.54.2",
+ "@glimmer/program": "^0.54.2",
+ "@glimmer/reference": "^0.54.2",
+ "@glimmer/runtime": "^0.54.2",
+ "@glimmer/validator": "^0.54.2",
"@simple-dom/document": "^1.4.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
diff --git a/yarn.lock b/yarn.lock
index 02dbd01b3a4..1f8b045d0e4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -913,142 +913,142 @@
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog==
-"@glimmer/compiler@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.54.1.tgz#92d1aa56918252df5ea159bf245c8179d65ca5f5"
- integrity sha512-7lxTajz9yCJrgzHGd9FRdPEXqya3VFtur+tMWTbu/KumbjWXcOIfsFJytVduFUACTnV6+xK7WKTQBiG0+YJjJA==
- dependencies:
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/syntax" "^0.54.1"
- "@glimmer/util" "^0.54.1"
- "@glimmer/wire-format" "^0.54.1"
+"@glimmer/compiler@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.54.2.tgz#e81b7302ebac707dfd5b6af438c4da1e7571ccc0"
+ integrity sha512-1e4vYznBYz7OmEpW7ZhO2D3xYy2W1sOXMeJFEQ+yGagQp9M4FdEERJSMYpcslJ0TFYWxY5xrg8F2et+fZpSadQ==
+ dependencies:
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/syntax" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
+ "@glimmer/wire-format" "^0.54.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/encoder@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.54.1.tgz#73d328b0a54af698d89b7882b27832f1e5e75f06"
- integrity sha512-pZZgb48jOY9cM9GzeDu42g61hW+oqORHjF40DuY2LpPEciUNV2pe306R4HXD4SrSlRBVnlKE8cspWaqsIWvNiQ==
+"@glimmer/encoder@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.54.2.tgz#bcae3d066f4408335b629841190cb53fe424a668"
+ integrity sha512-HBiEAA4/PJFJvI/7TsObv0UwfoI/nrhvdMpgng9uW6O7ztucq7mdKvaVYvCOsgGo7X2X+3pjL3kKtRlihRinUw==
dependencies:
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/vm" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/vm" "^0.54.2"
"@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/interfaces@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.54.1.tgz#b8d2cfc59ed5dd5eefd8dd109657b580a34ef377"
- integrity sha512-G8PdpZH2lugcsxt2N/R/WNKGCOXukCDKMCukda4a3DnYEXQLccTyhNVtJFWKHh1C6pxYLXD5sNA0b90GJUrCww==
+"@glimmer/interfaces@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.54.2.tgz#d7735869050ca7e1731424aa64ae37b1cb853091"
+ integrity sha512-Gqvr6Eh4Xy7lF14GZi6RbnVeA7gDj2pXMJtdh68TFL2u/VqfhTXy4+IFRvUh4bpJj+1YayNFupuJSn0oVrEDGQ==
dependencies:
"@simple-dom/interface" "^1.4.0"
-"@glimmer/low-level@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.54.1.tgz#5989aeebfa5ed80136c3e72ccf8aa59997cdf6be"
- integrity sha512-XmgzEYvgkMmwC53CdVM9bJ3SdNyNggXIerQsjlF4KSXgVowxbaL8atpLFzPu6h18la4apAmsvYMb81u25xbryQ==
+"@glimmer/low-level@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.54.2.tgz#ba6c49e64b1edc17229930785eb900ca294f9247"
+ integrity sha512-zvqOvkN1FzaQWy2n9CNqTWj7ziyVvAL82CE6wT9Wumw0R6JiS4UnL+EymWLltvRxdO9k7tfVH1sIacx2+H1WEQ==
-"@glimmer/node@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.54.1.tgz#40e7408530f5e5f1e153868af2dcfa33832a9181"
- integrity sha512-6YaDE0J23dQj/X20pblSFzdQie85n5rIKsRp4fMrUZRIR6OSW0FVMp6hTKp73jP4oe8DciQ4EVcW0sg5xeVlpA==
+"@glimmer/node@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.54.2.tgz#ac3ecd45cd2738e7b0e1a2232950e73926efbcf7"
+ integrity sha512-TG6z/L/cDYgN6VOkoJKhXlTvq6sNTdARzEBCryp2jbIU3o7SGx5OZjcCjsH+vELEntWrh/b7RXFo9areaKUSWg==
dependencies:
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/runtime" "^0.54.1"
- "@glimmer/util" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/runtime" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
"@simple-dom/document" "^1.4.0"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/opcode-compiler@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.54.1.tgz#8cfd833b9ce9d0958d073f5b93a47fe390745c61"
- integrity sha512-H8MaTAzoyekoBWUU9MQJmUPSpsuRA1BgHjhvXxTHb4CWH7wkbckBGe3hDIQx5XlofqRWEYBdjuDfC5pZ4GGKZw==
- dependencies:
- "@glimmer/encoder" "^0.54.1"
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/program" "^0.54.1"
- "@glimmer/reference" "^0.54.1"
- "@glimmer/util" "^0.54.1"
- "@glimmer/vm" "^0.54.1"
- "@glimmer/wire-format" "^0.54.1"
-
-"@glimmer/program@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.54.1.tgz#a219196e2255f0a229ade4babd674d2ff88b07ed"
- integrity sha512-8ozfp7+XnsZsyT2dHi2OLY8l8IGS4pMVc6TMSWkVllLifPjPscDdgdZknTAEOMiBuPzZriT5VTXF00+3Q6+QEQ==
- dependencies:
- "@glimmer/encoder" "^0.54.1"
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/util" "^0.54.1"
-
-"@glimmer/reference@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.54.1.tgz#12561612d117cd877cdf56f77c2bae4eefa37ad1"
- integrity sha512-sSDnh5/fhGHRcXkgVvWPnTRszzYVfcrrCh5pYkNADM+A1ivVJQzhAfZyV5+WSbPN5eXeh5Z7tXRpSiMH3NwH4g==
+"@glimmer/opcode-compiler@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.54.2.tgz#55cab6ebcb8134b4bbcacbdeedbb10b2b55f597f"
+ integrity sha512-yHdhAUeNJqqH6I91kbi07/K7sk7nfGl6Bp9zA5oVYe+PnFTWsMAtySQT51QFie7vXgPNiHq+M1YWOtqBSGKm6A==
+ dependencies:
+ "@glimmer/encoder" "^0.54.2"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/program" "^0.54.2"
+ "@glimmer/reference" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
+ "@glimmer/vm" "^0.54.2"
+ "@glimmer/wire-format" "^0.54.2"
+
+"@glimmer/program@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.54.2.tgz#2ce978a3bdd853804d2d03021f9a7616fb2f9607"
+ integrity sha512-CQIwVMtE3Hh6W8NkombU1sh8CUgZUCESrhQx42eK58Rf8fEOQOxGdFbrz2TzXM2jNCE3buh1vwSVC0oKAdsQLg==
+ dependencies:
+ "@glimmer/encoder" "^0.54.2"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
+
+"@glimmer/reference@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.54.2.tgz#996509e483f7299f5191260ab622db5816485a3a"
+ integrity sha512-upBx3AMJVf3BkGN0UtgVVapcdjR7g/UF/GkQWcrzIOGchDFnFhY443Ys1oLtMNBA02RhtUr+U8KzUSsFV3sfsw==
dependencies:
"@glimmer/env" "^0.1.7"
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/util" "^0.54.1"
- "@glimmer/validator" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
+ "@glimmer/validator" "^0.54.2"
-"@glimmer/runtime@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.54.1.tgz#ed868ba80d6edf91a53da0652f306bcc50dd5276"
- integrity sha512-YCsngOiaH8EFXxuyVONK9Sz5CYvwHs4lcNbHoTdFP7bpVWgXg9mHLdqryOSoP9Ei9FF7Z5NWTO/KCo8UGeR4Lg==
+"@glimmer/runtime@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.54.2.tgz#149fe6a29f279785d6fbac6ec933036088f7a5e7"
+ integrity sha512-SwumHB0uw4/L6sgXmMTc4cf3GwYe8siFk7Qi2hVVTSZdZGrfIOP5ZB94x0HEWWeSUgy/4ar9TcsKvfj5LyLBvA==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/low-level" "^0.54.1"
- "@glimmer/program" "^0.54.1"
- "@glimmer/reference" "^0.54.1"
- "@glimmer/util" "^0.54.1"
- "@glimmer/validator" "^0.54.1"
- "@glimmer/vm" "^0.54.1"
- "@glimmer/wire-format" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/low-level" "^0.54.2"
+ "@glimmer/program" "^0.54.2"
+ "@glimmer/reference" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
+ "@glimmer/validator" "^0.54.2"
+ "@glimmer/vm" "^0.54.2"
+ "@glimmer/wire-format" "^0.54.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/syntax@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.54.1.tgz#e3a1e1bfa72719ea2357a7f147ff595d0790a95f"
- integrity sha512-bNRSXVOKBaZyE+kPjFy5BkoUK0VnVkQ3ph//YSwnVY4xM9AF9E5nKVgDBPxQlioCK3ODBWzhMdfTHZ/RHkLS3Q==
+"@glimmer/syntax@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.54.2.tgz#60d08458002c106791d4c5b648227ec0f29a1b2a"
+ integrity sha512-EpQGbbzfvBmeztc15SsriyAgD0aKgsxMOARVtW5buvCPw3dGYYNdSeyUJ3vInbrFGxkZLV390ht8VCbsDbqtlA==
dependencies:
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/util" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
handlebars "^4.7.4"
simple-html-tokenizer "^0.5.9"
-"@glimmer/util@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.54.1.tgz#9995b08dc7fd0cc8fb5c3522574d680ccc8f5511"
- integrity sha512-WrpTueecsmzVALrG7U0LBLDWtsGvj3eRZ/z72BKi4+usK2DYt+346LS+VCgozC8XdCIS9BawI37qogIXCyZrjw==
+"@glimmer/util@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.54.2.tgz#211b027982006b6bcd393312cf474c7ee17922a0"
+ integrity sha512-ggJY3qayAxjiMuoToxxtwai+AI2KXrJSbOEvbvBV9K+IMykmdjhWGRWWEONnd9xJzQDlus5D9ROMypOEvsbS9w==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/validator@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.54.1.tgz#955406fcd86a48aa8b635bf49dec82a5f6138a33"
- integrity sha512-EFd/jQwqqlTi5fdN5+KEt051GjgDiC42Sa8LJxFJnDb6lxsEm0cpgxWMPPASgLEEgQK3OWVJz5sxZKJfMNP/aQ==
+"@glimmer/validator@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.54.2.tgz#9681ff89d9874a5b075c73bfc828ffc15b23c7df"
+ integrity sha512-D/BJo06+dSmjJuLchYK79Gj1kPHZ3K6qz5bOJn3FtOwftFa1XqW+1zbBYs4tqwbe3dHoRll4+t/X0Q4AXZpt7Q==
dependencies:
"@glimmer/env" "^0.1.7"
-"@glimmer/vm@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.54.1.tgz#b4fe9992febfbd72f9bb85843e02307b55e643b0"
- integrity sha512-zZRc9z/0NPJhu0uG4ZmHw+VYL2AcQAgwfTYNAW6+7+CvP2Jxd04Anvz4HuaqO4NhntjbmUN0jolz+xmPOts4jg==
+"@glimmer/vm@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.54.2.tgz#9a7e9c5839be0cd5d7b1495d06f369754686a750"
+ integrity sha512-LdvD8kqUT5VewGC52uhdGuJZlX/Mwm6/8sf/pRvI/4Cz0bZL+PMQQsX8IPdwGvftSu3wRIt33JWdrL+9tjPgAA==
dependencies:
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/util" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
-"@glimmer/wire-format@^0.54.1":
- version "0.54.1"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.54.1.tgz#59804ce334a6d265de1f2e04c97862087ac897be"
- integrity sha512-XrN5TOi//MGd3/wbeTVex2lJodCxT9r1ySLXsSIfsZ9y8cb+IqNgVwqYpfvBdafzRLdiI1OnatTjSdnILGvVzw==
+"@glimmer/wire-format@^0.54.2":
+ version "0.54.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.54.2.tgz#aef5f618cbacd212359022df94393987d9e4a876"
+ integrity sha512-lmp9zW9Uo7CuNqpXJk2hxF7zLOkbr9fOjQKbSc3b+YletT0LhfNFRAs0R2WhQMlyw2UrNzc81+C0zt4wUdypkQ==
dependencies:
- "@glimmer/interfaces" "^0.54.1"
- "@glimmer/util" "^0.54.1"
+ "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/util" "^0.54.2"
"@simple-dom/document@^1.4.0":
version "1.4.0"
From ef9f971fe94de3f5823b51060d0e16fceb4a236c Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Sun, 26 Jul 2020 18:48:47 -0400
Subject: [PATCH 0049/1405] Update CHANGELOG.md for 3.20.2.
[ci skip]
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a61d30ed78a..51a52199ae7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Ember Changelog
+### v3.20.2 (July 26, 2020)
+
+- [#19056](https://github.com/emberjs/ember.js/pull/19056) Update Glimmer rendering engine to 0.54.2. Fixes an issue with (private for now) destroyables work to enable the destroyables polyfill to work more appropriately.
+
### v3.21.0-beta.2 (July 20, 2020)
- [#19040](https://github.com/emberjs/ember.js/pull/19040) [BUGFIX] Fix a memory leak that occurred when changing the array passed to `{{each}}`
From 1b8e122635607afe8f967a00f9a33c52ab1f3472 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Mon, 27 Jul 2020 17:54:38 -0400
Subject: [PATCH 0050/1405] Add v3.21.0-beta.3 to CHANGELOG [ci skip]
(cherry picked from commit 9d50c45961f30b2efe26074e9e0ae11c3c6f82c7)
---
CHANGELOG.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 51a52199ae7..096c0102a7c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
# Ember Changelog
+### v3.21.0-beta.3 (July 27, 2020)
+
+- [#19048](https://github.com/emberjs/ember.js/pull/19048) [BUGFIX] Update router.js to ensure transition.abort works for query param only transitions.
+- [#19056](https://github.com/emberjs/ember.js/pull/19056) [BUGFIX] Update glimmer-vm to 0.54.2.
+
### v3.20.2 (July 26, 2020)
- [#19056](https://github.com/emberjs/ember.js/pull/19056) Update Glimmer rendering engine to 0.54.2. Fixes an issue with (private for now) destroyables work to enable the destroyables polyfill to work more appropriately.
From 46b7aad9276f389982418b4a3dde527bb7b6608c Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Wed, 29 Jul 2020 09:45:26 -0400
Subject: [PATCH 0051/1405] [BUGFIX lts] Prevent `` from
erroring in HistoryLocation
It is perfectly valid to have a `` element without an `href`
attribute but the code previously assumed that if a `` was present
that it **must** contain an `href`.
Specifically, prior to this change if you had a `` like:
```html
```
You would get the following error:
```
Uncaught TypeError: Cannot read property 'replace' of null
```
See https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base for
more details on usage of `` without an `href`.
---
.../routing/lib/location/history_location.ts | 2 +-
.../tests/location/history_location_test.js | 36 +++++++++++++++++++
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/packages/@ember/-internals/routing/lib/location/history_location.ts b/packages/@ember/-internals/routing/lib/location/history_location.ts
index 9fd5206766d..a368f13b1b7 100644
--- a/packages/@ember/-internals/routing/lib/location/history_location.ts
+++ b/packages/@ember/-internals/routing/lib/location/history_location.ts
@@ -77,7 +77,7 @@ export default class HistoryLocation extends EmberObject implements EmberLocatio
let base = document.querySelector('base');
let baseURL: string | null = '';
- if (base) {
+ if (base !== null && base.hasAttribute('href')) {
baseURL = base.getAttribute('href');
}
diff --git a/packages/@ember/-internals/routing/tests/location/history_location_test.js b/packages/@ember/-internals/routing/tests/location/history_location_test.js
index 988e4b3660f..6efad8dd768 100644
--- a/packages/@ember/-internals/routing/tests/location/history_location_test.js
+++ b/packages/@ember/-internals/routing/tests/location/history_location_test.js
@@ -97,6 +97,42 @@ moduleFor(
location.initState();
}
+ ['@test with href sets `baseURL`'](assert) {
+ assert.expect(1);
+
+ let base = document.createElement('base');
+ base.setAttribute('href', '/foo/');
+
+ document.head.appendChild(base);
+
+ try {
+ createLocation();
+ location.initState();
+
+ assert.strictEqual(location.get('baseURL'), '/foo/');
+ } finally {
+ document.head.removeChild(base);
+ }
+ }
+
+ ['@test without href is ignored'](assert) {
+ assert.expect(1);
+
+ let base = document.createElement('base');
+ base.setAttribute('target', '_parent');
+
+ document.head.appendChild(base);
+
+ try {
+ createLocation();
+ location.initState();
+
+ assert.strictEqual(location.get('baseURL'), '');
+ } finally {
+ document.head.removeChild(base);
+ }
+ }
+
['@test base URL is removed when retrieving the current pathname'](assert) {
assert.expect(1);
From 6f143b6cd307148668c26be2c773f1b9552744bf Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Wed, 29 Jul 2020 10:10:57 -0400
Subject: [PATCH 0052/1405] [BUGFIX release] Update to glimmer-vm 0.55.1
The primary change here is a refactor of the iteration protocols.
---
package.json | 16 ++---
yarn.lock | 196 +++++++++++++++++++++++++--------------------------
2 files changed, 106 insertions(+), 106 deletions(-)
diff --git a/package.json b/package.json
index bdcac6e87a2..8d2a767e84c 100644
--- a/package.json
+++ b/package.json
@@ -74,15 +74,15 @@
},
"devDependencies": {
"@babel/preset-env": "^7.9.5",
- "@glimmer/compiler": "^0.54.2",
+ "@glimmer/compiler": "^0.55.1",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.54.2",
- "@glimmer/node": "^0.54.2",
- "@glimmer/opcode-compiler": "^0.54.2",
- "@glimmer/program": "^0.54.2",
- "@glimmer/reference": "^0.54.2",
- "@glimmer/runtime": "^0.54.2",
- "@glimmer/validator": "^0.54.2",
+ "@glimmer/interfaces": "^0.55.1",
+ "@glimmer/node": "^0.55.1",
+ "@glimmer/opcode-compiler": "^0.55.1",
+ "@glimmer/program": "^0.55.1",
+ "@glimmer/reference": "^0.55.1",
+ "@glimmer/runtime": "^0.55.1",
+ "@glimmer/validator": "^0.55.1",
"@simple-dom/document": "^1.4.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
diff --git a/yarn.lock b/yarn.lock
index 1f8b045d0e4..792531ec789 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -913,142 +913,142 @@
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog==
-"@glimmer/compiler@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.54.2.tgz#e81b7302ebac707dfd5b6af438c4da1e7571ccc0"
- integrity sha512-1e4vYznBYz7OmEpW7ZhO2D3xYy2W1sOXMeJFEQ+yGagQp9M4FdEERJSMYpcslJ0TFYWxY5xrg8F2et+fZpSadQ==
- dependencies:
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/syntax" "^0.54.2"
- "@glimmer/util" "^0.54.2"
- "@glimmer/wire-format" "^0.54.2"
+"@glimmer/compiler@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.55.1.tgz#c85fcbf00125c7c0fb74cd179a9e30c42dddccee"
+ integrity sha512-t4jFag9i1/jo9JId2VMPuFOIY0E8MlRmyMnfh9mipC9iZXZsC8d0PCia6/FvZRvUJvNRA+brMwck6IHfiW2Nmw==
+ dependencies:
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/syntax" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
+ "@glimmer/wire-format" "^0.55.1"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/encoder@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.54.2.tgz#bcae3d066f4408335b629841190cb53fe424a668"
- integrity sha512-HBiEAA4/PJFJvI/7TsObv0UwfoI/nrhvdMpgng9uW6O7ztucq7mdKvaVYvCOsgGo7X2X+3pjL3kKtRlihRinUw==
+"@glimmer/encoder@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.55.1.tgz#1356c123e61d43fed9b3a36a189cd1776974dae2"
+ integrity sha512-Q3WueSDKYxCnQlk/0Sp1rpyMckh553zwA3yQ9PE25pEnt9LVnfn3TWGKb4XOAjiaGt0hyDLfFI7Ftt+4rbsCOA==
dependencies:
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/vm" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/vm" "^0.55.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/interfaces@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.54.2.tgz#d7735869050ca7e1731424aa64ae37b1cb853091"
- integrity sha512-Gqvr6Eh4Xy7lF14GZi6RbnVeA7gDj2pXMJtdh68TFL2u/VqfhTXy4+IFRvUh4bpJj+1YayNFupuJSn0oVrEDGQ==
+"@glimmer/interfaces@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.55.1.tgz#be9499d83a63514b2470f19e5430b06c7edb2076"
+ integrity sha512-rbmL/xT9mHWX2jioYLT0V/H0QS8qaIJ1HCOlkbX5zvAASNu8+kwTXy8Bq4hx1OW3qwul6ihfHq/6k2oLxJ90JQ==
dependencies:
"@simple-dom/interface" "^1.4.0"
-"@glimmer/low-level@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.54.2.tgz#ba6c49e64b1edc17229930785eb900ca294f9247"
- integrity sha512-zvqOvkN1FzaQWy2n9CNqTWj7ziyVvAL82CE6wT9Wumw0R6JiS4UnL+EymWLltvRxdO9k7tfVH1sIacx2+H1WEQ==
+"@glimmer/low-level@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.55.1.tgz#f3ab819637cfb0a38c04bd675b28ebb3f4bd238d"
+ integrity sha512-wK0Lkb7P3ajOcMbzCrDokC13GAtvyABrF+KYkNlNMzrCBSZ0q9BsFXRhSHhO4UIZm4jQmbaQVOy5SYdoB4Bu2A==
-"@glimmer/node@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.54.2.tgz#ac3ecd45cd2738e7b0e1a2232950e73926efbcf7"
- integrity sha512-TG6z/L/cDYgN6VOkoJKhXlTvq6sNTdARzEBCryp2jbIU3o7SGx5OZjcCjsH+vELEntWrh/b7RXFo9areaKUSWg==
+"@glimmer/node@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.55.1.tgz#0d6fd43b6f4cbd0a0b47c0482cfd047f31bff5b7"
+ integrity sha512-PgAkx8tSJc4xWyVS4qCSNo13KNRklUZDShQmhoFOv9nvCZdWLcUv1SZJshGQlmwQNxY6YCHjRlnRJN17VBcZBQ==
dependencies:
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/runtime" "^0.54.2"
- "@glimmer/util" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/runtime" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
"@simple-dom/document" "^1.4.0"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/opcode-compiler@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.54.2.tgz#55cab6ebcb8134b4bbcacbdeedbb10b2b55f597f"
- integrity sha512-yHdhAUeNJqqH6I91kbi07/K7sk7nfGl6Bp9zA5oVYe+PnFTWsMAtySQT51QFie7vXgPNiHq+M1YWOtqBSGKm6A==
- dependencies:
- "@glimmer/encoder" "^0.54.2"
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/program" "^0.54.2"
- "@glimmer/reference" "^0.54.2"
- "@glimmer/util" "^0.54.2"
- "@glimmer/vm" "^0.54.2"
- "@glimmer/wire-format" "^0.54.2"
-
-"@glimmer/program@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.54.2.tgz#2ce978a3bdd853804d2d03021f9a7616fb2f9607"
- integrity sha512-CQIwVMtE3Hh6W8NkombU1sh8CUgZUCESrhQx42eK58Rf8fEOQOxGdFbrz2TzXM2jNCE3buh1vwSVC0oKAdsQLg==
- dependencies:
- "@glimmer/encoder" "^0.54.2"
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/util" "^0.54.2"
-
-"@glimmer/reference@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.54.2.tgz#996509e483f7299f5191260ab622db5816485a3a"
- integrity sha512-upBx3AMJVf3BkGN0UtgVVapcdjR7g/UF/GkQWcrzIOGchDFnFhY443Ys1oLtMNBA02RhtUr+U8KzUSsFV3sfsw==
+"@glimmer/opcode-compiler@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.55.1.tgz#d71e67ad3b4a0852c4aad45f2ca9dff0010e60fb"
+ integrity sha512-b/xH+2It9MtpK4PbltUnlLtjQdX4eaggWXrS86i+leSXfj2F6BtBPZd7k9QZGcXXGHuZmuF0fQXZrN1LN8pxDA==
+ dependencies:
+ "@glimmer/encoder" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/program" "^0.55.1"
+ "@glimmer/reference" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
+ "@glimmer/vm" "^0.55.1"
+ "@glimmer/wire-format" "^0.55.1"
+
+"@glimmer/program@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.55.1.tgz#19b0af648044ac2e727a25fb446dd30fa6aa6264"
+ integrity sha512-JXPF1o6hHp9SX3MX+l2t4B61mJp4YGO5LWV1E0ciHUGGQSVaHh7DUnc0Qje36yUthVbB6qT5I0GWF487Egzgyg==
+ dependencies:
+ "@glimmer/encoder" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
+
+"@glimmer/reference@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.55.1.tgz#6f5028a16ea449e57f0e9ac9b47528f8c2182991"
+ integrity sha512-7EwHUO2pc5P9IdhypZn2eqFL9rvcME3Xs7x8Uhp9N+Wqfmuzkf3IhZs9GgQf3Tk4h52j5ZNnS6yXy/bj7uHClA==
dependencies:
"@glimmer/env" "^0.1.7"
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/util" "^0.54.2"
- "@glimmer/validator" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
+ "@glimmer/validator" "^0.55.1"
-"@glimmer/runtime@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.54.2.tgz#149fe6a29f279785d6fbac6ec933036088f7a5e7"
- integrity sha512-SwumHB0uw4/L6sgXmMTc4cf3GwYe8siFk7Qi2hVVTSZdZGrfIOP5ZB94x0HEWWeSUgy/4ar9TcsKvfj5LyLBvA==
+"@glimmer/runtime@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.55.1.tgz#cd79f451a2ff2b6d9aac74164752812415b7d149"
+ integrity sha512-t9J+tSSGq0KY2WoVhKaZkhmLWGlC7Hjosn43EiKPERf2x+wpkKkS/EGo6UHa0YjPIVnfFhWeY5C3fcVMZajKVw==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/low-level" "^0.54.2"
- "@glimmer/program" "^0.54.2"
- "@glimmer/reference" "^0.54.2"
- "@glimmer/util" "^0.54.2"
- "@glimmer/validator" "^0.54.2"
- "@glimmer/vm" "^0.54.2"
- "@glimmer/wire-format" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/low-level" "^0.55.1"
+ "@glimmer/program" "^0.55.1"
+ "@glimmer/reference" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
+ "@glimmer/validator" "^0.55.1"
+ "@glimmer/vm" "^0.55.1"
+ "@glimmer/wire-format" "^0.55.1"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/syntax@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.54.2.tgz#60d08458002c106791d4c5b648227ec0f29a1b2a"
- integrity sha512-EpQGbbzfvBmeztc15SsriyAgD0aKgsxMOARVtW5buvCPw3dGYYNdSeyUJ3vInbrFGxkZLV390ht8VCbsDbqtlA==
+"@glimmer/syntax@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.55.1.tgz#adca96147e5c2b4e47a6ee8d8276effc4d31b6e5"
+ integrity sha512-QKW97Cl+Rz8dTWkYUewclLBRcyICg2Fb6BFz2oUDo17gP7w8eqb+XL8wAfzG1lDJ+WDT7pwprM8zUyvn2eYa5g==
dependencies:
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/util" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
handlebars "^4.7.4"
simple-html-tokenizer "^0.5.9"
-"@glimmer/util@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.54.2.tgz#211b027982006b6bcd393312cf474c7ee17922a0"
- integrity sha512-ggJY3qayAxjiMuoToxxtwai+AI2KXrJSbOEvbvBV9K+IMykmdjhWGRWWEONnd9xJzQDlus5D9ROMypOEvsbS9w==
+"@glimmer/util@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.55.1.tgz#43657af0adde30ad1cb3a8d72c85a8af35de0194"
+ integrity sha512-F9Hr2hS/H738F2voG+W4Hx/4+W7uDeuqg7ddIPUecZP6HQHhqTbgGaQJIt5J1emJ1D4nLPpjSJpn50MVbVGeaQ==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/validator@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.54.2.tgz#9681ff89d9874a5b075c73bfc828ffc15b23c7df"
- integrity sha512-D/BJo06+dSmjJuLchYK79Gj1kPHZ3K6qz5bOJn3FtOwftFa1XqW+1zbBYs4tqwbe3dHoRll4+t/X0Q4AXZpt7Q==
+"@glimmer/validator@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.55.1.tgz#c2ff4c8c9fd7e20d3df4bb98519eda840f8bc4ce"
+ integrity sha512-CX1Vb118xIjt0lYjBQvnAJo5lZIMaMg3Ef6cNQRM1gFqZkrh7sSs5Kz3hoxNxUtjiukRd2nfi+EirMhfcGgsWg==
dependencies:
"@glimmer/env" "^0.1.7"
-"@glimmer/vm@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.54.2.tgz#9a7e9c5839be0cd5d7b1495d06f369754686a750"
- integrity sha512-LdvD8kqUT5VewGC52uhdGuJZlX/Mwm6/8sf/pRvI/4Cz0bZL+PMQQsX8IPdwGvftSu3wRIt33JWdrL+9tjPgAA==
+"@glimmer/vm@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.55.1.tgz#a8ae535de6ae6ebac6623da709b3f76097b84fa4"
+ integrity sha512-mui0Jf6H4R3U35Gy3viaipawPQbU0rqWf+49qwLALXHgZNtyhHzuLdcn41xVLNikAsRmvmVPbmczBN7uWiAZMw==
dependencies:
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/util" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
-"@glimmer/wire-format@^0.54.2":
- version "0.54.2"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.54.2.tgz#aef5f618cbacd212359022df94393987d9e4a876"
- integrity sha512-lmp9zW9Uo7CuNqpXJk2hxF7zLOkbr9fOjQKbSc3b+YletT0LhfNFRAs0R2WhQMlyw2UrNzc81+C0zt4wUdypkQ==
+"@glimmer/wire-format@^0.55.1":
+ version "0.55.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.55.1.tgz#eff31e76225483ed3b5009639abdc050b7df3212"
+ integrity sha512-plDG2h5q0d/mz5Gzwtx+II/IVwPDIgXK9KsqITFqorQmxzOd2MoYY04nk3C7yN4bFdaqEl0P37rynfE63pgMqw==
dependencies:
- "@glimmer/interfaces" "^0.54.2"
- "@glimmer/util" "^0.54.2"
+ "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/util" "^0.55.1"
"@simple-dom/document@^1.4.0":
version "1.4.0"
From 71f62351f501dba5c7a04a474e8c47c9bd73ddf9 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Wed, 29 Jul 2020 12:26:02 -0400
Subject: [PATCH 0053/1405] Add v3.16.9 to CHANGELOG.md.
[ci skip]
---
CHANGELOG.md | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 096c0102a7c..a6ddad8d063 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -92,6 +92,14 @@
- [#18694](https://github.com/emberjs/ember.js/pull/18694) [BUGFIX] Ensure tag updates are buffered, remove error message
- [#18709](https://github.com/emberjs/ember.js/pull/18709) [BUGFIX] Fix `this` in `@tracked` initializer
+### v3.16.9 (July 29, 2020)
+
+- [#19001](https://github.com/emberjs/ember.js/pull/19001) [BUGFIX] Invoke methods correctly in `TextSupport` `sendAction`
+- [#19023](https://github.com/emberjs/ember.js/pull/19023) [BUGFIX] Avoid over eager property access during `init`
+- [#19048](https://github.com/emberjs/ember.js/pull/19048) [BUGFIX] Update `router.js` to ensure `transition.abort` works for query param only transitions
+- [#19057](https://github.com/emberjs/ember.js/pull/19057) [BUGFIX] Parallelize `inject-babel-helpers` plugin
+- [#19059](https://github.com/emberjs/ember.js/pull/19059) [BUGFIX] Prevent `` from erroring in HistoryLocation
+
### v3.16.8 (April 24, 2020)
- [#18879](https://github.com/emberjs/ember.js/pull/18879) Ensure errors thrown during component construction do not cause (unrelated) errors during application teardown (fixes a common issue when using `setupOnerror` with components asserting during `constructor`/`init`/`didInssertElement`).
From 863cca5986c3ff781d6e235fd382046a3c1f7956 Mon Sep 17 00:00:00 2001
From: Jen Weber
Date: Wed, 29 Jul 2020 22:27:28 -0400
Subject: [PATCH 0054/1405] [DOC release-3-20-1] fix missing docs
---
packages/@ember/-internals/glimmer/lib/syntax/in-element.ts | 2 --
tests/docs/expected.js | 1 +
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/packages/@ember/-internals/glimmer/lib/syntax/in-element.ts b/packages/@ember/-internals/glimmer/lib/syntax/in-element.ts
index d0d25fad539..70c36a157b6 100644
--- a/packages/@ember/-internals/glimmer/lib/syntax/in-element.ts
+++ b/packages/@ember/-internals/glimmer/lib/syntax/in-element.ts
@@ -30,8 +30,6 @@
`destinationElement`. Passing `null` changes the behaviour to appended at the end
of any existing content. Any other value than `null` is currently not supported.
- ```
-
@method in-element
@for Ember.Templates.helpers
@public
diff --git a/tests/docs/expected.js b/tests/docs/expected.js
index 9c0b522a6d0..037ec0a9b03 100644
--- a/tests/docs/expected.js
+++ b/tests/docs/expected.js
@@ -276,6 +276,7 @@ module.exports = {
'href',
'htmlSafe',
'if',
+ 'in-element',
'includes',
'incrementProperty',
'indexOf',
From 2e19e0d61050682b1a356a8f0853a0b10f41bb40 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Wed, 29 Jul 2020 22:15:10 -0400
Subject: [PATCH 0055/1405] [FEATURE] Add @ember/destroyable feature.
The primary implementation happened upstream in Glimmer itself, this is
adding API docs and module exports to be used.
---
packages/@ember/canary-features/index.ts | 2 +
packages/@ember/destroyable/index.ts | 265 +++++++++++++++++++++++
packages/ember/index.js | 23 +-
tests/docs/expected.js | 5 +
4 files changed, 294 insertions(+), 1 deletion(-)
create mode 100644 packages/@ember/destroyable/index.ts
diff --git a/packages/@ember/canary-features/index.ts b/packages/@ember/canary-features/index.ts
index e4e6b7c8329..189b8db78ad 100644
--- a/packages/@ember/canary-features/index.ts
+++ b/packages/@ember/canary-features/index.ts
@@ -22,6 +22,7 @@ export const DEFAULT_FEATURES = {
EMBER_ROUTING_MODEL_ARG: true,
EMBER_GLIMMER_IN_ELEMENT: true,
EMBER_CACHE_API: null,
+ EMBER_DESTROYABLES: null,
};
/**
@@ -83,3 +84,4 @@ export const EMBER_GLIMMER_SET_COMPONENT_TEMPLATE = featureValue(
export const EMBER_ROUTING_MODEL_ARG = featureValue(FEATURES.EMBER_ROUTING_MODEL_ARG);
export const EMBER_GLIMMER_IN_ELEMENT = featureValue(FEATURES.EMBER_GLIMMER_IN_ELEMENT);
export const EMBER_CACHE_API = featureValue(FEATURES.EMBER_CACHE_API);
+export const EMBER_DESTROYABLES = featureValue(FEATURES.EMBER_DESTROYABLES);
diff --git a/packages/@ember/destroyable/index.ts b/packages/@ember/destroyable/index.ts
new file mode 100644
index 00000000000..379ab4711eb
--- /dev/null
+++ b/packages/@ember/destroyable/index.ts
@@ -0,0 +1,265 @@
+export {
+ assertDestroyablesDestroyed,
+ associateDestroyableChild,
+ destroy,
+ enableDestroyableTracking,
+ isDestroying,
+ isDestroyed,
+} from '@glimmer/runtime';
+
+import {
+ registerDestructor as _registerDestructor,
+ unregisterDestructor as _unregisterDestructor,
+} from '@glimmer/runtime';
+
+/**
+ Ember manages the lifecycles and lifetimes of many built in constructs, such
+ as components, and does so in a hierarchical way - when a parent component is
+ destroyed, all of its children are destroyed as well.
+
+ This destroyables API exposes the basic building blocks for destruction:
+
+ * registering a function to be ran when an object is destroyyed
+ * checking if an object is in a destroying state
+ * associate an object as a child of another so that the child object will be destroyed
+ when the associated parent object is destroyed.
+
+ @module @ember/destroyable
+ @category EMBER_DESTROYABLES
+ @public
+*/
+
+/**
+ This function is used to associate a destroyable object with a parent. When the parent
+ is destroyed, all registered children will also be destroyed.
+
+ ```js
+ class CustomSelect extends Component {
+ constructor() {
+ // obj is now a child of the component. When the component is destroyed,
+ // obj will also be destroyed, and have all of its destructors triggered.
+ this.obj = associateDestroyableChild(this, {});
+ }
+ }
+ ```
+
+ Returns the associated child for convenience.
+
+ @method associateDestroyableChild
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @param {Object|Function} parent the destroyable to entangle the child destroyables lifetime with
+ @param {Object|Function} child the destroyable to be entangled with the parents lifetime
+ @param {Function} destructor the destructor to run when the destroyable object is destroyed
+ @returns {Object|Function} the child argument
+ @static
+ @public
+*/
+
+/**
+ Receives a destroyable, and returns true if the destroyable has begun destroying. Otherwise returns
+ false.
+
+ ```js
+ let obj = {};
+ isDestroying(obj); // false
+ destroy(obj);
+ isDestroying(obj); // true
+ // ...sometime later, after scheduled destruction
+ isDestroyed(obj); // true
+ isDestroying(obj); // true
+ ```
+
+ @method isDestroying
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @param {Object|Function} destroyable the object to check
+ @returns {Boolean}
+ @static
+ @public
+*/
+
+/**
+ Receives a destroyable, and returns true if the destroyable has finished destroying. Otherwise
+ returns false.
+
+ ```js
+ let obj = {};
+
+ isDestroyed(obj); // false
+ destroy(obj);
+
+ // ...sometime later, after scheduled destruction
+
+ isDestroyed(obj); // true
+ ```
+
+ @method isDestroyed
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @param {Object|Function} destroyable the object to check
+ @returns {Boolean}
+ @static
+ @public
+*/
+
+/**
+ Initiates the destruction of a destroyable object. It runs all associated destructors, and then
+ destroys all children recursively.
+
+ ```js
+ let obj = {};
+
+ registerDestructor(obj, () => console.log('destroyed!'));
+
+ destroy(obj); // this will schedule the destructor to be called
+
+ // ...some time later, during scheduled destruction
+
+ // destroyed!
+ ```
+
+ Destruction via `destroy()` follows these steps:
+
+ 1, Mark the destroyable such that `isDestroying(destroyable)` returns `true`
+ 2, Call `destroy()` on each of the destroyable's associated children
+ 3, Schedule calling the destroyable's destructors
+ 4, Schedule setting destroyable such that `isDestroyed(destroyable)` returns `true`
+
+ This results in the entire tree of destroyables being first marked as destroying,
+ then having all of their destructors called, and finally all being marked as isDestroyed.
+ There won't be any in between states where some items are marked as `isDestroying` while
+ destroying, while others are not.
+
+ @method destroy
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @param {Object|Function} destroyable the object to destroy
+ @static
+ @public
+*/
+
+/**
+ This function asserts that all objects which have associated destructors or associated children
+ have been destroyed at the time it is called. It is meant to be a low level hook that testing
+ frameworks can use to hook into and validate that all destroyables have in fact been destroyed.
+
+ This function requires that `enableDestroyableTracking` was called previously, and is only
+ available in non-production builds.
+
+ @method assertDestroyablesDestroyed
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @static
+ @public
+*/
+
+/**
+ This function instructs the destroyable system to keep track of all destroyables (their
+ children, destructors, etc). This enables a future usage of `assertDestroyablesDestroyed`
+ to be used to ensure that all destroyable tasks (registered destructors and associated children)
+ have completed when `assertDestroyablesDestroyed` is called.
+
+ @method enableDestroyableTracking
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @static
+ @public
+*/
+
+/**
+ Receives a destroyable object and a destructor function, and associates the
+ function with it. When the destroyable is destroyed with destroy, or when its
+ parent is destroyed, the destructor function will be called.
+
+ ```js
+ import { registerDestructor } from '@ember/destroyable';
+
+ class Modal extends Component {
+ @service resize;
+
+ constructor() {
+ this.resize.register(this, this.layout);
+
+ registerDestructor(this, () => this.resize.unregister(this));
+ }
+ }
+ ```
+
+ Multiple destructors can be associated with a given destroyable, and they can be
+ associated over time, allowing libraries to dynamically add destructors as needed.
+ `registerDestructor` also returns the associated destructor function, for convenience.
+
+ The destructor function is passed a single argument, which is the destroyable itself.
+ This allows the function to be reused multiple times for many destroyables, rather
+ than creating a closure function per destroyable.
+
+ ```js
+ import { registerDestructor } from '@ember/destroyable';
+
+ function unregisterResize(instance) {
+ instance.resize.unregister(instance);
+ }
+
+ class Modal extends Component {
+ @service resize;
+
+ constructor() {
+ this.resize.register(this, this.layout);
+
+ registerDestructor(this, unregisterResize);
+ }
+ }
+ ```
+
+ @method registerDestructor
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @param {Object|Function} destroyable the destroyable to register the destructor function with
+ @param {Function} destructor the destructor to run when the destroyable object is destroyed
+ @static
+ @public
+*/
+export function registerDestructor(
+ destroyable: T,
+ destructor: (destroyable: T) => void
+): (destroyable: T) => void {
+ return _registerDestructor(destroyable, destructor);
+}
+
+/**
+ Receives a destroyable and a destructor function, and de-associates the destructor
+ from the destroyable.
+
+ ```js
+ import { registerDestructor, unregisterDestructor } from '@ember/destroyable';
+
+ class Modal extends Component {
+ @service modals;
+
+ constructor() {
+ this.modals.add(this);
+
+ this.modalDestructor = registerDestructor(this, () => this.modals.remove(this));
+ }
+
+ @action pinModal() {
+ unregisterDestructor(this, this.modalDestructor);
+ }
+ }
+ ```
+
+ @method unregisterDestructor
+ @category EMBER_DESTROYABLES
+ @for @ember/destroyable
+ @param {Object|Function} destroyable the destroyable to unregister the destructor function from
+ @param {Function} destructor the destructor to remove from the destroyable
+ @static
+ @public
+*/
+export function unregisterDestructor(
+ destroyable: T,
+ destructor: (destroyable: T) => void
+): void {
+ return _unregisterDestructor(destroyable, destructor);
+}
diff --git a/packages/ember/index.js b/packages/ember/index.js
index 4cc5462eab1..af42c3bd247 100644
--- a/packages/ember/index.js
+++ b/packages/ember/index.js
@@ -12,6 +12,7 @@ import {
isEnabled,
EMBER_GLIMMER_SET_COMPONENT_TEMPLATE,
EMBER_CACHE_API,
+ EMBER_DESTROYABLES,
} from '@ember/canary-features';
import * as EmberDebug from '@ember/debug';
import { assert, captureRenderTree, deprecate } from '@ember/debug';
@@ -138,7 +139,17 @@ import EngineInstance from '@ember/engine/instance';
import { assign, merge } from '@ember/polyfills';
import { LOGGER, EMBER_EXTEND_PROTOTYPES, JQUERY_INTEGRATION } from '@ember/deprecated-features';
import templateOnlyComponent from '@ember/component/template-only';
-import { destroy } from '@glimmer/runtime';
+
+import {
+ assertDestroyablesDestroyed,
+ associateDestroyableChild,
+ destroy,
+ enableDestroyableTracking,
+ isDestroying,
+ isDestroyed,
+ registerDestructor,
+ unregisterDestructor,
+} from '@ember/destroyable';
// ****@ember/-internals/environment****
@@ -341,6 +352,16 @@ if (EMBER_CACHE_API) {
Ember._cacheIsConst = metal.isConst;
}
+if (EMBER_DESTROYABLES) {
+ Ember._registerDestructor = registerDestructor;
+ Ember._unregisterDestructor = unregisterDestructor;
+ Ember._associateDestroyableChild = associateDestroyableChild;
+ Ember._assertDestroyablesDestroyed = assertDestroyablesDestroyed;
+ Ember._enableDestroyableTracking = enableDestroyableTracking;
+ Ember._isDestroying = isDestroying;
+ Ember._isDestroyed = isDestroyed;
+}
+
/**
A function may be assigned to `Ember.onerror` to be called when Ember
internals encounter an error. This is useful for specialized error handling
diff --git a/tests/docs/expected.js b/tests/docs/expected.js
index 037ec0a9b03..90ef27138f0 100644
--- a/tests/docs/expected.js
+++ b/tests/docs/expected.js
@@ -89,7 +89,9 @@ module.exports = {
'arrayContentDidChange',
'arrayContentWillChange',
'assert',
+ 'assertDestroyablesDestroyed',
'assign',
+ 'associateDestroyableChild',
'asyncEnd',
'asyncStart',
'attributeBindings',
@@ -193,6 +195,7 @@ module.exports = {
'element',
'elementId',
'empty',
+ 'enableDestroyableTracking',
'end',
'endPropertyChanges',
'engine',
@@ -436,6 +439,7 @@ module.exports = {
'register',
'registerAsyncHelper',
'registerDeprecationHandler',
+ 'registerDestructor',
'registerHelper',
'registerOptions',
'registerOptionsForType',
@@ -565,6 +569,7 @@ module.exports = {
'uniqBy',
'unless',
'unregister',
+ 'unregisterDestructor',
'unregisterHelper',
'unregisterWaiter',
'unshiftObject',
From 0bd4855c2d2b77f1b4ad92372a6e7c96d52430a9 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Thu, 30 Jul 2020 09:51:35 -0400
Subject: [PATCH 0056/1405] Add v3.20.3 to CHANGELOG.md.
[ci skip]
---
CHANGELOG.md | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a6ddad8d063..ee14870f290 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,10 +5,6 @@
- [#19048](https://github.com/emberjs/ember.js/pull/19048) [BUGFIX] Update router.js to ensure transition.abort works for query param only transitions.
- [#19056](https://github.com/emberjs/ember.js/pull/19056) [BUGFIX] Update glimmer-vm to 0.54.2.
-### v3.20.2 (July 26, 2020)
-
-- [#19056](https://github.com/emberjs/ember.js/pull/19056) Update Glimmer rendering engine to 0.54.2. Fixes an issue with (private for now) destroyables work to enable the destroyables polyfill to work more appropriately.
-
### v3.21.0-beta.2 (July 20, 2020)
- [#19040](https://github.com/emberjs/ember.js/pull/19040) [BUGFIX] Fix a memory leak that occurred when changing the array passed to `{{each}}`
@@ -19,6 +15,17 @@
- [#18993](https://github.com/emberjs/ember.js/pull/18993) [DEPRECATION] Deprecate `getWithDefault` per [RFC #554](https://github.com/emberjs/rfcs/blob/master/text/0554-deprecate-getwithdefault.md).
- [#17571](https://github.com/emberjs/ember.js/pull/17571) [BUGFIX] Avoid tampering `queryParam` argument in RouterService#isActive
+### v3.20.3 (July 30, 2020)
+
+- [#19048](https://github.com/emberjs/ember.js/pull/19048) [BUGFIX] Update `router.js` to ensure `transition.abort` works for query param only transitions
+- [#19059](https://github.com/emberjs/ember.js/pull/19059) [BUGFIX] Prevent `` from erroring in `HistoryLocation`
+- [#19060](https://github.com/emberjs/ember.js/pull/19060) [BUGFIX] Update rendering engine to `@glimmer/*` 0.55.1
+- [#19063](https://github.com/emberjs/ember.js/pull/19063) [DOC] Fix missing docs for `{{#in-element}}`
+
+### v3.20.2 (July 26, 2020)
+
+- [#19056](https://github.com/emberjs/ember.js/pull/19056) Update Glimmer rendering engine to 0.54.2. Fixes an issue with (private for now) destroyables work to enable the destroyables polyfill to work more appropriately.
+
### v3.20.1 (July 13, 2020)
- [#19040](https://github.com/emberjs/ember.js/pull/19040) [BUGFIX] Fix a memory leak that occurred when changing the array passed to `{{each}}`
From 579e2702d3a76034605ae62304d435f2c706d474 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Thu, 30 Jul 2020 16:12:49 -0400
Subject: [PATCH 0057/1405] Small updates to the github workflow, rename
---
.github/workflows/{build.yml => ci.yml} | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
rename .github/workflows/{build.yml => ci.yml} (98%)
diff --git a/.github/workflows/build.yml b/.github/workflows/ci.yml
similarity index 98%
rename from .github/workflows/build.yml
rename to .github/workflows/ci.yml
index 8705cfb0129..9cb5b4ccd1d 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/ci.yml
@@ -1,4 +1,4 @@
-name: Build
+name: CI
on:
push:
@@ -158,7 +158,7 @@ jobs:
blueprint-test:
name: Blueprint Tests
runs-on: ubuntu-latest
- needs: [basic-test, lint]
+ needs: [lint]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
@@ -252,7 +252,7 @@ jobs:
run: node bin/publish_to_s3.js
env:
BUILD_TYPE: alpha
- OVERRIDE_FEATURES: EMBER_METAL_TRACKED_PROPERTIES
+ OVERRIDE_FEATURES: ''
S3_BUCKET_NAME: 'builds.emberjs.com'
S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY}}
S3_ACCESS_KEY_ID: ${{ secrets.S3_ACCESS_KEY_ID}}
From f4dedb690d3259c762ba2feaaf126d405b9a3b70 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Thu, 30 Jul 2020 17:53:35 -0400
Subject: [PATCH 0058/1405] Update to 0.55.2 of glimmer-vm.
A few nice enhancments upstream:
* add destroyables to the error thrown within
`assertDestroyablesDestroyed`
* fix a type issue with `MonomorphicTag` in newer TypeScript
* improve performance of constant lookup during runtime template
compilation
https://github.com/glimmerjs/glimmer-vm/releases/tag/v0.55.2
---
package.json | 16 ++---
yarn.lock | 196 +++++++++++++++++++++++++--------------------------
2 files changed, 106 insertions(+), 106 deletions(-)
diff --git a/package.json b/package.json
index aa535a94a01..3f06a732b83 100644
--- a/package.json
+++ b/package.json
@@ -74,15 +74,15 @@
},
"devDependencies": {
"@babel/preset-env": "^7.9.5",
- "@glimmer/compiler": "^0.55.1",
+ "@glimmer/compiler": "^0.55.2",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.55.1",
- "@glimmer/node": "^0.55.1",
- "@glimmer/opcode-compiler": "^0.55.1",
- "@glimmer/program": "^0.55.1",
- "@glimmer/reference": "^0.55.1",
- "@glimmer/runtime": "^0.55.1",
- "@glimmer/validator": "^0.55.1",
+ "@glimmer/interfaces": "^0.55.2",
+ "@glimmer/node": "^0.55.2",
+ "@glimmer/opcode-compiler": "^0.55.2",
+ "@glimmer/program": "^0.55.2",
+ "@glimmer/reference": "^0.55.2",
+ "@glimmer/runtime": "^0.55.2",
+ "@glimmer/validator": "^0.55.2",
"@simple-dom/document": "^1.4.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
diff --git a/yarn.lock b/yarn.lock
index 6bd16aefdab..3302f477061 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -913,142 +913,142 @@
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog==
-"@glimmer/compiler@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.55.1.tgz#c85fcbf00125c7c0fb74cd179a9e30c42dddccee"
- integrity sha512-t4jFag9i1/jo9JId2VMPuFOIY0E8MlRmyMnfh9mipC9iZXZsC8d0PCia6/FvZRvUJvNRA+brMwck6IHfiW2Nmw==
- dependencies:
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/syntax" "^0.55.1"
- "@glimmer/util" "^0.55.1"
- "@glimmer/wire-format" "^0.55.1"
+"@glimmer/compiler@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.55.2.tgz#565780010ed6e5ffbe8554851b8cae2236480454"
+ integrity sha512-5aUQfXB9Jl1XJyJ82DRDetf4XVLjvUsFNUKCeg9FqAnMt4WVoxc5bsCzYvBWyXh4QW1XBfnEdy8eRNctkATzhw==
+ dependencies:
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/syntax" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
+ "@glimmer/wire-format" "^0.55.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/encoder@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.55.1.tgz#1356c123e61d43fed9b3a36a189cd1776974dae2"
- integrity sha512-Q3WueSDKYxCnQlk/0Sp1rpyMckh553zwA3yQ9PE25pEnt9LVnfn3TWGKb4XOAjiaGt0hyDLfFI7Ftt+4rbsCOA==
+"@glimmer/encoder@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.55.2.tgz#a268451ecaf814a891fa068ad3ec1d0c80f39eb9"
+ integrity sha512-LQREUzEjGkyLJyboTlaV/0ffUf2+5zm6PYEZSdk3RJ4ZKkv8ucxytnfxYdxuHWKH1lS4sHlPAdPO5hGSRLsnNg==
dependencies:
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/vm" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/vm" "^0.55.2"
"@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/interfaces@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.55.1.tgz#be9499d83a63514b2470f19e5430b06c7edb2076"
- integrity sha512-rbmL/xT9mHWX2jioYLT0V/H0QS8qaIJ1HCOlkbX5zvAASNu8+kwTXy8Bq4hx1OW3qwul6ihfHq/6k2oLxJ90JQ==
+"@glimmer/interfaces@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.55.2.tgz#de90ad8501bf3d2439fd752bb83bcce2a65730a2"
+ integrity sha512-VTszj/QmgDqdo/xTopzMBdaQ4s9rtP2jo070qNkAWrTV0QLe+N/pjTx082epk8Jy84kmw8yu80Tpyw+y0iHS2g==
dependencies:
"@simple-dom/interface" "^1.4.0"
-"@glimmer/low-level@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.55.1.tgz#f3ab819637cfb0a38c04bd675b28ebb3f4bd238d"
- integrity sha512-wK0Lkb7P3ajOcMbzCrDokC13GAtvyABrF+KYkNlNMzrCBSZ0q9BsFXRhSHhO4UIZm4jQmbaQVOy5SYdoB4Bu2A==
+"@glimmer/low-level@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.55.2.tgz#6a35f548a433f324b2d2c6ea82cf7d12ca789f40"
+ integrity sha512-Ie7L+8xXYVPiqGvlaXD4EDjYULF+zKk191OQ7pcSVsTxHCgqFzw3fzbsAnvLkWHwzPpQ3vlpQGgi18i/H18yFA==
-"@glimmer/node@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.55.1.tgz#0d6fd43b6f4cbd0a0b47c0482cfd047f31bff5b7"
- integrity sha512-PgAkx8tSJc4xWyVS4qCSNo13KNRklUZDShQmhoFOv9nvCZdWLcUv1SZJshGQlmwQNxY6YCHjRlnRJN17VBcZBQ==
+"@glimmer/node@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.55.2.tgz#ba9aaa9c859062b5c2d54fc142205b0f7e25824f"
+ integrity sha512-R6KdMauN9u7JdtUaCfgfxsiKvJodQ2OaGhKXIbg0mcEBUXv1W3bVtKhnExTf21AeErWZ/gK6f2wnOqVjV0w41w==
dependencies:
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/runtime" "^0.55.1"
- "@glimmer/util" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/runtime" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
"@simple-dom/document" "^1.4.0"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/opcode-compiler@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.55.1.tgz#d71e67ad3b4a0852c4aad45f2ca9dff0010e60fb"
- integrity sha512-b/xH+2It9MtpK4PbltUnlLtjQdX4eaggWXrS86i+leSXfj2F6BtBPZd7k9QZGcXXGHuZmuF0fQXZrN1LN8pxDA==
- dependencies:
- "@glimmer/encoder" "^0.55.1"
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/program" "^0.55.1"
- "@glimmer/reference" "^0.55.1"
- "@glimmer/util" "^0.55.1"
- "@glimmer/vm" "^0.55.1"
- "@glimmer/wire-format" "^0.55.1"
-
-"@glimmer/program@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.55.1.tgz#19b0af648044ac2e727a25fb446dd30fa6aa6264"
- integrity sha512-JXPF1o6hHp9SX3MX+l2t4B61mJp4YGO5LWV1E0ciHUGGQSVaHh7DUnc0Qje36yUthVbB6qT5I0GWF487Egzgyg==
- dependencies:
- "@glimmer/encoder" "^0.55.1"
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/util" "^0.55.1"
-
-"@glimmer/reference@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.55.1.tgz#6f5028a16ea449e57f0e9ac9b47528f8c2182991"
- integrity sha512-7EwHUO2pc5P9IdhypZn2eqFL9rvcME3Xs7x8Uhp9N+Wqfmuzkf3IhZs9GgQf3Tk4h52j5ZNnS6yXy/bj7uHClA==
+"@glimmer/opcode-compiler@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.55.2.tgz#4f69eb97dd173e3a17ae1b075a46447c51c301b4"
+ integrity sha512-K9r+Qt05UU3+dPV/AMxrumimqMlCoHJ4ohd2cSOYShpvin+XHgAooKdhtUE0WzXrsN4c0epCcNSMbif1VE/MUg==
+ dependencies:
+ "@glimmer/encoder" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/program" "^0.55.2"
+ "@glimmer/reference" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
+ "@glimmer/vm" "^0.55.2"
+ "@glimmer/wire-format" "^0.55.2"
+
+"@glimmer/program@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.55.2.tgz#fca9e4070adcfc73cdbe383d08be824218a5974d"
+ integrity sha512-1rKP2BKrNpDemqzy63KfrUL6Dz0mKqC1BEr5QJpvgl3o4/BNwp6qlNxNVkMOj9ExzkmEv8HSgKqY36xTQ5Kptg==
+ dependencies:
+ "@glimmer/encoder" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
+
+"@glimmer/reference@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.55.2.tgz#1f0ee83f36047f35907aa5e8c4b481cd2933fa38"
+ integrity sha512-tUJir3YGtkoGjilhUhYx8s6fO6HuO3LqTqs9dBGYelhZPuQfLzG7NmgSs2TkDXqEDPqNR49wTMHEr95frrfJEw==
dependencies:
"@glimmer/env" "^0.1.7"
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/util" "^0.55.1"
- "@glimmer/validator" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
+ "@glimmer/validator" "^0.55.2"
-"@glimmer/runtime@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.55.1.tgz#cd79f451a2ff2b6d9aac74164752812415b7d149"
- integrity sha512-t9J+tSSGq0KY2WoVhKaZkhmLWGlC7Hjosn43EiKPERf2x+wpkKkS/EGo6UHa0YjPIVnfFhWeY5C3fcVMZajKVw==
+"@glimmer/runtime@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.55.2.tgz#bbb4b7c941b39a374d5017a70663060e4a233caf"
+ integrity sha512-HrMhgg3pcKhQOO+Ad347JoofKgP4pqbkkUynFQoYsOf6HrMmDe/2QlCgcc3PU2Ngd39NVzazVPlOlviOHXql0w==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/low-level" "^0.55.1"
- "@glimmer/program" "^0.55.1"
- "@glimmer/reference" "^0.55.1"
- "@glimmer/util" "^0.55.1"
- "@glimmer/validator" "^0.55.1"
- "@glimmer/vm" "^0.55.1"
- "@glimmer/wire-format" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/low-level" "^0.55.2"
+ "@glimmer/program" "^0.55.2"
+ "@glimmer/reference" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
+ "@glimmer/validator" "^0.55.2"
+ "@glimmer/vm" "^0.55.2"
+ "@glimmer/wire-format" "^0.55.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/syntax@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.55.1.tgz#adca96147e5c2b4e47a6ee8d8276effc4d31b6e5"
- integrity sha512-QKW97Cl+Rz8dTWkYUewclLBRcyICg2Fb6BFz2oUDo17gP7w8eqb+XL8wAfzG1lDJ+WDT7pwprM8zUyvn2eYa5g==
+"@glimmer/syntax@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.55.2.tgz#5b90f8cc1dc72771aab3ee7e3b00891912451419"
+ integrity sha512-mvVUp2nPePOR9wUXf9iRvGAIccon2iHGyGdU7C5945TE2vPvmcfbUpJNpjA6OFJzTD1qXt4zK2OcUkm6Jm8e5w==
dependencies:
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/util" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
handlebars "^4.7.4"
simple-html-tokenizer "^0.5.9"
-"@glimmer/util@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.55.1.tgz#43657af0adde30ad1cb3a8d72c85a8af35de0194"
- integrity sha512-F9Hr2hS/H738F2voG+W4Hx/4+W7uDeuqg7ddIPUecZP6HQHhqTbgGaQJIt5J1emJ1D4nLPpjSJpn50MVbVGeaQ==
+"@glimmer/util@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.55.2.tgz#5921849bfc51219d266c0b71a54fe2cbf8864524"
+ integrity sha512-4BbldC7Hr+nkJ0Fm3iO852kYQ8HC/SuKBVNM3o9EMk2QJkbgoDKBNFSDLO4mc8EPl16hUZHiJeaIw8UyEEQa9w==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/validator@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.55.1.tgz#c2ff4c8c9fd7e20d3df4bb98519eda840f8bc4ce"
- integrity sha512-CX1Vb118xIjt0lYjBQvnAJo5lZIMaMg3Ef6cNQRM1gFqZkrh7sSs5Kz3hoxNxUtjiukRd2nfi+EirMhfcGgsWg==
+"@glimmer/validator@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.55.2.tgz#805a60043f9045cb5e6947740435cbc2650bac08"
+ integrity sha512-GvwTpOgkd+dadELT9X6YEbDnhhkSF0XPOww8qc9C9BeFxzEBp/lTBA6Aj/Qq3ucOmyx3cbqIbefdsTFkRc0v2A==
dependencies:
"@glimmer/env" "^0.1.7"
-"@glimmer/vm@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.55.1.tgz#a8ae535de6ae6ebac6623da709b3f76097b84fa4"
- integrity sha512-mui0Jf6H4R3U35Gy3viaipawPQbU0rqWf+49qwLALXHgZNtyhHzuLdcn41xVLNikAsRmvmVPbmczBN7uWiAZMw==
+"@glimmer/vm@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.55.2.tgz#6d43a3ae14585bb3a45799b1b0722153c3fec4f4"
+ integrity sha512-B0rJ3L9/kOSiohOfuGnMLqH94VNray95Uc7bCyBZ0yfH1NsdKhs74AhPYYFP2Gb5wj4o3jX6fxej26ZTbR4veg==
dependencies:
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/util" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
-"@glimmer/wire-format@^0.55.1":
- version "0.55.1"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.55.1.tgz#eff31e76225483ed3b5009639abdc050b7df3212"
- integrity sha512-plDG2h5q0d/mz5Gzwtx+II/IVwPDIgXK9KsqITFqorQmxzOd2MoYY04nk3C7yN4bFdaqEl0P37rynfE63pgMqw==
+"@glimmer/wire-format@^0.55.2":
+ version "0.55.2"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.55.2.tgz#548e24255b4c2375f23f4064f1256b57631da1c5"
+ integrity sha512-rdWOsH0K/pS43iFMIvzAbq62ovt2FPMI4Gu9J06tDMwWgOdhzm4ShXwFHGppnH6FbqLoZHJiVlkN9xZPJOvfLA==
dependencies:
- "@glimmer/interfaces" "^0.55.1"
- "@glimmer/util" "^0.55.1"
+ "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/util" "^0.55.2"
"@simple-dom/document@^1.4.0":
version "1.4.0"
From 7f7c22ca7fa32b4578f35fb427e0d2a76c398251 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Fri, 31 Jul 2020 17:59:50 -0400
Subject: [PATCH 0059/1405] [FEATURE] Enable @glimmer/tracking/primitives/cache
APIs.
---
packages/@ember/canary-features/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/@ember/canary-features/index.ts b/packages/@ember/canary-features/index.ts
index 189b8db78ad..d5078f383f4 100644
--- a/packages/@ember/canary-features/index.ts
+++ b/packages/@ember/canary-features/index.ts
@@ -21,7 +21,7 @@ export const DEFAULT_FEATURES = {
EMBER_GLIMMER_SET_COMPONENT_TEMPLATE: true,
EMBER_ROUTING_MODEL_ARG: true,
EMBER_GLIMMER_IN_ELEMENT: true,
- EMBER_CACHE_API: null,
+ EMBER_CACHE_API: true,
EMBER_DESTROYABLES: null,
};
From 39494a1e363371cd70b6fc4f4130626e2c04090f Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Fri, 31 Jul 2020 18:03:09 -0400
Subject: [PATCH 0060/1405] [FEATURE] Enable @ember/destroyable API.
As discussed in todays core team meeting.
---
packages/@ember/canary-features/index.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/@ember/canary-features/index.ts b/packages/@ember/canary-features/index.ts
index 189b8db78ad..b4a36724116 100644
--- a/packages/@ember/canary-features/index.ts
+++ b/packages/@ember/canary-features/index.ts
@@ -22,7 +22,7 @@ export const DEFAULT_FEATURES = {
EMBER_ROUTING_MODEL_ARG: true,
EMBER_GLIMMER_IN_ELEMENT: true,
EMBER_CACHE_API: null,
- EMBER_DESTROYABLES: null,
+ EMBER_DESTROYABLES: true,
};
/**
From 491958373ca53664e3030e21aee93cc0cead71ee Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Sun, 2 Aug 2020 12:36:15 -0400
Subject: [PATCH 0061/1405] Update to glimmerjs/glimmer-vm 0.55.3.
Mostly internal changes RE: validators.
https://github.com/glimmerjs/glimmer-vm/releases/tag/v0.55.3
---
package.json | 16 ++---
yarn.lock | 196 +++++++++++++++++++++++++--------------------------
2 files changed, 106 insertions(+), 106 deletions(-)
diff --git a/package.json b/package.json
index 3f06a732b83..1085ee284e5 100644
--- a/package.json
+++ b/package.json
@@ -74,15 +74,15 @@
},
"devDependencies": {
"@babel/preset-env": "^7.9.5",
- "@glimmer/compiler": "^0.55.2",
+ "@glimmer/compiler": "^0.55.3",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.55.2",
- "@glimmer/node": "^0.55.2",
- "@glimmer/opcode-compiler": "^0.55.2",
- "@glimmer/program": "^0.55.2",
- "@glimmer/reference": "^0.55.2",
- "@glimmer/runtime": "^0.55.2",
- "@glimmer/validator": "^0.55.2",
+ "@glimmer/interfaces": "^0.55.3",
+ "@glimmer/node": "^0.55.3",
+ "@glimmer/opcode-compiler": "^0.55.3",
+ "@glimmer/program": "^0.55.3",
+ "@glimmer/reference": "^0.55.3",
+ "@glimmer/runtime": "^0.55.3",
+ "@glimmer/validator": "^0.55.3",
"@simple-dom/document": "^1.4.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
diff --git a/yarn.lock b/yarn.lock
index 3302f477061..3606f19bce2 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -913,142 +913,142 @@
resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6"
integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog==
-"@glimmer/compiler@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.55.2.tgz#565780010ed6e5ffbe8554851b8cae2236480454"
- integrity sha512-5aUQfXB9Jl1XJyJ82DRDetf4XVLjvUsFNUKCeg9FqAnMt4WVoxc5bsCzYvBWyXh4QW1XBfnEdy8eRNctkATzhw==
- dependencies:
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/syntax" "^0.55.2"
- "@glimmer/util" "^0.55.2"
- "@glimmer/wire-format" "^0.55.2"
+"@glimmer/compiler@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.55.3.tgz#7fc78279b06eceab92c1dca59e3018bf8e46f9d8"
+ integrity sha512-iJx6VWuvm8CBxny5gVSuGQH05tFP/B0wqapAkJWtfhgAdGkVCaL2q4P5YsAE6ZabE4XmcdPNS0oksRC1J09Nkw==
+ dependencies:
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/syntax" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
+ "@glimmer/wire-format" "^0.55.3"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/encoder@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.55.2.tgz#a268451ecaf814a891fa068ad3ec1d0c80f39eb9"
- integrity sha512-LQREUzEjGkyLJyboTlaV/0ffUf2+5zm6PYEZSdk3RJ4ZKkv8ucxytnfxYdxuHWKH1lS4sHlPAdPO5hGSRLsnNg==
+"@glimmer/encoder@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.55.3.tgz#66b516939cc69bd67f173ba51746939bf5fc3098"
+ integrity sha512-g4YxmjRTkrsrQIoyZgec0cI0OWI3pTw4VZKOVL3jUdUf1sRwXGxK++qztaMbN5YTDFLAJU1JPSuvJkwRYZPBAg==
dependencies:
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/vm" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/vm" "^0.55.3"
"@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/interfaces@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.55.2.tgz#de90ad8501bf3d2439fd752bb83bcce2a65730a2"
- integrity sha512-VTszj/QmgDqdo/xTopzMBdaQ4s9rtP2jo070qNkAWrTV0QLe+N/pjTx082epk8Jy84kmw8yu80Tpyw+y0iHS2g==
+"@glimmer/interfaces@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.55.3.tgz#89f22729141fef4d3ed7441e38095dd84c0bec22"
+ integrity sha512-EbnLv4CDKVBdW4+uv4OG50UTSoyuDYeXQ6hQ8HJrlkmgy5qpY6m/lIrvbMbR1tBcJsULQD37qdmSoDb9zOQycg==
dependencies:
"@simple-dom/interface" "^1.4.0"
-"@glimmer/low-level@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.55.2.tgz#6a35f548a433f324b2d2c6ea82cf7d12ca789f40"
- integrity sha512-Ie7L+8xXYVPiqGvlaXD4EDjYULF+zKk191OQ7pcSVsTxHCgqFzw3fzbsAnvLkWHwzPpQ3vlpQGgi18i/H18yFA==
+"@glimmer/low-level@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.55.3.tgz#a73d50f92ef6d3ac9aa60a18618788e4fe20d3d7"
+ integrity sha512-rtdHpau9bzIYW1tAxYZkP6p3Ziyen/euj80wmO3lM92Mvwcuj+xqr+IWvRlsMi4npVe+z+kHLdNYLORaJPgtaA==
-"@glimmer/node@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.55.2.tgz#ba9aaa9c859062b5c2d54fc142205b0f7e25824f"
- integrity sha512-R6KdMauN9u7JdtUaCfgfxsiKvJodQ2OaGhKXIbg0mcEBUXv1W3bVtKhnExTf21AeErWZ/gK6f2wnOqVjV0w41w==
+"@glimmer/node@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.55.3.tgz#c685237689d0d4eb46fb20a9a609643a49167242"
+ integrity sha512-dTd3jO6Ys56tyh8Mmg43CCnYJBX9stt3/vC3CHhjZAgKB7Xad17P+wzNp1xVfWhHaCUoW1XFoypY2Y4ARM5iDg==
dependencies:
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/runtime" "^0.55.2"
- "@glimmer/util" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/runtime" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
"@simple-dom/document" "^1.4.0"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/opcode-compiler@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.55.2.tgz#4f69eb97dd173e3a17ae1b075a46447c51c301b4"
- integrity sha512-K9r+Qt05UU3+dPV/AMxrumimqMlCoHJ4ohd2cSOYShpvin+XHgAooKdhtUE0WzXrsN4c0epCcNSMbif1VE/MUg==
- dependencies:
- "@glimmer/encoder" "^0.55.2"
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/program" "^0.55.2"
- "@glimmer/reference" "^0.55.2"
- "@glimmer/util" "^0.55.2"
- "@glimmer/vm" "^0.55.2"
- "@glimmer/wire-format" "^0.55.2"
-
-"@glimmer/program@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.55.2.tgz#fca9e4070adcfc73cdbe383d08be824218a5974d"
- integrity sha512-1rKP2BKrNpDemqzy63KfrUL6Dz0mKqC1BEr5QJpvgl3o4/BNwp6qlNxNVkMOj9ExzkmEv8HSgKqY36xTQ5Kptg==
- dependencies:
- "@glimmer/encoder" "^0.55.2"
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/util" "^0.55.2"
-
-"@glimmer/reference@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.55.2.tgz#1f0ee83f36047f35907aa5e8c4b481cd2933fa38"
- integrity sha512-tUJir3YGtkoGjilhUhYx8s6fO6HuO3LqTqs9dBGYelhZPuQfLzG7NmgSs2TkDXqEDPqNR49wTMHEr95frrfJEw==
+"@glimmer/opcode-compiler@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.55.3.tgz#9f73c2845ff3ee55f1c106e5dc14fe28506c1667"
+ integrity sha512-PSmZQcS4ze33vSErpB//s7L0g+zutqAx7Qlij0VMpl655ae3W45WjEHq4QclBMDJDqMZar6CjrUFDeSCS+S89w==
+ dependencies:
+ "@glimmer/encoder" "^0.55.3"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/program" "^0.55.3"
+ "@glimmer/reference" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
+ "@glimmer/vm" "^0.55.3"
+ "@glimmer/wire-format" "^0.55.3"
+
+"@glimmer/program@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.55.3.tgz#769ac149e03fb0a48e41b72c9f57a7188579337a"
+ integrity sha512-c0fSdtFQVa90k/CnSFPikxGFCIoNDHTSCpAzOb0BoLcfMdPbNqPkmTItci68Nz6Voul4a23MKvdEA/lDGwCPxA==
+ dependencies:
+ "@glimmer/encoder" "^0.55.3"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
+
+"@glimmer/reference@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.55.3.tgz#da716add87a6c0ba4e91510c52aef1e6af60644a"
+ integrity sha512-9nRG3aqApqmVnscbCBFeS8CvnixPDYSRBlj6t2SBCe6YLiqDl7Zu3GuoS0QLZeTov32+kf3anRWQGbZFw+XyEQ==
dependencies:
"@glimmer/env" "^0.1.7"
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/util" "^0.55.2"
- "@glimmer/validator" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
+ "@glimmer/validator" "^0.55.3"
-"@glimmer/runtime@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.55.2.tgz#bbb4b7c941b39a374d5017a70663060e4a233caf"
- integrity sha512-HrMhgg3pcKhQOO+Ad347JoofKgP4pqbkkUynFQoYsOf6HrMmDe/2QlCgcc3PU2Ngd39NVzazVPlOlviOHXql0w==
+"@glimmer/runtime@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.55.3.tgz#6d917c74923839cc82205e7376cd685856f67f5e"
+ integrity sha512-RDvPds1dh5EXWKbZlBjwga+8vNqj6bllD69r7GbOWJs9ZbqP5aXk3kKiewYmvrj2S0kDAU9lpLJ2iXhi/ppDEQ==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/low-level" "^0.55.2"
- "@glimmer/program" "^0.55.2"
- "@glimmer/reference" "^0.55.2"
- "@glimmer/util" "^0.55.2"
- "@glimmer/validator" "^0.55.2"
- "@glimmer/vm" "^0.55.2"
- "@glimmer/wire-format" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/low-level" "^0.55.3"
+ "@glimmer/program" "^0.55.3"
+ "@glimmer/reference" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
+ "@glimmer/validator" "^0.55.3"
+ "@glimmer/vm" "^0.55.3"
+ "@glimmer/wire-format" "^0.55.3"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/syntax@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.55.2.tgz#5b90f8cc1dc72771aab3ee7e3b00891912451419"
- integrity sha512-mvVUp2nPePOR9wUXf9iRvGAIccon2iHGyGdU7C5945TE2vPvmcfbUpJNpjA6OFJzTD1qXt4zK2OcUkm6Jm8e5w==
+"@glimmer/syntax@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.55.3.tgz#74054fef17e2d56b363d747e29e1a46cd940ebd2"
+ integrity sha512-D2GnLNG10TSh1dujojPUWnt3bAXgiHT90xZMcd/TX9pt3Mf31cXhGOv0FYzbsF/R5XTQKNmR1am8Gy870bsjng==
dependencies:
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/util" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
handlebars "^4.7.4"
simple-html-tokenizer "^0.5.9"
-"@glimmer/util@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.55.2.tgz#5921849bfc51219d266c0b71a54fe2cbf8864524"
- integrity sha512-4BbldC7Hr+nkJ0Fm3iO852kYQ8HC/SuKBVNM3o9EMk2QJkbgoDKBNFSDLO4mc8EPl16hUZHiJeaIw8UyEEQa9w==
+"@glimmer/util@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.55.3.tgz#10b8d19fc3547d1818cc0fa7bc8cb5301ce9ec22"
+ integrity sha512-K9oy5YHilHWFO9NHlUeBPV3jwMlF5n/FulAbyfrylwORyxR0F0Obue8Rdf8BElsG6/mKoFqfhbp53kFOjLhydA==
dependencies:
"@glimmer/env" "0.1.7"
- "@glimmer/interfaces" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/validator@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.55.2.tgz#805a60043f9045cb5e6947740435cbc2650bac08"
- integrity sha512-GvwTpOgkd+dadELT9X6YEbDnhhkSF0XPOww8qc9C9BeFxzEBp/lTBA6Aj/Qq3ucOmyx3cbqIbefdsTFkRc0v2A==
+"@glimmer/validator@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/validator/-/validator-0.55.3.tgz#f57a6267819d2f29241a2ea04e2ee677973b47d7"
+ integrity sha512-DeXn8/jCtpwSEmFEwrWgLbighPVqT5IinmLrDUf9+OwBJ4LflN23fD4ZlCAO8mXy/FVDCRjVfgB9rRvJzUnpJw==
dependencies:
"@glimmer/env" "^0.1.7"
-"@glimmer/vm@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.55.2.tgz#6d43a3ae14585bb3a45799b1b0722153c3fec4f4"
- integrity sha512-B0rJ3L9/kOSiohOfuGnMLqH94VNray95Uc7bCyBZ0yfH1NsdKhs74AhPYYFP2Gb5wj4o3jX6fxej26ZTbR4veg==
+"@glimmer/vm@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.55.3.tgz#3fca7e58d1e4f3e43550af40c638ed774168bbb4"
+ integrity sha512-KxPzGoKLKYygQKgjGmJXw3pE3maHtqVznnzpIvu31gEDV6qDxw8bVTFGxWSz2UgpDVMhc4occAkmfir4BuUrCA==
dependencies:
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/util" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
-"@glimmer/wire-format@^0.55.2":
- version "0.55.2"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.55.2.tgz#548e24255b4c2375f23f4064f1256b57631da1c5"
- integrity sha512-rdWOsH0K/pS43iFMIvzAbq62ovt2FPMI4Gu9J06tDMwWgOdhzm4ShXwFHGppnH6FbqLoZHJiVlkN9xZPJOvfLA==
+"@glimmer/wire-format@^0.55.3":
+ version "0.55.3"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.55.3.tgz#f71e73d242e3b8109db6766f49e03855bccb3f0a"
+ integrity sha512-cvWyRTNRtLSOkqwOOU1wJeUPz6BMlUHqkuCanWLT5Sao71DuRNcFBKlwTI6uScvawR9jCos7F3LLmB+gG0NT3w==
dependencies:
- "@glimmer/interfaces" "^0.55.2"
- "@glimmer/util" "^0.55.2"
+ "@glimmer/interfaces" "^0.55.3"
+ "@glimmer/util" "^0.55.3"
"@simple-dom/document@^1.4.0":
version "1.4.0"
From f2e8c2d165932b2165a446cc4167aaf0589ab440 Mon Sep 17 00:00:00 2001
From: Rich Glazerman
Date: Sun, 2 Aug 2020 21:08:12 -0400
Subject: [PATCH 0062/1405] Move computed fix to computed property set
---
.../glimmer/lib/component-managers/curly.ts | 29 -------------------
.../@ember/-internals/metal/lib/computed.ts | 20 +++++++++++++
2 files changed, 20 insertions(+), 29 deletions(-)
diff --git a/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts b/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts
index 1d5859fcac5..02834779a79 100644
--- a/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts
+++ b/packages/@ember/-internals/glimmer/lib/component-managers/curly.ts
@@ -1,7 +1,5 @@
import { privatize as P } from '@ember/-internals/container';
import { ENV } from '@ember/-internals/environment';
-import { addObserver, descriptorForProperty, PROPERTY_DID_CHANGE } from '@ember/-internals/metal';
-import { ComputedDescriptor } from '@ember/-internals/metal/lib/decorator';
import { getOwner } from '@ember/-internals/owner';
import { guidFor } from '@ember/-internals/utils';
import { addChildView, setElementView, setViewElement } from '@ember/-internals/views';
@@ -304,33 +302,6 @@ export default class CurlyComponentManager
}
}
- // ensure two way binding works when the component has defined a computed
- // property with both a setter and dependent keys, in that scenario without
- // the sync observer added below the caller's value will never be updated
- //
- // See GH#18417 / GH#19028 for details.
- let keyName: string, descriptor: ComputedDescriptor;
- if (environment.isInteractive && capturedArgs.names.length > 0) {
- for (let i = 0; i < capturedArgs.names.length; i++) {
- keyName = capturedArgs.names[i];
- descriptor = descriptorForProperty(component, keyName);
-
- if (
- descriptor !== undefined &&
- descriptor._dependentKeys !== undefined &&
- descriptor._dependentKeys.length > 0
- ) {
- addObserver(
- component,
- keyName,
- component[PROPERTY_DID_CHANGE].bind(component, keyName),
- undefined,
- true
- );
- }
- }
- }
-
// Track additional lifecycle metadata about this component in a state bucket.
// Essentially we're saving off all the state we'll need in the future.
let bucket = new ComponentStateBucket(
diff --git a/packages/@ember/-internals/metal/lib/computed.ts b/packages/@ember/-internals/metal/lib/computed.ts
index 94298748865..32638662e47 100644
--- a/packages/@ember/-internals/metal/lib/computed.ts
+++ b/packages/@ember/-internals/metal/lib/computed.ts
@@ -1,4 +1,5 @@
import { Meta, meta as metaFor } from '@ember/-internals/meta';
+import { addObserver, PROPERTY_DID_CHANGE } from '@ember/-internals/metal';
import { inspect, isEmberArray, toString } from '@ember/-internals/utils';
import { assert, deprecate, warn } from '@ember/debug';
import EmberError from '@ember/error';
@@ -675,6 +676,25 @@ export class ComputedProperty extends ComputedDescriptor {
let ret;
try {
+ if (obj instanceof Ember.Component) {
+ // ensure two way binding works when the component has defined a computed
+ // property with both a setter and dependent keys, in that scenario without
+ // the sync observer added below the caller's value will never be updated
+ //
+ // See GH#18417 / GH#19028 for details.
+ let descriptor: ComputedDescriptor;
+ descriptor = descriptorForProperty(obj, keyName);
+ let meta = metaFor(obj);
+ if (
+ meta.isInitializing() &&
+ descriptor !== undefined &&
+ descriptor._dependentKeys !== undefined &&
+ descriptor._dependentKeys.length > 0
+ ) {
+ addObserver(obj, keyName, obj[PROPERTY_DID_CHANGE].bind(obj, keyName), undefined, true);
+ }
+ }
+
beginPropertyChanges();
ret = this._set(obj, keyName, value);
From dbebd35ecd9eb71219cc22bfb5af19826d27de54 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Mon, 3 Aug 2020 11:01:56 -0400
Subject: [PATCH 0063/1405] Refactor computed solution
* Change guard for setting observer up to use `this` instead of
`descriptorForProperty`
* Check for `obj[PROPERTY_DID_CHANGE]` and `obj.isComponent` instead of
`instanceof Ember.Component`
* Move observer setup outside of `try`/`finally`
* Use arrow function for observer (instead of `Function.prototype.bind`)
---
.../@ember/-internals/metal/lib/computed.ts | 44 +++++++++++--------
1 file changed, 25 insertions(+), 19 deletions(-)
diff --git a/packages/@ember/-internals/metal/lib/computed.ts b/packages/@ember/-internals/metal/lib/computed.ts
index 32638662e47..be977ec50d9 100644
--- a/packages/@ember/-internals/metal/lib/computed.ts
+++ b/packages/@ember/-internals/metal/lib/computed.ts
@@ -673,28 +673,34 @@ export class ComputedProperty extends ComputedDescriptor {
return this.volatileSet(obj, keyName, value);
}
+ // ensure two way binding works when the component has defined a computed
+ // property with both a setter and dependent keys, in that scenario without
+ // the sync observer added below the caller's value will never be updated
+ //
+ // See GH#18147 / GH#19028 for details.
+ if (
+ this._dependentKeys !== undefined &&
+ this._dependentKeys.length > 0 &&
+ // These two properties are set on Ember.Component
+ typeof obj[PROPERTY_DID_CHANGE] === 'function' &&
+ (obj as any).isComponent &&
+ // ensure that we only run this once, while the component is being instantiated
+ metaFor(obj).isInitializing()
+ ) {
+ addObserver(
+ obj,
+ keyName,
+ () => {
+ obj[PROPERTY_DID_CHANGE](keyName);
+ },
+ undefined,
+ true
+ );
+ }
+
let ret;
try {
- if (obj instanceof Ember.Component) {
- // ensure two way binding works when the component has defined a computed
- // property with both a setter and dependent keys, in that scenario without
- // the sync observer added below the caller's value will never be updated
- //
- // See GH#18417 / GH#19028 for details.
- let descriptor: ComputedDescriptor;
- descriptor = descriptorForProperty(obj, keyName);
- let meta = metaFor(obj);
- if (
- meta.isInitializing() &&
- descriptor !== undefined &&
- descriptor._dependentKeys !== undefined &&
- descriptor._dependentKeys.length > 0
- ) {
- addObserver(obj, keyName, obj[PROPERTY_DID_CHANGE].bind(obj, keyName), undefined, true);
- }
- }
-
beginPropertyChanges();
ret = this._set(obj, keyName, value);
From 13ff365e9595071639f8ee6c4c338d11a86c3733 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Mon, 3 Aug 2020 15:22:38 -0400
Subject: [PATCH 0064/1405] Add v3.21.0-beta.4 to CHANGELOG
(cherry picked from commit e2d28a763d0ecae1cce14bae3f9b2b59d22a05c6)
---
CHANGELOG.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ee14870f290..2c84fef3345 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Ember Changelog
+### v3.21.0-beta.4 (August 3, 2020)
+
+- [#19059](https://github.com/emberjs/ember.js/pull/19059) [BUGFIX] Prevent `` from erroring in `HistoryLocation`
+- [#19060](https://github.com/emberjs/ember.js/pull/19060) / [#19065](https://github.com/emberjs/ember.js/pull/19065) / [#19072](https://github.com/emberjs/ember.js/pull/19072) [BUGFIX] Update rendering engine to `@glimmer/*` 0.55.3
+- [#19063](https://github.com/emberjs/ember.js/pull/19063) [DOC] Fix missing docs for `{{#in-element}}`
+
### v3.21.0-beta.3 (July 27, 2020)
- [#19048](https://github.com/emberjs/ember.js/pull/19048) [BUGFIX] Update router.js to ensure transition.abort works for query param only transitions.
From fcaab2c9f16ff1a5c78446e413c61424a9941273 Mon Sep 17 00:00:00 2001
From: Toshbaqa
Date: Tue, 4 Aug 2020 12:20:32 -0400
Subject: [PATCH 0065/1405] integration/components/life-cycle: fix
removeComponent
---
.../glimmer/tests/integration/components/life-cycle-test.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/life-cycle-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/life-cycle-test.js
index f710961adbb..e2a8f84cc1f 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/life-cycle-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/life-cycle-test.js
@@ -88,7 +88,7 @@ class LifeCycleHooksTest extends RenderingTestCase {
};
let removeComponent = instance => {
- let index = this.componentRegistry.indexOf(instance);
+ let index = this.componentRegistry.indexOf(getViewId(instance));
this.componentRegistry.splice(index, 1);
delete this.components[name];
From 7328532bbea63778fae478722b6a4972372f4ec3 Mon Sep 17 00:00:00 2001
From: Robert Jackson
Date: Wed, 5 Aug 2020 15:51:55 -0400
Subject: [PATCH 0066/1405] Add v3.16.10 to CHANGELOG.md
[ci skip]
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2c84fef3345..864a17975fd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -105,6 +105,10 @@
- [#18694](https://github.com/emberjs/ember.js/pull/18694) [BUGFIX] Ensure tag updates are buffered, remove error message
- [#18709](https://github.com/emberjs/ember.js/pull/18709) [BUGFIX] Fix `this` in `@tracked` initializer
+### v3.16.10 (August 5, 2020)
+
+- [#19028](https://github.com/emberjs/ember.js/pull/19028) [BUGFIX] Ensure setter CP's with dependent keys on curly components can be two way bound
+
### v3.16.9 (July 29, 2020)
- [#19001](https://github.com/emberjs/ember.js/pull/19001) [BUGFIX] Invoke methods correctly in `TextSupport` `sendAction`
From 0460716c4ad74338cf67beb5f39827cc3fb089f5 Mon Sep 17 00:00:00 2001
From: Katie Gengler
Date: Wed, 5 Aug 2020 16:26:48 -0400
Subject: [PATCH 0067/1405] Add v3.21.0-beta.5 to CHANGELOG
(cherry picked from commit 045bbff5a1a7aa6081bf9b3712647beef5c3a9e5)
---
CHANGELOG.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 864a17975fd..e64c7709015 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Ember Changelog
+### v3.21.0-beta.5 (August 5, 2020)
+
+- [#19028](https://github.com/emberjs/ember.js/pull/19028) [BUGFIX] Ensure setter CP's with dependent keys on curly components can be two way bound
+
### v3.21.0-beta.4 (August 3, 2020)
- [#19059](https://github.com/emberjs/ember.js/pull/19059) [BUGFIX] Prevent `` from erroring in `HistoryLocation`
From e69b6f1c5d445a35b026c6f091b23237dcdfb5b2 Mon Sep 17 00:00:00 2001
From: Chris Garrett
Date: Tue, 28 Jul 2020 22:03:37 -0700
Subject: [PATCH 0068/1405] [REFACTOR] Simplify get and computeds
This refactor simplifies get and computeds in the following ways:
- Removes several brand checks that were unnecessary from `get`:
- `isEmberArray`: Ember Arrays that are not native arrays will
automatically be tracked through proper usage.
- `isProxy`: This was only necessary for conditionals, and updates in
the VM allow us to autotrack that instead.
- Uses `tagFor` instead of `tagForProperty` in many places including
`get`. This allows us to avoid the brand check for
`CUSTOM_PROPERTY_TAG`, which is really only necessary for chain tags.
- Updates everywhere that looks up tags multiple times on the same
object to use a shared `tagMeta` so we don't lookup that map multiple
times.
- Moves computed revision and value caches onto Meta, so we're looking
up fewer maps.
- Creates a new AutoComputed descriptor for computed properties that
use autotracking, so we can simplify the get logic for standard CPs.
---
package.json | 16 +-
.../-internals/glimmer/lib/environment.ts | 3 +-
.../glimmer/lib/helpers/-track-array.ts | 5 +-
.../-internals/glimmer/lib/utils/iterator.ts | 10 +-
.../-internals/glimmer/lib/utils/to-bool.ts | 7 +-
packages/@ember/-internals/meta/lib/meta.ts | 50 ++++-
packages/@ember/-internals/metal/index.ts | 6 +-
packages/@ember/-internals/metal/lib/alias.ts | 25 +--
.../-internals/metal/lib/array_events.ts | 8 +-
.../@ember/-internals/metal/lib/chain-tags.ts | 127 ++++++------
.../@ember/-internals/metal/lib/computed.ts | 189 ++++++++++-------
.../-internals/metal/lib/computed_cache.ts | 60 +-----
.../@ember/-internals/metal/lib/observer.ts | 32 ++-
.../-internals/metal/lib/property_get.ts | 63 +++---
packages/@ember/-internals/metal/lib/tags.ts | 22 +-
.../@ember/-internals/metal/lib/tracked.ts | 9 +-
.../-internals/metal/tests/computed_test.js | 14 +-
.../-internals/metal/tests/observer_test.js | 4 +-
.../metal/tests/tracked/validation_test.js | 47 -----
.../-internals/runtime/lib/mixins/-proxy.js | 19 +-
.../runtime/lib/mixins/observable.js | 8 +-
.../runtime/lib/system/array_proxy.js | 17 +-
packages/@ember/object/compat.ts | 5 +-
.../lib/computed/reduce_computed_macros.js | 11 +-
yarn.lock | 196 +++++++++---------
25 files changed, 490 insertions(+), 463 deletions(-)
diff --git a/package.json b/package.json
index 1085ee284e5..4c853f473f3 100644
--- a/package.json
+++ b/package.json
@@ -74,15 +74,15 @@
},
"devDependencies": {
"@babel/preset-env": "^7.9.5",
- "@glimmer/compiler": "^0.55.3",
+ "@glimmer/compiler": "^0.56.0",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.55.3",
- "@glimmer/node": "^0.55.3",
- "@glimmer/opcode-compiler": "^0.55.3",
- "@glimmer/program": "^0.55.3",
- "@glimmer/reference": "^0.55.3",
- "@glimmer/runtime": "^0.55.3",
- "@glimmer/validator": "^0.55.3",
+ "@glimmer/interfaces": "^0.56.0",
+ "@glimmer/node": "^0.56.0",
+ "@glimmer/opcode-compiler": "^0.56.0",
+ "@glimmer/program": "^0.56.0",
+ "@glimmer/reference": "^0.56.0",
+ "@glimmer/runtime": "^0.56.0",
+ "@glimmer/validator": "^0.56.0",
"@simple-dom/document": "^1.4.0",
"@types/qunit": "^2.9.1",
"@types/rsvp": "^4.0.3",
diff --git a/packages/@ember/-internals/glimmer/lib/environment.ts b/packages/@ember/-internals/glimmer/lib/environment.ts
index 57f2eeb3b8b..d5de72884e3 100644
--- a/packages/@ember/-internals/glimmer/lib/environment.ts
+++ b/packages/@ember/-internals/glimmer/lib/environment.ts
@@ -1,5 +1,5 @@
import { ENV } from '@ember/-internals/environment';
-import { get, set } from '@ember/-internals/metal';
+import { _getProp, get, set } from '@ember/-internals/metal';
import { Owner } from '@ember/-internals/owner';
import { getDebugName } from '@ember/-internals/utils';
import { constructStyleDeprecationMessage } from '@ember/-internals/views';
@@ -117,6 +117,7 @@ export class EmberEnvironmentDelegate implements EnvironmentDelegate {
@@ -131,10 +131,10 @@ class ObjectIterator extends BoundedIterator {
// Add the tag of the returned value if it is an array, since arrays
// should always cause updates if they are consumed and then changed
if (isTracking()) {
- consumeTag(tagForProperty(obj, key));
+ consumeTag(tagFor(obj, key));
- if (Array.isArray(value) || isEmberArray(value)) {
- consumeTag(tagForProperty(value, '[]'));
+ if (Array.isArray(value)) {
+ consumeTag(tagFor(value, '[]'));
}
}
diff --git a/packages/@ember/-internals/glimmer/lib/utils/to-bool.ts b/packages/@ember/-internals/glimmer/lib/utils/to-bool.ts
index 42c29a424c5..455e3bfeb58 100644
--- a/packages/@ember/-internals/glimmer/lib/utils/to-bool.ts
+++ b/packages/@ember/-internals/glimmer/lib/utils/to-bool.ts
@@ -1,11 +1,16 @@
-import { get } from '@ember/-internals/metal';
+import { get, tagForProperty } from '@ember/-internals/metal';
import { isArray } from '@ember/-internals/runtime';
import { isProxy } from '@ember/-internals/utils';
+import { consumeTag } from '@glimmer/validator';
export default function toBool(predicate: unknown): boolean {
if (isProxy(predicate)) {
+ consumeTag(tagForProperty(predicate as object, 'content'));
+
return Boolean(get(predicate, 'isTruthy'));
} else if (isArray(predicate)) {
+ consumeTag(tagForProperty(predicate as object, '[]'));
+
return (predicate as { length: number }).length !== 0;
} else {
return Boolean(predicate);
diff --git a/packages/@ember/-internals/meta/lib/meta.ts b/packages/@ember/-internals/meta/lib/meta.ts
index a63dafea1ce..f54e0706f18 100644
--- a/packages/@ember/-internals/meta/lib/meta.ts
+++ b/packages/@ember/-internals/meta/lib/meta.ts
@@ -2,7 +2,7 @@ import { symbol, toString } from '@ember/-internals/utils';
import { assert, deprecate } from '@ember/debug';
import { DEBUG } from '@glimmer/env';
import { isDestroyed, isDestroying } from '@glimmer/runtime';
-import { UpdatableTag } from '@glimmer/validator';
+import { Revision, UpdatableTag } from '@glimmer/validator';
type ObjMap = { [key: string]: T };
@@ -89,7 +89,10 @@ export class Meta {
_descriptors: Map | undefined;
_mixins: any | undefined;
_isInit: boolean;
- _lazyChains: ObjMap> | undefined;
+ _lazyChains: ObjMap<[UpdatableTag, unknown][]> | undefined;
+ _values: ObjMap | undefined;
+ _tags: ObjMap | undefined;
+ _revisions: ObjMap | undefined;
source: object;
proto: object | undefined;
_parent: Meta | undefined | null;
@@ -100,16 +103,17 @@ export class Meta {
_flattenedVersion = 0;
// DEBUG
- _values: any | undefined;
-
constructor(obj: object) {
if (DEBUG) {
counters!.metaInstantiated++;
- this._values = undefined;
}
this._parent = undefined;
this._descriptors = undefined;
this._mixins = undefined;
+ this._lazyChains = undefined;
+ this._values = undefined;
+ this._tags = undefined;
+ this._revisions = undefined;
// initial value for all flags right now is false
// see FLAGS const for detailed list of flags used
@@ -231,21 +235,47 @@ export class Meta {
return false;
}
- writableLazyChainsFor(key: string) {
+ valueFor(key: string): unknown {
+ let values = this._values;
+
+ return values !== undefined ? values[key] : undefined;
+ }
+
+ setValueFor(key: string, value: unknown) {
+ let values = this._getOrCreateOwnMap('_values');
+
+ values[key] = value;
+ }
+
+ revisionFor(key: string): Revision | undefined {
+ let revisions = this._revisions;
+
+ return revisions !== undefined ? revisions[key] : undefined;
+ }
+
+ setRevisionFor(key: string, revision: Revision | undefined) {
+ let revisions = this._getOrCreateOwnMap('_revisions');
+
+ revisions[key] = revision;
+ }
+
+ writableLazyChainsFor(key: string): [UpdatableTag, unknown][] {
if (DEBUG) {
counters!.writableLazyChainsCalls++;
}
let lazyChains = this._getOrCreateOwnMap('_lazyChains');
- if (!(key in lazyChains)) {
- lazyChains[key] = Object.create(null);
+ let chains = lazyChains[key];
+
+ if (chains === undefined) {
+ chains = lazyChains[key] = [];
}
- return lazyChains[key];
+ return chains;
}
- readableLazyChainsFor(key: string) {
+ readableLazyChainsFor(key: string): [UpdatableTag, unknown][] | undefined {
if (DEBUG) {
counters!.readableLazyChainsCalls++;
}
diff --git a/packages/@ember/-internals/metal/index.ts b/packages/@ember/-internals/metal/index.ts
index 2db4dd0c322..8791dc829ea 100644
--- a/packages/@ember/-internals/metal/index.ts
+++ b/packages/@ember/-internals/metal/index.ts
@@ -1,13 +1,14 @@
export {
default as computed,
+ autoComputed,
isComputed,
_globalsComputed,
ComputedProperty,
} from './lib/computed';
-export { getCacheFor, getCachedValueFor, peekCacheFor } from './lib/computed_cache';
+export { getCachedValueFor } from './lib/computed_cache';
export { default as alias } from './lib/alias';
export { deprecateProperty } from './lib/deprecate_property';
-export { PROXY_CONTENT, _getPath, get, getWithDefault } from './lib/property_get';
+export { PROXY_CONTENT, _getPath, get, getWithDefault, _getProp } from './lib/property_get';
export { set, trySet } from './lib/property_set';
export {
objectAt,
@@ -44,7 +45,6 @@ export {
isClassicDecorator,
setClassicDecorator,
} from './lib/descriptor_map';
-export { getChainTagsForKey } from './lib/chain-tags';
export { default as libraries, Libraries } from './lib/libraries';
export { default as getProperties } from './lib/get_properties';
export { default as setProperties } from './lib/set_properties';
diff --git a/packages/@ember/-internals/metal/lib/alias.ts b/packages/@ember/-internals/metal/lib/alias.ts
index 61cf847721d..823abc96c49 100644
--- a/packages/@ember/-internals/metal/lib/alias.ts
+++ b/packages/@ember/-internals/metal/lib/alias.ts
@@ -1,10 +1,11 @@
-import { Meta } from '@ember/-internals/meta';
+import { Meta, meta as metaFor } from '@ember/-internals/meta';
import { inspect } from '@ember/-internals/utils';
import { assert } from '@ember/debug';
import EmberError from '@ember/error';
import {
- combine,
consumeTag,
+ tagFor,
+ tagMetaFor,
untrack,
UpdatableTag,
updateTag,
@@ -12,7 +13,6 @@ import {
valueForTag,
} from '@glimmer/validator';
import { finishLazyChains, getChainTagsForKey } from './chain-tags';
-import { getLastRevisionFor, setLastRevisionFor } from './computed_cache';
import {
ComputedDescriptor,
Decorator,
@@ -23,7 +23,6 @@ import { descriptorForDecorator } from './descriptor_map';
import { defineProperty } from './properties';
import { get } from './property_get';
import { set } from './property_set';
-import { tagForProperty } from './tags';
export type AliasDecorator = Decorator & PropertyDecorator & AliasDecoratorImpl;
@@ -73,14 +72,12 @@ export class AliasedProperty extends ComputedDescriptor {
super.setup(obj, keyName, propertyDesc, meta);
}
- teardown(obj: object, keyName: string, meta: Meta): void {
- super.teardown(obj, keyName, meta);
- }
-
get(obj: object, keyName: string): any {
let ret: any;
- let propertyTag = tagForProperty(obj, keyName) as UpdatableTag;
+ let meta = metaFor(obj);
+ let tagMeta = tagMetaFor(obj);
+ let propertyTag = tagFor(obj, keyName, tagMeta) as UpdatableTag;
// We don't use the tag since CPs are not automatic, we just want to avoid
// anything tracking while we get the altKey
@@ -88,12 +85,12 @@ export class AliasedProperty extends ComputedDescriptor {
ret = get(obj, this.altKey);
});
- let lastRevision = getLastRevisionFor(obj, keyName);
+ let lastRevision = meta.revisionFor(keyName);
- if (!validateTag(propertyTag, lastRevision)) {
- updateTag(propertyTag, combine(getChainTagsForKey(obj, this.altKey, true)));
- setLastRevisionFor(obj, keyName, valueForTag(propertyTag));
- finishLazyChains(obj, keyName, ret);
+ if (lastRevision === undefined || !validateTag(propertyTag, lastRevision)) {
+ updateTag(propertyTag, getChainTagsForKey(obj, this.altKey, tagMeta, meta));
+ meta.setRevisionFor(keyName, valueForTag(propertyTag));
+ finishLazyChains(meta, keyName, ret);
}
consumeTag(propertyTag);
diff --git a/packages/@ember/-internals/metal/lib/array_events.ts b/packages/@ember/-internals/metal/lib/array_events.ts
index f898b76c9bf..ee7c73285c5 100644
--- a/packages/@ember/-internals/metal/lib/array_events.ts
+++ b/packages/@ember/-internals/metal/lib/array_events.ts
@@ -1,5 +1,4 @@
import { peekMeta } from '@ember/-internals/meta';
-import { peekCacheFor } from './computed_cache';
import { sendEvent } from './events';
import { notifyPropertyChange } from './property_events';
@@ -61,8 +60,7 @@ export function arrayContentDidChange(
sendEvent(array, '@array:change', [array, startIdx, removeAmt, addAmt]);
- let cache = peekCacheFor(array);
- if (cache !== undefined) {
+ if (meta !== null) {
let length = array.length;
let addedAmount = addAmt === -1 ? 0 : addAmt;
let removedAmount = removeAmt === -1 ? 0 : removeAmt;
@@ -70,11 +68,11 @@ export function arrayContentDidChange(
let previousLength = length - delta;
let normalStartIdx = startIdx < 0 ? previousLength + startIdx : startIdx;
- if (cache.has('firstObject') && normalStartIdx === 0) {
+ if (meta.revisionFor('firstObject') !== undefined && normalStartIdx === 0) {
notifyPropertyChange(array, 'firstObject', meta);
}
- if (cache.has('lastObject')) {
+ if (meta.revisionFor('lastObject') !== undefined) {
let previousLastIndex = previousLength - 1;
let lastAffectedIndex = normalStartIdx + removedAmount;
if (previousLastIndex < lastAffectedIndex) {
diff --git a/packages/@ember/-internals/metal/lib/chain-tags.ts b/packages/@ember/-internals/metal/lib/chain-tags.ts
index de6b769a2e1..6666495a256 100644
--- a/packages/@ember/-internals/metal/lib/chain-tags.ts
+++ b/packages/@ember/-internals/metal/lib/chain-tags.ts
@@ -1,4 +1,5 @@
-import { meta as metaFor, peekMeta } from '@ember/-internals/meta';
+import { Meta, meta as metaFor, peekMeta } from '@ember/-internals/meta';
+import { isObject } from '@ember/-internals/utils';
import { assert, deprecate } from '@ember/debug';
import { DEBUG } from '@glimmer/env';
import {
@@ -6,52 +7,65 @@ import {
combine,
createUpdatableTag,
Tag,
+ TagMeta,
+ tagMetaFor,
updateTag,
validateTag,
} from '@glimmer/validator';
import { objectAt } from './array';
-import { getLastRevisionFor, peekCacheFor } from './computed_cache';
-import { descriptorForProperty } from './descriptor_map';
import { tagForProperty } from './tags';
-export function finishLazyChains(obj: any, key: string, value: any) {
- let meta = peekMeta(obj);
- let lazyTags = meta !== null ? meta.readableLazyChainsFor(key) : undefined;
+export function finishLazyChains(meta: Meta, key: string, value: any) {
+ let lazyTags = meta.readableLazyChainsFor(key);
if (lazyTags === undefined) {
return;
}
- if (value === null || (typeof value !== 'object' && typeof value !== 'function')) {
- for (let path in lazyTags) {
- delete lazyTags[path];
+ if (isObject(value)) {
+ for (let i = 0; i < lazyTags.length; i++) {
+ let [tag, deps] = lazyTags[i];
+ updateTag(tag, getChainTagsForKey(value, deps as string, tagMetaFor(value), peekMeta(value)));
}
- return;
}
- for (let path in lazyTags) {
- let tag = lazyTags[path];
-
- updateTag(tag, combine(getChainTagsForKey(value, path)));
-
- delete lazyTags[path];
- }
+ lazyTags.length = 0;
}
-export function getChainTagsForKeys(obj: any, keys: string[], addMandatorySetter = false) {
- let chainTags: Tag[] = [];
+export function getChainTagsForKeys(
+ obj: object,
+ keys: string[],
+ tagMeta: TagMeta,
+ meta: Meta | null
+): Tag {
+ let tags: Tag[] = [];
for (let i = 0; i < keys.length; i++) {
- chainTags.push(...getChainTagsForKey(obj, keys[i], addMandatorySetter));
+ getChainTags(tags, obj, keys[i], tagMeta, meta);
}
- return chainTags;
+ return combine(tags);
}
-export function getChainTagsForKey(obj: any, path: string, addMandatorySetter = false) {
- let chainTags: Tag[] = [];
+export function getChainTagsForKey(
+ obj: object,
+ key: string,
+ tagMeta: TagMeta,
+ meta: Meta | null
+): Tag {
+ return combine(getChainTags([], obj, key, tagMeta, meta));
+}
+function getChainTags(
+ chainTags: Tag[],
+ obj: object,
+ path: string,
+ tagMeta: TagMeta,
+ meta: Meta | null
+) {
let current: any = obj;
+ let currentTagMeta = tagMeta;
+ let currentMeta = meta;
let pathLength = path.length;
let segmentEnd = -1;
@@ -60,13 +74,6 @@ export function getChainTagsForKey(obj: any, path: string, addMandatorySetter =
// eslint-disable-next-line no-constant-condition
while (true) {
- let currentType = typeof current;
-
- if (current === null || (currentType !== 'object' && currentType !== 'function')) {
- // we've hit the end of the chain for now, break out
- break;
- }
-
let lastSegmentEnd = segmentEnd + 1;
segmentEnd = path.indexOf('.', lastSegmentEnd);
@@ -137,42 +144,32 @@ export function getChainTagsForKey(obj: any, path: string, addMandatorySetter =
typeof item === 'object'
);
- chainTags.push(tagForProperty(item, segment, addMandatorySetter));
+ chainTags.push(tagForProperty(item, segment, true));
}
}
// Push the tag for the array length itself
- chainTags.push(tagForProperty(current, '[]', addMandatorySetter));
+ chainTags.push(tagForProperty(current, '[]', true, currentTagMeta));
break;
}
- // TODO: Assert that current[segment] isn't an undecorated, non-MANDATORY_SETTER/dependentKeyCompat getter
-
- let propertyTag = tagForProperty(current, segment, addMandatorySetter);
- descriptor = descriptorForProperty(current, segment);
+ let propertyTag = tagForProperty(current, segment, true, currentTagMeta);
+ descriptor = currentMeta !== null ? currentMeta.peekDescriptors(segment) : undefined;
chainTags.push(propertyTag);
- // If the key was an alias, we should always get the next value in order to
- // bootstrap the alias. This is because aliases, unlike other CPs, should
- // always be in sync with the aliased value.
- if (descriptor !== undefined && typeof descriptor.altKey === 'string') {
- current = current[segment];
-
- // We still need to break if we're at the end of the path.
- if (segmentEnd === pathLength) {
- break;
- }
-
- // Otherwise, continue to process the next segment
- continue;
- }
-
// If we're at the end of the path, processing the last segment, and it's
// not an alias, we should _not_ get the last value, since we already have
// its tag. There's no reason to access it and do more work.
if (segmentEnd === pathLength) {
+ // If the key was an alias, we should always get the next value in order to
+ // bootstrap the alias. This is because aliases, unlike other CPs, should
+ // always be in sync with the aliased value.
+ if (descriptor !== undefined && typeof descriptor.altKey === 'string') {
+ // tslint:disable-next-line: no-unused-expression
+ current[segment];
+ }
break;
}
@@ -185,32 +182,40 @@ export function getChainTagsForKey(obj: any, path: string, addMandatorySetter =
} else {
current = current[segment];
}
+ } else if (typeof descriptor.altKey === 'string') {
+ current = current[segment];
} else {
// If the descriptor is defined, then its a normal CP (not an alias, which
// would have been handled earlier). We get the last revision to check if
// the CP is still valid, and if so we use the cached value. If not, then
// we create a lazy chain lookup, and the next time the CP is calculated,
// it will update that lazy chain.
- let lastRevision = getLastRevisionFor(current, segment);
+ let instanceMeta = currentMeta!.source === current ? currentMeta! : metaFor(current);
+ let lastRevision = instanceMeta.revisionFor(segment);
- if (validateTag(propertyTag, lastRevision)) {
- current = peekCacheFor(current).get(segment);
+ if (lastRevision !== undefined && validateTag(propertyTag, lastRevision)) {
+ current = instanceMeta.valueFor(segment);
} else {
- let lazyChains = metaFor(current).writableLazyChainsFor(segment);
-
+ // use metaFor here to ensure we have the meta for the instance
+ let lazyChains = instanceMeta.writableLazyChainsFor(segment);
let rest = path.substr(segmentEnd + 1);
- let placeholderTag = lazyChains[rest];
-
- if (placeholderTag === undefined) {
- placeholderTag = lazyChains[rest] = createUpdatableTag();
- }
+ let placeholderTag = createUpdatableTag();
+ lazyChains.push([placeholderTag, rest]);
chainTags.push(placeholderTag);
break;
}
}
+
+ if (!isObject(current)) {
+ // we've hit the end of the chain for now, break out
+ break;
+ }
+
+ currentTagMeta = tagMetaFor(current);
+ currentMeta = peekMeta(current);
}
if (DEBUG) {
diff --git a/packages/@ember/-internals/metal/lib/computed.ts b/packages/@ember/-internals/metal/lib/computed.ts
index 205e84fd0e0..b2f872e6419 100644
--- a/packages/@ember/-internals/metal/lib/computed.ts
+++ b/packages/@ember/-internals/metal/lib/computed.ts
@@ -1,13 +1,12 @@
import { Meta, meta as metaFor } from '@ember/-internals/meta';
-import { addObserver, PROPERTY_DID_CHANGE } from '@ember/-internals/metal';
-import { inspect, isEmberArray, toString } from '@ember/-internals/utils';
+import { inspect, symbol, toString } from '@ember/-internals/utils';
import { assert, deprecate, warn } from '@ember/debug';
import EmberError from '@ember/error';
import { isDestroyed } from '@glimmer/runtime';
import {
- combine,
consumeTag,
- Tag,
+ tagFor,
+ tagMetaFor,
track,
untrack,
UpdatableTag,
@@ -16,13 +15,6 @@ import {
valueForTag,
} from '@glimmer/validator';
import { finishLazyChains, getChainTagsForKeys } from './chain-tags';
-import {
- getCachedValueFor,
- getCacheFor,
- getLastRevisionFor,
- peekCacheFor,
- setLastRevisionFor,
-} from './computed_cache';
import {
ComputedDescriptor,
Decorator,
@@ -36,11 +28,17 @@ import {
isClassicDecorator,
} from './descriptor_map';
import expandProperties from './expand_properties';
-import { setObserverSuspended } from './observer';
+import { addObserver, setObserverSuspended } from './observer';
import { defineProperty } from './properties';
-import { beginPropertyChanges, endPropertyChanges, notifyPropertyChange } from './property_events';
+import {
+ beginPropertyChanges,
+ endPropertyChanges,
+ notifyPropertyChange,
+ PROPERTY_DID_CHANGE,
+} from './property_events';
import { set } from './property_set';
-import { tagForProperty } from './tags';
+
+export const AUTO = symbol('COMPUTED_AUTO');
export type ComputedPropertyGetter = (keyName: string) => any;
export type ComputedPropertySetter = (keyName: string, value: any, cachedValue?: any) => any;
@@ -255,13 +253,12 @@ function noop(): void {}
@public
*/
export class ComputedProperty extends ComputedDescriptor {
- private _volatile = false;
- private _readOnly = false;
- private _hasConfig = false;
+ protected _volatile = false;
+ protected _readOnly = false;
+ protected _hasConfig = false;
_getter?: ComputedPropertyGetter = undefined;
_setter?: ComputedPropertySetter = undefined;
- _auto?: boolean;
constructor(args: Array) {
super();
@@ -604,13 +601,17 @@ export class ComputedProperty extends ComputedDescriptor {
return this._getter!.call(obj, keyName);
}
- let cache = getCacheFor(obj);
- let propertyTag = tagForProperty(obj, keyName) as UpdatableTag;
+ let meta = metaFor(obj);
+ let tagMeta = tagMetaFor(obj);
+
+ let propertyTag = tagFor(obj, keyName, tagMeta) as UpdatableTag;
let ret;
- if (cache.has(keyName) && validateTag(propertyTag, getLastRevisionFor(obj, keyName))) {
- ret = cache.get(keyName);
+ let revision = meta.revisionFor(keyName);
+
+ if (revision !== undefined && validateTag(propertyTag, revision)) {
+ ret = meta.valueFor(keyName);
} else {
// For backwards compatibility, we only throw if the CP has any dependencies. CPs without dependencies
// should be allowed, even after the object has been destroyed, which is why we check _dependentKeys.
@@ -619,42 +620,29 @@ export class ComputedProperty extends ComputedDescriptor {
this._dependentKeys === undefined || !isDestroyed(obj)
);
- let upstreamTag: Tag | undefined = undefined;
-
- if (this._auto === true) {
- upstreamTag = track(() => {
- ret = this._getter!.call(obj, keyName);
- });
- } else {
- // Create a tracker that absorbs any trackable actions inside the CP
- untrack(() => {
- ret = this._getter!.call(obj, keyName);
- });
- }
+ let { _getter, _dependentKeys } = this;
- if (this._dependentKeys !== undefined) {
- let tag = combine(getChainTagsForKeys(obj, this._dependentKeys, true));
-
- upstreamTag = upstreamTag === undefined ? tag : combine([upstreamTag, tag]);
- }
+ // Create a tracker that absorbs any trackable actions inside the CP
+ untrack(() => {
+ ret = _getter!.call(obj, keyName);
+ });
- if (upstreamTag !== undefined) {
- updateTag(propertyTag!, upstreamTag);
+ if (_dependentKeys !== undefined) {
+ updateTag(propertyTag!, getChainTagsForKeys(obj, _dependentKeys, tagMeta, meta));
}
- setLastRevisionFor(obj, keyName, valueForTag(propertyTag));
+ meta.setValueFor(keyName, ret);
+ meta.setRevisionFor(keyName, valueForTag(propertyTag));
- cache.set(keyName, ret);
-
- finishLazyChains(obj, keyName, ret);
+ finishLazyChains(meta, keyName, ret);
}
consumeTag(propertyTag!);
// Add the tag of the returned value if it is an array, since arrays
// should always cause updates if they are consumed and then changed
- if (Array.isArray(ret) || isEmberArray(ret)) {
- consumeTag(tagForProperty(ret, '[]'));
+ if (Array.isArray(ret)) {
+ consumeTag(tagFor(ret, '[]'));
}
return ret;
@@ -673,19 +661,21 @@ export class ComputedProperty extends ComputedDescriptor {
return this.volatileSet(obj, keyName, value);
}
+ let meta = metaFor(obj);
+
// ensure two way binding works when the component has defined a computed
// property with both a setter and dependent keys, in that scenario without
// the sync observer added below the caller's value will never be updated
//
// See GH#18147 / GH#19028 for details.
if (
+ // ensure that we only run this once, while the component is being instantiated
+ meta.isInitializing() &&
this._dependentKeys !== undefined &&
this._dependentKeys.length > 0 &&
// These two properties are set on Ember.Component
typeof obj[PROPERTY_DID_CHANGE] === 'function' &&
- (obj as any).isComponent &&
- // ensure that we only run this once, while the component is being instantiated
- metaFor(obj).isInitializing()
+ (obj as any).isComponent
) {
addObserver(
obj,
@@ -703,17 +693,20 @@ export class ComputedProperty extends ComputedDescriptor {
try {
beginPropertyChanges();
- ret = this._set(obj, keyName, value);
+ ret = this._set(obj, keyName, value, meta);
- finishLazyChains(obj, keyName, ret);
+ finishLazyChains(meta, keyName, ret);
- let propertyTag = tagForProperty(obj, keyName) as UpdatableTag;
+ let tagMeta = tagMetaFor(obj);
+ let propertyTag = tagFor(obj, keyName, tagMeta) as UpdatableTag;
- if (this._dependentKeys !== undefined) {
- updateTag(propertyTag, combine(getChainTagsForKeys(obj, this._dependentKeys, true)));
+ let { _dependentKeys } = this;
+
+ if (_dependentKeys !== undefined) {
+ updateTag(propertyTag, getChainTagsForKeys(obj, _dependentKeys, tagMeta, meta));
}
- setLastRevisionFor(obj, keyName, valueForTag(propertyTag));
+ meta.setRevisionFor(keyName, valueForTag(propertyTag));
} finally {
endPropertyChanges();
}
@@ -738,7 +731,7 @@ export class ComputedProperty extends ComputedDescriptor {
}
);
- let cachedValue = getCachedValueFor(obj, keyName);
+ let cachedValue = metaFor(obj).valueFor(keyName);
defineProperty(obj, keyName, null, cachedValue);
set(obj, keyName, value);
return value;
@@ -748,17 +741,17 @@ export class ComputedProperty extends ComputedDescriptor {
return this._setter!.call(obj, keyName, value);
}
- _set(obj: object, keyName: string, value: unknown): any {
- let cache = getCacheFor(obj);
- let hadCachedValue = cache.has(keyName);
- let cachedValue = cache.get(keyName);
+ _set(obj: object, keyName: string, value: unknown, meta: Meta): any {
+ let hadCachedValue = meta.revisionFor(keyName) !== undefined;
+ let cachedValue = meta.valueFor(keyName);
let ret;
+ let { _setter } = this;
setObserverSuspended(obj, keyName, true);
try {
- ret = this._setter!.call(obj, keyName, value, cachedValue);
+ ret = _setter!.call(obj, keyName, value, cachedValue);
} finally {
setObserverSuspended(obj, keyName, false);
}
@@ -768,9 +761,7 @@ export class ComputedProperty extends ComputedDescriptor {
return ret;
}
- let meta = metaFor(obj);
-
- cache.set(keyName, ret);
+ meta.setValueFor(keyName, ret);
notifyPropertyChange(obj, keyName, meta, value);
@@ -778,18 +769,65 @@ export class ComputedProperty extends ComputedDescriptor {
}
/* called before property is overridden */
- teardown(obj: object, keyName: string, meta?: any): void {
+ teardown(obj: object, keyName: string, meta: Meta): void {
if (!this._volatile) {
- let cache = peekCacheFor(obj);
- if (cache !== undefined) {
- cache.delete(keyName);
+ if (meta.revisionFor(keyName) !== undefined) {
+ meta.setRevisionFor(keyName, undefined);
+ meta.setValueFor(keyName, undefined);
}
}
+
super.teardown(obj, keyName, meta);
}
+}
+
+class AutoComputedProperty extends ComputedProperty {
+ get(obj: object, keyName: string): any {
+ if (this._volatile) {
+ return this._getter!.call(obj, keyName);
+ }
+
+ let meta = metaFor(obj);
+ let tagMeta = tagMetaFor(obj);
- auto() {
- this._auto = true;
+ let propertyTag = tagFor(obj, keyName, tagMeta) as UpdatableTag;
+
+ let ret;
+
+ let revision = meta.revisionFor(keyName);
+
+ if (revision !== undefined && validateTag(propertyTag, revision)) {
+ ret = meta.valueFor(keyName);
+ } else {
+ assert(
+ `Attempted to access the computed ${obj}.${keyName} on a destroyed object, which is not allowed`,
+ !isDestroyed(obj)
+ );
+
+ let { _getter } = this;
+
+ // Create a tracker that absorbs any trackable actions inside the CP
+ let tag = track(() => {
+ ret = _getter!.call(obj, keyName);
+ });
+
+ updateTag(propertyTag!, tag);
+
+ meta.setValueFor(keyName, ret);
+ meta.setRevisionFor(keyName, valueForTag(propertyTag));
+
+ finishLazyChains(meta, keyName, ret);
+ }
+
+ consumeTag(propertyTag!);
+
+ // Add the tag of the returned value if it is an array, since arrays
+ // should always cause updates if they are consumed and then changed
+ if (Array.isArray(ret)) {
+ consumeTag(tagFor(ret, '[]', tagMeta));
+ }
+
+ return ret;
}
}
@@ -1011,6 +1049,15 @@ export function computed(
) as ComputedDecorator;
}
+export function autoComputed(
+ ...config: [ComputedPropertyConfig]
+): ComputedDecorator | DecoratorPropertyDescriptor {
+ return makeComputedDecorator(
+ new AutoComputedProperty(config),
+ ComputedDecoratorImpl
+ ) as ComputedDecorator;
+}
+
/**
Allows checking if a given property on an object is a computed property. For the most part,
this doesn't matter (you would normally just access the property directly and use its value),
diff --git a/packages/@ember/-internals/metal/lib/computed_cache.ts b/packages/@ember/-internals/metal/lib/computed_cache.ts
index f038db4ce87..32d433f7ded 100644
--- a/packages/@ember/-internals/metal/lib/computed_cache.ts
+++ b/packages/@ember/-internals/metal/lib/computed_cache.ts
@@ -1,59 +1,9 @@
-const COMPUTED_PROPERTY_CACHED_VALUES = new WeakMap