@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/fesm2020/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
  */
@@ -1172,6 +1172,8 @@ const DECLARATION_COMPONENT_VIEW = 16;
1172
1172
  const DECLARATION_LCONTAINER = 17;
1173
1173
  const PREORDER_HOOK_FLAGS = 18;
1174
1174
  const QUERIES = 19;
1175
+ const ID = 20;
1176
+ const EMBEDDED_VIEW_INJECTOR = 21;
1175
1177
  /**
1176
1178
  * Size of LView's header. Necessary to adjust for it when setting slots.
1177
1179
  *
@@ -1179,7 +1181,7 @@ const QUERIES = 19;
1179
1181
  * instruction index into `LView` index. All other indexes should be in the `LView` index space and
1180
1182
  * there should be no need to refer to `HEADER_OFFSET` anywhere else.
1181
1183
  */
1182
- const HEADER_OFFSET = 20;
1184
+ const HEADER_OFFSET = 22;
1183
1185
  /**
1184
1186
  * Converts `TViewType` into human readable text.
1185
1187
  * Make sure this matches with `TViewType`
@@ -2474,7 +2476,7 @@ function incrementInitPhaseFlags(lView, initPhase) {
2474
2476
  assertNotEqual(initPhase, 3 /* InitPhaseCompleted */, 'Init hooks phase should not be incremented after all init hooks have been run.');
2475
2477
  let flags = lView[FLAGS];
2476
2478
  if ((flags & 3 /* InitPhaseStateMask */) === initPhase) {
2477
- flags &= 2047 /* IndexWithinInitPhaseReset */;
2479
+ flags &= 4095 /* IndexWithinInitPhaseReset */;
2478
2480
  flags += 1 /* InitPhaseStateIncrementer */;
2479
2481
  lView[FLAGS] = flags;
2480
2482
  }
@@ -2538,12 +2540,12 @@ function callHook(currentView, initPhase, arr, i) {
2538
2540
  const directiveIndex = isInitHook ? -arr[i] : arr[i];
2539
2541
  const directive = currentView[directiveIndex];
2540
2542
  if (isInitHook) {
2541
- const indexWithintInitPhase = currentView[FLAGS] >> 11 /* IndexWithinInitPhaseShift */;
2543
+ const indexWithintInitPhase = currentView[FLAGS] >> 12 /* IndexWithinInitPhaseShift */;
2542
2544
  // The init phase state must be always checked here as it may have been recursively updated.
2543
2545
  if (indexWithintInitPhase <
2544
2546
  (currentView[PREORDER_HOOK_FLAGS] >> 16 /* NumberOfInitHooksCalledShift */) &&
2545
2547
  (currentView[FLAGS] & 3 /* InitPhaseStateMask */) === initPhase) {
2546
- currentView[FLAGS] += 2048 /* IndexWithinInitPhaseIncrementer */;
2548
+ currentView[FLAGS] += 4096 /* IndexWithinInitPhaseIncrementer */;
2547
2549
  profiler(4 /* LifecycleHookStart */, directive, hook);
2548
2550
  try {
2549
2551
  hook.call(directive);
@@ -3104,6 +3106,8 @@ const BLOOM_MASK = BLOOM_SIZE - 1;
3104
3106
  const BLOOM_BUCKET_BITS = 5;
3105
3107
  /** Counter used to generate unique IDs for directives. */
3106
3108
  let nextNgElementId = 0;
3109
+ /** Value used when something wasn't found by an injector. */
3110
+ const NOT_FOUND = {};
3107
3111
  /**
3108
3112
  * Registers this directive as present in its node's injector by flipping the directive's
3109
3113
  * corresponding bit in the injector's bloom filter.
@@ -3215,23 +3219,7 @@ function getParentInjectorLocation(tNode, lView) {
3215
3219
  // `LView` hierarchy and look for it. If we walk of the top, that means that there is no parent
3216
3220
  // `NodeInjector`.
3217
3221
  while (lViewCursor !== null) {
3218
- // First determine the `parentTNode` location. The parent pointer differs based on `TView.type`.
3219
- const tView = lViewCursor[TVIEW];
3220
- const tViewType = tView.type;
3221
- if (tViewType === 2 /* Embedded */) {
3222
- ngDevMode &&
3223
- assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
3224
- parentTNode = tView.declTNode;
3225
- }
3226
- else if (tViewType === 1 /* Component */) {
3227
- // Components don't have `TView.declTNode` because each instance of component could be
3228
- // inserted in different location, hence `TView.declTNode` is meaningless.
3229
- parentTNode = lViewCursor[T_HOST];
3230
- }
3231
- else {
3232
- ngDevMode && assertEqual(tView.type, 0 /* Root */, 'Root type expected');
3233
- parentTNode = null;
3234
- }
3222
+ parentTNode = getTNodeFromLView(lViewCursor);
3235
3223
  if (parentTNode === null) {
3236
3224
  // If we have no parent, than we are done.
3237
3225
  return NO_PARENT_INJECTOR;
@@ -3392,93 +3380,116 @@ function lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue) {
3392
3380
  */
3393
3381
  function getOrCreateInjectable(tNode, lView, token, flags = InjectFlags.Default, notFoundValue) {
3394
3382
  if (tNode !== null) {
3395
- const bloomHash = bloomHashBitOrFactory(token);
3396
- // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
3397
- // so just call the factory function to create it.
3398
- if (typeof bloomHash === 'function') {
3399
- if (!enterDI(lView, tNode, flags)) {
3400
- // Failed to enter DI, try module injector instead. If a token is injected with the @Host
3401
- // flag, the module injector is not searched for that token in Ivy.
3402
- return (flags & InjectFlags.Host) ?
3403
- notFoundValueOrThrow(notFoundValue, token, flags) :
3404
- lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3383
+ // If the view or any of its ancestors have an embedded
3384
+ // view injector, we have to look it up there first.
3385
+ if (lView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) {
3386
+ const embeddedInjectorValue = lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, NOT_FOUND);
3387
+ if (embeddedInjectorValue !== NOT_FOUND) {
3388
+ return embeddedInjectorValue;
3405
3389
  }
3406
- try {
3407
- const value = bloomHash(flags);
3408
- if (value == null && !(flags & InjectFlags.Optional)) {
3409
- throwProviderNotFoundError(token);
3410
- }
3411
- else {
3412
- return value;
3413
- }
3390
+ }
3391
+ // Otherwise try the node injector.
3392
+ const value = lookupTokenUsingNodeInjector(tNode, lView, token, flags, NOT_FOUND);
3393
+ if (value !== NOT_FOUND) {
3394
+ return value;
3395
+ }
3396
+ }
3397
+ // Finally, fall back to the module injector.
3398
+ return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3399
+ }
3400
+ /**
3401
+ * Returns the value associated to the given token from the node injector.
3402
+ *
3403
+ * @param tNode The Node where the search for the injector should start
3404
+ * @param lView The `LView` that contains the `tNode`
3405
+ * @param token The token to look for
3406
+ * @param flags Injection flags
3407
+ * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
3408
+ * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
3409
+ */
3410
+ function lookupTokenUsingNodeInjector(tNode, lView, token, flags, notFoundValue) {
3411
+ const bloomHash = bloomHashBitOrFactory(token);
3412
+ // If the ID stored here is a function, this is a special object like ElementRef or TemplateRef
3413
+ // so just call the factory function to create it.
3414
+ if (typeof bloomHash === 'function') {
3415
+ if (!enterDI(lView, tNode, flags)) {
3416
+ // Failed to enter DI, try module injector instead. If a token is injected with the @Host
3417
+ // flag, the module injector is not searched for that token in Ivy.
3418
+ return (flags & InjectFlags.Host) ?
3419
+ notFoundValueOrThrow(notFoundValue, token, flags) :
3420
+ lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3421
+ }
3422
+ try {
3423
+ const value = bloomHash(flags);
3424
+ if (value == null && !(flags & InjectFlags.Optional)) {
3425
+ throwProviderNotFoundError(token);
3414
3426
  }
3415
- finally {
3416
- leaveDI();
3417
- }
3418
- }
3419
- else if (typeof bloomHash === 'number') {
3420
- // A reference to the previous injector TView that was found while climbing the element
3421
- // injector tree. This is used to know if viewProviders can be accessed on the current
3422
- // injector.
3423
- let previousTView = null;
3424
- let injectorIndex = getInjectorIndex(tNode, lView);
3425
- let parentLocation = NO_PARENT_INJECTOR;
3426
- let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
3427
- // If we should skip this injector, or if there is no injector on this node, start by
3428
- // searching the parent injector.
3429
- if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
3430
- parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
3431
- lView[injectorIndex + 8 /* PARENT */];
3432
- if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
3433
- injectorIndex = -1;
3434
- }
3435
- else {
3436
- previousTView = lView[TVIEW];
3437
- injectorIndex = getParentInjectorIndex(parentLocation);
3438
- lView = getParentInjectorView(parentLocation, lView);
3439
- }
3427
+ else {
3428
+ return value;
3440
3429
  }
3441
- // Traverse up the injector tree until we find a potential match or until we know there
3442
- // *isn't* a match.
3443
- while (injectorIndex !== -1) {
3444
- ngDevMode && assertNodeInjector(lView, injectorIndex);
3445
- // Check the current injector. If it matches, see if it contains token.
3446
- const tView = lView[TVIEW];
3447
- ngDevMode &&
3448
- assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
3449
- if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
3450
- // At this point, we have an injector which *may* contain the token, so we step through
3451
- // the providers and directives associated with the injector's corresponding node to get
3452
- // the instance.
3453
- const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
3454
- if (instance !== NOT_FOUND) {
3455
- return instance;
3456
- }
3457
- }
3458
- parentLocation = lView[injectorIndex + 8 /* PARENT */];
3459
- if (parentLocation !== NO_PARENT_INJECTOR &&
3460
- shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
3461
- bloomHasToken(bloomHash, injectorIndex, lView)) {
3462
- // The def wasn't found anywhere on this node, so it was a false positive.
3463
- // Traverse up the tree and continue searching.
3464
- previousTView = tView;
3465
- injectorIndex = getParentInjectorIndex(parentLocation);
3466
- lView = getParentInjectorView(parentLocation, lView);
3467
- }
3468
- else {
3469
- // If we should not search parent OR If the ancestor bloom filter value does not have the
3470
- // bit corresponding to the directive we can give up on traversing up to find the specific
3471
- // injector.
3472
- injectorIndex = -1;
3430
+ }
3431
+ finally {
3432
+ leaveDI();
3433
+ }
3434
+ }
3435
+ else if (typeof bloomHash === 'number') {
3436
+ // A reference to the previous injector TView that was found while climbing the element
3437
+ // injector tree. This is used to know if viewProviders can be accessed on the current
3438
+ // injector.
3439
+ let previousTView = null;
3440
+ let injectorIndex = getInjectorIndex(tNode, lView);
3441
+ let parentLocation = NO_PARENT_INJECTOR;
3442
+ let hostTElementNode = flags & InjectFlags.Host ? lView[DECLARATION_COMPONENT_VIEW][T_HOST] : null;
3443
+ // If we should skip this injector, or if there is no injector on this node, start by
3444
+ // searching the parent injector.
3445
+ if (injectorIndex === -1 || flags & InjectFlags.SkipSelf) {
3446
+ parentLocation = injectorIndex === -1 ? getParentInjectorLocation(tNode, lView) :
3447
+ lView[injectorIndex + 8 /* PARENT */];
3448
+ if (parentLocation === NO_PARENT_INJECTOR || !shouldSearchParent(flags, false)) {
3449
+ injectorIndex = -1;
3450
+ }
3451
+ else {
3452
+ previousTView = lView[TVIEW];
3453
+ injectorIndex = getParentInjectorIndex(parentLocation);
3454
+ lView = getParentInjectorView(parentLocation, lView);
3455
+ }
3456
+ }
3457
+ // Traverse up the injector tree until we find a potential match or until we know there
3458
+ // *isn't* a match.
3459
+ while (injectorIndex !== -1) {
3460
+ ngDevMode && assertNodeInjector(lView, injectorIndex);
3461
+ // Check the current injector. If it matches, see if it contains token.
3462
+ const tView = lView[TVIEW];
3463
+ ngDevMode &&
3464
+ assertTNodeForLView(tView.data[injectorIndex + 8 /* TNODE */], lView);
3465
+ if (bloomHasToken(bloomHash, injectorIndex, tView.data)) {
3466
+ // At this point, we have an injector which *may* contain the token, so we step through
3467
+ // the providers and directives associated with the injector's corresponding node to get
3468
+ // the instance.
3469
+ const instance = searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode);
3470
+ if (instance !== NOT_FOUND) {
3471
+ return instance;
3473
3472
  }
3474
3473
  }
3474
+ parentLocation = lView[injectorIndex + 8 /* PARENT */];
3475
+ if (parentLocation !== NO_PARENT_INJECTOR &&
3476
+ shouldSearchParent(flags, lView[TVIEW].data[injectorIndex + 8 /* TNODE */] === hostTElementNode) &&
3477
+ bloomHasToken(bloomHash, injectorIndex, lView)) {
3478
+ // The def wasn't found anywhere on this node, so it was a false positive.
3479
+ // Traverse up the tree and continue searching.
3480
+ previousTView = tView;
3481
+ injectorIndex = getParentInjectorIndex(parentLocation);
3482
+ lView = getParentInjectorView(parentLocation, lView);
3483
+ }
3484
+ else {
3485
+ // If we should not search parent OR If the ancestor bloom filter value does not have the
3486
+ // bit corresponding to the directive we can give up on traversing up to find the specific
3487
+ // injector.
3488
+ injectorIndex = -1;
3489
+ }
3475
3490
  }
3476
3491
  }
3477
- return lookupTokenUsingModuleInjector(lView, token, flags, notFoundValue);
3478
- }
3479
- const NOT_FOUND = {};
3480
- function createNodeInjector() {
3481
- return new NodeInjector(getCurrentTNode(), getLView());
3492
+ return notFoundValue;
3482
3493
  }
3483
3494
  function searchTokensOnInjector(injectorIndex, lView, token, previousTView, flags, hostTElementNode) {
3484
3495
  const currentTView = lView[TVIEW];
@@ -3652,6 +3663,10 @@ class NodeInjector {
3652
3663
  return getOrCreateInjectable(this._tNode, this._lView, token, flags, notFoundValue);
3653
3664
  }
3654
3665
  }
3666
+ /** Creates a `NodeInjector` for the current node. */
3667
+ function createNodeInjector() {
3668
+ return new NodeInjector(getCurrentTNode(), getLView());
3669
+ }
3655
3670
  /**
3656
3671
  * @codeGenApi
3657
3672
  */
@@ -3690,6 +3705,73 @@ function getFactoryOf(type) {
3690
3705
  }
3691
3706
  return getFactoryDef(type);
3692
3707
  }
3708
+ /**
3709
+ * Returns a value from the closest embedded or node injector.
3710
+ *
3711
+ * @param tNode The Node where the search for the injector should start
3712
+ * @param lView The `LView` that contains the `tNode`
3713
+ * @param token The token to look for
3714
+ * @param flags Injection flags
3715
+ * @param notFoundValue The value to return when the injection flags is `InjectFlags.Optional`
3716
+ * @returns the value from the injector, `null` when not found, or `notFoundValue` if provided
3717
+ */
3718
+ function lookupTokenUsingEmbeddedInjector(tNode, lView, token, flags, notFoundValue) {
3719
+ let currentTNode = tNode;
3720
+ let currentLView = lView;
3721
+ // When an LView with an embedded view injector is inserted, it'll likely be interlaced with
3722
+ // nodes who may have injectors (e.g. node injector -> embedded view injector -> node injector).
3723
+ // Since the bloom filters for the node injectors have already been constructed and we don't
3724
+ // have a way of extracting the records from an injector, the only way to maintain the correct
3725
+ // hierarchy when resolving the value is to walk it node-by-node while attempting to resolve
3726
+ // the token at each level.
3727
+ while (currentTNode !== null && currentLView !== null &&
3728
+ (currentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */) &&
3729
+ !(currentLView[FLAGS] & 512 /* IsRoot */)) {
3730
+ ngDevMode && assertTNodeForLView(currentTNode, currentLView);
3731
+ // Note that this lookup on the node injector is using the `Self` flag, because
3732
+ // we don't want the node injector to look at any parent injectors since we
3733
+ // may hit the embedded view injector first.
3734
+ const nodeInjectorValue = lookupTokenUsingNodeInjector(currentTNode, currentLView, token, flags | InjectFlags.Self, NOT_FOUND);
3735
+ if (nodeInjectorValue !== NOT_FOUND) {
3736
+ return nodeInjectorValue;
3737
+ }
3738
+ // Has an explicit type due to a TS bug: https://github.com/microsoft/TypeScript/issues/33191
3739
+ let parentTNode = currentTNode.parent;
3740
+ // `TNode.parent` includes the parent within the current view only. If it doesn't exist,
3741
+ // it means that we've hit the view boundary and we need to go up to the next view.
3742
+ if (!parentTNode) {
3743
+ // Before we go to the next LView, check if the token exists on the current embedded injector.
3744
+ const embeddedViewInjector = currentLView[EMBEDDED_VIEW_INJECTOR];
3745
+ if (embeddedViewInjector) {
3746
+ const embeddedViewInjectorValue = embeddedViewInjector.get(token, NOT_FOUND, flags);
3747
+ if (embeddedViewInjectorValue !== NOT_FOUND) {
3748
+ return embeddedViewInjectorValue;
3749
+ }
3750
+ }
3751
+ // Otherwise keep going up the tree.
3752
+ parentTNode = getTNodeFromLView(currentLView);
3753
+ currentLView = currentLView[DECLARATION_VIEW];
3754
+ }
3755
+ currentTNode = parentTNode;
3756
+ }
3757
+ return notFoundValue;
3758
+ }
3759
+ /** Gets the TNode associated with an LView inside of the declaration view. */
3760
+ function getTNodeFromLView(lView) {
3761
+ const tView = lView[TVIEW];
3762
+ const tViewType = tView.type;
3763
+ // The parent pointer differs based on `TView.type`.
3764
+ if (tViewType === 2 /* Embedded */) {
3765
+ ngDevMode && assertDefined(tView.declTNode, 'Embedded TNodes should have declaration parents.');
3766
+ return tView.declTNode;
3767
+ }
3768
+ else if (tViewType === 1 /* Component */) {
3769
+ // Components don't have `TView.declTNode` because each instance of component could be
3770
+ // inserted in different location, hence `TView.declTNode` is meaningless.
3771
+ return lView[T_HOST];
3772
+ }
3773
+ return null;
3774
+ }
3693
3775
 
3694
3776
  /**
3695
3777
  * @license
@@ -6170,6 +6252,78 @@ function getSanitizer() {
6170
6252
  return lView && lView[SANITIZER];
6171
6253
  }
6172
6254
 
6255
+ /**
6256
+ * @license
6257
+ * Copyright Google LLC All Rights Reserved.
6258
+ *
6259
+ * Use of this source code is governed by an MIT-style license that can be
6260
+ * found in the LICENSE file at https://angular.io/license
6261
+ */
6262
+ // Keeps track of the currently-active LViews.
6263
+ const TRACKED_LVIEWS = new Map();
6264
+ // Used for generating unique IDs for LViews.
6265
+ let uniqueIdCounter = 0;
6266
+ /** Gets a unique ID that can be assigned to an LView. */
6267
+ function getUniqueLViewId() {
6268
+ return uniqueIdCounter++;
6269
+ }
6270
+ /** Starts tracking an LView. */
6271
+ function registerLView(lView) {
6272
+ ngDevMode && assertNumber(lView[ID], 'LView must have an ID in order to be registered');
6273
+ TRACKED_LVIEWS.set(lView[ID], lView);
6274
+ }
6275
+ /** Gets an LView by its unique ID. */
6276
+ function getLViewById(id) {
6277
+ ngDevMode && assertNumber(id, 'ID used for LView lookup must be a number');
6278
+ return TRACKED_LVIEWS.get(id) || null;
6279
+ }
6280
+ /** Stops tracking an LView. */
6281
+ function unregisterLView(lView) {
6282
+ ngDevMode && assertNumber(lView[ID], 'Cannot stop tracking an LView that does not have an ID');
6283
+ TRACKED_LVIEWS.delete(lView[ID]);
6284
+ }
6285
+
6286
+ /**
6287
+ * @license
6288
+ * Copyright Google LLC All Rights Reserved.
6289
+ *
6290
+ * Use of this source code is governed by an MIT-style license that can be
6291
+ * found in the LICENSE file at https://angular.io/license
6292
+ */
6293
+ /**
6294
+ * The internal view context which is specific to a given DOM element, directive or
6295
+ * component instance. Each value in here (besides the LView and element node details)
6296
+ * can be present, null or undefined. If undefined then it implies the value has not been
6297
+ * looked up yet, otherwise, if null, then a lookup was executed and nothing was found.
6298
+ *
6299
+ * Each value will get filled when the respective value is examined within the getContext
6300
+ * function. The component, element and each directive instance will share the same instance
6301
+ * of the context.
6302
+ */
6303
+ class LContext {
6304
+ constructor(
6305
+ /**
6306
+ * ID of the component's parent view data.
6307
+ */
6308
+ lViewId,
6309
+ /**
6310
+ * The index instance of the node.
6311
+ */
6312
+ nodeIndex,
6313
+ /**
6314
+ * The instance of the DOM node that is attached to the lNode.
6315
+ */
6316
+ native) {
6317
+ this.lViewId = lViewId;
6318
+ this.nodeIndex = nodeIndex;
6319
+ this.native = native;
6320
+ }
6321
+ /** Component's parent view data. */
6322
+ get lView() {
6323
+ return getLViewById(this.lViewId);
6324
+ }
6325
+ }
6326
+
6173
6327
  /**
6174
6328
  * @license
6175
6329
  * Copyright Google LLC All Rights Reserved.
@@ -6202,7 +6356,7 @@ function getLContext(target) {
6202
6356
  if (mpValue) {
6203
6357
  // only when it's an array is it considered an LView instance
6204
6358
  // ... otherwise it's an already constructed LContext instance
6205
- if (Array.isArray(mpValue)) {
6359
+ if (isLView(mpValue)) {
6206
6360
  const lView = mpValue;
6207
6361
  let nodeIndex;
6208
6362
  let component = undefined;
@@ -6261,13 +6415,7 @@ function getLContext(target) {
6261
6415
  while (parent = parent.parentNode) {
6262
6416
  const parentContext = readPatchedData(parent);
6263
6417
  if (parentContext) {
6264
- let lView;
6265
- if (Array.isArray(parentContext)) {
6266
- lView = parentContext;
6267
- }
6268
- else {
6269
- lView = parentContext.lView;
6270
- }
6418
+ const lView = Array.isArray(parentContext) ? parentContext : parentContext.lView;
6271
6419
  // the edge of the app was also reached here through another means
6272
6420
  // (maybe because the DOM was changed manually).
6273
6421
  if (!lView) {
@@ -6290,14 +6438,7 @@ function getLContext(target) {
6290
6438
  * Creates an empty instance of a `LContext` context
6291
6439
  */
6292
6440
  function createLContext(lView, nodeIndex, native) {
6293
- return {
6294
- lView,
6295
- nodeIndex,
6296
- native,
6297
- component: undefined,
6298
- directives: undefined,
6299
- localRefs: undefined,
6300
- };
6441
+ return new LContext(lView[ID], nodeIndex, native);
6301
6442
  }
6302
6443
  /**
6303
6444
  * Takes a component instance and returns the view for that component.
@@ -6306,21 +6447,24 @@ function createLContext(lView, nodeIndex, native) {
6306
6447
  * @returns The component's view
6307
6448
  */
6308
6449
  function getComponentViewByInstance(componentInstance) {
6309
- let lView = readPatchedData(componentInstance);
6310
- let view;
6311
- if (Array.isArray(lView)) {
6312
- const nodeIndex = findViaComponent(lView, componentInstance);
6313
- view = getComponentLViewByIndex(nodeIndex, lView);
6314
- const context = createLContext(lView, nodeIndex, view[HOST]);
6450
+ let patchedData = readPatchedData(componentInstance);
6451
+ let lView;
6452
+ if (isLView(patchedData)) {
6453
+ const contextLView = patchedData;
6454
+ const nodeIndex = findViaComponent(contextLView, componentInstance);
6455
+ lView = getComponentLViewByIndex(nodeIndex, contextLView);
6456
+ const context = createLContext(contextLView, nodeIndex, lView[HOST]);
6315
6457
  context.component = componentInstance;
6316
6458
  attachPatchData(componentInstance, context);
6317
6459
  attachPatchData(context.native, context);
6318
6460
  }
6319
6461
  else {
6320
- const context = lView;
6321
- view = getComponentLViewByIndex(context.nodeIndex, context.lView);
6462
+ const context = patchedData;
6463
+ const contextLView = context.lView;
6464
+ ngDevMode && assertLView(contextLView);
6465
+ lView = getComponentLViewByIndex(context.nodeIndex, contextLView);
6322
6466
  }
6323
- return view;
6467
+ return lView;
6324
6468
  }
6325
6469
  /**
6326
6470
  * This property will be monkey-patched on elements, components and directives.
@@ -6332,7 +6476,16 @@ const MONKEY_PATCH_KEY_NAME = '__ngContext__';
6332
6476
  */
6333
6477
  function attachPatchData(target, data) {
6334
6478
  ngDevMode && assertDefined(target, 'Target expected');
6335
- target[MONKEY_PATCH_KEY_NAME] = data;
6479
+ // Only attach the ID of the view in order to avoid memory leaks (see #41047). We only do this
6480
+ // for `LView`, because we have control over when an `LView` is created and destroyed, whereas
6481
+ // we can't know when to remove an `LContext`.
6482
+ if (isLView(data)) {
6483
+ target[MONKEY_PATCH_KEY_NAME] = data[ID];
6484
+ registerLView(data);
6485
+ }
6486
+ else {
6487
+ target[MONKEY_PATCH_KEY_NAME] = data;
6488
+ }
6336
6489
  }
6337
6490
  /**
6338
6491
  * Returns the monkey-patch value data present on the target (which could be
@@ -6340,12 +6493,13 @@ function attachPatchData(target, data) {
6340
6493
  */
6341
6494
  function readPatchedData(target) {
6342
6495
  ngDevMode && assertDefined(target, 'Target expected');
6343
- return target[MONKEY_PATCH_KEY_NAME] || null;
6496
+ const data = target[MONKEY_PATCH_KEY_NAME];
6497
+ return (typeof data === 'number') ? getLViewById(data) : data || null;
6344
6498
  }
6345
6499
  function readPatchedLView(target) {
6346
6500
  const value = readPatchedData(target);
6347
6501
  if (value) {
6348
- return Array.isArray(value) ? value : value.lView;
6502
+ return isLView(value) ? value : value.lView;
6349
6503
  }
6350
6504
  return null;
6351
6505
  }
@@ -7292,6 +7446,8 @@ function cleanUpView(tView, lView) {
7292
7446
  lQueries.detachView(tView);
7293
7447
  }
7294
7448
  }
7449
+ // Unregister the view once everything else has been cleaned up.
7450
+ unregisterLView(lView);
7295
7451
  }
7296
7452
  }
7297
7453
  /** Removes listeners and unsubscribes from output subscriptions */
@@ -9009,7 +9165,7 @@ class LViewDebug {
9009
9165
  attached: !!(flags & 128 /* Attached */),
9010
9166
  destroyed: !!(flags & 256 /* Destroyed */),
9011
9167
  isRoot: !!(flags & 512 /* IsRoot */),
9012
- indexWithinInitPhase: flags >> 11 /* IndexWithinInitPhaseShift */,
9168
+ indexWithinInitPhase: flags >> 12 /* IndexWithinInitPhaseShift */,
9013
9169
  };
9014
9170
  }
9015
9171
  get parent() {
@@ -9072,6 +9228,9 @@ class LViewDebug {
9072
9228
  get tHost() {
9073
9229
  return this._raw_lView[T_HOST];
9074
9230
  }
9231
+ get id() {
9232
+ return this._raw_lView[ID];
9233
+ }
9075
9234
  get decls() {
9076
9235
  return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
9077
9236
  }
@@ -9301,10 +9460,14 @@ function renderChildComponents(hostLView, components) {
9301
9460
  renderComponent$1(hostLView, components[i]);
9302
9461
  }
9303
9462
  }
9304
- function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
9463
+ function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector, embeddedViewInjector) {
9305
9464
  const lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
9306
9465
  lView[HOST] = host;
9307
9466
  lView[FLAGS] = flags | 4 /* CreationMode */ | 128 /* Attached */ | 8 /* FirstLViewPass */;
9467
+ if (embeddedViewInjector !== null ||
9468
+ (parentLView && (parentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */))) {
9469
+ lView[FLAGS] |= 2048 /* HasEmbeddedViewInjector */;
9470
+ }
9308
9471
  resetPreOrderHookFlags(lView);
9309
9472
  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
9310
9473
  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
@@ -9316,6 +9479,8 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, render
9316
9479
  lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
9317
9480
  lView[INJECTOR$1] = injector || parentLView && parentLView[INJECTOR$1] || null;
9318
9481
  lView[T_HOST] = tHostNode;
9482
+ lView[ID] = getUniqueLViewId();
9483
+ lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
9319
9484
  ngDevMode &&
9320
9485
  assertEqual(tView.type == 2 /* Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
9321
9486
  lView[DECLARATION_COMPONENT_VIEW] =
@@ -10324,7 +10489,6 @@ function instantiateAllDirectives(tView, lView, tNode, native) {
10324
10489
  function invokeDirectivesHostBindings(tView, lView, tNode) {
10325
10490
  const start = tNode.directiveStart;
10326
10491
  const end = tNode.directiveEnd;
10327
- const firstCreatePass = tView.firstCreatePass;
10328
10492
  const elementIndex = tNode.index;
10329
10493
  const currentDirectiveIndex = getCurrentDirectiveIndex();
10330
10494
  try {
@@ -10471,7 +10635,7 @@ function addComponentLogic(lView, hostTNode, def) {
10471
10635
  // Only component views should be added to the view tree directly. Embedded views are
10472
10636
  // accessed through their containers because they may be removed / re-added later.
10473
10637
  const rendererFactory = lView[RENDERER_FACTORY];
10474
- const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null));
10638
+ const componentView = addToViewTree(lView, createLView(lView, tView, null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, native, hostTNode, rendererFactory, rendererFactory.createRenderer(native, def), null, null, null));
10475
10639
  // Component view will always be created before any injected LContainers,
10476
10640
  // so this is a regular element, wrap it with the component view
10477
10641
  lView[hostTNode.index] = componentView;
@@ -10840,8 +11004,11 @@ function tickRootContext(rootContext) {
10840
11004
  for (let i = 0; i < rootContext.components.length; i++) {
10841
11005
  const rootComponent = rootContext.components[i];
10842
11006
  const lView = readPatchedLView(rootComponent);
10843
- const tView = lView[TVIEW];
10844
- renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
11007
+ // We might not have an `LView` if the component was destroyed.
11008
+ if (lView !== null) {
11009
+ const tView = lView[TVIEW];
11010
+ renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
11011
+ }
10845
11012
  }
10846
11013
  }
10847
11014
  function detectChangesInternal(tView, lView, context) {
@@ -11699,12 +11866,16 @@ Injector.__NG_ELEMENT_ID__ = -1 /* Injector */;
11699
11866
  * @globalApi ng
11700
11867
  */
11701
11868
  function getComponent$1(element) {
11702
- assertDomElement(element);
11869
+ ngDevMode && assertDomElement(element);
11703
11870
  const context = getLContext(element);
11704
11871
  if (context === null)
11705
11872
  return null;
11706
11873
  if (context.component === undefined) {
11707
- context.component = getComponentAtNodeIndex(context.nodeIndex, context.lView);
11874
+ const lView = context.lView;
11875
+ if (lView === null) {
11876
+ return null;
11877
+ }
11878
+ context.component = getComponentAtNodeIndex(context.nodeIndex, lView);
11708
11879
  }
11709
11880
  return context.component;
11710
11881
  }
@@ -11723,7 +11894,8 @@ function getComponent$1(element) {
11723
11894
  function getContext(element) {
11724
11895
  assertDomElement(element);
11725
11896
  const context = getLContext(element);
11726
- return context === null ? null : context.lView[CONTEXT];
11897
+ const lView = context ? context.lView : null;
11898
+ return lView === null ? null : lView[CONTEXT];
11727
11899
  }
11728
11900
  /**
11729
11901
  * Retrieves the component instance whose view contains the DOM element.
@@ -11742,11 +11914,10 @@ function getContext(element) {
11742
11914
  */
11743
11915
  function getOwningComponent(elementOrDir) {
11744
11916
  const context = getLContext(elementOrDir);
11745
- if (context === null)
11917
+ let lView = context ? context.lView : null;
11918
+ if (lView === null)
11746
11919
  return null;
11747
- let lView = context.lView;
11748
11920
  let parent;
11749
- ngDevMode && assertLView(lView);
11750
11921
  while (lView[TVIEW].type === 2 /* Embedded */ && (parent = getLViewParent(lView))) {
11751
11922
  lView = parent;
11752
11923
  }
@@ -11764,7 +11935,8 @@ function getOwningComponent(elementOrDir) {
11764
11935
  * @globalApi ng
11765
11936
  */
11766
11937
  function getRootComponents(elementOrDir) {
11767
- return [...getRootContext(elementOrDir).components];
11938
+ const lView = readPatchedLView(elementOrDir);
11939
+ return lView !== null ? [...getRootContext(lView).components] : [];
11768
11940
  }
11769
11941
  /**
11770
11942
  * Retrieves an `Injector` associated with an element, component or directive instance.
@@ -11778,10 +11950,11 @@ function getRootComponents(elementOrDir) {
11778
11950
  */
11779
11951
  function getInjector(elementOrDir) {
11780
11952
  const context = getLContext(elementOrDir);
11781
- if (context === null)
11953
+ const lView = context ? context.lView : null;
11954
+ if (lView === null)
11782
11955
  return Injector.NULL;
11783
- const tNode = context.lView[TVIEW].data[context.nodeIndex];
11784
- return new NodeInjector(tNode, context.lView);
11956
+ const tNode = lView[TVIEW].data[context.nodeIndex];
11957
+ return new NodeInjector(tNode, lView);
11785
11958
  }
11786
11959
  /**
11787
11960
  * Retrieve a set of injection tokens at a given DOM node.
@@ -11790,9 +11963,9 @@ function getInjector(elementOrDir) {
11790
11963
  */
11791
11964
  function getInjectionTokens(element) {
11792
11965
  const context = getLContext(element);
11793
- if (context === null)
11966
+ const lView = context ? context.lView : null;
11967
+ if (lView === null)
11794
11968
  return [];
11795
- const lView = context.lView;
11796
11969
  const tView = lView[TVIEW];
11797
11970
  const tNode = tView.data[context.nodeIndex];
11798
11971
  const providerTokens = [];
@@ -11842,10 +12015,10 @@ function getDirectives(node) {
11842
12015
  return [];
11843
12016
  }
11844
12017
  const context = getLContext(node);
11845
- if (context === null) {
12018
+ const lView = context ? context.lView : null;
12019
+ if (lView === null) {
11846
12020
  return [];
11847
12021
  }
11848
- const lView = context.lView;
11849
12022
  const tView = lView[TVIEW];
11850
12023
  const nodeIndex = context.nodeIndex;
11851
12024
  if (!tView?.data[nodeIndex]) {
@@ -11905,7 +12078,11 @@ function getLocalRefs(target) {
11905
12078
  if (context === null)
11906
12079
  return {};
11907
12080
  if (context.localRefs === undefined) {
11908
- context.localRefs = discoverLocalRefs(context.lView, context.nodeIndex);
12081
+ const lView = context.lView;
12082
+ if (lView === null) {
12083
+ return {};
12084
+ }
12085
+ context.localRefs = discoverLocalRefs(lView, context.nodeIndex);
11909
12086
  }
11910
12087
  return context.localRefs || {};
11911
12088
  }
@@ -11969,11 +12146,11 @@ function getRenderedText(component) {
11969
12146
  * @globalApi ng
11970
12147
  */
11971
12148
  function getListeners(element) {
11972
- assertDomElement(element);
12149
+ ngDevMode && assertDomElement(element);
11973
12150
  const lContext = getLContext(element);
11974
- if (lContext === null)
12151
+ const lView = lContext === null ? null : lContext.lView;
12152
+ if (lView === null)
11975
12153
  return [];
11976
- const lView = lContext.lView;
11977
12154
  const tView = lView[TVIEW];
11978
12155
  const lCleanup = lView[CLEANUP];
11979
12156
  const tCleanup = tView.cleanup;
@@ -12024,10 +12201,10 @@ function getDebugNode$1(element) {
12024
12201
  throw new Error('Expecting instance of DOM Element');
12025
12202
  }
12026
12203
  const lContext = getLContext(element);
12027
- if (lContext === null) {
12204
+ const lView = lContext ? lContext.lView : null;
12205
+ if (lView === null) {
12028
12206
  return null;
12029
12207
  }
12030
- const lView = lContext.lView;
12031
12208
  const nodeIndex = lContext.nodeIndex;
12032
12209
  if (nodeIndex !== -1) {
12033
12210
  const valueInLView = lView[nodeIndex];
@@ -12052,6 +12229,7 @@ function getComponentLView(target) {
12052
12229
  const lContext = getLContext(target);
12053
12230
  const nodeIndx = lContext.nodeIndex;
12054
12231
  const lView = lContext.lView;
12232
+ ngDevMode && assertLView(lView);
12055
12233
  const componentLView = lView[nodeIndx];
12056
12234
  ngDevMode && assertLView(componentLView);
12057
12235
  return componentLView;
@@ -12199,7 +12377,7 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
12199
12377
  const rootContext = createRootContext(opts.scheduler, opts.playerHandler);
12200
12378
  const renderer = rendererFactory.createRenderer(hostRNode, componentDef);
12201
12379
  const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
12202
- const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null);
12380
+ const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null, null);
12203
12381
  enterView(rootView);
12204
12382
  let component;
12205
12383
  try {
@@ -12254,7 +12432,7 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
12254
12432
  }
12255
12433
  }
12256
12434
  const viewRenderer = rendererFactory.createRenderer(rNode, def);
12257
- const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null);
12435
+ const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null, null);
12258
12436
  if (tView.firstCreatePass) {
12259
12437
  diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
12260
12438
  markAsComponentHost(tView, tNode);
@@ -14506,6 +14684,7 @@ function elementStartFirstCreatePass(index, tView, lView, native, name, attrsInd
14506
14684
  * @param name Name of the DOM Node
14507
14685
  * @param attrsIndex Index of the element's attributes in the `consts` array.
14508
14686
  * @param localRefsIndex Index of the element's local references in the `consts` array.
14687
+ * @returns This function returns itself so that it may be chained.
14509
14688
  *
14510
14689
  * Attributes and localRefs are passed as an array of strings where elements with an even index
14511
14690
  * hold an attribute name and elements with an odd index hold an attribute value, ex.:
@@ -14557,9 +14736,11 @@ function ɵɵelementStart(index, name, attrsIndex, localRefsIndex) {
14557
14736
  if (localRefsIndex !== null) {
14558
14737
  saveResolvedLocalsInData(lView, tNode);
14559
14738
  }
14739
+ return ɵɵelementStart;
14560
14740
  }
14561
14741
  /**
14562
14742
  * Mark the end of the element.
14743
+ * @returns This function returns itself so that it may be chained.
14563
14744
  *
14564
14745
  * @codeGenApi
14565
14746
  */
@@ -14590,6 +14771,7 @@ function ɵɵelementEnd() {
14590
14771
  if (tNode.stylesWithoutHost != null && hasStyleInput(tNode)) {
14591
14772
  setDirectiveInputsWhichShadowsStyling(tView, tNode, getLView(), tNode.stylesWithoutHost, false);
14592
14773
  }
14774
+ return ɵɵelementEnd;
14593
14775
  }
14594
14776
  /**
14595
14777
  * Creates an empty element using {@link elementStart} and {@link elementEnd}
@@ -14598,12 +14780,14 @@ function ɵɵelementEnd() {
14598
14780
  * @param name Name of the DOM Node
14599
14781
  * @param attrsIndex Index of the element's attributes in the `consts` array.
14600
14782
  * @param localRefsIndex Index of the element's local references in the `consts` array.
14783
+ * @returns This function returns itself so that it may be chained.
14601
14784
  *
14602
14785
  * @codeGenApi
14603
14786
  */
14604
14787
  function ɵɵelement(index, name, attrsIndex, localRefsIndex) {
14605
14788
  ɵɵelementStart(index, name, attrsIndex, localRefsIndex);
14606
14789
  ɵɵelementEnd();
14790
+ return ɵɵelement;
14607
14791
  }
14608
14792
  function logUnknownElementError(tView, element, tNode, hasDirectives) {
14609
14793
  const schemas = tView.schemas;
@@ -14672,6 +14856,7 @@ function elementContainerStartFirstCreatePass(index, tView, lView, attrsIndex, l
14672
14856
  * @param index Index of the element in the LView array
14673
14857
  * @param attrsIndex Index of the container attributes in the `consts` array.
14674
14858
  * @param localRefsIndex Index of the container's local references in the `consts` array.
14859
+ * @returns This function returns itself so that it may be chained.
14675
14860
  *
14676
14861
  * Even if this instruction accepts a set of attributes no actual attribute values are propagated to
14677
14862
  * the DOM (as a comment node can't have attributes). Attributes are here only for directive
@@ -14702,9 +14887,11 @@ function ɵɵelementContainerStart(index, attrsIndex, localRefsIndex) {
14702
14887
  if (localRefsIndex != null) {
14703
14888
  saveResolvedLocalsInData(lView, tNode);
14704
14889
  }
14890
+ return ɵɵelementContainerStart;
14705
14891
  }
14706
14892
  /**
14707
14893
  * Mark the end of the <ng-container>.
14894
+ * @returns This function returns itself so that it may be chained.
14708
14895
  *
14709
14896
  * @codeGenApi
14710
14897
  */
@@ -14726,6 +14913,7 @@ function ɵɵelementContainerEnd() {
14726
14913
  tView.queries.elementEnd(currentTNode);
14727
14914
  }
14728
14915
  }
14916
+ return ɵɵelementContainerEnd;
14729
14917
  }
14730
14918
  /**
14731
14919
  * Creates an empty logical container using {@link elementContainerStart}
@@ -14734,12 +14922,14 @@ function ɵɵelementContainerEnd() {
14734
14922
  * @param index Index of the element in the LView array
14735
14923
  * @param attrsIndex Index of the container attributes in the `consts` array.
14736
14924
  * @param localRefsIndex Index of the container's local references in the `consts` array.
14925
+ * @returns This function returns itself so that it may be chained.
14737
14926
  *
14738
14927
  * @codeGenApi
14739
14928
  */
14740
14929
  function ɵɵelementContainer(index, attrsIndex, localRefsIndex) {
14741
14930
  ɵɵelementContainerStart(index, attrsIndex, localRefsIndex);
14742
14931
  ɵɵelementContainerEnd();
14932
+ return ɵɵelementContainer;
14743
14933
  }
14744
14934
 
14745
14935
  /**
@@ -21090,7 +21280,7 @@ class Version {
21090
21280
  /**
21091
21281
  * @publicApi
21092
21282
  */
21093
- const VERSION = new Version('14.0.0-next.2');
21283
+ const VERSION = new Version('14.0.0-next.5');
21094
21284
 
21095
21285
  /**
21096
21286
  * @license
@@ -21496,29 +21686,27 @@ function getNamespace(elementName) {
21496
21686
  return name === 'svg' ? SVG_NAMESPACE : (name === 'math' ? MATH_ML_NAMESPACE : null);
21497
21687
  }
21498
21688
  /**
21499
- * A change detection scheduler token for {@link RootContext}. This token is the default value used
21500
- * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.
21689
+ * Injector that looks up a value using a specific injector, before falling back to the module
21690
+ * injector. Used primarily when creating components or embedded views dynamically.
21501
21691
  */
21502
- const SCHEDULER = new InjectionToken('SCHEDULER_TOKEN', {
21503
- providedIn: 'root',
21504
- factory: () => defaultScheduler,
21505
- });
21506
- function createChainedInjector(rootViewInjector, moduleInjector) {
21507
- return {
21508
- get: (token, notFoundValue, flags) => {
21509
- const value = rootViewInjector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
21510
- if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
21511
- notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
21512
- // Return the value from the root element injector when
21513
- // - it provides it
21514
- // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21515
- // - the module injector should not be checked
21516
- // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21517
- return value;
21518
- }
21519
- return moduleInjector.get(token, notFoundValue, flags);
21692
+ class ChainedInjector {
21693
+ constructor(injector, parentInjector) {
21694
+ this.injector = injector;
21695
+ this.parentInjector = parentInjector;
21696
+ }
21697
+ get(token, notFoundValue, flags) {
21698
+ const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
21699
+ if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
21700
+ notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
21701
+ // Return the value from the root element injector when
21702
+ // - it provides it
21703
+ // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21704
+ // - the module injector should not be checked
21705
+ // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21706
+ return value;
21520
21707
  }
21521
- };
21708
+ return this.parentInjector.get(token, notFoundValue, flags);
21709
+ }
21522
21710
  }
21523
21711
  /**
21524
21712
  * Render3 implementation of {@link viewEngine_ComponentFactory}.
@@ -21546,7 +21734,7 @@ class ComponentFactory extends ComponentFactory$1 {
21546
21734
  }
21547
21735
  create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
21548
21736
  ngModule = ngModule || this.ngModule;
21549
- const rootViewInjector = ngModule ? createChainedInjector(injector, ngModule.injector) : injector;
21737
+ const rootViewInjector = ngModule ? new ChainedInjector(injector, ngModule.injector) : injector;
21550
21738
  const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
21551
21739
  const sanitizer = rootViewInjector.get(Sanitizer, null);
21552
21740
  const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
@@ -21561,7 +21749,7 @@ class ComponentFactory extends ComponentFactory$1 {
21561
21749
  const rootContext = createRootContext();
21562
21750
  // Create the root view. Uses empty TView and ContentTemplate.
21563
21751
  const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
21564
- const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector);
21752
+ const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector, null);
21565
21753
  // rootView is the parent when bootstrapping
21566
21754
  // TODO(misko): it looks like we are entering view here but we don't really need to as
21567
21755
  // `renderView` does that. However as the code is written it is needed because
@@ -22681,9 +22869,9 @@ const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
22681
22869
  this._declarationTContainer = _declarationTContainer;
22682
22870
  this.elementRef = elementRef;
22683
22871
  }
22684
- createEmbeddedView(context) {
22872
+ createEmbeddedView(context, injector) {
22685
22873
  const embeddedTView = this._declarationTContainer.tViews;
22686
- const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null);
22874
+ const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null, injector || null);
22687
22875
  const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
22688
22876
  ngDevMode && assertLContainer(declarationLContainer);
22689
22877
  embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
@@ -22799,8 +22987,17 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22799
22987
  get length() {
22800
22988
  return this._lContainer.length - CONTAINER_HEADER_OFFSET;
22801
22989
  }
22802
- createEmbeddedView(templateRef, context, index) {
22803
- const viewRef = templateRef.createEmbeddedView(context || {});
22990
+ createEmbeddedView(templateRef, context, indexOrOptions) {
22991
+ let index;
22992
+ let injector;
22993
+ if (typeof indexOrOptions === 'number') {
22994
+ index = indexOrOptions;
22995
+ }
22996
+ else if (indexOrOptions != null) {
22997
+ index = indexOrOptions.index;
22998
+ injector = indexOrOptions.injector;
22999
+ }
23000
+ const viewRef = templateRef.createEmbeddedView(context || {}, injector);
22804
23001
  this.insert(viewRef, index);
22805
23002
  return viewRef;
22806
23003
  }
@@ -22841,11 +23038,29 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22841
23038
  componentFactoryOrType :
22842
23039
  new ComponentFactory(getComponentDef(componentFactoryOrType));
22843
23040
  const contextInjector = injector || this.parentInjector;
22844
- if (!ngModuleRef && componentFactory.ngModule == null && contextInjector) {
22845
- // DO NOT REFACTOR. The code here used to have a `value || undefined` expression
22846
- // which seems to cause internal google apps to fail. This is documented in the
22847
- // following internal bug issue: go/b/142967802
22848
- const result = contextInjector.get(NgModuleRef$1, null);
23041
+ // If an `NgModuleRef` is not provided explicitly, try retrieving it from the DI tree.
23042
+ if (!ngModuleRef && componentFactory.ngModule == null) {
23043
+ // For the `ComponentFactory` case, entering this logic is very unlikely, since we expect that
23044
+ // an instance of a `ComponentFactory`, resolved via `ComponentFactoryResolver` would have an
23045
+ // `ngModule` field. This is possible in some test scenarios and potentially in some JIT-based
23046
+ // use-cases. For the `ComponentFactory` case we preserve backwards-compatibility and try
23047
+ // using a provided injector first, then fall back to the parent injector of this
23048
+ // `ViewContainerRef` instance.
23049
+ //
23050
+ // For the factory-less case, it's critical to establish a connection with the module
23051
+ // injector tree (by retrieving an instance of an `NgModuleRef` and accessing its injector),
23052
+ // so that a component can use DI tokens provided in MgModules. For this reason, we can not
23053
+ // rely on the provided injector, since it might be detached from the DI tree (for example, if
23054
+ // it was created via `Injector.create` without specifying a parent injector, or if an
23055
+ // injector is retrieved from an `NgModuleRef` created via `createNgModuleRef` using an
23056
+ // NgModule outside of a module tree). Instead, we always use `ViewContainerRef`'s parent
23057
+ // injector, which is normally connected to the DI tree, which includes module injector
23058
+ // subtree.
23059
+ const _injector = isComponentFactory ? contextInjector : this.parentInjector;
23060
+ // DO NOT REFACTOR. The code here used to have a `injector.get(NgModuleRef, null) ||
23061
+ // undefined` expression which seems to cause internal google apps to fail. This is documented
23062
+ // in the following internal bug issue: go/b/142967802
23063
+ const result = _injector.get(NgModuleRef$1, null);
22849
23064
  if (result) {
22850
23065
  ngModuleRef = result;
22851
23066
  }
@@ -24814,9 +25029,10 @@ class ApplicationInitStatus {
24814
25029
  }
24815
25030
  }
24816
25031
  ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(ɵɵinject(APP_INITIALIZER, 8)); };
24817
- ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac });
25032
+ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac, providedIn: 'root' });
24818
25033
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
24819
- type: Injectable
25034
+ type: Injectable,
25035
+ args: [{ providedIn: 'root' }]
24820
25036
  }], function () { return [{ type: undefined, decorators: [{
24821
25037
  type: Inject,
24822
25038
  args: [APP_INITIALIZER]
@@ -24842,7 +25058,10 @@ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Appli
24842
25058
  *
24843
25059
  * @publicApi
24844
25060
  */
24845
- const APP_ID = new InjectionToken('AppId');
25061
+ const APP_ID = new InjectionToken('AppId', {
25062
+ providedIn: 'root',
25063
+ factory: _appIdRandomProviderFactory,
25064
+ });
24846
25065
  function _appIdRandomProviderFactory() {
24847
25066
  return `${_randomChar()}${_randomChar()}${_randomChar()}`;
24848
25067
  }
@@ -24885,6 +25104,15 @@ const APP_BOOTSTRAP_LISTENER = new InjectionToken('appBootstrapListener');
24885
25104
  * @publicApi
24886
25105
  */
24887
25106
  const PACKAGE_ROOT_URL = new InjectionToken('Application Packages Root URL');
25107
+ // We keep this token here, rather than the animations package, so that modules that only care
25108
+ // about which animations module is loaded (e.g. the CDK) can retrieve it without having to
25109
+ // include extra dependencies. See #44970 for more context.
25110
+ /**
25111
+ * A [DI token](guide/glossary#di-token "DI token definition") that indicates which animations
25112
+ * module has been loaded.
25113
+ * @publicApi
25114
+ */
25115
+ const ANIMATION_MODULE_TYPE = new InjectionToken('AnimationModuleType');
24888
25116
 
24889
25117
  /**
24890
25118
  * @license
@@ -24917,6 +25145,33 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
24917
25145
  * Use of this source code is governed by an MIT-style license that can be
24918
25146
  * found in the LICENSE file at https://angular.io/license
24919
25147
  */
25148
+ /**
25149
+ * Work out the locale from the potential global properties.
25150
+ *
25151
+ * * Closure Compiler: use `goog.getLocale()`.
25152
+ * * Ivy enabled: use `$localize.locale`
25153
+ */
25154
+ function getGlobalLocale() {
25155
+ if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
25156
+ typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
25157
+ // * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
25158
+ // * In order to preserve backwards compatibility, we use Angular default value over
25159
+ // Closure Compiler's one.
25160
+ return goog.getLocale();
25161
+ }
25162
+ else {
25163
+ // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
25164
+ // COMPILE-TIME INLINER.
25165
+ //
25166
+ // * During compile time inlining of translations the expression will be replaced
25167
+ // with a string literal that is the current locale. Other forms of this expression are not
25168
+ // guaranteed to be replaced.
25169
+ //
25170
+ // * During runtime translation evaluation, the developer is required to set `$localize.locale`
25171
+ // if required, or just to provide their own `LOCALE_ID` provider.
25172
+ return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
25173
+ }
25174
+ }
24920
25175
  /**
24921
25176
  * Provide this token to set the locale of your application.
24922
25177
  * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
@@ -24939,7 +25194,10 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
24939
25194
  *
24940
25195
  * @publicApi
24941
25196
  */
24942
- const LOCALE_ID = new InjectionToken('LocaleId');
25197
+ const LOCALE_ID = new InjectionToken('LocaleId', {
25198
+ providedIn: 'root',
25199
+ factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale(),
25200
+ });
24943
25201
  /**
24944
25202
  * Provide this token to set the default currency code your application uses for
24945
25203
  * CurrencyPipe when there is no currency code passed into it. This is only used by
@@ -24978,7 +25236,10 @@ const LOCALE_ID = new InjectionToken('LocaleId');
24978
25236
  *
24979
25237
  * @publicApi
24980
25238
  */
24981
- const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode');
25239
+ const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode', {
25240
+ providedIn: 'root',
25241
+ factory: () => USD_CURRENCY_CODE,
25242
+ });
24982
25243
  /**
24983
25244
  * Use this token at bootstrap to provide the content of your translation file (`xtb`,
24984
25245
  * `xlf` or `xlf2`) when you want to translate your application in another language.
@@ -25145,9 +25406,10 @@ class Compiler {
25145
25406
  }
25146
25407
  }
25147
25408
  Compiler.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); };
25148
- Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac });
25409
+ Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac, providedIn: 'root' });
25149
25410
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
25150
- type: Injectable
25411
+ type: Injectable,
25412
+ args: [{ providedIn: 'root' }]
25151
25413
  }], null, null); })();
25152
25414
  /**
25153
25415
  * Token to provide CompilerOptions in the platform injector.
@@ -26508,9 +26770,10 @@ class ApplicationRef {
26508
26770
  }
26509
26771
  }
26510
26772
  ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ComponentFactoryResolver$1), ɵɵinject(ApplicationInitStatus)); };
26511
- ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac });
26773
+ ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
26512
26774
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
26513
- type: Injectable
26775
+ type: Injectable,
26776
+ args: [{ providedIn: 'root' }]
26514
26777
  }], function () { return [{ type: NgZone }, { type: Injector }, { type: ErrorHandler }, { type: ComponentFactoryResolver$1 }, { type: ApplicationInitStatus }]; }, null); })();
26515
26778
  function remove(list, el) {
26516
26779
  const index = list.indexOf(el);
@@ -26916,8 +27179,8 @@ class DebugElement extends DebugNode {
26916
27179
  */
26917
27180
  get name() {
26918
27181
  const context = getLContext(this.nativeNode);
26919
- if (context !== null) {
26920
- const lView = context.lView;
27182
+ const lView = context ? context.lView : null;
27183
+ if (lView !== null) {
26921
27184
  const tData = lView[TVIEW].data;
26922
27185
  const tNode = tData[context.nodeIndex];
26923
27186
  return tNode.value;
@@ -26940,10 +27203,10 @@ class DebugElement extends DebugNode {
26940
27203
  */
26941
27204
  get properties() {
26942
27205
  const context = getLContext(this.nativeNode);
26943
- if (context === null) {
27206
+ const lView = context ? context.lView : null;
27207
+ if (lView === null) {
26944
27208
  return {};
26945
27209
  }
26946
- const lView = context.lView;
26947
27210
  const tData = lView[TVIEW].data;
26948
27211
  const tNode = tData[context.nodeIndex];
26949
27212
  const properties = {};
@@ -26964,10 +27227,10 @@ class DebugElement extends DebugNode {
26964
27227
  return attributes;
26965
27228
  }
26966
27229
  const context = getLContext(element);
26967
- if (context === null) {
27230
+ const lView = context ? context.lView : null;
27231
+ if (lView === null) {
26968
27232
  return {};
26969
27233
  }
26970
- const lView = context.lView;
26971
27234
  const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
26972
27235
  const lowercaseTNodeAttrs = [];
26973
27236
  // For debug nodes we take the element's attribute directly from the DOM since it allows us
@@ -27161,9 +27424,10 @@ function isPrimitiveValue(value) {
27161
27424
  }
27162
27425
  function _queryAll(parentElement, predicate, matches, elementsOnly) {
27163
27426
  const context = getLContext(parentElement.nativeNode);
27164
- if (context !== null) {
27165
- const parentTNode = context.lView[TVIEW].data[context.nodeIndex];
27166
- _queryNodeChildren(parentTNode, context.lView, predicate, matches, elementsOnly, parentElement.nativeNode);
27427
+ const lView = context ? context.lView : null;
27428
+ if (lView !== null) {
27429
+ const parentTNode = lView[TVIEW].data[context.nodeIndex];
27430
+ _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
27167
27431
  }
27168
27432
  else {
27169
27433
  // If the context is null, then `parentElement` was either created with Renderer2 or native DOM
@@ -28514,96 +28778,10 @@ const platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDER
28514
28778
  * Use of this source code is governed by an MIT-style license that can be
28515
28779
  * found in the LICENSE file at https://angular.io/license
28516
28780
  */
28517
- function _iterableDiffersFactory() {
28518
- return defaultIterableDiffers;
28519
- }
28520
- function _keyValueDiffersFactory() {
28521
- return defaultKeyValueDiffers;
28522
- }
28523
- function _localeFactory(locale) {
28524
- return locale || getGlobalLocale();
28525
- }
28526
- /**
28527
- * Work out the locale from the potential global properties.
28528
- *
28529
- * * Closure Compiler: use `goog.getLocale()`.
28530
- * * Ivy enabled: use `$localize.locale`
28531
- */
28532
- function getGlobalLocale() {
28533
- if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
28534
- typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
28535
- // * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
28536
- // * In order to preserve backwards compatibility, we use Angular default value over
28537
- // Closure Compiler's one.
28538
- return goog.getLocale();
28539
- }
28540
- else {
28541
- // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
28542
- // COMPILE-TIME INLINER.
28543
- //
28544
- // * During compile time inlining of translations the expression will be replaced
28545
- // with a string literal that is the current locale. Other forms of this expression are not
28546
- // guaranteed to be replaced.
28547
- //
28548
- // * During runtime translation evaluation, the developer is required to set `$localize.locale`
28549
- // if required, or just to provide their own `LOCALE_ID` provider.
28550
- return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
28551
- }
28552
- }
28553
- /**
28554
- * A built-in [dependency injection token](guide/glossary#di-token)
28555
- * that is used to configure the root injector for bootstrapping.
28556
- */
28557
- const APPLICATION_MODULE_PROVIDERS = [
28558
- {
28559
- provide: ApplicationRef,
28560
- useClass: ApplicationRef,
28561
- deps: [NgZone, Injector, ErrorHandler, ComponentFactoryResolver$1, ApplicationInitStatus]
28562
- },
28563
- { provide: SCHEDULER, deps: [NgZone], useFactory: zoneSchedulerFactory },
28564
- {
28565
- provide: ApplicationInitStatus,
28566
- useClass: ApplicationInitStatus,
28567
- deps: [[new Optional(), APP_INITIALIZER]]
28568
- },
28569
- { provide: Compiler, useClass: Compiler, deps: [] },
28570
- APP_ID_RANDOM_PROVIDER,
28571
- { provide: IterableDiffers, useFactory: _iterableDiffersFactory, deps: [] },
28572
- { provide: KeyValueDiffers, useFactory: _keyValueDiffersFactory, deps: [] },
28573
- {
28574
- provide: LOCALE_ID,
28575
- useFactory: _localeFactory,
28576
- deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]
28577
- },
28578
- { provide: DEFAULT_CURRENCY_CODE, useValue: USD_CURRENCY_CODE },
28579
- ];
28580
- /**
28581
- * Schedule work at next available slot.
28582
- *
28583
- * In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped
28584
- * using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.
28585
- * This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.
28586
- *
28587
- * @param ngZone NgZone to use for scheduling.
28588
- */
28589
- function zoneSchedulerFactory(ngZone) {
28590
- let queue = [];
28591
- ngZone.onStable.subscribe(() => {
28592
- while (queue.length) {
28593
- queue.pop()();
28594
- }
28595
- });
28596
- return function (fn) {
28597
- queue.push(fn);
28598
- };
28599
- }
28600
28781
  /**
28601
- * Configures the root injector for an app with
28602
- * providers of `@angular/core` dependencies that `ApplicationRef` needs
28603
- * to bootstrap components.
28604
- *
28605
28782
  * Re-exported by `BrowserModule`, which is included automatically in the root
28606
- * `AppModule` when you create a new app with the CLI `new` command.
28783
+ * `AppModule` when you create a new app with the CLI `new` command. Eagerly injects
28784
+ * `ApplicationRef` to instantiate it.
28607
28785
  *
28608
28786
  * @publicApi
28609
28787
  */
@@ -28613,10 +28791,9 @@ class ApplicationModule {
28613
28791
  }
28614
28792
  ApplicationModule.ɵfac = function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); };
28615
28793
  ApplicationModule.ɵmod = /*@__PURE__*/ ɵɵdefineNgModule({ type: ApplicationModule });
28616
- ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({ providers: APPLICATION_MODULE_PROVIDERS });
28794
+ ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({});
28617
28795
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
28618
- type: NgModule,
28619
- args: [{ providers: APPLICATION_MODULE_PROVIDERS }]
28796
+ type: NgModule
28620
28797
  }], function () { return [{ type: ApplicationRef }]; }, null); })();
28621
28798
 
28622
28799
  /**
@@ -28788,5 +28965,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
28788
28965
  * Generated bundle index. Do not edit.
28789
28966
  */
28790
28967
 
28791
- 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 };
28968
+ 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 };
28792
28969
  //# sourceMappingURL=core.mjs.map