ember-source 5.11.0-beta.2 → 5.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-metadata.json +3 -3
- package/dist/ember-template-compiler.js +48 -42
- package/dist/ember-testing.js +1 -1
- package/dist/ember.debug.js +23102 -23100
- package/dist/ember.prod.js +31562 -31563
- package/dist/packages/@ember/-internals/container/index.js +1 -1
- package/dist/packages/@ember/-internals/deprecations/index.js +2 -1
- package/dist/packages/@ember/-internals/glimmer/index.js +2 -1
- package/dist/packages/@ember/-internals/meta/lib/meta.js +4 -3
- package/dist/packages/@ember/-internals/metal/index.js +9 -8
- package/dist/packages/@ember/-internals/routing/index.js +6 -5
- package/dist/packages/@ember/-internals/runtime/lib/ext/rsvp.js +3 -2
- package/dist/packages/@ember/-internals/runtime/lib/mixins/-proxy.js +6 -5
- package/dist/packages/@ember/-internals/runtime/lib/mixins/action_handler.js +4 -3
- package/dist/packages/@ember/-internals/runtime/lib/mixins/container_proxy.js +1 -1
- package/dist/packages/@ember/-internals/runtime/lib/mixins/registry_proxy.js +2 -1
- package/dist/packages/@ember/-internals/runtime/lib/mixins/target_action_support.js +4 -3
- package/dist/packages/@ember/-internals/string/index.js +1 -1
- package/dist/packages/@ember/-internals/utils/index.js +4 -4
- package/dist/packages/@ember/-internals/views/index.js +1 -1
- package/dist/packages/@ember/-internals/views/lib/compat/fallback-view-registry.js +1 -1
- package/dist/packages/@ember/-internals/views/lib/component_lookup.js +1 -1
- package/dist/packages/@ember/-internals/views/lib/mixins/action_support.js +5 -3
- package/dist/packages/@ember/-internals/views/lib/mixins/child_views_support.js +3 -3
- package/dist/packages/@ember/-internals/views/lib/mixins/class_names_support.js +4 -3
- package/dist/packages/@ember/-internals/views/lib/mixins/view_support.js +4 -3
- package/dist/packages/@ember/-internals/views/lib/system/event_dispatcher.js +6 -12
- package/dist/packages/@ember/-internals/views/lib/system/utils.js +3 -2
- package/dist/packages/@ember/-internals/views/lib/views/core_view.js +76 -8
- package/dist/packages/@ember/-internals/views/lib/views/states.js +4 -3
- package/dist/packages/@ember/application/index.js +16 -7
- package/dist/packages/@ember/application/instance.js +13 -9
- package/dist/packages/@ember/application/namespace.js +7 -6
- package/dist/packages/@ember/array/index.js +617 -11
- package/dist/packages/@ember/array/make.js +1 -0
- package/dist/packages/@ember/array/mutable.js +1 -1
- package/dist/packages/@ember/array/proxy.js +8 -5
- package/dist/packages/@ember/component/helper.js +4 -4
- package/dist/packages/@ember/component/index.js +4 -4
- package/dist/packages/@ember/controller/index.js +6 -6
- package/dist/packages/@ember/debug/container-debug-adapter.js +5 -4
- package/dist/packages/@ember/debug/data-adapter.js +7 -4
- package/dist/packages/@ember/debug/index.js +213 -4
- package/dist/packages/@ember/debug/lib/assert.js +47 -0
- package/dist/packages/@ember/debug/lib/deprecate.js +194 -4
- package/dist/packages/@ember/debug/lib/inspect.js +120 -2
- package/dist/packages/@ember/debug/lib/warn.js +94 -3
- package/dist/packages/@ember/engine/index.js +440 -17
- package/dist/packages/@ember/engine/instance.js +175 -11
- package/dist/packages/@ember/engine/parent.js +1 -0
- package/dist/packages/@ember/helper/index.js +4 -4
- package/dist/packages/@ember/instrumentation/index.js +2 -1
- package/dist/packages/@ember/modifier/index.js +13 -5
- package/dist/packages/@ember/modifier/on.js +15 -0
- package/dist/packages/@ember/object/-internals.js +6 -5
- package/dist/packages/@ember/object/compat.js +4 -3
- package/dist/packages/@ember/object/computed.js +4 -4
- package/dist/packages/@ember/object/core.js +861 -14
- package/dist/packages/@ember/object/evented.js +4 -4
- package/dist/packages/@ember/object/events.js +3 -3
- package/dist/packages/@ember/object/index.js +260 -9
- package/dist/packages/@ember/object/internals.js +1 -1
- package/dist/packages/@ember/object/lib/computed/computed_macros.js +8 -6
- package/dist/packages/@ember/object/lib/computed/reduce_computed_macros.js +8 -4
- package/dist/packages/@ember/object/mixin.js +6 -5
- package/dist/packages/@ember/object/observable.js +103 -9
- package/dist/packages/@ember/object/observers.js +3 -3
- package/dist/packages/@ember/object/promise-proxy-mixin.js +5 -5
- package/dist/packages/@ember/renderer/index.js +4 -4
- package/dist/packages/@ember/routing/-internals.js +3 -1
- package/dist/packages/@ember/routing/hash-location.js +2 -2
- package/dist/packages/@ember/routing/history-location.js +3 -2
- package/dist/packages/@ember/routing/index.js +4 -4
- package/dist/packages/@ember/routing/lib/dsl.js +2 -1
- package/dist/packages/@ember/routing/lib/generate_controller.js +4 -3
- package/dist/packages/@ember/routing/lib/router_state.js +26 -1
- package/dist/packages/@ember/routing/lib/routing-service.js +107 -9
- package/dist/packages/@ember/routing/lib/utils.js +238 -7
- package/dist/packages/@ember/routing/none-location.js +3 -2
- package/dist/packages/@ember/routing/route.js +1618 -22
- package/dist/packages/@ember/routing/router-service.js +638 -12
- package/dist/packages/@ember/routing/router.js +1449 -14
- package/dist/packages/@ember/runloop/index.js +760 -6
- package/dist/packages/@ember/service/index.js +3 -3
- package/dist/packages/@ember/template/index.js +4 -4
- package/dist/packages/@ember/utils/index.js +2 -1
- package/dist/packages/@ember/utils/lib/compare.js +159 -4
- package/dist/packages/@ember/utils/lib/is_empty.js +4 -4
- package/dist/packages/@ember/utils/lib/type-of.js +110 -1
- package/dist/packages/@glimmer/tracking/index.js +3 -3
- package/dist/packages/@glimmer/tracking/primitives/cache.js +3 -3
- package/dist/packages/ember/barrel.js +28 -13
- package/dist/packages/ember/version.js +1 -1
- package/dist/packages/ember-testing/lib/adapters/adapter.js +1 -1
- package/dist/packages/ember-testing/lib/adapters/qunit.js +2 -1
- package/dist/packages/ember-testing/lib/ext/application.js +2 -1
- package/dist/packages/ember-testing/lib/ext/rsvp.js +1 -1
- package/dist/packages/ember-testing/lib/helpers/and_then.js +2 -1
- package/dist/packages/ember-testing/lib/helpers/current_path.js +8 -6
- package/dist/packages/ember-testing/lib/helpers/current_route_name.js +8 -6
- package/dist/packages/ember-testing/lib/helpers/current_url.js +6 -5
- package/dist/packages/ember-testing/lib/helpers/pause_test.js +2 -1
- package/dist/packages/ember-testing/lib/helpers/visit.js +4 -3
- package/dist/packages/ember-testing/lib/helpers/wait.js +4 -3
- package/dist/packages/ember-testing/lib/initializers.js +15 -8
- package/dist/packages/ember-testing/lib/setup_for_testing.js +1 -1
- package/dist/packages/ember-testing/lib/test/run.js +1 -1
- package/dist/packages/router_js/index.js +2 -1
- package/dist/packages/shared-chunks/{alias-By_2yu5c.js → alias-Dri0koi2.js} +5 -3
- package/dist/packages/shared-chunks/array-3xbmc_4J.js +119 -0
- package/dist/packages/shared-chunks/{cache-gDE3bkXq.js → cache-BESCGvbE.js} +667 -1529
- package/dist/packages/shared-chunks/{core_view-Cxne2_wu.js → chunk-3SQBS3Y5-Cj4eryg1.js} +1 -88
- package/dist/packages/shared-chunks/{index-BXPoca1S.js → index-Llq6dmgX.js} +40 -4660
- package/dist/packages/shared-chunks/{is_proxy-Dmis-70B.js → is_proxy-DjvCKvd5.js} +1 -1
- package/dist/packages/shared-chunks/{mandatory-setter-1UQhiJOb.js → mandatory-setter-BiXq-dpN.js} +2 -1
- package/dist/packages/shared-chunks/{name-z9D9Yibn.js → name-Dx2bGFVv.js} +1 -1
- package/dist/packages/shared-chunks/{namespace_search-CBgHTkDh.js → namespace_search-btMaPM-_.js} +2 -2
- package/dist/packages/shared-chunks/{property_set-CW4q-uo4.js → property_set-BapAkp3X.js} +5 -4
- package/dist/packages/shared-chunks/{registry-DzfcDwii.js → registry-B8WARvkP.js} +3 -2
- package/dist/packages/shared-chunks/{router-B-Q1aYBn.js → router-DrLZsJeE.js} +2 -482
- package/dist/packages/shared-chunks/{set_properties-DvalyQdu.js → set_properties-BScfxzvI.js} +2 -2
- package/dist/packages/shared-chunks/setup-registry-du4pSGZi.js +48 -0
- package/dist/packages/shared-chunks/{to-string-D8i3mjEU.js → to-string-B1BmwUkt.js} +1 -1
- package/dist/packages/shared-chunks/unrecognized-url-error-zpz-JEoG.js +484 -0
- package/docs/data.json +152 -142
- package/package.json +4 -7
- package/types/stable/@ember/-internals/metal/lib/array.d.ts +1 -2
- package/types/stable/@ember/-internals/metal/lib/object-at.d.ts +4 -0
- package/types/stable/@ember/-internals/metal/lib/observer.d.ts +2 -1
- package/types/stable/@ember/array/index.d.ts +1 -1
- package/types/stable/@ember/array/make.d.ts +3 -0
- package/types/stable/@ember/debug/index.d.ts +3 -7
- package/types/stable/@ember/debug/lib/assert.d.ts +8 -0
- package/types/stable/@ember/engine/index.d.ts +1 -1
- package/types/stable/@ember/engine/instance.d.ts +2 -2
- package/types/stable/@ember/engine/parent.d.ts +3 -0
- package/types/stable/@ember/modifier/index.d.ts +1 -3
- package/types/stable/@ember/modifier/on.d.ts +5 -0
- package/types/stable/@ember/routing/lib/routing-service.d.ts +1 -1
- package/types/stable/@ember/routing/route.d.ts +2 -3
- package/types/stable/@ember/routing/router-service.d.ts +1 -1
- package/types/stable/@ember/routing/router.d.ts +4 -4
- package/types/stable/ember/barrel.d.ts +1 -1
- package/types/stable/ember/index.d.ts +1 -1
- package/types/stable/index.d.ts +5 -0
- package/dist/packages/shared-chunks/index-DTxy4Zgx.js +0 -641
- package/dist/packages/shared-chunks/index-PYiGj1jp.js +0 -2071
|
@@ -1 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
import { shallowEqual } from './utils.js';
|
|
2
|
+
|
|
3
|
+
class RouterState {
|
|
4
|
+
router;
|
|
5
|
+
emberRouter;
|
|
6
|
+
routerJsState;
|
|
7
|
+
constructor(emberRouter, router, routerJsState) {
|
|
8
|
+
this.emberRouter = emberRouter;
|
|
9
|
+
this.router = router;
|
|
10
|
+
this.routerJsState = routerJsState;
|
|
11
|
+
}
|
|
12
|
+
isActiveIntent(routeName, models, queryParams) {
|
|
13
|
+
let state = this.routerJsState;
|
|
14
|
+
if (!this.router.isActiveIntent(routeName, models, undefined, state)) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (queryParams !== undefined && Object.keys(queryParams).length > 0) {
|
|
18
|
+
let visibleQueryParams = Object.assign({}, queryParams);
|
|
19
|
+
this.emberRouter._prepareQueryParams(routeName, models, visibleQueryParams);
|
|
20
|
+
return shallowEqual(visibleQueryParams, state.queryParams);
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { RouterState as default };
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import '../../-internals/owner/index.js';
|
|
2
|
-
import '
|
|
1
|
+
import { getOwner } from '../../-internals/owner/index.js';
|
|
2
|
+
import '../../debug/index.js';
|
|
3
3
|
import '../../-internals/meta/lib/meta.js';
|
|
4
|
-
import '../../../shared-chunks/mandatory-setter-
|
|
5
|
-
import '@embroider/macros';
|
|
4
|
+
import '../../../shared-chunks/mandatory-setter-BiXq-dpN.js';
|
|
5
|
+
import { isDevelopingApp } from '@embroider/macros';
|
|
6
6
|
import '../../../@glimmer/destroyable/index.js';
|
|
7
7
|
import '../../../@glimmer/validator/index.js';
|
|
8
|
-
import '../../../shared-chunks/cache-gDE3bkXq.js';
|
|
9
8
|
import '../../../@glimmer/manager/index.js';
|
|
9
|
+
import '../../../shared-chunks/cache-BESCGvbE.js';
|
|
10
10
|
import '../../../shared-chunks/env-BJLX2Arx.js';
|
|
11
|
-
import '../../object/lib/computed/computed_macros.js';
|
|
12
|
-
import '
|
|
11
|
+
import { readOnly } from '../../object/lib/computed/computed_macros.js';
|
|
12
|
+
import '../../object/index.js';
|
|
13
|
+
import '../../object/core.js';
|
|
13
14
|
import '../../-internals/runtime/lib/mixins/registry_proxy.js';
|
|
14
15
|
import '../../-internals/runtime/lib/mixins/container_proxy.js';
|
|
15
16
|
import '../../-internals/runtime/lib/mixins/comparable.js';
|
|
@@ -18,5 +19,102 @@ import '../../-internals/runtime/lib/mixins/-proxy.js';
|
|
|
18
19
|
import '../../enumerable/mutable.js';
|
|
19
20
|
import '../../-internals/runtime/lib/mixins/target_action_support.js';
|
|
20
21
|
import '../../-internals/runtime/lib/ext/rsvp.js';
|
|
21
|
-
import '../../
|
|
22
|
-
|
|
22
|
+
import '../../array/index.js';
|
|
23
|
+
import Service from '../../service/index.js';
|
|
24
|
+
import EmberRouter from '../router.js';
|
|
25
|
+
import { ROUTER } from '../router-service.js';
|
|
26
|
+
import { assert } from '../../debug/lib/assert.js';
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
@module ember
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
class RoutingService extends Service {
|
|
33
|
+
[ROUTER];
|
|
34
|
+
get router() {
|
|
35
|
+
let router = this[ROUTER];
|
|
36
|
+
if (router !== undefined) {
|
|
37
|
+
return router;
|
|
38
|
+
}
|
|
39
|
+
let owner = getOwner(this);
|
|
40
|
+
(isDevelopingApp() && !(owner) && assert('RoutingService is unexpectedly missing an owner', owner));
|
|
41
|
+
let _router = owner.lookup('router:main');
|
|
42
|
+
(isDevelopingApp() && !(_router instanceof EmberRouter) && assert('ROUTING SERVICE BUG: Expected router to be an instance of EmberRouter', _router instanceof EmberRouter));
|
|
43
|
+
_router.setupRouter();
|
|
44
|
+
return this[ROUTER] = _router;
|
|
45
|
+
}
|
|
46
|
+
hasRoute(routeName) {
|
|
47
|
+
return this.router.hasRoute(routeName);
|
|
48
|
+
}
|
|
49
|
+
transitionTo(routeName, models, queryParams, shouldReplace) {
|
|
50
|
+
let transition = this.router._doTransition(routeName, models, queryParams);
|
|
51
|
+
if (shouldReplace) {
|
|
52
|
+
transition.method('replace');
|
|
53
|
+
}
|
|
54
|
+
return transition;
|
|
55
|
+
}
|
|
56
|
+
normalizeQueryParams(routeName, models, queryParams) {
|
|
57
|
+
this.router._prepareQueryParams(routeName, models, queryParams);
|
|
58
|
+
}
|
|
59
|
+
_generateURL(routeName, models, queryParams) {
|
|
60
|
+
let visibleQueryParams = {};
|
|
61
|
+
if (queryParams) {
|
|
62
|
+
Object.assign(visibleQueryParams, queryParams);
|
|
63
|
+
this.normalizeQueryParams(routeName, models, visibleQueryParams);
|
|
64
|
+
}
|
|
65
|
+
return this.router.generate(routeName, ...models, {
|
|
66
|
+
queryParams: visibleQueryParams
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
generateURL(routeName, models, queryParams) {
|
|
70
|
+
if (this.router._initialTransitionStarted) {
|
|
71
|
+
return this._generateURL(routeName, models, queryParams);
|
|
72
|
+
} else {
|
|
73
|
+
// Swallow error when transition has not started.
|
|
74
|
+
// When rendering in tests without visit(), we cannot infer the route context which <LinkTo/> needs be aware of
|
|
75
|
+
try {
|
|
76
|
+
return this._generateURL(routeName, models, queryParams);
|
|
77
|
+
} catch (_e) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
isActiveForRoute(contexts, queryParams, routeName, routerState) {
|
|
83
|
+
let handlers = this.router._routerMicrolib.recognizer.handlersFor(routeName);
|
|
84
|
+
let leafName = handlers[handlers.length - 1].handler;
|
|
85
|
+
let maximumContexts = numberOfContextsAcceptedByHandler(routeName, handlers);
|
|
86
|
+
|
|
87
|
+
// NOTE: any ugliness in the calculation of activeness is largely
|
|
88
|
+
// due to the fact that we support automatic normalizing of
|
|
89
|
+
// `resource` -> `resource.index`, even though there might be
|
|
90
|
+
// dynamic segments / query params defined on `resource.index`
|
|
91
|
+
// which complicates (and makes somewhat ambiguous) the calculation
|
|
92
|
+
// of activeness for links that link to `resource` instead of
|
|
93
|
+
// directly to `resource.index`.
|
|
94
|
+
|
|
95
|
+
// if we don't have enough contexts revert back to full route name
|
|
96
|
+
// this is because the leaf route will use one of the contexts
|
|
97
|
+
if (contexts.length > maximumContexts) {
|
|
98
|
+
routeName = leafName;
|
|
99
|
+
}
|
|
100
|
+
return routerState.isActiveIntent(routeName, contexts, queryParams);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
RoutingService.reopen({
|
|
104
|
+
targetState: readOnly('router.targetState'),
|
|
105
|
+
currentState: readOnly('router.currentState'),
|
|
106
|
+
currentRouteName: readOnly('router.currentRouteName'),
|
|
107
|
+
currentPath: readOnly('router.currentPath')
|
|
108
|
+
});
|
|
109
|
+
function numberOfContextsAcceptedByHandler(handlerName, handlerInfos) {
|
|
110
|
+
let req = 0;
|
|
111
|
+
for (let i = 0; i < handlerInfos.length; i++) {
|
|
112
|
+
req += handlerInfos[i].names.length;
|
|
113
|
+
if (handlerInfos[i].handler === handlerName) {
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return req;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export { RoutingService as default };
|
|
@@ -1,14 +1,245 @@
|
|
|
1
1
|
import '../../-internals/meta/lib/meta.js';
|
|
2
|
-
import '../../../shared-chunks/mandatory-setter-
|
|
3
|
-
import '@embroider/macros';
|
|
4
|
-
import '
|
|
2
|
+
import '../../../shared-chunks/mandatory-setter-BiXq-dpN.js';
|
|
3
|
+
import { isDevelopingApp } from '@embroider/macros';
|
|
4
|
+
import '../../debug/index.js';
|
|
5
5
|
import '../../../@glimmer/destroyable/index.js';
|
|
6
6
|
import '../../../@glimmer/validator/index.js';
|
|
7
|
-
import '../../../shared-chunks/cache-gDE3bkXq.js';
|
|
8
7
|
import '../../../@glimmer/manager/index.js';
|
|
8
|
+
import { g as get } from '../../../shared-chunks/cache-BESCGvbE.js';
|
|
9
9
|
import '../../../shared-chunks/env-BJLX2Arx.js';
|
|
10
|
-
import '../../-internals/owner/index.js';
|
|
11
|
-
|
|
10
|
+
import { getOwner } from '../../-internals/owner/index.js';
|
|
11
|
+
import EngineInstance from '../../engine/instance.js';
|
|
12
12
|
import '../../../route-recognizer/index.js';
|
|
13
13
|
import '../../../shared-chunks/rsvp-DaQAFb0W.js';
|
|
14
|
-
import '../../../shared-chunks/
|
|
14
|
+
import { S as STATE_SYMBOL } from '../../../shared-chunks/unrecognized-url-error-zpz-JEoG.js';
|
|
15
|
+
import { assert } from '../../debug/lib/assert.js';
|
|
16
|
+
|
|
17
|
+
const ALL_PERIODS_REGEX = /\./g;
|
|
18
|
+
function extractRouteArgs(args) {
|
|
19
|
+
// SAFETY: This should just be the same thing
|
|
20
|
+
args = args.slice();
|
|
21
|
+
let possibleOptions = args[args.length - 1];
|
|
22
|
+
let queryParams;
|
|
23
|
+
if (isRouteOptions(possibleOptions)) {
|
|
24
|
+
args.pop(); // Remove options
|
|
25
|
+
queryParams = possibleOptions.queryParams;
|
|
26
|
+
} else {
|
|
27
|
+
queryParams = {};
|
|
28
|
+
}
|
|
29
|
+
let routeName;
|
|
30
|
+
if (typeof args[0] === 'string') {
|
|
31
|
+
routeName = args.shift();
|
|
32
|
+
// We just checked this!
|
|
33
|
+
(isDevelopingApp() && !(typeof routeName === 'string') && assert('routeName is a string', typeof routeName === 'string'));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// SAFTEY: We removed the name and options if they existed, only models left.
|
|
37
|
+
let models = args;
|
|
38
|
+
return {
|
|
39
|
+
routeName,
|
|
40
|
+
models,
|
|
41
|
+
queryParams
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function getActiveTargetName(router) {
|
|
45
|
+
let routeInfos = router.activeTransition ? router.activeTransition[STATE_SYMBOL].routeInfos : router.state.routeInfos;
|
|
46
|
+
let lastRouteInfo = routeInfos[routeInfos.length - 1];
|
|
47
|
+
(isDevelopingApp() && !(lastRouteInfo) && assert('has last route info', lastRouteInfo));
|
|
48
|
+
return lastRouteInfo.name;
|
|
49
|
+
}
|
|
50
|
+
function stashParamNames(router, routeInfos) {
|
|
51
|
+
if (routeInfos['_namesStashed']) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// This helper exists because router.js/route-recognizer.js awkwardly
|
|
56
|
+
// keeps separate a routeInfo's list of parameter names depending
|
|
57
|
+
// on whether a URL transition or named transition is happening.
|
|
58
|
+
// Hopefully we can remove this in the future.
|
|
59
|
+
let routeInfo = routeInfos[routeInfos.length - 1];
|
|
60
|
+
(isDevelopingApp() && !(routeInfo) && assert('has route info', routeInfo));
|
|
61
|
+
let targetRouteName = routeInfo.name;
|
|
62
|
+
let recogHandlers = router._routerMicrolib.recognizer.handlersFor(targetRouteName);
|
|
63
|
+
let dynamicParent;
|
|
64
|
+
for (let i = 0; i < routeInfos.length; ++i) {
|
|
65
|
+
let routeInfo = routeInfos[i];
|
|
66
|
+
(isDevelopingApp() && !(routeInfo) && assert('has route info', routeInfo));
|
|
67
|
+
let names = recogHandlers[i].names;
|
|
68
|
+
if (names.length) {
|
|
69
|
+
dynamicParent = routeInfo;
|
|
70
|
+
}
|
|
71
|
+
routeInfo['_names'] = names;
|
|
72
|
+
let route = routeInfo.route;
|
|
73
|
+
route._stashNames(routeInfo, dynamicParent);
|
|
74
|
+
}
|
|
75
|
+
routeInfos['_namesStashed'] = true;
|
|
76
|
+
}
|
|
77
|
+
function _calculateCacheValuePrefix(prefix, part) {
|
|
78
|
+
// calculates the dot separated sections from prefix that are also
|
|
79
|
+
// at the start of part - which gives us the route name
|
|
80
|
+
|
|
81
|
+
// given : prefix = site.article.comments, part = site.article.id
|
|
82
|
+
// - returns: site.article (use get(values[site.article], 'id') to get the dynamic part - used below)
|
|
83
|
+
|
|
84
|
+
// given : prefix = site.article, part = site.article.id
|
|
85
|
+
// - returns: site.article. (use get(values[site.article], 'id') to get the dynamic part - used below)
|
|
86
|
+
|
|
87
|
+
let prefixParts = prefix.split('.');
|
|
88
|
+
let currPrefix = '';
|
|
89
|
+
for (let i = 0; i < prefixParts.length; i++) {
|
|
90
|
+
let currPart = prefixParts.slice(0, i + 1).join('.');
|
|
91
|
+
if (part.indexOf(currPart) !== 0) {
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
currPrefix = currPart;
|
|
95
|
+
}
|
|
96
|
+
return currPrefix;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/*
|
|
100
|
+
Stolen from Controller
|
|
101
|
+
*/
|
|
102
|
+
function calculateCacheKey(prefix, parts = [], values) {
|
|
103
|
+
let suffixes = '';
|
|
104
|
+
for (let part of parts) {
|
|
105
|
+
let cacheValuePrefix = _calculateCacheValuePrefix(prefix, part);
|
|
106
|
+
let value;
|
|
107
|
+
if (values) {
|
|
108
|
+
if (cacheValuePrefix && cacheValuePrefix in values) {
|
|
109
|
+
let partRemovedPrefix = part.indexOf(cacheValuePrefix) === 0 ? part.substring(cacheValuePrefix.length + 1) : part;
|
|
110
|
+
value = get(values[cacheValuePrefix], partRemovedPrefix);
|
|
111
|
+
} else {
|
|
112
|
+
value = get(values, part);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
suffixes += `::${part}:${value}`;
|
|
116
|
+
}
|
|
117
|
+
return prefix + suffixes.replace(ALL_PERIODS_REGEX, '-');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/*
|
|
121
|
+
Controller-defined query parameters can come in three shapes:
|
|
122
|
+
|
|
123
|
+
Array
|
|
124
|
+
queryParams: ['foo', 'bar']
|
|
125
|
+
Array of simple objects where value is an alias
|
|
126
|
+
queryParams: [
|
|
127
|
+
{
|
|
128
|
+
'foo': 'rename_foo_to_this'
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
'bar': 'call_bar_this_instead'
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
Array of fully defined objects
|
|
135
|
+
queryParams: [
|
|
136
|
+
{
|
|
137
|
+
'foo': {
|
|
138
|
+
as: 'rename_foo_to_this'
|
|
139
|
+
},
|
|
140
|
+
}
|
|
141
|
+
{
|
|
142
|
+
'bar': {
|
|
143
|
+
as: 'call_bar_this_instead',
|
|
144
|
+
scope: 'controller'
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
|
|
149
|
+
This helper normalizes all three possible styles into the
|
|
150
|
+
'Array of fully defined objects' style.
|
|
151
|
+
*/
|
|
152
|
+
function normalizeControllerQueryParams(queryParams) {
|
|
153
|
+
let qpMap = {};
|
|
154
|
+
for (let queryParam of queryParams) {
|
|
155
|
+
accumulateQueryParamDescriptors(queryParam, qpMap);
|
|
156
|
+
}
|
|
157
|
+
return qpMap;
|
|
158
|
+
}
|
|
159
|
+
function accumulateQueryParamDescriptors(_desc, accum) {
|
|
160
|
+
let desc = typeof _desc === 'string' ? {
|
|
161
|
+
[_desc]: {
|
|
162
|
+
as: null
|
|
163
|
+
}
|
|
164
|
+
} : _desc;
|
|
165
|
+
for (let key in desc) {
|
|
166
|
+
if (!Object.prototype.hasOwnProperty.call(desc, key)) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
let _singleDesc = desc[key];
|
|
170
|
+
let singleDesc = typeof _singleDesc === 'string' ? {
|
|
171
|
+
as: _singleDesc
|
|
172
|
+
} : _singleDesc;
|
|
173
|
+
let partialVal = accum[key] || {
|
|
174
|
+
as: null,
|
|
175
|
+
scope: 'model'
|
|
176
|
+
};
|
|
177
|
+
let val = {
|
|
178
|
+
...partialVal,
|
|
179
|
+
...singleDesc
|
|
180
|
+
};
|
|
181
|
+
accum[key] = val;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/*
|
|
186
|
+
Check if a routeName resembles a url instead
|
|
187
|
+
|
|
188
|
+
@private
|
|
189
|
+
*/
|
|
190
|
+
function resemblesURL(str) {
|
|
191
|
+
return typeof str === 'string' && (str === '' || str[0] === '/');
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/*
|
|
195
|
+
Returns an arguments array where the route name arg is prefixed based on the mount point
|
|
196
|
+
|
|
197
|
+
@private
|
|
198
|
+
*/
|
|
199
|
+
function prefixRouteNameArg(route, args) {
|
|
200
|
+
let routeName;
|
|
201
|
+
let owner = getOwner(route);
|
|
202
|
+
(isDevelopingApp() && !(owner instanceof EngineInstance) && assert('Expected route to have EngineInstance as owner', owner instanceof EngineInstance));
|
|
203
|
+
let prefix = owner.mountPoint;
|
|
204
|
+
|
|
205
|
+
// only alter the routeName if it's actually referencing a route.
|
|
206
|
+
if (owner.routable && typeof args[0] === 'string') {
|
|
207
|
+
routeName = args[0];
|
|
208
|
+
if (resemblesURL(routeName)) {
|
|
209
|
+
throw new Error('Programmatic transitions by URL cannot be used within an Engine. Please use the route name instead.');
|
|
210
|
+
} else {
|
|
211
|
+
routeName = `${prefix}.${routeName}`;
|
|
212
|
+
args[0] = routeName;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return args;
|
|
216
|
+
}
|
|
217
|
+
function shallowEqual(a, b) {
|
|
218
|
+
let aCount = 0;
|
|
219
|
+
let bCount = 0;
|
|
220
|
+
for (let kA in a) {
|
|
221
|
+
if (Object.prototype.hasOwnProperty.call(a, kA)) {
|
|
222
|
+
if (a[kA] !== b[kA]) {
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
aCount++;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
for (let kB in b) {
|
|
229
|
+
if (Object.prototype.hasOwnProperty.call(b, kB)) {
|
|
230
|
+
bCount++;
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return aCount === bCount;
|
|
234
|
+
}
|
|
235
|
+
function isRouteOptions(value) {
|
|
236
|
+
if (value && typeof value === 'object') {
|
|
237
|
+
let qps = value.queryParams;
|
|
238
|
+
if (qps && typeof qps === 'object') {
|
|
239
|
+
return Object.keys(qps).every(k => typeof k === 'string');
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export { calculateCacheKey, extractRouteArgs, getActiveTargetName, normalizeControllerQueryParams, prefixRouteNameArg, resemblesURL, shallowEqual, stashParamNames };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import EmberObject from '../object/index.js';
|
|
2
|
+
import '../debug/index.js';
|
|
3
3
|
import { isDevelopingApp } from '@embroider/macros';
|
|
4
|
+
import { assert } from '../debug/lib/assert.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
@module @ember/routing/none-location
|