diff --git a/.travis.yml b/.travis.yml
index 445176141d9..4869bcf4666 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -96,9 +96,3 @@ jobs:
- PUBLISH=true
script:
- "./bin/publish_builds"
-
- - env:
- - BUILD_TYPE=alpha
- - PUBLISH=true
- script:
- - "./bin/publish_builds"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b2fb4889b69..5342891c3ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,40 @@
# Ember Changelog
+### v3.8.0-beta.3 (January 28, 2019)
+
+- [#17498](https://github.com/emberjs/ember.js/pull/17498) [BUGFIX] Don't remove dep keys in `didUnwatch`
+- [#17499](https://github.com/emberjs/ember.js/pull/17499) [BUGFIX] Update to glimmer-vm 0.37.1.
+
+### v3.8.0-beta.2 (January 14, 2019)
+
+- [#17467](https://github.com/emberjs/ember.js/pull/17467) [BUGFIX] Fix substate interactions with aborts
+
+### v3.8.0-beta.1 (January 7, 2019)
+
+- [#17143](https://github.com/emberjs/ember.js/pull/17143) / [#17375](https://github.com/emberjs/ember.js/pull/17375) [FEATURE] Implement Element Modifier Manager RFC (see [emberjs/rfcs#0373](https://github.com/emberjs/rfcs/blob/master/text/0373-Element-Modifier-Managers.md)).
+- [#17054](https://github.com/emberjs/ember.js/pull/17054) / [#17376](https://github.com/emberjs/ember.js/pull/17376) [FEATURE] Implement `array` helper RFC (see [emberjs/rfcs#0318](https://github.com/emberjs/rfcs/blob/master/text/0318-array-helper.md))
+- [#16735](https://github.com/emberjs/ember.js/pull/16735) [BUGFIX] Observed properties not being marked as enum
+- [#17319](https://github.com/emberjs/ember.js/pull/17319) [CLEANUP] Remove deprecated 'POSITIONAL_PARAM_CONFLICT'
+- [#17394](https://github.com/emberjs/ember.js/pull/17394) [CLEANUP] Remove deprecated code in mixins/array
+- [#17166](https://github.com/emberjs/ember.js/pull/17166) Improve performance of get() / set()
+- [#16710](https://github.com/emberjs/ember.js/pull/16710) Deprecation of (private) `NAME_KEY`
+- [#17244](https://github.com/emberjs/ember.js/pull/17244) Upgrade to Glimmer VM 0.37.0
+- [#17216](https://github.com/emberjs/ember.js/pull/17216) Use native Error instead of custom Error subclass.
+- [#17340](https://github.com/emberjs/ember.js/pull/17340) Remove unused `hooks` variable from qunit-rfc-232 util-test blueprint
+- [#17357](https://github.com/emberjs/ember.js/pull/17357) Allow notifyPropertyChange to be imported from @ember/object
+- [#17413](https://github.com/emberjs/ember.js/pull/17413) Fix missing import in instance-initializer blueprint for ember-mocha
+
+### v3.7.2 (January 22, 2019)
+
+* Upgrade @glimmer/* packages to 0.35.10. Fixes a few issues:
+ * Usage of positional arguments with custom components.
+ * Forwarding attributes via `...attributes` to a dynamic component.
+ * Prevent errors when rendering many template blocks (`Error: Operand over 16-bits. Got 65536`).
+
+### v3.7.1 (January 21, 2019)
+
+- [#17461](https://github.com/emberjs/ember.js/pull/17461) [BUGFIX] Fix substate interactions with aborts
+
### v3.7.0 (January 7, 2019)
- [#17254](https://github.com/emberjs/ember.js/pull/17254) [BREAKING] Explicitly drop support for Node 4
@@ -54,6 +89,13 @@
- [#16978](https://github.com/emberjs/ember.js/pull/16978) [BUGFIX] Properly teardown alias
- [#16877](https://github.com/emberjs/ember.js/pull/16877) [CLEANUP] Allow routes to be named "array" and "object"
+### v3.4.8 (January 22, 2019)
+
+* Upgrade @glimmer/* packages to 0.35.10. Fixes a few issues:
+ * Usage of positional arguments with custom components.
+ * Forwarding attributes via `...attributes` to a dynamic component.
+ * Prevent errors when rendering many template blocks (`Error: Operand over 16-bits. Got 65536`).
+
### v3.4.7 (December 7, 2018)
- #17271 [BUGFIX] Update `backburner.js` to 2.4.2.
diff --git a/package.json b/package.json
index b9e5d570415..174ad30da18 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ember-source",
- "version": "3.8.0",
+ "version": "3.8.0-beta.3",
"description": "A JavaScript framework for creating ambitious web applications",
"keywords": [
"ember-addon"
@@ -89,14 +89,14 @@
"@babel/plugin-transform-shorthand-properties": "^7.2.0",
"@babel/plugin-transform-spread": "^7.2.2",
"@babel/plugin-transform-template-literals": "^7.2.0",
- "@glimmer/compiler": "^0.37.0",
+ "@glimmer/compiler": "^0.37.1",
"@glimmer/env": "^0.1.7",
- "@glimmer/interfaces": "^0.37.0",
- "@glimmer/node": "^0.37.0",
- "@glimmer/opcode-compiler": "^0.37.0",
- "@glimmer/program": "^0.37.0",
- "@glimmer/reference": "^0.37.0",
- "@glimmer/runtime": "^0.37.0",
+ "@glimmer/interfaces": "^0.37.1",
+ "@glimmer/node": "^0.37.1",
+ "@glimmer/opcode-compiler": "^0.37.1",
+ "@glimmer/program": "^0.37.1",
+ "@glimmer/reference": "^0.37.1",
+ "@glimmer/runtime": "^0.37.1",
"@types/qunit": "^2.5.3",
"@types/rsvp": "^4.0.2",
"auto-dist-tag": "^1.0.0",
@@ -148,7 +148,7 @@
"puppeteer": "^1.11.0",
"qunit": "^2.8.0",
"route-recognizer": "^0.3.4",
- "router_js": "^6.2.1",
+ "router_js": "^6.2.2",
"rsvp": "^4.8.4",
"semver": "^5.5.0",
"serve-static": "^1.13.2",
diff --git a/packages/@ember/-internals/glimmer/lib/helpers/action.ts b/packages/@ember/-internals/glimmer/lib/helpers/action.ts
index b5da3c4529a..972e99c21f0 100644
--- a/packages/@ember/-internals/glimmer/lib/helpers/action.ts
+++ b/packages/@ember/-internals/glimmer/lib/helpers/action.ts
@@ -92,12 +92,15 @@ import { ACTION, INVOKE, UnboundReference } from '../utils/references';
additional arguments are passed to the action function. This has interesting
properties combined with currying of arguments. For example:
+ ```app/templates/components/my-component.hbs
+ {{input on-input=(action (action 'setName' model) value="target.value")}}
+ ```
+
```app/components/my-component.js
import Component from '@ember/component';
export default Component.extend({
actions: {
- // Usage {{input on-input=(action (action 'setName' model) value="target.value")}}
setName(model, name) {
model.set('name', name);
}
diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js
index eeb243aa60c..59ed820f073 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/components/angle-bracket-invocation-test.js
@@ -855,6 +855,70 @@ if (EMBER_GLIMMER_ANGLE_BRACKET_INVOCATION) {
});
}
+ '@test can forward ...attributes to dynamic component invocation ("splattributes")'() {
+ this.registerComponent('x-outer', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '{{yield}}',
+ });
+
+ this.registerComponent('x-inner', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '
{{yield}}
',
+ });
+
+ this.render(strip`
+ {{#let (component 'x-outer') as |Thing|}}
+ Hello!
+ {{/let}}
+ `);
+
+ this.assertElement(this.firstChild, {
+ tagName: 'div',
+ attrs: { 'data-foo': '' },
+ content: 'Hello!',
+ });
+ }
+
+ '@test an inner angle invocation can forward ...attributes through dynamic component invocation ("splattributes")'() {
+ this.registerComponent('x-outer', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: `{{#let (component 'x-inner') as |Thing|}}{{yield}}{{/let}}`,
+ });
+
+ this.registerComponent('x-inner', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '{{yield}}
',
+ });
+
+ this.render('Hello!');
+
+ this.assertElement(this.firstChild, {
+ tagName: 'div',
+ attrs: { 'data-foo': '' },
+ content: 'Hello!',
+ });
+ }
+
+ '@test an inner angle invocation can forward ...attributes through static component invocation ("splattributes")'() {
+ this.registerComponent('x-outer', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: `{{yield}}`,
+ });
+
+ this.registerComponent('x-inner', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '{{yield}}
',
+ });
+
+ this.render('Hello!');
+
+ this.assertElement(this.firstChild, {
+ tagName: 'div',
+ attrs: { 'data-foo': '' },
+ content: 'Hello!',
+ });
+ }
+
'@test can include `...attributes` in multiple elements in tagless component ("splattributes")'() {
this.registerComponent('foo-bar', {
ComponentClass: Component.extend({ tagName: '' }),
@@ -919,6 +983,41 @@ if (EMBER_GLIMMER_ANGLE_BRACKET_INVOCATION) {
content: 'world',
});
}
+
+ '@test can yield content to contextual components invoked with angle-bracket components that receives splattributes'() {
+ this.registerComponent('foo-bar/inner', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ template: '{{yield}}
',
+ });
+ this.registerComponent('foo-bar', {
+ ComponentClass: Component.extend({ tagName: '' }),
+ // If doesn't receive splattributes this test passes
+ template: strip`
+ {{#let (component "foo-bar/inner") as |Inner|}}
+ {{yield}}
+ Inside the let
+ {{/let}}
+ Outside the let
+ `,
+ });
+
+ this.render('Yielded content');
+ this.assertElement(this.firstChild, {
+ tagName: 'h1',
+ attrs: {},
+ content: 'Yielded content',
+ });
+ this.assertElement(this.nthChild(1), {
+ tagName: 'h2',
+ attrs: {},
+ content: 'Inside the let',
+ });
+ this.assertElement(this.nthChild(2), {
+ tagName: 'h3',
+ attrs: {},
+ content: 'Outside the let',
+ });
+ }
}
);
}
diff --git a/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js b/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js
index 5608f28aec9..f0bcb33e2ab 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/custom-component-manager-test.js
@@ -305,6 +305,58 @@ if (GLIMMER_CUSTOM_COMPONENT_MANAGER) {
this.assertHTML(`Chad Hietala
`);
}
+ ['@test it can set positional params on the component instance']() {
+ let ComponentClass = setComponentManager(
+ createBasicManager,
+ EmberObject.extend({
+ salutation: computed('args.positional', function() {
+ return this.args.positional[0] + ' ' + this.args.positional[1];
+ }),
+ })
+ );
+
+ this.registerComponent('foo-bar', {
+ template: `{{salutation}}
`,
+ ComponentClass,
+ });
+
+ this.render('{{foo-bar "Yehuda" "Katz"}}');
+
+ this.assertHTML(`Yehuda Katz
`);
+ }
+
+ ['@test positional params are updated if they change']() {
+ let ComponentClass = setComponentManager(
+ createBasicManager,
+ EmberObject.extend({
+ salutation: computed('args.positional', function() {
+ return this.args.positional[0] + ' ' + this.args.positional[1];
+ }),
+ })
+ );
+
+ this.registerComponent('foo-bar', {
+ template: `{{salutation}}
`,
+ ComponentClass,
+ });
+
+ this.render('{{foo-bar firstName lastName}}', {
+ firstName: 'Yehuda',
+ lastName: 'Katz',
+ });
+
+ this.assertHTML(`Yehuda Katz
`);
+
+ runTask(() =>
+ setProperties(this.context, {
+ firstName: 'Chad',
+ lastName: 'Hietala',
+ })
+ );
+
+ this.assertHTML(`Chad Hietala
`);
+ }
+
['@test it can opt-in to running destructor'](assert) {
let ComponentClass = setComponentManager(
() => {
diff --git a/packages/@ember/-internals/glimmer/tests/integration/syntax/each-in-test.js b/packages/@ember/-internals/glimmer/tests/integration/syntax/each-in-test.js
index e01939aa5c6..1b05c381dfd 100644
--- a/packages/@ember/-internals/glimmer/tests/integration/syntax/each-in-test.js
+++ b/packages/@ember/-internals/glimmer/tests/integration/syntax/each-in-test.js
@@ -139,6 +139,31 @@ class AbstractEachInTest extends RenderingTestCase {
}
class EachInTest extends AbstractEachInTest {
+ [`@only each-in supports keys with a period in them`]() {
+ this.render(
+ strip`
+
+ {{#each-in categories as |_ item|}}
+ - {{item.name}}
+ {{/each-in}}
+
+ `,
+ {
+ categories: {
+ // uncomment and run. notice `items` is undefined
+ 'hello.world': { name: 'foo' },
+ },
+ }
+ );
+
+ // Empty
+ this.assertHTML(strip`
+
+ `);
+ }
+
[`@test it repeats the given block for each item in the hash`]() {
this.makeHash({ Smartphones: 8203, 'JavaScript Frameworks': Infinity });
diff --git a/packages/@ember/-internals/metal/lib/alias.ts b/packages/@ember/-internals/metal/lib/alias.ts
index 38471c23882..b8f3b6cdb1e 100644
--- a/packages/@ember/-internals/metal/lib/alias.ts
+++ b/packages/@ember/-internals/metal/lib/alias.ts
@@ -46,10 +46,6 @@ export class AliasedProperty extends Descriptor implements DescriptorWithDepende
this.consume(obj, keyName, meta);
}
- didUnwatch(obj: object, keyName: string, meta: Meta): void {
- this.unconsume(obj, keyName, meta);
- }
-
get(obj: object, keyName: string): any {
let ret = get(obj, this.altKey);
this.consume(obj, keyName, metaFor(obj));
diff --git a/packages/@ember/canary-features/index.ts b/packages/@ember/canary-features/index.ts
index 992c99b629f..a2603221be2 100644
--- a/packages/@ember/canary-features/index.ts
+++ b/packages/@ember/canary-features/index.ts
@@ -13,18 +13,18 @@ import { assign } from '@ember/polyfills';
*/
export const DEFAULT_FEATURES = {
- EMBER_LIBRARIES_ISREGISTERED: null,
- EMBER_IMPROVED_INSTRUMENTATION: null,
+ EMBER_LIBRARIES_ISREGISTERED: false,
+ EMBER_IMPROVED_INSTRUMENTATION: false,
EMBER_GLIMMER_NAMED_ARGUMENTS: true,
EMBER_ROUTING_ROUTER_SERVICE: true,
EMBER_ENGINES_MOUNT_PARAMS: true,
- EMBER_MODULE_UNIFICATION: null,
+ EMBER_MODULE_UNIFICATION: false,
GLIMMER_CUSTOM_COMPONENT_MANAGER: true,
GLIMMER_MODIFIER_MANAGER: true,
- EMBER_METAL_TRACKED_PROPERTIES: null,
+ EMBER_METAL_TRACKED_PROPERTIES: false,
EMBER_GLIMMER_ANGLE_BRACKET_INVOCATION: true,
EMBER_GLIMMER_ARRAY_HELPER: true,
- EMBER_ROUTING_BUILD_ROUTEINFO_METADATA: null,
+ EMBER_ROUTING_BUILD_ROUTEINFO_METADATA: false,
};
/**
diff --git a/packages/@ember/string/index.ts b/packages/@ember/string/index.ts
index cde9a51b1f5..7c9cb1df0a9 100644
--- a/packages/@ember/string/index.ts
+++ b/packages/@ember/string/index.ts
@@ -149,10 +149,12 @@ export function w(str: string): string[] {
Converts a camelized string into all lower case separated by underscores.
```javascript
- 'innerHTML'.decamelize(); // 'inner_html'
- 'action_name'.decamelize(); // 'action_name'
- 'css-class-name'.decamelize(); // 'css-class-name'
- 'my favorite items'.decamelize(); // 'my favorite items'
+ import { decamelize } from '@ember/string';
+
+ decamelize('innerHTML'); // 'inner_html'
+ decamelize('action_name'); // 'action_name'
+ decamelize('css-class-name'); // 'css-class-name'
+ decamelize('my favorite items'); // 'my favorite items'
```
@method decamelize
@@ -168,11 +170,13 @@ export function decamelize(str: string): string {
Replaces underscores, spaces, or camelCase with dashes.
```javascript
- 'innerHTML'.dasherize(); // 'inner-html'
- 'action_name'.dasherize(); // 'action-name'
- 'css-class-name'.dasherize(); // 'css-class-name'
- 'my favorite items'.dasherize(); // 'my-favorite-items'
- 'privateDocs/ownerInvoice'.dasherize(); // 'private-docs/owner-invoice'
+ import { dasherize } from '@ember/string';
+
+ dasherize('innerHTML'); // 'inner-html'
+ dasherize('action_name'); // 'action-name'
+ dasherize('css-class-name'); // 'css-class-name'
+ dasherize('my favorite items'); // 'my-favorite-items'
+ dasherize('privateDocs/ownerInvoice'; // 'private-docs/owner-invoice'
```
@method dasherize
@@ -188,12 +192,14 @@ export function dasherize(str: string): string {
Returns the lowerCamelCase form of a string.
```javascript
- 'innerHTML'.camelize(); // 'innerHTML'
- 'action_name'.camelize(); // 'actionName'
- 'css-class-name'.camelize(); // 'cssClassName'
- 'my favorite items'.camelize(); // 'myFavoriteItems'
- 'My Favorite Items'.camelize(); // 'myFavoriteItems'
- 'private-docs/owner-invoice'.camelize(); // 'privateDocs/ownerInvoice'
+ import { camelize } from '@ember/string';
+
+ camelize('innerHTML'); // 'innerHTML'
+ camelize('action_name'); // 'actionName'
+ camelize('css-class-name'); // 'cssClassName'
+ camelize('my favorite items'); // 'myFavoriteItems'
+ camelize('My Favorite Items'); // 'myFavoriteItems'
+ camelize('private-docs/owner-invoice'); // 'privateDocs/ownerInvoice'
```
@method camelize
@@ -209,11 +215,13 @@ export function camelize(str: string): string {
Returns the UpperCamelCase form of a string.
```javascript
- 'innerHTML'.classify(); // 'InnerHTML'
- 'action_name'.classify(); // 'ActionName'
- 'css-class-name'.classify(); // 'CssClassName'
- 'my favorite items'.classify(); // 'MyFavoriteItems'
- 'private-docs/owner-invoice'.classify(); // 'PrivateDocs/OwnerInvoice'
+ import { classify } from '@ember/string';
+
+ classify('innerHTML'); // 'InnerHTML'
+ classify('action_name'); // 'ActionName'
+ classify('css-class-name'); // 'CssClassName'
+ classify('my favorite items'); // 'MyFavoriteItems'
+ classify('private-docs/owner-invoice'); // 'PrivateDocs/OwnerInvoice'
```
@method classify
@@ -230,11 +238,13 @@ export function classify(str: string): string {
form of a string.
```javascript
- 'innerHTML'.underscore(); // 'inner_html'
- 'action_name'.underscore(); // 'action_name'
- 'css-class-name'.underscore(); // 'css_class_name'
- 'my favorite items'.underscore(); // 'my_favorite_items'
- 'privateDocs/ownerInvoice'.underscore(); // 'private_docs/owner_invoice'
+ import { underscore } from '@ember/string';
+
+ underscore('innerHTML'); // 'inner_html'
+ underscore('action_name'); // 'action_name'
+ underscore('css-class-name'); // 'css_class_name'
+ underscore('my favorite items'); // 'my_favorite_items'
+ underscore('privateDocs/ownerInvoice'); // 'private_docs/owner_invoice'
```
@method underscore
@@ -250,11 +260,13 @@ export function underscore(str: string): string {
Returns the Capitalized form of a string
```javascript
- 'innerHTML'.capitalize() // 'InnerHTML'
- 'action_name'.capitalize() // 'Action_name'
- 'css-class-name'.capitalize() // 'Css-class-name'
- 'my favorite items'.capitalize() // 'My favorite items'
- 'privateDocs/ownerInvoice'.capitalize(); // 'PrivateDocs/ownerInvoice'
+ import { capitalize } from '@ember/string';
+
+ capitalize('innerHTML') // 'InnerHTML'
+ capitalize('action_name') // 'Action_name'
+ capitalize('css-class-name') // 'Css-class-name'
+ capitalize('my favorite items') // 'My favorite items'
+ capitalize('privateDocs/ownerInvoice'); // 'PrivateDocs/ownerInvoice'
```
@method capitalize
@@ -280,7 +292,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return w(this);
},
},
@@ -297,7 +309,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function(this: string, ...args: any[]) {
+ value(this: string, ...args: any[]) {
return loc(this, args);
},
},
@@ -314,7 +326,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return camelize(this);
},
},
@@ -331,7 +343,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return decamelize(this);
},
},
@@ -348,7 +360,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return dasherize(this);
},
},
@@ -365,7 +377,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return underscore(this);
},
},
@@ -382,7 +394,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return classify(this);
},
},
@@ -399,7 +411,7 @@ if (ENV.EXTEND_PROTOTYPES.String) {
configurable: true,
enumerable: false,
writeable: true,
- value: function() {
+ value() {
return capitalize(this);
},
},
diff --git a/packages/ember/tests/routing/decoupled_basic_test.js b/packages/ember/tests/routing/decoupled_basic_test.js
index 286f8e6b4e9..503d52005b9 100644
--- a/packages/ember/tests/routing/decoupled_basic_test.js
+++ b/packages/ember/tests/routing/decoupled_basic_test.js
@@ -41,10 +41,20 @@ moduleFor(
return this.applicationInstance.lookup(`controller:${name}`);
}
- handleURLAborts(assert, path) {
+ handleURLAborts(assert, path, deprecated) {
run(() => {
let router = this.applicationInstance.lookup('router:main');
- router.handleURL(path).then(
+ let result;
+
+ if (deprecated !== undefined) {
+ expectDeprecation(() => {
+ result = router.handleURL(path);
+ });
+ } else {
+ result = router.handleURL(path);
+ }
+
+ result.then(
function() {
assert.ok(false, 'url: `' + path + '` was NOT to be handled');
},
@@ -2749,33 +2759,15 @@ moduleFor(
}
['@test Router `willTransition` hook passes in cancellable transition'](assert) {
- // Should hit willTransition 3 times, once for the initial route, and then 2 more times
- // for the two handleURL calls below
- if (EMBER_ROUTING_ROUTER_SERVICE) {
- assert.expect(7);
-
- this.router.reopen({
- init() {
- this._super(...arguments);
- this.on('routeWillChange', transition => {
- assert.ok(true, 'routeWillChange was called');
- if (transition.intent && transition.intent.url !== '/') {
- transition.abort();
- }
- });
- },
- });
- } else {
- assert.expect(5);
- this.router.reopen({
- willTransition(_, _2, transition) {
- assert.ok(true, 'willTransition was called');
- if (transition.intent.url !== '/') {
- transition.abort();
- }
- },
- });
- }
+ assert.expect(8);
+ this.router.reopen({
+ willTransition(_, _2, transition) {
+ assert.ok(true, 'willTransition was called');
+ if (transition.intent.url !== '/') {
+ transition.abort();
+ }
+ },
+ });
this.router.map(function() {
this.route('nork');
@@ -2809,10 +2801,14 @@ moduleFor(
})
);
- return this.visit('/').then(() => {
- this.handleURLAborts(assert, '/nork');
- this.handleURLAborts(assert, '/about');
- });
+ let deprecation = /You attempted to override the "willTransition" method which is deprecated\./;
+
+ return expectDeprecation(() => {
+ return this.visit('/').then(() => {
+ this.handleURLAborts(assert, '/nork', deprecation);
+ this.handleURLAborts(assert, '/about', deprecation);
+ });
+ }, deprecation);
}
['@test Aborting/redirecting the transition in `willTransition` prevents LoadingRoute from being entered'](
diff --git a/packages/ember/tests/routing/router_service_test/basic_test.js b/packages/ember/tests/routing/router_service_test/basic_test.js
index 9dbf901fe9c..601ce099d6f 100644
--- a/packages/ember/tests/routing/router_service_test/basic_test.js
+++ b/packages/ember/tests/routing/router_service_test/basic_test.js
@@ -79,6 +79,28 @@ moduleFor(
});
}
+ '@test substates survive aborts GH#17430'(assert) {
+ assert.expect(2);
+ this.add(
+ `route:parent.child`,
+ Route.extend({
+ beforeModel(transition) {
+ transition.abort();
+ this.intermediateTransitionTo('parent.sister');
+ },
+ })
+ );
+
+ return this.visit('/')
+ .then(() => {
+ return this.routerService.transitionTo('/child');
+ })
+ .catch(e => {
+ assert.equal(this.routerService.currentRouteName, 'parent.sister');
+ assert.equal(e.message, 'TransitionAborted');
+ });
+ }
+
['@test RouterService#currentRouteName is correctly set on each transition'](assert) {
if (EMBER_ROUTING_ROUTER_SERVICE) {
assert.expect(9);
diff --git a/yarn.lock b/yarn.lock
index 358a6f94bc3..c7dc8409f13 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -598,120 +598,120 @@
lodash "^4.17.10"
to-fast-properties "^2.0.0"
-"@glimmer/compiler@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.37.0.tgz#861d9c8064b54c24895262e1dd6a805cf24b8175"
- integrity sha512-h01QJvqzClYw6Y5+DptqaB74KeBz14fsbNlig2O1sH5B2RKXRXo6T/OFSlFO/BHdzPLIrhyrkNQ/pooy2nTNmQ==
+"@glimmer/compiler@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/compiler/-/compiler-0.37.1.tgz#a3d59e0b1e51341314d3f8202aa0d4b70dc55173"
+ integrity sha512-bGdRb52eWZuHEGaIa1Rl0e0f4vPpQtp+gnpsaRwBMmRLqDrCZKdEJ8jCN5bI8TMFbtvP78s/5O0qi/XK+UzO4A==
dependencies:
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/syntax" "^0.37.0"
- "@glimmer/util" "^0.37.0"
- "@glimmer/wire-format" "^0.37.0"
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/syntax" "^0.37.1"
+ "@glimmer/util" "^0.37.1"
+ "@glimmer/wire-format" "^0.37.1"
-"@glimmer/encoder@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.37.0.tgz#3689bb8dbdbce4ae45783b447d1a7fcc40c067c2"
- integrity sha512-NS5UTeBZd0GRQYpUVQ/sSYriHxAPLSb4z1qlRzWQCfJmovtMRRYgcFpyRck/ckmFsXdlfDL+Nu0hJLOcYU+oXQ==
+"@glimmer/encoder@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/encoder/-/encoder-0.37.1.tgz#5cd95e04043c74ee4253811a768871b02fcd12c5"
+ integrity sha512-XvtlyFYibYxwYBfak5NK62u/iNtOgP1hbccxJNuDgK2pwYakrnZX6KSOg/6QnFNknjJkSQ/cwpW696ROliPTfw==
"@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.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.37.0.tgz#7e16dc3b44369ea084e13064dd30ec14ed86623f"
- integrity sha512-tLvn6O0SqPotkQy/I/PBgnUorho+kim7psitpAZQMljOY8ocSf0+dfIY4GKQsTqefbpHbmdu4dYBhyy09xDJag==
+"@glimmer/interfaces@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/interfaces/-/interfaces-0.37.1.tgz#44328c49d835445fda26efa7c8d5463ee2e626ed"
+ integrity sha512-ys5I6iEeaPvSPY9dn6uc9NAh9HkL8fnUZjTHJhlKV5nFv5qqXhBK8hFE86fVXqGRtXLHfOa90pg75vLXgw7u/g==
dependencies:
- "@glimmer/wire-format" "^0.37.0"
+ "@glimmer/wire-format" "^0.37.1"
"@simple-dom/interface" "1.4.0"
-"@glimmer/low-level@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.37.0.tgz#ef49a49abb829c5ffcf539c3408cc545df688875"
- integrity sha512-OFPE0KVUbSsQhpJpwI2zmG+1+y0NkpSJzn4qQ1kuKzpk50TABeTBo8ycqJFTgYh/cjus/W212G2YgEN/YXZqZw==
-
-"@glimmer/node@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.37.0.tgz#cbf51153ec3d3e858314b95f249c8c80f458fa23"
- integrity sha512-f2F/ttR1J3pkOLBGEuR/I+Z4tNKLuii5983LnUB6UDW0DKbz3DZwkejVcYr6wxhaU5QuD5RWl+AkaREOfZuh7w==
- dependencies:
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/runtime" "^0.37.0"
-
-"@glimmer/opcode-compiler@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.37.0.tgz#26b37cc3a569ba88377e373d602f518b65b36cc3"
- integrity sha512-a+wMGHXTnzrvapFzyxx7tE73msnnIFCDy7O5vH/gnwNqy8VEGeXperJDpwZxxn0SnSVtwvCPJ+85MXFDmcfrvQ==
- dependencies:
- "@glimmer/encoder" "^0.37.0"
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/program" "^0.37.0"
- "@glimmer/reference" "^0.37.0"
- "@glimmer/util" "^0.37.0"
- "@glimmer/vm" "^0.37.0"
- "@glimmer/wire-format" "^0.37.0"
-
-"@glimmer/program@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.37.0.tgz#25aaa78363216a47074246c4ddea0d6241e3295b"
- integrity sha512-wsu9R5+ytndMJg4AXBGm8dJax3q/vk5PkSxl8VHi5jxje4Ja/8AjJl7SpE2nRCfmLpq8rV6vHSmZaKY1tSRANQ==
- dependencies:
- "@glimmer/encoder" "^0.37.0"
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/util" "^0.37.0"
-
-"@glimmer/reference@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.37.0.tgz#5910810d932a03f5bb62014caa9733cecf0683ed"
- integrity sha512-NCYlu9X0ok7pJiGb/Uevv/84xA1Z49PHDUcDrN0X/bDzSI/zoFy//wPevjPO/+ihBtD5Hy9Ve3eC/lfSSWsWVA==
- dependencies:
- "@glimmer/util" "^0.37.0"
-
-"@glimmer/runtime@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.37.0.tgz#b1ec8303f6a97141310bb4fe3ecac7396311381a"
- integrity sha512-U9FKj4id2HwA1FTVJLFWpCIsICOaIZklwhTHHd7XrtoETdFaesn7/4e3fH/LNx0BrPkXy6dfD/9I7izLFM4ToQ==
- dependencies:
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/low-level" "^0.37.0"
- "@glimmer/program" "^0.37.0"
- "@glimmer/reference" "^0.37.0"
- "@glimmer/util" "^0.37.0"
- "@glimmer/vm" "^0.37.0"
- "@glimmer/wire-format" "^0.37.0"
+"@glimmer/low-level@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/low-level/-/low-level-0.37.1.tgz#307f818b20b8df43c04750c01eb92ead2af4b455"
+ integrity sha512-CIscEE0BKNMlx6PCNUJVyPWYGCwtfoYTbwUIyQdY5IeVXLvBweT8fteMmHv4HapsPCKubPPkvwwm3bgBLSq3dA==
+
+"@glimmer/node@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/node/-/node-0.37.1.tgz#f401e366b6b6d71a16f9aa7e3fddaeb7f9cf7b3b"
+ integrity sha512-eQiIhfx3MJqXhjDTqQMtzAfI+IJ+5aw0bLXjBikXHCau/lpSS6EqO12WZR1QN+K1wchdVlYkseme4wEs89fyag==
+ dependencies:
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/runtime" "^0.37.1"
+
+"@glimmer/opcode-compiler@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/opcode-compiler/-/opcode-compiler-0.37.1.tgz#e69eaa227ea85f2b6316f447617fedef58a38ca3"
+ integrity sha512-Nf6BOgcSfOUDDlExNWqjGqNUx6m6biebnMX6aEwfJwD/JrnwQuMo20/K4d8+6ZvJwqwn1Bwth9Jk3rsp7caLAw==
+ dependencies:
+ "@glimmer/encoder" "^0.37.1"
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/program" "^0.37.1"
+ "@glimmer/reference" "^0.37.1"
+ "@glimmer/util" "^0.37.1"
+ "@glimmer/vm" "^0.37.1"
+ "@glimmer/wire-format" "^0.37.1"
+
+"@glimmer/program@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/program/-/program-0.37.1.tgz#440efc86fdc2e870dfca9c678c1986c84e8ab5dc"
+ integrity sha512-HVaF3U1bCTH7cryMccgkxHn7/IzLfy9LGbyQK0wgeiHsY+xCSBb7Kq1WP4LPUH8+84/BzEpuLJN7u2n5GGdZlw==
+ dependencies:
+ "@glimmer/encoder" "^0.37.1"
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/util" "^0.37.1"
+
+"@glimmer/reference@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/reference/-/reference-0.37.1.tgz#a444a56eb3e79d9d6d991c423f32c6491778d57b"
+ integrity sha512-nGelUwaQ1jBnI1OH80JV3cMiWfjgsi399y61ajARiHjl1DK8gXchZ0qLpNu83Sa5UbL09AMbVaUTb8xsy6MFwA==
+ dependencies:
+ "@glimmer/util" "^0.37.1"
+
+"@glimmer/runtime@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/runtime/-/runtime-0.37.1.tgz#3f690f003d00af710823449afadeaf01e379533e"
+ integrity sha512-ujkaODl2DDrwOttXZTcobH8ML4eSpgepnPpsYYEafCBXxKxkTWHV7JzSuuh3/hnHZVdrRO/vP6zIJ0P86FXBLQ==
+ dependencies:
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/low-level" "^0.37.1"
+ "@glimmer/program" "^0.37.1"
+ "@glimmer/reference" "^0.37.1"
+ "@glimmer/util" "^0.37.1"
+ "@glimmer/vm" "^0.37.1"
+ "@glimmer/wire-format" "^0.37.1"
"@simple-dom/interface" "^1.4.0"
-"@glimmer/syntax@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.37.0.tgz#3d91aef9ecad70e70654584f84552c195f3280a6"
- integrity sha512-DTWPjTK6f7sXAYIqLjC7lfNpONyY21jmHjhzAbC6nbEfZ3DegmogWDBLCO8dhun1bAF4T2FL7+gLho698UqBiw==
+"@glimmer/syntax@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/syntax/-/syntax-0.37.1.tgz#f3c507122f7c4b859ce712e0c5bbc43608ca12db"
+ integrity sha512-DtSRWrbZlgAvLOR62slBvMgUmcnYxfq4Jv5uqCqD4/DUrjV2ezmOMhDFW4zxAVz55luqx9/900XHYiUzsicPyA==
dependencies:
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/util" "^0.37.0"
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/util" "^0.37.1"
handlebars "^4.0.6"
simple-html-tokenizer "^0.5.6"
-"@glimmer/util@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.37.0.tgz#962937c187b05a8a371d5b064674e74e838411c7"
- integrity sha512-gwApoQ4xAAPKUBd9IpKYqW3UojZv45gIH+hxi9G9BbZWQZd1f9qIUHwk6JP+bNQ4zvxv9z4QEL1pOCWLx0TE3w==
+"@glimmer/util@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/util/-/util-0.37.1.tgz#b6dafd36134556053121fc8a8ffceb68e490a4b5"
+ integrity sha512-Of58Of07fsT8JOkok/tXJvewEdI6LzDxdlIIcdhv6iOJgYUsJUQKUYf6XY+5o/rtsrByPQ5da2WwHbLAcpq0aQ==
-"@glimmer/vm@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.37.0.tgz#34268bb46a69e551379ccc554773e80900461c24"
- integrity sha512-1H0Vag7kgZKJ6hCFg9Lv5OA0Q5b130atdnbKb79AS0OUpT3G7f64h/eCIlxMxhF+YhRi2nrD5Hb5bVuuD8Pszg==
+"@glimmer/vm@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/vm/-/vm-0.37.1.tgz#26ad736b1228dac88fd8c1b9ce2b8ffefa91bdc0"
+ integrity sha512-EIhJoDrXX+WW3vyovTiEQSYwdbAQgaJKGR25mkMKGLSwvIu4RcX2d9uUPSkm+pBvijHNk2f67q86k1s6j8cBIQ==
dependencies:
- "@glimmer/interfaces" "^0.37.0"
- "@glimmer/program" "^0.37.0"
- "@glimmer/util" "^0.37.0"
+ "@glimmer/interfaces" "^0.37.1"
+ "@glimmer/program" "^0.37.1"
+ "@glimmer/util" "^0.37.1"
-"@glimmer/wire-format@^0.37.0":
- version "0.37.0"
- resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.37.0.tgz#cd26f3d260d92a9e5d2873bd0234b54556ab3e85"
- integrity sha512-wMBCo9cosxKzcsHuPlFzd+WHS8AqJoNYYK+LcpgLZRhjXO55oeirEQcwthV1uHdYs0CK7i+HcljuMDdJk2heww==
+"@glimmer/wire-format@^0.37.1":
+ version "0.37.1"
+ resolved "https://registry.yarnpkg.com/@glimmer/wire-format/-/wire-format-0.37.1.tgz#34906e320d38bc65b1730b5f78890b184211a0d5"
+ integrity sha512-iDj8D1eCVDmcsNUcz5epdOCN6Gt53W3cMsS2qAkf2H6REiXQ9kG7ySIGIdahNsLT/f21MT+JzqawylZR0hrw0w==
dependencies:
- "@glimmer/util" "^0.37.0"
+ "@glimmer/util" "^0.37.1"
"@simple-dom/document@^1.4.0":
version "1.4.0"
@@ -7441,10 +7441,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.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/router_js/-/router_js-6.2.1.tgz#60130764ad3ed41592a41b9a0bb9133b3edc7d84"
- integrity sha512-DL0FPuLZUkk7/mhIcXK3SO7215gyOVcQinPtdcLRHKJDt8GGqN6c0pNr0+vuE1IQX7QW1YyuIxBICZ0egzn8Dg==
+router_js@^6.2.2:
+ version "6.2.2"
+ resolved "https://registry.yarnpkg.com/router_js/-/router_js-6.2.2.tgz#173fe28f004d437a150a42be8220a0341d8df4d8"
+ integrity sha512-gjNl8cxJYHXxLKe/BimTuXLANAb6AVIpK5nK4XvY5d5Do69RMr80YrNFmfHvgD31p0qXUDlz3+fcfAn7ylqIjg==
dependencies:
"@types/node" "^10.5.5"