@angular/core 14.0.0-next.2 → 14.0.0-next.5

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 (41) hide show
  1. package/core.d.ts +77 -21
  2. package/esm2020/src/application_init.mjs +4 -3
  3. package/esm2020/src/application_module.mjs +5 -104
  4. package/esm2020/src/application_ref.mjs +4 -3
  5. package/esm2020/src/application_tokens.mjs +14 -2
  6. package/esm2020/src/core.mjs +2 -2
  7. package/esm2020/src/core_render3_private_export.mjs +2 -1
  8. package/esm2020/src/debug/debug_node.mjs +11 -10
  9. package/esm2020/src/i18n/tokens.mjs +39 -3
  10. package/esm2020/src/linker/compiler.mjs +4 -3
  11. package/esm2020/src/linker/template_ref.mjs +3 -3
  12. package/esm2020/src/linker/view_container_ref.mjs +35 -8
  13. package/esm2020/src/render3/component.mjs +3 -3
  14. package/esm2020/src/render3/component_ref.mjs +22 -26
  15. package/esm2020/src/render3/context_discovery.mjs +34 -30
  16. package/esm2020/src/render3/di.mjs +177 -97
  17. package/esm2020/src/render3/hooks.mjs +3 -3
  18. package/esm2020/src/render3/instructions/element.mjs +7 -1
  19. package/esm2020/src/render3/instructions/element_container.mjs +7 -1
  20. package/esm2020/src/render3/instructions/lview_debug.mjs +6 -3
  21. package/esm2020/src/render3/instructions/shared.mjs +16 -7
  22. package/esm2020/src/render3/interfaces/context.mjs +35 -2
  23. package/esm2020/src/render3/interfaces/injector.mjs +1 -1
  24. package/esm2020/src/render3/interfaces/lview_tracking.mjs +33 -0
  25. package/esm2020/src/render3/interfaces/view.mjs +4 -2
  26. package/esm2020/src/render3/node_manipulation.mjs +4 -1
  27. package/esm2020/src/render3/util/discovery_utils.mjs +33 -22
  28. package/esm2020/src/version.mjs +1 -1
  29. package/esm2020/testing/src/logger.mjs +3 -3
  30. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  31. package/fesm2015/core.mjs +478 -308
  32. package/fesm2015/core.mjs.map +1 -1
  33. package/fesm2015/testing.mjs +1 -1
  34. package/fesm2020/core.mjs +478 -301
  35. package/fesm2020/core.mjs.map +1 -1
  36. package/fesm2020/testing.mjs +1 -1
  37. package/package.json +1 -1
  38. package/schematics/migrations/entry-components/util.js +2 -2
  39. package/schematics/utils/import_manager.js +13 -12
  40. package/schematics/utils/typescript/imports.js +6 -5
  41. package/testing/testing.d.ts +1 -1
package/fesm2015/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v14.0.0-next.2
2
+ * @license Angular v14.0.0-next.5
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -1210,6 +1210,8 @@ const DECLARATION_COMPONENT_VIEW = 16;
1210
1210
  const DECLARATION_LCONTAINER = 17;
1211
1211
  const PREORDER_HOOK_FLAGS = 18;
1212
1212
  const QUERIES = 19;
1213
+ const ID = 20;
1214
+ const EMBEDDED_VIEW_INJECTOR = 21;
1213
1215
  /**
1214
1216
  * Size of LView's header. Necessary to adjust for it when setting slots.
1215
1217
  *
@@ -1217,7 +1219,7 @@ const QUERIES = 19;
1217
1219
  * instruction index into `LView` index. All other indexes should be in the `LView` index space and
1218
1220
  * there should be no need to refer to `HEADER_OFFSET` anywhere else.
1219
1221
  */
1220
- const HEADER_OFFSET = 20;
1222
+ const HEADER_OFFSET = 22;
1221
1223
  /**
1222
1224
  * Converts `TViewType` into human readable text.
1223
1225
  * Make sure this matches with `TViewType`
@@ -2467,7 +2469,7 @@ function incrementInitPhaseFlags(lView, initPhase) {
2467
2469
  assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');
2468
2470
  let flags = lView[FLAGS];
2469
2471
  if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {
2470
- flags &= 2047 /* IndexWithinInitPhaseReset */;
2472
+ flags &= 4095 /* IndexWithinInitPhaseReset */;
2471
2473
  flags += 1 /* InitPhaseStateIncrementer */;
2472
2474
  lView[FLAGS] = flags;
2473
2475
  }
@@ -2531,12 +2533,12 @@ function callHook(currentView, initPhase, arr, i) {
2531
2533
  const directiveIndex = isInitHook ? -arr[i] : arr[i];
2532
2534
  const directive = currentView[directiveIndex];
2533
2535
  if (isInitHook) {
2534
- const indexWithintInitPhase = currentView[FLAGS] >> 11 /* IndexWithinInitPhaseShift */;
2536
+ const indexWithintInitPhase = currentView[FLAGS] >> 12 /* IndexWithinInitPhaseShift */;
2535
2537
  // The init phase state must be always checked here as it may have been recursively updated.
2536
2538
  if (indexWithintInitPhase <
2537
2539
  (currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&
2538
2540
  (currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {
2539
- currentView[FLAGS] += 2048 /* IndexWithinInitPhaseIncrementer */;
2541
+ currentView[FLAGS] += 4096 /* IndexWithinInitPhaseIncrementer */;
2540
2542
  profiler(4 /* LifecycleHookStart */, directive, hook);
2541
2543
  try {
2542
2544
  hook.call(directive);
@@ -3097,6 +3099,8 @@ const BLOOM_MASK = BLOOM_SIZE - 1;
3097
3099
  const BLOOM_BUCKET_BITS = 5;
3098
3100
  /** Counter used to generate unique IDs for directives. */
3099
3101
  let nextNgElementId = 0;
3102
+ /** Value used when something wasn't found by an injector. */
3103
+ const NOT_FOUND = {};
3100
3104
  /**
3101
3105
  * Registers this directive as present in its node's injector by flipping the directive's
3102
3106
  * corresponding bit in the injector's bloom filter.
@@ -3208,23 +3212,7 @@ function getParentInjectorLocation(tNode, lView) {
3208
3212
  // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent
3209
3213
  // `NodeInjector`.
3210
3214
  while (lViewCursor !== null) {
3211
- // First determine the `parentTNode` location. The parent pointer differs based on `TView.type`.
3212
- const tView = lViewCursor[TVIEW];
3213
- const tViewType = tView.type;
3214
- if (tViewType === 2 /* Embedded */) {
3215
- ngDevMode &&
3216
- assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
3217
- parentTNode = tView.declTNode;
3218
- }
3219
- else if (tViewType === 1 /* Component */) {
3220
- // Components don't have `TView.declTNode` because each instance of component could be
3221
- // inserted in different location, hence `TView.declTNode` is meaningless.
3222
- parentTNode = lViewCursor[T_HOST];
3223
- }
3224
- else {
3225
- ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');
3226
- parentTNode = null;
3227
- }
3215
+ parentTNode = getTNodeFromLView(lViewCursor);
3228
3216
  if (parentTNode === null) {
3229
3217
  // If we have no parent, than we are done.
3230
3218
  return NO_PARENT_INJECTOR;
@@ -3385,93 +3373,116 @@ function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
3385
3373
  */
3386
3374
  function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
3387
3375
  if (tNode !== null) {
3388
- const bloomHash = bloomHashBitOrFactory(token);
3389
- // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
3390
- // so just call the factory function to create it.
3391
- if (typeof bloomHash === 'function') {
3392
- if (!enterDI(lView, tNode, flags)) {
3393
- // Failed to enter DI, try module injector instead. If a token is injected with the @Host
3394
- // flag, the module injector is not searched for that token in Ivy.
3395
- return (flags & InjectFlags.Host) ?
3396
- notFoundValueOrThrow(notFoundValue, token, flags) :
3397
- lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3376
+ // If the view or any of its ancestors have an embedded
3377
+ // view injector, we have to look it up there first.
3378
+ if (lView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) {
3379
+ const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
3380
+ if (embeddedInjectorValue !== NOT_FOUND) {
3381
+ return embeddedInjectorValue;
3398
3382
  }
3399
- try {
3400
- const value = bloomHash(flags);
3401
- if (value == null && !(flags & InjectFlags.Optional)) {
3402
- throwProviderNotFoundError(token);
3403
- }
3404
- else {
3405
- return value;
3406
- }
3383
+ }
3384
+ // Otherwise try the node injector.
3385
+ const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);
3386
+ if (value !== NOT_FOUND) {
3387
+ return value;
3388
+ }
3389
+ }
3390
+ // Finally, fall back to the module injector.
3391
+ return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3392
+ }
3393
+ /**
3394
+ * Returns the value associated to the given token from the node injector.
3395
+ *
3396
+ * @param tNode The Node where the search for the injector should start
3397
+ * @param lView The `LView` that contains the `tNode`
3398
+ * @param token The token to look for
3399
+ * @param flags Injection flags
3400
+ * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
3401
+ * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
3402
+ */
3403
+ function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
3404
+ const bloomHash = bloomHashBitOrFactory(token);
3405
+ // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
3406
+ // so just call the factory function to create it.
3407
+ if (typeof bloomHash === 'function') {
3408
+ if (!enterDI(lView, tNode, flags)) {
3409
+ // Failed to enter DI, try module injector instead. If a token is injected with the @Host
3410
+ // flag, the module injector is not searched for that token in Ivy.
3411
+ return (flags & InjectFlags.Host) ?
3412
+ notFoundValueOrThrow(notFoundValue, token, flags) :
3413
+ lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3414
+ }
3415
+ try {
3416
+ const value = bloomHash(flags);
3417
+ if (value == null && !(flags & InjectFlags.Optional)) {
3418
+ throwProviderNotFoundError(token);
3407
3419
  }
3408
- finally {
3409
- leaveDI();
3410
- }
3411
- }
3412
- else if (typeof bloomHash === 'number') {
3413
- // A reference to the previous injector TView that was found while climbing the element
3414
- // injector tree. This is used to know if viewProviders can be accessed on the current
3415
- // injector.
3416
- let previousTView = null;
3417
- let injectorIndex = getInjectorIndex(tNode, lView);
3418
- let parentLocation = NO_PARENT_INJECTOR;
3419
- let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
3420
- // If we should skip this injector, or if there is no injector on this node, start by
3421
- // searching the parent injector.
3422
- if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
3423
- parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
3424
- lView[injectorIndex + 8 /* PARENT */];
3425
- if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
3426
- injectorIndex = -1;
3427
- }
3428
- else {
3429
- previousTView = lView[TVIEW];
3430
- injectorIndex = getParentInjectorIndex(parentLocation);
3431
- lView = getParentInjectorView(parentLocation, lView);
3432
- }
3420
+ else {
3421
+ return value;
3433
3422
  }
3434
- // Traverse up the injector tree until we find a potential match or until we know there
3435
- // *isn't* a match.
3436
- while (injectorIndex !== -1) {
3437
- ngDevMode && assertNodeInjector(lView, injectorIndex);
3438
- // Check the current injector. If it matches, see if it contains token.
3439
- const tView = lView[TVIEW];
3440
- ngDevMode &&
3441
- assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
3442
- if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
3443
- // At this point, we have an injector which *may* contain the token, so we step through
3444
- // the providers and directives associated with the injector's corresponding node to get
3445
- // the instance.
3446
- const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
3447
- if (instance !== NOT_FOUND) {
3448
- return instance;
3449
- }
3450
- }
3451
- parentLocation = lView[injectorIndex + 8 /* PARENT */];
3452
- if (parentLocation !== NO_PARENT_INJECTOR &&
3453
- shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
3454
- bloomHasToken(bloomHash, injectorIndex, lView)) {
3455
- // The def wasn't found anywhere on this node, so it was a false positive.
3456
- // Traverse up the tree and continue searching.
3457
- previousTView = tView;
3458
- injectorIndex = getParentInjectorIndex(parentLocation);
3459
- lView = getParentInjectorView(parentLocation, lView);
3460
- }
3461
- else {
3462
- // If we should not search parent OR If the ancestor bloom filter value does not have the
3463
- // bit corresponding to the directive we can give up on traversing up to find the specific
3464
- // injector.
3465
- injectorIndex = -1;
3423
+ }
3424
+ finally {
3425
+ leaveDI();
3426
+ }
3427
+ }
3428
+ else if (typeof bloomHash === 'number') {
3429
+ // A reference to the previous injector TView that was found while climbing the element
3430
+ // injector tree. This is used to know if viewProviders can be accessed on the current
3431
+ // injector.
3432
+ let previousTView = null;
3433
+ let injectorIndex = getInjectorIndex(tNode, lView);
3434
+ let parentLocation = NO_PARENT_INJECTOR;
3435
+ let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
3436
+ // If we should skip this injector, or if there is no injector on this node, start by
3437
+ // searching the parent injector.
3438
+ if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
3439
+ parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
3440
+ lView[injectorIndex + 8 /* PARENT */];
3441
+ if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
3442
+ injectorIndex = -1;
3443
+ }
3444
+ else {
3445
+ previousTView = lView[TVIEW];
3446
+ injectorIndex = getParentInjectorIndex(parentLocation);
3447
+ lView = getParentInjectorView(parentLocation, lView);
3448
+ }
3449
+ }
3450
+ // Traverse up the injector tree until we find a potential match or until we know there
3451
+ // *isn't* a match.
3452
+ while (injectorIndex !== -1) {
3453
+ ngDevMode && assertNodeInjector(lView, injectorIndex);
3454
+ // Check the current injector. If it matches, see if it contains token.
3455
+ const tView = lView[TVIEW];
3456
+ ngDevMode &&
3457
+ assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
3458
+ if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
3459
+ // At this point, we have an injector which *may* contain the token, so we step through
3460
+ // the providers and directives associated with the injector's corresponding node to get
3461
+ // the instance.
3462
+ const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
3463
+ if (instance !== NOT_FOUND) {
3464
+ return instance;
3466
3465
  }
3467
3466
  }
3467
+ parentLocation = lView[injectorIndex + 8 /* PARENT */];
3468
+ if (parentLocation !== NO_PARENT_INJECTOR &&
3469
+ shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
3470
+ bloomHasToken(bloomHash, injectorIndex, lView)) {
3471
+ // The def wasn't found anywhere on this node, so it was a false positive.
3472
+ // Traverse up the tree and continue searching.
3473
+ previousTView = tView;
3474
+ injectorIndex = getParentInjectorIndex(parentLocation);
3475
+ lView = getParentInjectorView(parentLocation, lView);
3476
+ }
3477
+ else {
3478
+ // If we should not search parent OR If the ancestor bloom filter value does not have the
3479
+ // bit corresponding to the directive we can give up on traversing up to find the specific
3480
+ // injector.
3481
+ injectorIndex = -1;
3482
+ }
3468
3483
  }
3469
3484
  }
3470
- return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3471
- }
3472
- const NOT_FOUND = {};
3473
- function createNodeInjector() {
3474
- return new NodeInjector(getCurrentTNode(), getLView());
3485
+ return notFoundValue;
3475
3486
  }
3476
3487
  function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
3477
3488
  const currentTView = lView[TVIEW];
@@ -3645,6 +3656,10 @@ class NodeInjector {
3645
3656
  return getOrCreateInjectable(this._tNode, this._lView, token, flags, notFoundValue);
3646
3657
  }
3647
3658
  }
3659
+ /** Creates a `NodeInjector` for the current node. */
3660
+ function createNodeInjector() {
3661
+ return new NodeInjector(getCurrentTNode(), getLView());
3662
+ }
3648
3663
  /**
3649
3664
  * @codeGenApi
3650
3665
  */
@@ -3683,6 +3698,73 @@ function getFactoryOf(type) {
3683
3698
  }
3684
3699
  return getFactoryDef(type);
3685
3700
  }
3701
+ /**
3702
+ * Returns a value from the closest embedded or node injector.
3703
+ *
3704
+ * @param tNode The Node where the search for the injector should start
3705
+ * @param lView The `LView` that contains the `tNode`
3706
+ * @param token The token to look for
3707
+ * @param flags Injection flags
3708
+ * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
3709
+ * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
3710
+ */
3711
+ function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
3712
+ let currentTNode = tNode;
3713
+ let currentLView = lView;
3714
+ // When an LView with an embedded view injector is inserted, it'll likely be interlaced with
3715
+ // nodes who may have injectors (e.g. node injector -> embedded view injector -> node injector).
3716
+ // Since the bloom filters for the node injectors have already been constructed and we don't
3717
+ // have a way of extracting the records from an injector, the only way to maintain the correct
3718
+ // hierarchy when resolving the value is to walk it node-by-node while attempting to resolve
3719
+ // the token at each level.
3720
+ while (currentTNode !== null && currentLView !== null &&
3721
+ (currentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) &&
3722
+ !(currentLView[FLAGS] & 512 /* IsRoot */)) {
3723
+ ngDevMode && assertTNodeForLView(currentTNode, currentLView);
3724
+ // Note that this lookup on the node injector is using the `Self` flag, because
3725
+ // we don't want the node injector to look at any parent injectors since we
3726
+ // may hit the embedded view injector first.
3727
+ const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
3728
+ if (nodeInjectorValue !== NOT_FOUND) {
3729
+ return nodeInjectorValue;
3730
+ }
3731
+ // Has an explicit type due to a TS bug: https://github.com/microsoft/TypeScript/issues/33191
3732
+ let parentTNode = currentTNode.parent;
3733
+ // `TNode.parent` includes the parent within the current view only. If it doesn't exist,
3734
+ // it means that we've hit the view boundary and we need to go up to the next view.
3735
+ if (!parentTNode) {
3736
+ // Before we go to the next LView, check if the token exists on the current embedded injector.
3737
+ const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];
3738
+ if (embeddedViewInjector) {
3739
+ const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);
3740
+ if (embeddedViewInjectorValue !== NOT_FOUND) {
3741
+ return embeddedViewInjectorValue;
3742
+ }
3743
+ }
3744
+ // Otherwise keep going up the tree.
3745
+ parentTNode = getTNodeFromLView(currentLView);
3746
+ currentLView = currentLView[DECLARATION_VIEW];
3747
+ }
3748
+ currentTNode = parentTNode;
3749
+ }
3750
+ return notFoundValue;
3751
+ }
3752
+ /** Gets the TNode associated with an LView inside of the declaration view. */
3753
+ function getTNodeFromLView(lView) {
3754
+ const tView = lView[TVIEW];
3755
+ const tViewType = tView.type;
3756
+ // The parent pointer differs based on `TView.type`.
3757
+ if (tViewType === 2 /* Embedded */) {
3758
+ ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
3759
+ return tView.declTNode;
3760
+ }
3761
+ else if (tViewType === 1 /* Component */) {
3762
+ // Components don't have `TView.declTNode` because each instance of component could be
3763
+ // inserted in different location, hence `TView.declTNode` is meaningless.
3764
+ return lView[T_HOST];
3765
+ }
3766
+ return null;
3767
+ }
3686
3768
 
3687
3769
  /**
3688
3770
  * @license
@@ -6155,6 +6237,78 @@ function getSanitizer() {
6155
6237
  return lView && lView[SANITIZER];
6156
6238
  }
6157
6239
 
6240
+ /**
6241
+ * @license
6242
+ * Copyright Google LLC All Rights Reserved.
6243
+ *
6244
+ * Use of this source code is governed by an MIT-style license that can be
6245
+ * found in the LICENSE file at https://angular.io/license
6246
+ */
6247
+ // Keeps track of the currently-active LViews.
6248
+ const TRACKED_LVIEWS = new Map();
6249
+ // Used for generating unique IDs for LViews.
6250
+ let uniqueIdCounter = 0;
6251
+ /** Gets a unique ID that can be assigned to an LView. */
6252
+ function getUniqueLViewId() {
6253
+ return uniqueIdCounter++;
6254
+ }
6255
+ /** Starts tracking an LView. */
6256
+ function registerLView(lView) {
6257
+ ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');
6258
+ TRACKED_LVIEWS.set(lView[ID], lView);
6259
+ }
6260
+ /** Gets an LView by its unique ID. */
6261
+ function getLViewById(id) {
6262
+ ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');
6263
+ return TRACKED_LVIEWS.get(id) || null;
6264
+ }
6265
+ /** Stops tracking an LView. */
6266
+ function unregisterLView(lView) {
6267
+ ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');
6268
+ TRACKED_LVIEWS.delete(lView[ID]);
6269
+ }
6270
+
6271
+ /**
6272
+ * @license
6273
+ * Copyright Google LLC All Rights Reserved.
6274
+ *
6275
+ * Use of this source code is governed by an MIT-style license that can be
6276
+ * found in the LICENSE file at https://angular.io/license
6277
+ */
6278
+ /**
6279
+ * The internal view context which is specific to a given DOM element, directive or
6280
+ * component instance. Each value in here (besides the LView and element node details)
6281
+ * can be present, null or undefined. If undefined then it implies the value has not been
6282
+ * looked up yet, otherwise, if null, then a lookup was executed and nothing was found.
6283
+ *
6284
+ * Each value will get filled when the respective value is examined within the getContext
6285
+ * function. The component, element and each directive instance will share the same instance
6286
+ * of the context.
6287
+ */
6288
+ class LContext {
6289
+ constructor(
6290
+ /**
6291
+ * ID of the component's parent view data.
6292
+ */
6293
+ lViewId,
6294
+ /**
6295
+ * The index instance of the node.
6296
+ */
6297
+ nodeIndex,
6298
+ /**
6299
+ * The instance of the DOM node that is attached to the lNode.
6300
+ */
6301
+ native) {
6302
+ this.lViewId = lViewId;
6303
+ this.nodeIndex = nodeIndex;
6304
+ this.native = native;
6305
+ }
6306
+ /** Component's parent view data. */
6307
+ get lView() {
6308
+ return getLViewById(this.lViewId);
6309
+ }
6310
+ }
6311
+
6158
6312
  /**
6159
6313
  * @license
6160
6314
  * Copyright Google LLC All Rights Reserved.
@@ -6187,7 +6341,7 @@ function getLContext(target) {
6187
6341
  if (mpValue) {
6188
6342
  // only when it's an array is it considered an LView instance
6189
6343
  // ... otherwise it's an already constructed LContext instance
6190
- if (Array.isArray(mpValue)) {
6344
+ if (isLView(mpValue)) {
6191
6345
  const lView = mpValue;
6192
6346
  let nodeIndex;
6193
6347
  let component = undefined;
@@ -6246,13 +6400,7 @@ function getLContext(target) {
6246
6400
  while (parent = parent.parentNode) {
6247
6401
  const parentContext = readPatchedData(parent);
6248
6402
  if (parentContext) {
6249
- let lView;
6250
- if (Array.isArray(parentContext)) {
6251
- lView = parentContext;
6252
- }
6253
- else {
6254
- lView = parentContext.lView;
6255
- }
6403
+ const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;
6256
6404
  // the edge of the app was also reached here through another means
6257
6405
  // (maybe because the DOM was changed manually).
6258
6406
  if (!lView) {
@@ -6275,14 +6423,7 @@ function getLContext(target) {
6275
6423
  * Creates an empty instance of a `LContext` context
6276
6424
  */
6277
6425
  function createLContext(lView, nodeIndex, native) {
6278
- return {
6279
- lView,
6280
- nodeIndex,
6281
- native,
6282
- component: undefined,
6283
- directives: undefined,
6284
- localRefs: undefined,
6285
- };
6426
+ return new LContext(lView[ID], nodeIndex, native);
6286
6427
  }
6287
6428
  /**
6288
6429
  * Takes a component instance and returns the view for that component.
@@ -6291,21 +6432,24 @@ function createLContext(lView, nodeIndex, native) {
6291
6432
  * @returns The component's view
6292
6433
  */
6293
6434
  function getComponentViewByInstance(componentInstance) {
6294
- let lView = readPatchedData(componentInstance);
6295
- let view;
6296
- if (Array.isArray(lView)) {
6297
- const nodeIndex = findViaComponent(lView, componentInstance);
6298
- view = getComponentLViewByIndex(nodeIndex, lView);
6299
- const context = createLContext(lView, nodeIndex, view[HOST]);
6435
+ let patchedData = readPatchedData(componentInstance);
6436
+ let lView;
6437
+ if (isLView(patchedData)) {
6438
+ const contextLView = patchedData;
6439
+ const nodeIndex = findViaComponent(contextLView, componentInstance);
6440
+ lView = getComponentLViewByIndex(nodeIndex, contextLView);
6441
+ const context = createLContext(contextLView, nodeIndex, lView[HOST]);
6300
6442
  context.component = componentInstance;
6301
6443
  attachPatchData(componentInstance, context);
6302
6444
  attachPatchData(context.native, context);
6303
6445
  }
6304
6446
  else {
6305
- const context = lView;
6306
- view = getComponentLViewByIndex(context.nodeIndex, context.lView);
6447
+ const context = patchedData;
6448
+ const contextLView = context.lView;
6449
+ ngDevMode && assertLView(contextLView);
6450
+ lView = getComponentLViewByIndex(context.nodeIndex, contextLView);
6307
6451
  }
6308
- return view;
6452
+ return lView;
6309
6453
  }
6310
6454
  /**
6311
6455
  * This property will be monkey-patched on elements, components and directives.
@@ -6317,7 +6461,16 @@ const MONKEY_PATCH_KEY_NAME = '__ngContext__';
6317
6461
  */
6318
6462
  function attachPatchData(target, data) {
6319
6463
  ngDevMode && assertDefined(target, 'Target expected');
6320
- target[MONKEY_PATCH_KEY_NAME] = data;
6464
+ // Only attach the ID of the view in order to avoid memory leaks (see #41047). We only do this
6465
+ // for `LView`, because we have control over when an `LView` is created and destroyed, whereas
6466
+ // we can't know when to remove an `LContext`.
6467
+ if (isLView(data)) {
6468
+ target[MONKEY_PATCH_KEY_NAME] = data[ID];
6469
+ registerLView(data);
6470
+ }
6471
+ else {
6472
+ target[MONKEY_PATCH_KEY_NAME] = data;
6473
+ }
6321
6474
  }
6322
6475
  /**
6323
6476
  * Returns the monkey-patch value data present on the target (which could be
@@ -6325,12 +6478,13 @@ function attachPatchData(target, data) {
6325
6478
  */
6326
6479
  function readPatchedData(target) {
6327
6480
  ngDevMode && assertDefined(target, 'Target expected');
6328
- return target[MONKEY_PATCH_KEY_NAME] || null;
6481
+ const data = target[MONKEY_PATCH_KEY_NAME];
6482
+ return (typeof data === 'number') ? getLViewById(data) : data || null;
6329
6483
  }
6330
6484
  function readPatchedLView(target) {
6331
6485
  const value = readPatchedData(target);
6332
6486
  if (value) {
6333
- return Array.isArray(value) ? value : value.lView;
6487
+ return isLView(value) ? value : value.lView;
6334
6488
  }
6335
6489
  return null;
6336
6490
  }
@@ -7277,6 +7431,8 @@ function cleanUpView(tView, lView) {
7277
7431
  lQueries.detachView(tView);
7278
7432
  }
7279
7433
  }
7434
+ // Unregister the view once everything else has been cleaned up.
7435
+ unregisterLView(lView);
7280
7436
  }
7281
7437
  }
7282
7438
  /** Removes listeners and unsubscribes from output subscriptions */
@@ -8994,7 +9150,7 @@ class LViewDebug {
8994
9150
  attached: !!(flags & 128 /* Attached */),
8995
9151
  destroyed: !!(flags & 256 /* Destroyed */),
8996
9152
  isRoot: !!(flags & 512 /* IsRoot */),
8997
- indexWithinInitPhase: flags >> 11 /* IndexWithinInitPhaseShift */,
9153
+ indexWithinInitPhase: flags >> 12 /* IndexWithinInitPhaseShift */,
8998
9154
  };
8999
9155
  }
9000
9156
  get parent() {
@@ -9057,6 +9213,9 @@ class LViewDebug {
9057
9213
  get tHost() {
9058
9214
  return this._raw_lView[T_HOST];
9059
9215
  }
9216
+ get id() {
9217
+ return this._raw_lView[ID];
9218
+ }
9060
9219
  get decls() {
9061
9220
  return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
9062
9221
  }
@@ -9286,10 +9445,14 @@ function renderChildComponents(hostLView, components) {
9286
9445
  renderComponent$1(hostLView, components[i]);
9287
9446
  }
9288
9447
  }
9289
- function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
9448
+ function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector, embeddedViewInjector) {
9290
9449
  const lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
9291
9450
  lView[HOST] = host;
9292
9451
  lView[FLAGS] = flags | 4 /* CreationMode */ | 128 /* Attached */ | 8 /* FirstLViewPass */;
9452
+ if (embeddedViewInjector !== null ||
9453
+ (parentLView && (parentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */))) {
9454
+ lView[FLAGS] |= 2048 /* HasEmbeddedViewInjector */;
9455
+ }
9293
9456
  resetPreOrderHookFlags(lView);
9294
9457
  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
9295
9458
  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
@@ -9301,6 +9464,8 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, render
9301
9464
  lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
9302
9465
  lView[INJECTOR$1] = injector || parentLView && parentLView[INJECTOR$1] || null;
9303
9466
  lView[T_HOST] = tHostNode;
9467
+ lView[ID] = getUniqueLViewId();
9468
+ lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
9304
9469
  ngDevMode &&
9305
9470
  assertEqual(tView.type == 2 /* Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
9306
9471
  lView[DECLARATION_COMPONENT_VIEW] =
@@ -10309,7 +10474,6 @@ function instantiateAllDirectives(tView, lView, tNode, native) {
10309
10474
  function invokeDirectivesHostBindings(tView, lView, tNode) {
10310
10475
  const start = tNode.directiveStart;
10311
10476
  const end = tNode.directiveEnd;
10312
- const firstCreatePass = tView.firstCreatePass;
10313
10477
  const elementIndex = tNode.index;
10314
10478
  const currentDirectiveIndex = getCurrentDirectiveIndex();
10315
10479
  try {
@@ -10456,7 +10620,7 @@ function addComponentLogic(lView, hostTNode, def) {
10456
10620
  // Only component views should be added to the view tree directly. Embedded views are
10457
10621
  // accessed through their containers because they may be removed / re-added later.
10458
10622
  const rendererFactory = lView[RENDERER_FACTORY];
10459
- const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null));
10623
+ const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null, null));
10460
10624
  // Component view will always be created before any injected LContainers,
10461
10625
  // so this is a regular element, wrap it with the component view
10462
10626
  lView[hostTNode.index] = componentView;
@@ -10825,8 +10989,11 @@ function tickRootContext(rootContext) {
10825
10989
  for (let i = 0; i < rootContext.components.length; i++) {
10826
10990
  const rootComponent = rootContext.components[i];
10827
10991
  const lView = readPatchedLView(rootComponent);
10828
- const tView = lView[TVIEW];
10829
- renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
10992
+ // We might not have an `LView` if the component was destroyed.
10993
+ if (lView !== null) {
10994
+ const tView = lView[TVIEW];
10995
+ renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
10996
+ }
10830
10997
  }
10831
10998
  }
10832
10999
  function detectChangesInternal(tView, lView, context) {
@@ -11685,12 +11852,16 @@ Injector.__NG_ELEMENT_ID__ = -1 /* Injector */;
11685
11852
  * @globalApi ng
11686
11853
  */
11687
11854
  function getComponent$1(element) {
11688
- assertDomElement(element);
11855
+ ngDevMode && assertDomElement(element);
11689
11856
  const context = getLContext(element);
11690
11857
  if (context === null)
11691
11858
  return null;
11692
11859
  if (context.component === undefined) {
11693
- context.component = getComponentAtNodeIndex(context.nodeIndex, context.lView);
11860
+ const lView = context.lView;
11861
+ if (lView === null) {
11862
+ return null;
11863
+ }
11864
+ context.component = getComponentAtNodeIndex(context.nodeIndex, lView);
11694
11865
  }
11695
11866
  return context.component;
11696
11867
  }
@@ -11709,7 +11880,8 @@ function getComponent$1(element) {
11709
11880
  function getContext(element) {
11710
11881
  assertDomElement(element);
11711
11882
  const context = getLContext(element);
11712
- return context === null ? null : context.lView[CONTEXT];
11883
+ const lView = context ? context.lView : null;
11884
+ return lView === null ? null : lView[CONTEXT];
11713
11885
  }
11714
11886
  /**
11715
11887
  * Retrieves the component instance whose view contains the DOM element.
@@ -11728,11 +11900,10 @@ function getContext(element) {
11728
11900
  */
11729
11901
  function getOwningComponent(elementOrDir) {
11730
11902
  const context = getLContext(elementOrDir);
11731
- if (context === null)
11903
+ let lView = context ? context.lView : null;
11904
+ if (lView === null)
11732
11905
  return null;
11733
- let lView = context.lView;
11734
11906
  let parent;
11735
- ngDevMode && assertLView(lView);
11736
11907
  while (lView[TVIEW].type === 2 /* Embedded */ && (parent = getLViewParent(lView))) {
11737
11908
  lView = parent;
11738
11909
  }
@@ -11750,7 +11921,8 @@ function getOwningComponent(elementOrDir) {
11750
11921
  * @globalApi ng
11751
11922
  */
11752
11923
  function getRootComponents(elementOrDir) {
11753
- return [...getRootContext(elementOrDir).components];
11924
+ const lView = readPatchedLView(elementOrDir);
11925
+ return lView !== null ? [...getRootContext(lView).components] : [];
11754
11926
  }
11755
11927
  /**
11756
11928
  * Retrieves an `Injector` associated with an element, component or directive instance.
@@ -11764,10 +11936,11 @@ function getRootComponents(elementOrDir) {
11764
11936
  */
11765
11937
  function getInjector(elementOrDir) {
11766
11938
  const context = getLContext(elementOrDir);
11767
- if (context === null)
11939
+ const lView = context ? context.lView : null;
11940
+ if (lView === null)
11768
11941
  return Injector.NULL;
11769
- const tNode = context.lView[TVIEW].data[context.nodeIndex];
11770
- return new NodeInjector(tNode, context.lView);
11942
+ const tNode = lView[TVIEW].data[context.nodeIndex];
11943
+ return new NodeInjector(tNode, lView);
11771
11944
  }
11772
11945
  /**
11773
11946
  * Retrieve a set of injection tokens at a given DOM node.
@@ -11776,9 +11949,9 @@ function getInjector(elementOrDir) {
11776
11949
  */
11777
11950
  function getInjectionTokens(element) {
11778
11951
  const context = getLContext(element);
11779
- if (context === null)
11952
+ const lView = context ? context.lView : null;
11953
+ if (lView === null)
11780
11954
  return [];
11781
- const lView = context.lView;
11782
11955
  const tView = lView[TVIEW];
11783
11956
  const tNode = tView.data[context.nodeIndex];
11784
11957
  const providerTokens = [];
@@ -11828,10 +12001,10 @@ function getDirectives(node) {
11828
12001
  return [];
11829
12002
  }
11830
12003
  const context = getLContext(node);
11831
- if (context === null) {
12004
+ const lView = context ? context.lView : null;
12005
+ if (lView === null) {
11832
12006
  return [];
11833
12007
  }
11834
- const lView = context.lView;
11835
12008
  const tView = lView[TVIEW];
11836
12009
  const nodeIndex = context.nodeIndex;
11837
12010
  if (!(tView === null || tView === void 0 ? void 0 : tView.data[nodeIndex])) {
@@ -11891,7 +12064,11 @@ function getLocalRefs(target) {
11891
12064
  if (context === null)
11892
12065
  return {};
11893
12066
  if (context.localRefs === undefined) {
11894
- context.localRefs = discoverLocalRefs(context.lView, context.nodeIndex);
12067
+ const lView = context.lView;
12068
+ if (lView === null) {
12069
+ return {};
12070
+ }
12071
+ context.localRefs = discoverLocalRefs(lView, context.nodeIndex);
11895
12072
  }
11896
12073
  return context.localRefs || {};
11897
12074
  }
@@ -11955,11 +12132,11 @@ function getRenderedText(component) {
11955
12132
  * @globalApi ng
11956
12133
  */
11957
12134
  function getListeners(element) {
11958
- assertDomElement(element);
12135
+ ngDevMode && assertDomElement(element);
11959
12136
  const lContext = getLContext(element);
11960
- if (lContext === null)
12137
+ const lView = lContext === null ? null : lContext.lView;
12138
+ if (lView === null)
11961
12139
  return [];
11962
- const lView = lContext.lView;
11963
12140
  const tView = lView[TVIEW];
11964
12141
  const lCleanup = lView[CLEANUP];
11965
12142
  const tCleanup = tView.cleanup;
@@ -12010,10 +12187,10 @@ function getDebugNode$1(element) {
12010
12187
  throw new Error('Expecting instance of DOM Element');
12011
12188
  }
12012
12189
  const lContext = getLContext(element);
12013
- if (lContext === null) {
12190
+ const lView = lContext ? lContext.lView : null;
12191
+ if (lView === null) {
12014
12192
  return null;
12015
12193
  }
12016
- const lView = lContext.lView;
12017
12194
  const nodeIndex = lContext.nodeIndex;
12018
12195
  if (nodeIndex !== -1) {
12019
12196
  const valueInLView = lView[nodeIndex];
@@ -12038,6 +12215,7 @@ function getComponentLView(target) {
12038
12215
  const lContext = getLContext(target);
12039
12216
  const nodeIndx = lContext.nodeIndex;
12040
12217
  const lView = lContext.lView;
12218
+ ngDevMode && assertLView(lView);
12041
12219
  const componentLView = lView[nodeIndx];
12042
12220
  ngDevMode && assertLView(componentLView);
12043
12221
  return componentLView;
@@ -12185,7 +12363,7 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
12185
12363
  const rootContext = createRootContext(opts.scheduler, opts.playerHandler);
12186
12364
  const renderer = rendererFactory.createRenderer(hostRNode, componentDef);
12187
12365
  const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
12188
- const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null);
12366
+ const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null, null);
12189
12367
  enterView(rootView);
12190
12368
  let component;
12191
12369
  try {
@@ -12240,7 +12418,7 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
12240
12418
  }
12241
12419
  }
12242
12420
  const viewRenderer = rendererFactory.createRenderer(rNode, def);
12243
- const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null);
12421
+ const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null, null);
12244
12422
  if (tView.firstCreatePass) {
12245
12423
  diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
12246
12424
  markAsComponentHost(tView, tNode);
@@ -14492,6 +14670,7 @@ function elementStartFirstCreatePass(index, tView, lView, native, name, attrsInd
14492
14670
  * @param name Name of the DOM Node
14493
14671
  * @param attrsIndex Index of the element's attributes in the `consts` array.
14494
14672
  * @param localRefsIndex Index of the element's local references in the `consts` array.
14673
+ * @returns This function returns itself so that it may be chained.
14495
14674
  *
14496
14675
  * Attributes and localRefs are passed as an array of strings where elements with an even index
14497
14676
  * hold an attribute name and elements with an odd index hold an attribute value, ex.:
@@ -14543,9 +14722,11 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
14543
14722
  if (localRefsIndex !== null) {
14544
14723
  saveResolvedLocalsInData(lView, tNode);
14545
14724
  }
14725
+ return ɵɵelementStart;
14546
14726
  }
14547
14727
  /**
14548
14728
  * Mark the end of the element.
14729
+ * @returns This function returns itself so that it may be chained.
14549
14730
  *
14550
14731
  * @codeGenApi
14551
14732
  */
@@ -14576,6 +14757,7 @@ function ɵɵelementEnd() {
14576
14757
  if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
14577
14758
  setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
14578
14759
  }
14760
+ return ɵɵelementEnd;
14579
14761
  }
14580
14762
  /**
14581
14763
  * Creates an empty element using {@link elementStart} and {@link elementEnd}
@@ -14584,12 +14766,14 @@ function ɵɵelementEnd() {
14584
14766
  * @param name Name of the DOM Node
14585
14767
  * @param attrsIndex Index of the element's attributes in the `consts` array.
14586
14768
  * @param localRefsIndex Index of the element's local references in the `consts` array.
14769
+ * @returns This function returns itself so that it may be chained.
14587
14770
  *
14588
14771
  * @codeGenApi
14589
14772
  */
14590
14773
  function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
14591
14774
  ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
14592
14775
  ɵɵelementEnd();
14776
+ return ɵɵelement;
14593
14777
  }
14594
14778
  function logUnknownElementError(tView, element, tNode, hasDirectives) {
14595
14779
  const schemas = tView.schemas;
@@ -14658,6 +14842,7 @@ function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, l
14658
14842
  * @param index Index of the element in the LView array
14659
14843
  * @param attrsIndex Index of the container attributes in the `consts` array.
14660
14844
  * @param localRefsIndex Index of the container's local references in the `consts` array.
14845
+ * @returns This function returns itself so that it may be chained.
14661
14846
  *
14662
14847
  * Even if this instruction accepts a set of attributes no actual attribute values are propagated to
14663
14848
  * the DOM (as a comment node can't have attributes). Attributes are here only for directive
@@ -14688,9 +14873,11 @@ function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
14688
14873
  if (localRefsIndex != null) {
14689
14874
  saveResolvedLocalsInData(lView, tNode);
14690
14875
  }
14876
+ return ɵɵelementContainerStart;
14691
14877
  }
14692
14878
  /**
14693
14879
  * Mark the end of the <ng-container>.
14880
+ * @returns This function returns itself so that it may be chained.
14694
14881
  *
14695
14882
  * @codeGenApi
14696
14883
  */
@@ -14712,6 +14899,7 @@ function ɵɵelementContainerEnd() {
14712
14899
  tView.queries.elementEnd(currentTNode);
14713
14900
  }
14714
14901
  }
14902
+ return ɵɵelementContainerEnd;
14715
14903
  }
14716
14904
  /**
14717
14905
  * Creates an empty logical container using {@link elementContainerStart}
@@ -14720,12 +14908,14 @@ function ɵɵelementContainerEnd() {
14720
14908
  * @param index Index of the element in the LView array
14721
14909
  * @param attrsIndex Index of the container attributes in the `consts` array.
14722
14910
  * @param localRefsIndex Index of the container's local references in the `consts` array.
14911
+ * @returns This function returns itself so that it may be chained.
14723
14912
  *
14724
14913
  * @codeGenApi
14725
14914
  */
14726
14915
  function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
14727
14916
  ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
14728
14917
  ɵɵelementContainerEnd();
14918
+ return ɵɵelementContainer;
14729
14919
  }
14730
14920
 
14731
14921
  /**
@@ -21076,7 +21266,7 @@ class Version {
21076
21266
  /**
21077
21267
  * @publicApi
21078
21268
  */
21079
- const VERSION = new Version('14.0.0-next.2');
21269
+ const VERSION = new Version('14.0.0-next.5');
21080
21270
 
21081
21271
  /**
21082
21272
  * @license
@@ -21482,29 +21672,27 @@ function getNamespace(elementName) {
21482
21672
  return name === 'svg' ? SVG_NAMESPACE : (name === 'math' ? MATH_ML_NAMESPACE : null);
21483
21673
  }
21484
21674
  /**
21485
- * A change detection scheduler token for {@link RootContext}. This token is the default value used
21486
- * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.
21675
+ * Injector that looks up a value using a specific injector, before falling back to the module
21676
+ * injector. Used primarily when creating components or embedded views dynamically.
21487
21677
  */
21488
- const SCHEDULER = new InjectionToken('SCHEDULER_TOKEN', {
21489
- providedIn: 'root',
21490
- factory: () => defaultScheduler,
21491
- });
21492
- function createChainedInjector(rootViewInjector, moduleInjector) {
21493
- return {
21494
- get: (token, notFoundValue, flags) => {
21495
- const value = rootViewInjector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
21496
- if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
21497
- notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
21498
- // Return the value from the root element injector when
21499
- // - it provides it
21500
- // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21501
- // - the module injector should not be checked
21502
- // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21503
- return value;
21504
- }
21505
- return moduleInjector.get(token, notFoundValue, flags);
21678
+ class ChainedInjector {
21679
+ constructor(injector, parentInjector) {
21680
+ this.injector = injector;
21681
+ this.parentInjector = parentInjector;
21682
+ }
21683
+ get(token, notFoundValue, flags) {
21684
+ const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
21685
+ if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
21686
+ notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
21687
+ // Return the value from the root element injector when
21688
+ // - it provides it
21689
+ // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21690
+ // - the module injector should not be checked
21691
+ // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21692
+ return value;
21506
21693
  }
21507
- };
21694
+ return this.parentInjector.get(token, notFoundValue, flags);
21695
+ }
21508
21696
  }
21509
21697
  /**
21510
21698
  * Render3 implementation of {@link viewEngine_ComponentFactory}.
@@ -21532,7 +21720,7 @@ class ComponentFactory extends ComponentFactory$1 {
21532
21720
  }
21533
21721
  create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
21534
21722
  ngModule = ngModule || this.ngModule;
21535
- const rootViewInjector = ngModule ? createChainedInjector(injector, ngModule.injector) : injector;
21723
+ const rootViewInjector = ngModule ? new ChainedInjector(injector, ngModule.injector) : injector;
21536
21724
  const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
21537
21725
  const sanitizer = rootViewInjector.get(Sanitizer, null);
21538
21726
  const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
@@ -21547,7 +21735,7 @@ class ComponentFactory extends ComponentFactory$1 {
21547
21735
  const rootContext = createRootContext();
21548
21736
  // Create the root view. Uses empty TView and ContentTemplate.
21549
21737
  const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
21550
- const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector);
21738
+ const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector, null);
21551
21739
  // rootView is the parent when bootstrapping
21552
21740
  // TODO(misko): it looks like we are entering view here but we don't really need to as
21553
21741
  // `renderView` does that. However as the code is written it is needed because
@@ -22668,9 +22856,9 @@ const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
22668
22856
  this._declarationTContainer = _declarationTContainer;
22669
22857
  this.elementRef = elementRef;
22670
22858
  }
22671
- createEmbeddedView(context) {
22859
+ createEmbeddedView(context, injector) {
22672
22860
  const embeddedTView = this._declarationTContainer.tViews;
22673
- const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null);
22861
+ const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null, injector || null);
22674
22862
  const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
22675
22863
  ngDevMode && assertLContainer(declarationLContainer);
22676
22864
  embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
@@ -22786,8 +22974,17 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22786
22974
  get length() {
22787
22975
  return this._lContainer.length - CONTAINER_HEADER_OFFSET;
22788
22976
  }
22789
- createEmbeddedView(templateRef, context, index) {
22790
- const viewRef = templateRef.createEmbeddedView(context || {});
22977
+ createEmbeddedView(templateRef, context, indexOrOptions) {
22978
+ let index;
22979
+ let injector;
22980
+ if (typeof indexOrOptions === 'number') {
22981
+ index = indexOrOptions;
22982
+ }
22983
+ else if (indexOrOptions != null) {
22984
+ index = indexOrOptions.index;
22985
+ injector = indexOrOptions.injector;
22986
+ }
22987
+ const viewRef = templateRef.createEmbeddedView(context || {}, injector);
22791
22988
  this.insert(viewRef, index);
22792
22989
  return viewRef;
22793
22990
  }
@@ -22828,11 +23025,29 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22828
23025
  componentFactoryOrType :
22829
23026
  new ComponentFactory(getComponentDef(componentFactoryOrType));
22830
23027
  const contextInjector = injector || this.parentInjector;
22831
- if (!ngModuleRef && componentFactory.ngModule == null && contextInjector) {
22832
- // DO NOT REFACTOR. The code here used to have a `value || undefined` expression
22833
- // which seems to cause internal google apps to fail. This is documented in the
22834
- // following internal bug issue: go/b/142967802
22835
- const result = contextInjector.get(NgModuleRef$1, null);
23028
+ // If an `NgModuleRef` is not provided explicitly, try retrieving it from the DI tree.
23029
+ if (!ngModuleRef && componentFactory.ngModule == null) {
23030
+ // For the `ComponentFactory` case, entering this logic is very unlikely, since we expect that
23031
+ // an instance of a `ComponentFactory`, resolved via `ComponentFactoryResolver` would have an
23032
+ // `ngModule` field. This is possible in some test scenarios and potentially in some JIT-based
23033
+ // use-cases. For the `ComponentFactory` case we preserve backwards-compatibility and try
23034
+ // using a provided injector first, then fall back to the parent injector of this
23035
+ // `ViewContainerRef` instance.
23036
+ //
23037
+ // For the factory-less case, it's critical to establish a connection with the module
23038
+ // injector tree (by retrieving an instance of an `NgModuleRef` and accessing its injector),
23039
+ // so that a component can use DI tokens provided in MgModules. For this reason, we can not
23040
+ // rely on the provided injector, since it might be detached from the DI tree (for example, if
23041
+ // it was created via `Injector.create` without specifying a parent injector, or if an
23042
+ // injector is retrieved from an `NgModuleRef` created via `createNgModuleRef` using an
23043
+ // NgModule outside of a module tree). Instead, we always use `ViewContainerRef`'s parent
23044
+ // injector, which is normally connected to the DI tree, which includes module injector
23045
+ // subtree.
23046
+ const _injector = isComponentFactory ? contextInjector : this.parentInjector;
23047
+ // DO NOT REFACTOR. The code here used to have a `injector.get(NgModuleRef, null) ||
23048
+ // undefined` expression which seems to cause internal google apps to fail. This is documented
23049
+ // in the following internal bug issue: go/b/142967802
23050
+ const result = _injector.get(NgModuleRef$1, null);
22836
23051
  if (result) {
22837
23052
  ngModuleRef = result;
22838
23053
  }
@@ -24780,10 +24995,11 @@ class ApplicationInitStatus {
24780
24995
  }
24781
24996
  }
24782
24997
  ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(ɵɵinject(APP_INITIALIZER, 8)); };
24783
- ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac });
24998
+ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac, providedIn: 'root' });
24784
24999
  (function () {
24785
25000
  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
24786
- type: Injectable
25001
+ type: Injectable,
25002
+ args: [{ providedIn: 'root' }]
24787
25003
  }], function () {
24788
25004
  return [{ type: undefined, decorators: [{
24789
25005
  type: Inject,
@@ -24812,7 +25028,10 @@ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Appli
24812
25028
  *
24813
25029
  * @publicApi
24814
25030
  */
24815
- const APP_ID = new InjectionToken('AppId');
25031
+ const APP_ID = new InjectionToken('AppId', {
25032
+ providedIn: 'root',
25033
+ factory: _appIdRandomProviderFactory,
25034
+ });
24816
25035
  function _appIdRandomProviderFactory() {
24817
25036
  return `${_randomChar()}${_randomChar()}${_randomChar()}`;
24818
25037
  }
@@ -24855,6 +25074,15 @@ const APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
24855
25074
  * @publicApi
24856
25075
  */
24857
25076
  const PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
25077
+ // We keep this token here, rather than the animations package, so that modules that only care
25078
+ // about which animations module is loaded (e.g. the CDK) can retrieve it without having to
25079
+ // include extra dependencies. See #44970 for more context.
25080
+ /**
25081
+ * A [DI token](guide/glossary#di-token "DI token definition") that indicates which animations
25082
+ * module has been loaded.
25083
+ * @publicApi
25084
+ */
25085
+ const ANIMATION_MODULE_TYPE = new InjectionToken('AnimationModuleType');
24858
25086
 
24859
25087
  /**
24860
25088
  * @license
@@ -24889,6 +25117,33 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
24889
25117
  * Use of this source code is governed by an MIT-style license that can be
24890
25118
  * found in the LICENSE file at https://angular.io/license
24891
25119
  */
25120
+ /**
25121
+ * Work out the locale from the potential global properties.
25122
+ *
25123
+ * * Closure Compiler: use `goog.getLocale()`.
25124
+ * * Ivy enabled: use `$localize.locale`
25125
+ */
25126
+ function getGlobalLocale() {
25127
+ if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
25128
+ typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
25129
+ // * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
25130
+ // * In order to preserve backwards compatibility, we use Angular default value over
25131
+ // Closure Compiler's one.
25132
+ return goog.getLocale();
25133
+ }
25134
+ else {
25135
+ // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
25136
+ // COMPILE-TIME INLINER.
25137
+ //
25138
+ // * During compile time inlining of translations the expression will be replaced
25139
+ // with a string literal that is the current locale. Other forms of this expression are not
25140
+ // guaranteed to be replaced.
25141
+ //
25142
+ // * During runtime translation evaluation, the developer is required to set `$localize.locale`
25143
+ // if required, or just to provide their own `LOCALE_ID` provider.
25144
+ return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
25145
+ }
25146
+ }
24892
25147
  /**
24893
25148
  * Provide this token to set the locale of your application.
24894
25149
  * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
@@ -24911,7 +25166,10 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
24911
25166
  *
24912
25167
  * @publicApi
24913
25168
  */
24914
- const LOCALE_ID = new InjectionToken('LocaleId');
25169
+ const LOCALE_ID = new InjectionToken('LocaleId', {
25170
+ providedIn: 'root',
25171
+ factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale(),
25172
+ });
24915
25173
  /**
24916
25174
  * Provide this token to set the default currency code your application uses for
24917
25175
  * CurrencyPipe when there is no currency code passed into it. This is only used by
@@ -24950,7 +25208,10 @@ const LOCALE_ID = new InjectionToken('LocaleId');
24950
25208
  *
24951
25209
  * @publicApi
24952
25210
  */
24953
- const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode');
25211
+ const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode', {
25212
+ providedIn: 'root',
25213
+ factory: () => USD_CURRENCY_CODE,
25214
+ });
24954
25215
  /**
24955
25216
  * Use this token at bootstrap to provide the content of your translation file (`xtb`,
24956
25217
  * `xlf` or `xlf2`) when you want to translate your application in another language.
@@ -25117,10 +25378,11 @@ class Compiler {
25117
25378
  }
25118
25379
  }
25119
25380
  Compiler.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); };
25120
- Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac });
25381
+ Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac, providedIn: 'root' });
25121
25382
  (function () {
25122
25383
  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
25123
- type: Injectable
25384
+ type: Injectable,
25385
+ args: [{ providedIn: 'root' }]
25124
25386
  }], null, null);
25125
25387
  })();
25126
25388
  /**
@@ -26488,10 +26750,11 @@ class ApplicationRef {
26488
26750
  }
26489
26751
  }
26490
26752
  ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ComponentFactoryResolver$1), ɵɵinject(ApplicationInitStatus)); };
26491
- ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac });
26753
+ ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
26492
26754
  (function () {
26493
26755
  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
26494
- type: Injectable
26756
+ type: Injectable,
26757
+ args: [{ providedIn: 'root' }]
26495
26758
  }], function () { return [{ type: NgZone }, { type: Injector }, { type: ErrorHandler }, { type: ComponentFactoryResolver$1 }, { type: ApplicationInitStatus }]; }, null);
26496
26759
  })();
26497
26760
  function remove(list, el) {
@@ -26898,8 +27161,8 @@ class DebugElement extends DebugNode {
26898
27161
  */
26899
27162
  get name() {
26900
27163
  const context = getLContext(this.nativeNode);
26901
- if (context !== null) {
26902
- const lView = context.lView;
27164
+ const lView = context ? context.lView : null;
27165
+ if (lView !== null) {
26903
27166
  const tData = lView[TVIEW].data;
26904
27167
  const tNode = tData[context.nodeIndex];
26905
27168
  return tNode.value;
@@ -26922,10 +27185,10 @@ class DebugElement extends DebugNode {
26922
27185
  */
26923
27186
  get properties() {
26924
27187
  const context = getLContext(this.nativeNode);
26925
- if (context === null) {
27188
+ const lView = context ? context.lView : null;
27189
+ if (lView === null) {
26926
27190
  return {};
26927
27191
  }
26928
- const lView = context.lView;
26929
27192
  const tData = lView[TVIEW].data;
26930
27193
  const tNode = tData[context.nodeIndex];
26931
27194
  const properties = {};
@@ -26946,10 +27209,10 @@ class DebugElement extends DebugNode {
26946
27209
  return attributes;
26947
27210
  }
26948
27211
  const context = getLContext(element);
26949
- if (context === null) {
27212
+ const lView = context ? context.lView : null;
27213
+ if (lView === null) {
26950
27214
  return {};
26951
27215
  }
26952
- const lView = context.lView;
26953
27216
  const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
26954
27217
  const lowercaseTNodeAttrs = [];
26955
27218
  // For debug nodes we take the element's attribute directly from the DOM since it allows us
@@ -27143,9 +27406,10 @@ function isPrimitiveValue(value) {
27143
27406
  }
27144
27407
  function _queryAll(parentElement, predicate, matches, elementsOnly) {
27145
27408
  const context = getLContext(parentElement.nativeNode);
27146
- if (context !== null) {
27147
- const parentTNode = context.lView[TVIEW].data[context.nodeIndex];
27148
- _queryNodeChildren(parentTNode, context.lView, predicate, matches, elementsOnly, parentElement.nativeNode);
27409
+ const lView = context ? context.lView : null;
27410
+ if (lView !== null) {
27411
+ const parentTNode = lView[TVIEW].data[context.nodeIndex];
27412
+ _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
27149
27413
  }
27150
27414
  else {
27151
27415
  // If the context is null, then `parentElement` was either created with Renderer2 or native DOM
@@ -28490,102 +28754,9 @@ const _CORE_PLATFORM_PROVIDERS = [
28490
28754
  const platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDERS);
28491
28755
 
28492
28756
  /**
28493
- * @license
28494
- * Copyright Google LLC All Rights Reserved.
28495
- *
28496
- * Use of this source code is governed by an MIT-style license that can be
28497
- * found in the LICENSE file at https://angular.io/license
28498
- */
28499
- function _iterableDiffersFactory() {
28500
- return defaultIterableDiffers;
28501
- }
28502
- function _keyValueDiffersFactory() {
28503
- return defaultKeyValueDiffers;
28504
- }
28505
- function _localeFactory(locale) {
28506
- return locale || getGlobalLocale();
28507
- }
28508
- /**
28509
- * Work out the locale from the potential global properties.
28510
- *
28511
- * * Closure Compiler: use `goog.getLocale()`.
28512
- * * Ivy enabled: use `$localize.locale`
28513
- */
28514
- function getGlobalLocale() {
28515
- if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
28516
- typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
28517
- // * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
28518
- // * In order to preserve backwards compatibility, we use Angular default value over
28519
- // Closure Compiler's one.
28520
- return goog.getLocale();
28521
- }
28522
- else {
28523
- // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
28524
- // COMPILE-TIME INLINER.
28525
- //
28526
- // * During compile time inlining of translations the expression will be replaced
28527
- // with a string literal that is the current locale. Other forms of this expression are not
28528
- // guaranteed to be replaced.
28529
- //
28530
- // * During runtime translation evaluation, the developer is required to set `$localize.locale`
28531
- // if required, or just to provide their own `LOCALE_ID` provider.
28532
- return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
28533
- }
28534
- }
28535
- /**
28536
- * A built-in [dependency injection token](guide/glossary#di-token)
28537
- * that is used to configure the root injector for bootstrapping.
28538
- */
28539
- const APPLICATION_MODULE_PROVIDERS = [
28540
- {
28541
- provide: ApplicationRef,
28542
- useClass: ApplicationRef,
28543
- deps: [NgZone, Injector, ErrorHandler, ComponentFactoryResolver$1, ApplicationInitStatus]
28544
- },
28545
- { provide: SCHEDULER, deps: [NgZone], useFactory: zoneSchedulerFactory },
28546
- {
28547
- provide: ApplicationInitStatus,
28548
- useClass: ApplicationInitStatus,
28549
- deps: [[new Optional(), APP_INITIALIZER]]
28550
- },
28551
- { provide: Compiler, useClass: Compiler, deps: [] },
28552
- APP_ID_RANDOM_PROVIDER,
28553
- { provide: IterableDiffers, useFactory: _iterableDiffersFactory, deps: [] },
28554
- { provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory, deps: [] },
28555
- {
28556
- provide: LOCALE_ID,
28557
- useFactory: _localeFactory,
28558
- deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]
28559
- },
28560
- { provide: DEFAULT_CURRENCY_CODE, useValue: USD_CURRENCY_CODE },
28561
- ];
28562
- /**
28563
- * Schedule work at next available slot.
28564
- *
28565
- * In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped
28566
- * using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.
28567
- * This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.
28568
- *
28569
- * @param ngZone NgZone to use for scheduling.
28570
- */
28571
- function zoneSchedulerFactory(ngZone) {
28572
- let queue = [];
28573
- ngZone.onStable.subscribe(() => {
28574
- while (queue.length) {
28575
- queue.pop()();
28576
- }
28577
- });
28578
- return function (fn) {
28579
- queue.push(fn);
28580
- };
28581
- }
28582
- /**
28583
- * Configures the root injector for an app with
28584
- * providers of `@angular/core` dependencies that `ApplicationRef` needs
28585
- * to bootstrap components.
28586
- *
28587
28757
  * Re-exported by `BrowserModule`, which is included automatically in the root
28588
- * `AppModule` when you create a new app with the CLI `new` command.
28758
+ * `AppModule` when you create a new app with the CLI `new` command. Eagerly injects
28759
+ * `ApplicationRef` to instantiate it.
28589
28760
  *
28590
28761
  * @publicApi
28591
28762
  */
@@ -28595,11 +28766,10 @@ class ApplicationModule {
28595
28766
  }
28596
28767
  ApplicationModule.ɵfac = function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); };
28597
28768
  ApplicationModule.ɵmod = /*@__PURE__*/ ɵɵdefineNgModule({ type: ApplicationModule });
28598
- ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({ providers: APPLICATION_MODULE_PROVIDERS });
28769
+ ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({});
28599
28770
  (function () {
28600
28771
  (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
28601
- type: NgModule,
28602
- args: [{ providers: APPLICATION_MODULE_PROVIDERS }]
28772
+ type: NgModule
28603
28773
  }], function () { return [{ type: ApplicationRef }]; }, null);
28604
28774
  })();
28605
28775
 
@@ -28773,5 +28943,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
28773
28943
  * Generated bundle index. Do not edit.
28774
28944
  */
28775
28945
 
28776
- export { ANALYZE_FOR_ENTRY_COMPONENTS, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, Directive, ElementRef, EmbeddedViewRef, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertPlatform, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, inject, isDevMode, platformCore, resolveForwardRef, setTestabilityGetter, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, ChangeDetectorStatus as ɵChangeDetectorStatus, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, ViewRef$1 as ɵViewRef, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, coerceToBoolean as ɵcoerceToBoolean, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, getDebugNode as ɵgetDebugNode, getDebugNodeR2 as ɵgetDebugNodeR2, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, isBoundToModule as ɵisBoundToModule, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, isListLikeIterable as ɵisListLikeIterable, isObservable as ɵisObservable, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, ɵivyEnabled, makeDecorator as ɵmakeDecorator, markDirty as ɵmarkDirty, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, registerNgModuleType as ɵregisterNgModuleType, renderComponent as ɵrenderComponent, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setClassMetadata as ɵsetClassMetadata, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setLocaleId as ɵsetLocaleId, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, whenRendered as ɵwhenRendered, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcontentQuery, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryRefresh, ɵɵreference, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵviewQuery };
28946
+ export { ANALYZE_FOR_ENTRY_COMPONENTS, ANIMATION_MODULE_TYPE, APP_BOOTSTRAP_LISTENER, APP_ID, APP_INITIALIZER, ApplicationInitStatus, ApplicationModule, ApplicationRef, Attribute, COMPILER_OPTIONS, CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Compiler, CompilerFactory, Component, ComponentFactory$1 as ComponentFactory, ComponentFactoryResolver$1 as ComponentFactoryResolver, ComponentRef$1 as ComponentRef, ContentChild, ContentChildren, DEFAULT_CURRENCY_CODE, DebugElement, DebugEventListener, DebugNode, DefaultIterableDiffer, Directive, ElementRef, EmbeddedViewRef, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, Inject, InjectFlags, Injectable, InjectionToken, Injector, Input, IterableDiffers, KeyValueDiffers, LOCALE_ID, MissingTranslationStrategy, ModuleWithComponentFactories, NO_ERRORS_SCHEMA, NgModule, NgModuleFactory$1 as NgModuleFactory, NgModuleRef$1 as NgModuleRef, NgProbeToken, NgZone, Optional, Output, PACKAGE_ROOT_URL, PLATFORM_ID, PLATFORM_INITIALIZER, Pipe, PlatformRef, Query, QueryList, ReflectiveInjector, ReflectiveKey, Renderer2, RendererFactory2, RendererStyleFlags2, ResolvedReflectiveFactory, Sanitizer, SecurityContext, Self, SimpleChange, SkipSelf, TRANSLATIONS, TRANSLATIONS_FORMAT, TemplateRef, Testability, TestabilityRegistry, Type, VERSION, Version, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation$1 as ViewEncapsulation, ViewRef, asNativeElements, assertPlatform, createNgModuleRef, createPlatform, createPlatformFactory, defineInjectable, destroyPlatform, enableProdMode, forwardRef, getDebugNode, getModuleFactory, getNgModuleById, getPlatform, inject, isDevMode, platformCore, resolveForwardRef, setTestabilityGetter, ALLOW_MULTIPLE_PLATFORMS as ɵALLOW_MULTIPLE_PLATFORMS, APP_ID_RANDOM_PROVIDER as ɵAPP_ID_RANDOM_PROVIDER, ChangeDetectorStatus as ɵChangeDetectorStatus, ComponentFactory$1 as ɵComponentFactory, Console as ɵConsole, DEFAULT_LOCALE_ID as ɵDEFAULT_LOCALE_ID, INJECTOR_SCOPE as ɵINJECTOR_SCOPE, LContext as ɵLContext, LifecycleHooksFeature as ɵLifecycleHooksFeature, LocaleDataIndex as ɵLocaleDataIndex, NG_COMP_DEF as ɵNG_COMP_DEF, NG_DIR_DEF as ɵNG_DIR_DEF, NG_ELEMENT_ID as ɵNG_ELEMENT_ID, NG_INJ_DEF as ɵNG_INJ_DEF, NG_MOD_DEF as ɵNG_MOD_DEF, NG_PIPE_DEF as ɵNG_PIPE_DEF, NG_PROV_DEF as ɵNG_PROV_DEF, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, NO_CHANGE as ɵNO_CHANGE, NgModuleFactory as ɵNgModuleFactory, NoopNgZone as ɵNoopNgZone, ReflectionCapabilities as ɵReflectionCapabilities, ComponentFactory as ɵRender3ComponentFactory, ComponentRef as ɵRender3ComponentRef, NgModuleRef as ɵRender3NgModuleRef, RuntimeError as ɵRuntimeError, ViewRef$1 as ɵViewRef, _sanitizeHtml as ɵ_sanitizeHtml, _sanitizeUrl as ɵ_sanitizeUrl, allowSanitizationBypassAndThrow as ɵallowSanitizationBypassAndThrow, bypassSanitizationTrustHtml as ɵbypassSanitizationTrustHtml, bypassSanitizationTrustResourceUrl as ɵbypassSanitizationTrustResourceUrl, bypassSanitizationTrustScript as ɵbypassSanitizationTrustScript, bypassSanitizationTrustStyle as ɵbypassSanitizationTrustStyle, bypassSanitizationTrustUrl as ɵbypassSanitizationTrustUrl, clearResolutionOfComponentResourcesQueue as ɵclearResolutionOfComponentResourcesQueue, coerceToBoolean as ɵcoerceToBoolean, compileComponent as ɵcompileComponent, compileDirective as ɵcompileDirective, compileNgModule as ɵcompileNgModule, compileNgModuleDefs as ɵcompileNgModuleDefs, compileNgModuleFactory as ɵcompileNgModuleFactory, compilePipe as ɵcompilePipe, createInjector as ɵcreateInjector, defaultIterableDiffers as ɵdefaultIterableDiffers, defaultKeyValueDiffers as ɵdefaultKeyValueDiffers, detectChanges as ɵdetectChanges, devModeEqual as ɵdevModeEqual, findLocaleData as ɵfindLocaleData, flushModuleScopingQueueAsMuchAsPossible as ɵflushModuleScopingQueueAsMuchAsPossible, getDebugNode as ɵgetDebugNode, getDebugNodeR2 as ɵgetDebugNodeR2, getDirectives as ɵgetDirectives, getHostElement as ɵgetHostElement, getInjectableDef as ɵgetInjectableDef, getLContext as ɵgetLContext, getLocaleCurrencyCode as ɵgetLocaleCurrencyCode, getLocalePluralCase as ɵgetLocalePluralCase, getSanitizationBypassType as ɵgetSanitizationBypassType, _global as ɵglobal, injectChangeDetectorRef as ɵinjectChangeDetectorRef, isBoundToModule as ɵisBoundToModule, isDefaultChangeDetectionStrategy as ɵisDefaultChangeDetectionStrategy, isListLikeIterable as ɵisListLikeIterable, isObservable as ɵisObservable, isPromise as ɵisPromise, isSubscribable as ɵisSubscribable, ɵivyEnabled, makeDecorator as ɵmakeDecorator, markDirty as ɵmarkDirty, noSideEffects as ɵnoSideEffects, patchComponentDefWithScope as ɵpatchComponentDefWithScope, publishDefaultGlobalUtils$1 as ɵpublishDefaultGlobalUtils, publishGlobalUtil as ɵpublishGlobalUtil, registerLocaleData as ɵregisterLocaleData, registerNgModuleType as ɵregisterNgModuleType, renderComponent as ɵrenderComponent, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setClassMetadata as ɵsetClassMetadata, setCurrentInjector as ɵsetCurrentInjector, setDocument as ɵsetDocument, setLocaleId as ɵsetLocaleId, store as ɵstore, stringify as ɵstringify, transitiveScopesFor as ɵtransitiveScopesFor, unregisterAllLocaleData as ɵunregisterLocaleData, unwrapSafeValue as ɵunwrapSafeValue, whenRendered as ɵwhenRendered, ɵɵCopyDefinitionFeature, FactoryTarget as ɵɵFactoryTarget, ɵɵInheritDefinitionFeature, ɵɵNgOnChangesFeature, ɵɵProvidersFeature, ɵɵadvance, ɵɵattribute, ɵɵattributeInterpolate1, ɵɵattributeInterpolate2, ɵɵattributeInterpolate3, ɵɵattributeInterpolate4, ɵɵattributeInterpolate5, ɵɵattributeInterpolate6, ɵɵattributeInterpolate7, ɵɵattributeInterpolate8, ɵɵattributeInterpolateV, ɵɵclassMap, ɵɵclassMapInterpolate1, ɵɵclassMapInterpolate2, ɵɵclassMapInterpolate3, ɵɵclassMapInterpolate4, ɵɵclassMapInterpolate5, ɵɵclassMapInterpolate6, ɵɵclassMapInterpolate7, ɵɵclassMapInterpolate8, ɵɵclassMapInterpolateV, ɵɵclassProp, ɵɵcontentQuery, ɵɵdefineComponent, ɵɵdefineDirective, ɵɵdefineInjectable, ɵɵdefineInjector, ɵɵdefineNgModule, ɵɵdefinePipe, ɵɵdirectiveInject, ɵɵdisableBindings, ɵɵelement, ɵɵelementContainer, ɵɵelementContainerEnd, ɵɵelementContainerStart, ɵɵelementEnd, ɵɵelementStart, ɵɵenableBindings, ɵɵgetCurrentView, ɵɵgetInheritedFactory, ɵɵhostProperty, ɵɵi18n, ɵɵi18nApply, ɵɵi18nAttributes, ɵɵi18nEnd, ɵɵi18nExp, ɵɵi18nPostprocess, ɵɵi18nStart, ɵɵinject, ɵɵinjectAttribute, ɵɵinvalidFactory, ɵɵinvalidFactoryDep, ɵɵlistener, ɵɵloadQuery, ɵɵnamespaceHTML, ɵɵnamespaceMathML, ɵɵnamespaceSVG, ɵɵnextContext, ɵɵngDeclareClassMetadata, ɵɵngDeclareComponent, ɵɵngDeclareDirective, ɵɵngDeclareFactory, ɵɵngDeclareInjectable, ɵɵngDeclareInjector, ɵɵngDeclareNgModule, ɵɵngDeclarePipe, ɵɵpipe, ɵɵpipeBind1, ɵɵpipeBind2, ɵɵpipeBind3, ɵɵpipeBind4, ɵɵpipeBindV, ɵɵprojection, ɵɵprojectionDef, ɵɵproperty, ɵɵpropertyInterpolate, ɵɵpropertyInterpolate1, ɵɵpropertyInterpolate2, ɵɵpropertyInterpolate3, ɵɵpropertyInterpolate4, ɵɵpropertyInterpolate5, ɵɵpropertyInterpolate6, ɵɵpropertyInterpolate7, ɵɵpropertyInterpolate8, ɵɵpropertyInterpolateV, ɵɵpureFunction0, ɵɵpureFunction1, ɵɵpureFunction2, ɵɵpureFunction3, ɵɵpureFunction4, ɵɵpureFunction5, ɵɵpureFunction6, ɵɵpureFunction7, ɵɵpureFunction8, ɵɵpureFunctionV, ɵɵqueryRefresh, ɵɵreference, ɵɵresolveBody, ɵɵresolveDocument, ɵɵresolveWindow, ɵɵrestoreView, ɵɵsanitizeHtml, ɵɵsanitizeResourceUrl, ɵɵsanitizeScript, ɵɵsanitizeStyle, ɵɵsanitizeUrl, ɵɵsanitizeUrlOrResourceUrl, ɵɵsetComponentScope, ɵɵsetNgModuleScope, ɵɵstyleMap, ɵɵstyleMapInterpolate1, ɵɵstyleMapInterpolate2, ɵɵstyleMapInterpolate3, ɵɵstyleMapInterpolate4, ɵɵstyleMapInterpolate5, ɵɵstyleMapInterpolate6, ɵɵstyleMapInterpolate7, ɵɵstyleMapInterpolate8, ɵɵstyleMapInterpolateV, ɵɵstyleProp, ɵɵstylePropInterpolate1, ɵɵstylePropInterpolate2, ɵɵstylePropInterpolate3, ɵɵstylePropInterpolate4, ɵɵstylePropInterpolate5, ɵɵstylePropInterpolate6, ɵɵstylePropInterpolate7, ɵɵstylePropInterpolate8, ɵɵstylePropInterpolateV, ɵɵsyntheticHostListener, ɵɵsyntheticHostProperty, ɵɵtemplate, ɵɵtemplateRefExtractor, ɵɵtext, ɵɵtextInterpolate, ɵɵtextInterpolate1, ɵɵtextInterpolate2, ɵɵtextInterpolate3, ɵɵtextInterpolate4, ɵɵtextInterpolate5, ɵɵtextInterpolate6, ɵɵtextInterpolate7, ɵɵtextInterpolate8, ɵɵtextInterpolateV, ɵɵtrustConstantHtml, ɵɵtrustConstantResourceUrl, ɵɵviewQuery };
28777
28947
  //# sourceMappingURL=core.mjs.map