ember-source 5.6.0-alpha.2 → 5.6.0-alpha.4

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.
Files changed (55) hide show
  1. package/build-metadata.json +3 -3
  2. package/dist/dependencies/@glimmer/debug.js +1533 -0
  3. package/dist/dependencies/@glimmer/destroyable.js +30 -59
  4. package/dist/dependencies/@glimmer/encoder.js +13 -24
  5. package/dist/dependencies/@glimmer/global-context.js +38 -41
  6. package/dist/dependencies/@glimmer/manager.js +144 -326
  7. package/dist/dependencies/@glimmer/node.js +14 -46
  8. package/dist/dependencies/@glimmer/opcode-compiler.js +1673 -2478
  9. package/dist/dependencies/@glimmer/owner.js +2 -5
  10. package/dist/dependencies/@glimmer/program.js +102 -185
  11. package/dist/dependencies/@glimmer/reference.js +58 -126
  12. package/dist/dependencies/@glimmer/runtime.js +4674 -5639
  13. package/dist/dependencies/@glimmer/util.js +340 -326
  14. package/dist/dependencies/@glimmer/validator.js +160 -217
  15. package/dist/dependencies/@glimmer/vm.js +174 -23
  16. package/dist/dependencies/@glimmer/wire-format.js +91 -34
  17. package/dist/dependencies/@simple-dom/document.js +1 -1
  18. package/dist/dependencies/backburner.js.js +1 -1
  19. package/dist/dependencies/router_js.js +15 -16
  20. package/dist/dependencies/rsvp.js +89 -88
  21. package/dist/ember-template-compiler.js +8574 -8350
  22. package/dist/ember-template-compiler.map +1 -1
  23. package/dist/ember-testing.js +107 -107
  24. package/dist/ember-testing.map +1 -1
  25. package/dist/ember.debug.js +11216 -9634
  26. package/dist/ember.debug.map +1 -1
  27. package/dist/header/license.js +1 -1
  28. package/dist/packages/@ember/-internals/glimmer/index.js +109 -80
  29. package/dist/packages/@ember/-internals/metal/index.js +5 -4
  30. package/dist/packages/@ember/-internals/utils/index.js +3 -4
  31. package/dist/packages/@ember/array/-internals.js +1 -2
  32. package/dist/packages/@ember/debug/lib/inspect.js +0 -1
  33. package/dist/packages/@ember/object/core.js +0 -1
  34. package/dist/packages/@ember/object/mixin.js +1 -2
  35. package/dist/packages/@ember/routing/route.js +23 -101
  36. package/dist/packages/@ember/routing/router.js +25 -84
  37. package/dist/packages/ember/version.js +1 -1
  38. package/dist/packages/ember-babel.js +13 -0
  39. package/docs/data.json +217 -242
  40. package/lib/index.js +1 -5
  41. package/package.json +26 -21
  42. package/types/stable/@ember/-internals/glimmer/index.d.ts +1 -1
  43. package/types/stable/@ember/-internals/glimmer/lib/component-managers/curly.d.ts +4 -4
  44. package/types/stable/@ember/-internals/glimmer/lib/component-managers/mount.d.ts +3 -3
  45. package/types/stable/@ember/-internals/glimmer/lib/component-managers/outlet.d.ts +5 -8
  46. package/types/stable/@ember/-internals/glimmer/lib/component-managers/root.d.ts +3 -3
  47. package/types/stable/@ember/-internals/glimmer/lib/renderer.d.ts +3 -3
  48. package/types/stable/@ember/-internals/glimmer/lib/resolver.d.ts +3 -3
  49. package/types/stable/@ember/-internals/glimmer/lib/syntax/utils.d.ts +3 -2
  50. package/types/stable/@ember/-internals/glimmer/lib/utils/iterator.d.ts +2 -2
  51. package/types/stable/@ember/-internals/glimmer/lib/utils/outlet.d.ts +39 -18
  52. package/types/stable/@ember/-internals/utility-types/index.d.ts +1 -0
  53. package/types/stable/@ember/-internals/views/lib/system/utils.d.ts +4 -3
  54. package/types/stable/@ember/routing/route.d.ts +6 -28
  55. package/dist/dependencies/@glimmer/low-level.js +0 -77
@@ -5,6 +5,7 @@ var __decorate = this && this.__decorate || function (decorators, target, key, d
5
5
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var _a;
8
9
  import { privatize as P } from '@ember/-internals/container';
9
10
  import { addObserver, defineProperty, descriptorForProperty, flushAsyncObservers } from '@ember/-internals/metal';
10
11
  import { getOwner } from '@ember/-internals/owner';
@@ -13,7 +14,7 @@ import EmberObject, { computed, get, set, getProperties, setProperties } from '@
13
14
  import Evented from '@ember/object/evented';
14
15
  import { A as emberA } from '@ember/array';
15
16
  import { ActionHandler } from '@ember/-internals/runtime';
16
- import { isEmpty, typeOf } from '@ember/utils';
17
+ import { typeOf } from '@ember/utils';
17
18
  import { isProxy, lookupDescriptor } from '@ember/-internals/utils';
18
19
  import Controller from '@ember/controller';
19
20
  import { assert, deprecate, info, isTesting } from '@ember/debug';
@@ -28,8 +29,8 @@ import { calculateCacheKey, normalizeControllerQueryParams, prefixRouteNameArg,
28
29
  function isStoreLike(store) {
29
30
  return typeof store === 'object' && store !== null && typeof store.find === 'function';
30
31
  }
31
- export const ROUTE_CONNECTIONS = new WeakMap();
32
32
  const RENDER = Symbol('render');
33
+ const RENDER_STATE = Symbol('render-state');
33
34
  class Route extends EmberObject.extend(ActionHandler, Evented) {
34
35
  constructor(owner) {
35
36
  super(owner);
@@ -39,6 +40,7 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
39
40
  // people subclassing `Route` that they should not use them.
40
41
  /** @internal */
41
42
  this.context = {};
43
+ this[_a] = undefined;
42
44
  if (owner) {
43
45
  let router = owner.lookup('router:main');
44
46
  let bucketCache = owner.lookup(P`-bucket-cache:main`);
@@ -316,7 +318,7 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
316
318
  @method enter
317
319
  */
318
320
  enter(transition) {
319
- ROUTE_CONNECTIONS.set(this, []);
321
+ this[RENDER_STATE] = undefined;
320
322
  this.activate(transition);
321
323
  this.trigger('activate', transition);
322
324
  }
@@ -777,24 +779,12 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
777
779
  return route?.currentModel;
778
780
  }
779
781
  /**
780
- `this[RENDER]` is used to render a template into a region of another template
781
- (indicated by an `{{outlet}}`).
782
- @method this[RENDER]
783
- @param {String} name the name of the template to render
784
- @param {Object} [options] the options
785
- @param {String} [options.into] the template to render into,
786
- referenced by name. Defaults to the parent template
787
- @param {String} [options.outlet] the outlet inside `options.into` to render into.
788
- Defaults to 'main'
789
- @param {String|Object} [options.controller] the controller to use for this template,
790
- referenced by name or as a controller instance. Defaults to the Route's paired controller
791
- @param {Object} [options.model] the model object to set on `options.controller`.
792
- Defaults to the return value of the Route's model hook
782
+ `this[RENDER]` is used to set up the rendering option for the outlet state.
783
+ @method this[RENDER]
793
784
  @private
794
785
  */
795
- [RENDER](name, options) {
796
- let renderOptions = buildRenderOptions(this, name, options);
797
- ROUTE_CONNECTIONS.get(this).push(renderOptions);
786
+ [(_a = RENDER_STATE, RENDER)]() {
787
+ this[RENDER_STATE] = buildRenderState(this);
798
788
  once(this._router, '_setOutlets');
799
789
  }
800
790
  willDestroy() {
@@ -805,9 +795,8 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
805
795
  @method teardownViews
806
796
  */
807
797
  teardownViews() {
808
- let connections = ROUTE_CONNECTIONS.get(this);
809
- if (connections !== undefined && connections.length > 0) {
810
- ROUTE_CONNECTIONS.set(this, []);
798
+ if (this[RENDER_STATE]) {
799
+ this[RENDER_STATE] = undefined;
811
800
  once(this._router, '_setOutlets');
812
801
  }
813
802
  }
@@ -952,92 +941,25 @@ class Route extends EmberObject.extend(ActionHandler, Evented) {
952
941
  Route.isRouteFactory = true;
953
942
  __decorate([computed], Route.prototype, "_store", null);
954
943
  __decorate([computed], Route.prototype, "_qp", null);
955
- function parentRoute(route) {
956
- let routeInfo = routeInfoFor(route, route._router._routerMicrolib.state.routeInfos, -1);
957
- return routeInfo && routeInfo.route;
944
+ export function getRenderState(route) {
945
+ return route[RENDER_STATE];
958
946
  }
959
- function routeInfoFor(route, routeInfos, offset = 0) {
960
- if (!routeInfos) {
961
- return;
962
- }
963
- let current;
964
- for (let i = 0; i < routeInfos.length; i++) {
965
- let routeInfo = routeInfos[i];
966
- assert('has current routeInfo', routeInfo);
967
- current = routeInfo.route;
968
- if (current === route) {
969
- return routeInfos[i + offset];
970
- }
971
- }
972
- return;
973
- }
974
- function buildRenderOptions(route, nameOrOptions, options) {
975
- let isDefaultRender = !nameOrOptions && !options;
976
- let _name;
977
- if (!isDefaultRender) {
978
- if (typeof nameOrOptions === 'object' && !options) {
979
- _name = route.templateName || route.routeName;
980
- options = nameOrOptions;
981
- } else {
982
- assert('The name in the given arguments is undefined or empty string', !isEmpty(nameOrOptions));
983
- // SAFETY: the check for `nameOrOptions` above should be validating this,
984
- // and as of TS 5.1.0-dev.2023-0417 it is *not*. This cast can go away if
985
- // TS validates it correctly *or* if we refactor this entire function to
986
- // be less wildly dynamic in its argument handling.
987
- _name = nameOrOptions;
988
- }
989
- }
990
- assert('You passed undefined as the outlet name.', isDefaultRender || !(options && 'outlet' in options && options.outlet === undefined));
947
+ function buildRenderState(route) {
991
948
  let owner = getOwner(route);
992
949
  assert('Route is unexpectedly missing an owner', owner);
993
- let name, templateName, into, outlet, model;
994
- let controller;
995
- if (options) {
996
- into = options.into && options.into.replace(/\//g, '.');
997
- outlet = options.outlet;
998
- controller = options.controller;
999
- model = options.model;
1000
- }
1001
- outlet = outlet || 'main';
1002
- if (isDefaultRender) {
1003
- name = route.routeName;
1004
- templateName = route.templateName || name;
1005
- } else {
1006
- name = _name.replace(/\//g, '.');
1007
- templateName = name;
1008
- }
1009
- if (controller === undefined) {
1010
- if (isDefaultRender) {
1011
- controller = route.controllerName || owner.lookup(`controller:${name}`);
1012
- } else {
1013
- controller = owner.lookup(`controller:${name}`) || route.controllerName || route.routeName;
1014
- }
1015
- }
1016
- if (typeof controller === 'string') {
1017
- let controllerName = controller;
1018
- controller = owner.lookup(`controller:${controllerName}`);
1019
- assert(`You passed \`controller: '${controllerName}'\` into the \`render\` method, but no such controller could be found.`, isDefaultRender || controller !== undefined);
1020
- }
950
+ let name = route.routeName;
951
+ let controller = owner.lookup(`controller:${route.controllerName || name}`);
1021
952
  assert('Expected an instance of controller', controller instanceof Controller);
1022
- if (model === undefined) {
1023
- model = route.currentModel;
1024
- } else {
1025
- controller.set('model', model);
1026
- }
1027
- let template = owner.lookup(`template:${templateName}`);
1028
- assert(`Could not find "${templateName}" template, view, or component.`, isDefaultRender || template !== undefined);
1029
- let parent;
1030
- if (into && (parent = parentRoute(route)) && into === parent.routeName) {
1031
- into = undefined;
1032
- }
1033
- let renderOptions = {
953
+ let model = route.currentModel;
954
+ let template = owner.lookup(`template:${route.templateName || name}`);
955
+ let render = {
1034
956
  owner,
1035
- into,
1036
- outlet,
957
+ into: undefined,
958
+ outlet: 'main',
1037
959
  name,
1038
960
  controller,
1039
961
  model,
1040
- template: template !== undefined ? template(owner) : route._topLevelViewTemplate(owner)
962
+ template: template?.(owner) ?? route._topLevelViewTemplate(owner)
1041
963
  };
1042
964
  if (DEBUG) {
1043
965
  let LOG_VIEW_LOOKUPS = get(route._router, 'namespace.LOG_VIEW_LOOKUPS');
@@ -1047,7 +969,7 @@ function buildRenderOptions(route, nameOrOptions, options) {
1047
969
  });
1048
970
  }
1049
971
  }
1050
- return renderOptions;
972
+ return render;
1051
973
  }
1052
974
  export function getFullQueryParams(router, state) {
1053
975
  if (state.fullQueryParams) {
@@ -10,7 +10,7 @@ import Evented from '@ember/object/evented';
10
10
  import { assert, info } from '@ember/debug';
11
11
  import { cancel, once, run, scheduleOnce } from '@ember/runloop';
12
12
  import { DEBUG } from '@glimmer/env';
13
- import { defaultSerialize, getFullQueryParams, hasDefaultSerialize, ROUTE_CONNECTIONS } from '@ember/routing/route';
13
+ import { defaultSerialize, getFullQueryParams, getRenderState, hasDefaultSerialize } from '@ember/routing/route';
14
14
  import Router, { logAbort, STATE_SYMBOL } from 'router_js';
15
15
  import EngineInstance from '@ember/engine/instance';
16
16
  /**
@@ -400,35 +400,39 @@ class EmberRouter extends EmberObject.extend(Evented) {
400
400
  if (!routeInfos) {
401
401
  return;
402
402
  }
403
- let defaultParentState;
404
- let liveRoutes = null;
403
+ let root = null;
404
+ let parent = null;
405
405
  for (let routeInfo of routeInfos) {
406
406
  let route = routeInfo.route;
407
- let connections = ROUTE_CONNECTIONS.get(route);
408
- let ownState;
409
- if (connections.length === 0) {
410
- ownState = representEmptyRoute(liveRoutes, defaultParentState, route);
411
- } else {
412
- for (let j = 0; j < connections.length; j++) {
413
- let appended = appendLiveRoute(liveRoutes, defaultParentState, connections[j]);
414
- liveRoutes = appended.liveRoutes;
415
- let {
416
- name,
417
- outlet
418
- } = appended.ownState.render;
419
- if (name === route.routeName || outlet === 'main') {
420
- ownState = appended.ownState;
407
+ let render = getRenderState(route);
408
+ if (render) {
409
+ let state = {
410
+ render,
411
+ outlets: {
412
+ main: undefined
421
413
  }
414
+ };
415
+ if (parent) {
416
+ parent.outlets.main = state;
417
+ } else {
418
+ root = state;
422
419
  }
420
+ parent = state;
421
+ } else {
422
+ // It used to be that we would create a stub entry and keep traversing,
423
+ // but I don't think that is necessary anymore – if a parent route did
424
+ // not render, then the child routes have nowhere to render into these
425
+ // days. That wasn't always the case since in the past any route can
426
+ // render into any other route's outlets.
427
+ break;
423
428
  }
424
- defaultParentState = ownState;
425
429
  }
426
430
  // when a transitionTo happens after the validation phase
427
431
  // during the initial transition _setOutlets is called
428
432
  // when no routes are active. However, it will get called
429
433
  // again with the correct values during the next turn of
430
434
  // the runloop
431
- if (!liveRoutes) {
435
+ if (root === null) {
432
436
  return;
433
437
  }
434
438
  if (!this._toplevelView) {
@@ -451,7 +455,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
451
455
  template,
452
456
  application
453
457
  });
454
- this._toplevelView.setOutletState(liveRoutes);
458
+ this._toplevelView.setOutletState(root);
455
459
  // TODO(SAFETY): At least one test runs without this set correctly. At a
456
460
  // later time, update the test to configure this correctly. The test ID:
457
461
  // `Router Service - non application test: RouterService#transitionTo with basic route`
@@ -465,7 +469,7 @@ class EmberRouter extends EmberObject.extend(Evented) {
465
469
  instance.didCreateRootView(this._toplevelView);
466
470
  }
467
471
  } else {
468
- this._toplevelView.setOutletState(liveRoutes);
472
+ this._toplevelView.setOutletState(root);
469
473
  }
470
474
  }
471
475
  handleURL(url) {
@@ -1282,69 +1286,6 @@ function forEachQueryParam(router, routeInfos, queryParams, callback) {
1282
1286
  callback(key, value, qp);
1283
1287
  }
1284
1288
  }
1285
- function findLiveRoute(liveRoutes, name) {
1286
- if (!liveRoutes) {
1287
- return;
1288
- }
1289
- let stack = [liveRoutes];
1290
- while (stack.length > 0) {
1291
- let test = stack.shift();
1292
- if (test.render.name === name) {
1293
- return test;
1294
- }
1295
- let outlets = test.outlets;
1296
- for (let outletName in outlets) {
1297
- stack.push(outlets[outletName]);
1298
- }
1299
- }
1300
- return;
1301
- }
1302
- function appendLiveRoute(liveRoutes, defaultParentState, renderOptions) {
1303
- let ownState = {
1304
- render: renderOptions,
1305
- outlets: Object.create(null),
1306
- wasUsed: false
1307
- };
1308
- let target;
1309
- if (renderOptions.into) {
1310
- target = findLiveRoute(liveRoutes, renderOptions.into);
1311
- } else {
1312
- target = defaultParentState;
1313
- }
1314
- if (target) {
1315
- set(target.outlets, renderOptions.outlet, ownState);
1316
- } else {
1317
- liveRoutes = ownState;
1318
- }
1319
- return {
1320
- liveRoutes,
1321
- ownState
1322
- };
1323
- }
1324
- function representEmptyRoute(liveRoutes, defaultParentState, {
1325
- routeName
1326
- }) {
1327
- // the route didn't render anything
1328
- let alreadyAppended = findLiveRoute(liveRoutes, routeName);
1329
- if (alreadyAppended) {
1330
- // But some other route has already rendered our default
1331
- // template, so that becomes the default target for any
1332
- // children we may have.
1333
- return alreadyAppended;
1334
- } else {
1335
- // Create an entry to represent our default template name,
1336
- // just so other routes can target it and inherit its place
1337
- // in the outlet hierarchy.
1338
- defaultParentState.outlets['main'] = {
1339
- render: {
1340
- name: routeName,
1341
- outlet: 'main'
1342
- },
1343
- outlets: {}
1344
- };
1345
- return defaultParentState;
1346
- }
1347
- }
1348
1289
  EmberRouter.reopen({
1349
1290
  didTransition: defaultDidTransition,
1350
1291
  willTransition: defaultWillTransition,
@@ -1 +1 @@
1
- export default "5.6.0-alpha.2";
1
+ export default "5.6.0-alpha.4";
@@ -9,6 +9,19 @@ const hasReflectConstruct = typeof Reflect === 'object' && typeof Reflect.constr
9
9
 
10
10
  const nativeWrapperCache = new Map();
11
11
 
12
+ // Implementations:
13
+ // https://github.com/babel/babel/blob/436d78920883603668666210a4aacf524257bc3b/packages/babel-helpers/src/helpers.ts#L958
14
+ let privateFieldId = 0;
15
+ export function classPrivateFieldLooseKey(name) {
16
+ return '__private_' + privateFieldId++ + '_' + name;
17
+ }
18
+ export function classPrivateFieldLooseBase(receiver, privateKey) {
19
+ if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
20
+ throw new TypeError('attempted to use private field on non-instance');
21
+ }
22
+ return receiver;
23
+ }
24
+
12
25
  // Super minimal version of Babel's wrapNativeSuper. We only use this for
13
26
  // extending Function, for ComputedDecoratorImpl and AliasDecoratorImpl. We know
14
27
  // we will never directly create an instance of these classes so no need to