@angular/core 14.0.0-next.3 → 14.0.0-next.6

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 (48) hide show
  1. package/core.d.ts +59 -15
  2. package/esm2020/src/application_init.mjs +4 -3
  3. package/esm2020/src/application_module.mjs +5 -95
  4. package/esm2020/src/application_ref.mjs +4 -3
  5. package/esm2020/src/application_tokens.mjs +5 -2
  6. package/esm2020/src/core_render3_private_export.mjs +2 -1
  7. package/esm2020/src/debug/debug_node.mjs +11 -10
  8. package/esm2020/src/i18n/tokens.mjs +39 -3
  9. package/esm2020/src/linker/compiler.mjs +4 -3
  10. package/esm2020/src/linker/template_ref.mjs +3 -3
  11. package/esm2020/src/linker/view_container_ref.mjs +12 -3
  12. package/esm2020/src/render3/component.mjs +3 -3
  13. package/esm2020/src/render3/component_ref.mjs +22 -26
  14. package/esm2020/src/render3/context_discovery.mjs +34 -30
  15. package/esm2020/src/render3/di.mjs +177 -97
  16. package/esm2020/src/render3/hooks.mjs +3 -3
  17. package/esm2020/src/render3/instructions/lview_debug.mjs +6 -3
  18. package/esm2020/src/render3/instructions/shared.mjs +16 -7
  19. package/esm2020/src/render3/interfaces/context.mjs +35 -2
  20. package/esm2020/src/render3/interfaces/injector.mjs +1 -1
  21. package/esm2020/src/render3/interfaces/lview_tracking.mjs +33 -0
  22. package/esm2020/src/render3/interfaces/renderer_dom.mjs +1 -1
  23. package/esm2020/src/render3/interfaces/view.mjs +4 -2
  24. package/esm2020/src/render3/node_manipulation.mjs +12 -3
  25. package/esm2020/src/render3/util/discovery_utils.mjs +33 -22
  26. package/esm2020/src/version.mjs +1 -1
  27. package/esm2020/testing/src/fake_async.mjs +3 -2
  28. package/esm2020/testing/src/logger.mjs +3 -3
  29. package/esm2020/testing/src/ng_zone_mock.mjs +3 -3
  30. package/fesm2015/core.mjs +442 -297
  31. package/fesm2015/core.mjs.map +1 -1
  32. package/fesm2015/testing.mjs +3 -2
  33. package/fesm2015/testing.mjs.map +1 -1
  34. package/fesm2020/core.mjs +442 -290
  35. package/fesm2020/core.mjs.map +1 -1
  36. package/fesm2020/testing.mjs +3 -2
  37. package/fesm2020/testing.mjs.map +1 -1
  38. package/package.json +2 -2
  39. package/schematics/migrations/entry-components/util.js +2 -2
  40. package/schematics/migrations/typed-forms/index.d.ts +1 -5
  41. package/schematics/migrations/typed-forms/index.js +12 -34
  42. package/schematics/migrations/typed-forms/util.d.ts +6 -9
  43. package/schematics/migrations/typed-forms/util.js +63 -40
  44. package/schematics/utils/import_manager.js +13 -12
  45. package/schematics/utils/typescript/imports.js +6 -5
  46. package/schematics/utils/typescript/parse_tsconfig.js +6 -2
  47. package/schematics/utils/typescript/symbol.js +4 -3
  48. package/testing/testing.d.ts +3 -2
package/fesm2020/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v14.0.0-next.3
2
+ * @license Angular v14.0.0-next.6
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 */
@@ -7459,7 +7615,8 @@ function nativeInsertBefore(renderer, parent, child, beforeNode, isMove) {
7459
7615
  renderer.insertBefore(parent, child, beforeNode, isMove);
7460
7616
  }
7461
7617
  else {
7462
- parent.insertBefore(child, beforeNode, isMove);
7618
+ const targetParent = isTemplateNode(parent) ? parent.content : parent;
7619
+ targetParent.insertBefore(child, beforeNode, isMove);
7463
7620
  }
7464
7621
  }
7465
7622
  function nativeAppendChild(renderer, parent, child) {
@@ -7469,7 +7626,8 @@ function nativeAppendChild(renderer, parent, child) {
7469
7626
  renderer.appendChild(parent, child);
7470
7627
  }
7471
7628
  else {
7472
- parent.appendChild(child);
7629
+ const targetParent = isTemplateNode(parent) ? parent.content : parent;
7630
+ targetParent.appendChild(child);
7473
7631
  }
7474
7632
  }
7475
7633
  function nativeAppendOrInsertBefore(renderer, parent, child, beforeNode, isMove) {
@@ -7489,6 +7647,10 @@ function nativeRemoveChild(renderer, parent, child, isHostElement) {
7489
7647
  parent.removeChild(child);
7490
7648
  }
7491
7649
  }
7650
+ /** Checks if an element is a `<template>` node. */
7651
+ function isTemplateNode(node) {
7652
+ return node.tagName === 'TEMPLATE' && node.content !== undefined;
7653
+ }
7492
7654
  /**
7493
7655
  * Returns a native parent of a given native node.
7494
7656
  */
@@ -9009,7 +9171,7 @@ class LViewDebug {
9009
9171
  attached: !!(flags & 128 /* Attached */),
9010
9172
  destroyed: !!(flags & 256 /* Destroyed */),
9011
9173
  isRoot: !!(flags & 512 /* IsRoot */),
9012
- indexWithinInitPhase: flags >> 11 /* IndexWithinInitPhaseShift */,
9174
+ indexWithinInitPhase: flags >> 12 /* IndexWithinInitPhaseShift */,
9013
9175
  };
9014
9176
  }
9015
9177
  get parent() {
@@ -9072,6 +9234,9 @@ class LViewDebug {
9072
9234
  get tHost() {
9073
9235
  return this._raw_lView[T_HOST];
9074
9236
  }
9237
+ get id() {
9238
+ return this._raw_lView[ID];
9239
+ }
9075
9240
  get decls() {
9076
9241
  return toLViewRange(this.tView, this._raw_lView, HEADER_OFFSET, this.tView.bindingStartIndex);
9077
9242
  }
@@ -9301,10 +9466,14 @@ function renderChildComponents(hostLView, components) {
9301
9466
  renderComponent$1(hostLView, components[i]);
9302
9467
  }
9303
9468
  }
9304
- function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector) {
9469
+ function createLView(parentLView, tView, context, flags, host, tHostNode, rendererFactory, renderer, sanitizer, injector, embeddedViewInjector) {
9305
9470
  const lView = ngDevMode ? cloneToLViewFromTViewBlueprint(tView) : tView.blueprint.slice();
9306
9471
  lView[HOST] = host;
9307
9472
  lView[FLAGS] = flags | 4 /* CreationMode */ | 128 /* Attached */ | 8 /* FirstLViewPass */;
9473
+ if (embeddedViewInjector !== null ||
9474
+ (parentLView && (parentLView[FLAGS] & 2048 /* HasEmbeddedViewInjector */))) {
9475
+ lView[FLAGS] |= 2048 /* HasEmbeddedViewInjector */;
9476
+ }
9308
9477
  resetPreOrderHookFlags(lView);
9309
9478
  ngDevMode && tView.declTNode && parentLView && assertTNodeForLView(tView.declTNode, parentLView);
9310
9479
  lView[PARENT] = lView[DECLARATION_VIEW] = parentLView;
@@ -9316,6 +9485,8 @@ function createLView(parentLView, tView, context, flags, host, tHostNode, render
9316
9485
  lView[SANITIZER] = sanitizer || parentLView && parentLView[SANITIZER] || null;
9317
9486
  lView[INJECTOR$1] = injector || parentLView && parentLView[INJECTOR$1] || null;
9318
9487
  lView[T_HOST] = tHostNode;
9488
+ lView[ID] = getUniqueLViewId();
9489
+ lView[EMBEDDED_VIEW_INJECTOR] = embeddedViewInjector;
9319
9490
  ngDevMode &&
9320
9491
  assertEqual(tView.type == 2 /* Embedded */ ? parentLView !== null : true, true, 'Embedded views must have parentLView');
9321
9492
  lView[DECLARATION_COMPONENT_VIEW] =
@@ -10324,7 +10495,6 @@ function instantiateAllDirectives(tView, lView, tNode, native) {
10324
10495
  function invokeDirectivesHostBindings(tView, lView, tNode) {
10325
10496
  const start = tNode.directiveStart;
10326
10497
  const end = tNode.directiveEnd;
10327
- const firstCreatePass = tView.firstCreatePass;
10328
10498
  const elementIndex = tNode.index;
10329
10499
  const currentDirectiveIndex = getCurrentDirectiveIndex();
10330
10500
  try {
@@ -10471,7 +10641,7 @@ function addComponentLogic(lView, hostTNode, def) {
10471
10641
  // Only component views should be added to the view tree directly. Embedded views are
10472
10642
  // accessed through their containers because they may be removed / re-added later.
10473
10643
  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));
10644
+ 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
10645
  // Component view will always be created before any injected LContainers,
10476
10646
  // so this is a regular element, wrap it with the component view
10477
10647
  lView[hostTNode.index] = componentView;
@@ -10840,8 +11010,11 @@ function tickRootContext(rootContext) {
10840
11010
  for (let i = 0; i < rootContext.components.length; i++) {
10841
11011
  const rootComponent = rootContext.components[i];
10842
11012
  const lView = readPatchedLView(rootComponent);
10843
- const tView = lView[TVIEW];
10844
- renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
11013
+ // We might not have an `LView` if the component was destroyed.
11014
+ if (lView !== null) {
11015
+ const tView = lView[TVIEW];
11016
+ renderComponentOrTemplate(tView, lView, tView.template, rootComponent);
11017
+ }
10845
11018
  }
10846
11019
  }
10847
11020
  function detectChangesInternal(tView, lView, context) {
@@ -11699,12 +11872,16 @@ Injector.__NG_ELEMENT_ID__ = -1 /* Injector */;
11699
11872
  * @globalApi ng
11700
11873
  */
11701
11874
  function getComponent$1(element) {
11702
- assertDomElement(element);
11875
+ ngDevMode && assertDomElement(element);
11703
11876
  const context = getLContext(element);
11704
11877
  if (context === null)
11705
11878
  return null;
11706
11879
  if (context.component === undefined) {
11707
- context.component = getComponentAtNodeIndex(context.nodeIndex, context.lView);
11880
+ const lView = context.lView;
11881
+ if (lView === null) {
11882
+ return null;
11883
+ }
11884
+ context.component = getComponentAtNodeIndex(context.nodeIndex, lView);
11708
11885
  }
11709
11886
  return context.component;
11710
11887
  }
@@ -11723,7 +11900,8 @@ function getComponent$1(element) {
11723
11900
  function getContext(element) {
11724
11901
  assertDomElement(element);
11725
11902
  const context = getLContext(element);
11726
- return context === null ? null : context.lView[CONTEXT];
11903
+ const lView = context ? context.lView : null;
11904
+ return lView === null ? null : lView[CONTEXT];
11727
11905
  }
11728
11906
  /**
11729
11907
  * Retrieves the component instance whose view contains the DOM element.
@@ -11742,11 +11920,10 @@ function getContext(element) {
11742
11920
  */
11743
11921
  function getOwningComponent(elementOrDir) {
11744
11922
  const context = getLContext(elementOrDir);
11745
- if (context === null)
11923
+ let lView = context ? context.lView : null;
11924
+ if (lView === null)
11746
11925
  return null;
11747
- let lView = context.lView;
11748
11926
  let parent;
11749
- ngDevMode && assertLView(lView);
11750
11927
  while (lView[TVIEW].type === 2 /* Embedded */ && (parent = getLViewParent(lView))) {
11751
11928
  lView = parent;
11752
11929
  }
@@ -11764,7 +11941,8 @@ function getOwningComponent(elementOrDir) {
11764
11941
  * @globalApi ng
11765
11942
  */
11766
11943
  function getRootComponents(elementOrDir) {
11767
- return [...getRootContext(elementOrDir).components];
11944
+ const lView = readPatchedLView(elementOrDir);
11945
+ return lView !== null ? [...getRootContext(lView).components] : [];
11768
11946
  }
11769
11947
  /**
11770
11948
  * Retrieves an `Injector` associated with an element, component or directive instance.
@@ -11778,10 +11956,11 @@ function getRootComponents(elementOrDir) {
11778
11956
  */
11779
11957
  function getInjector(elementOrDir) {
11780
11958
  const context = getLContext(elementOrDir);
11781
- if (context === null)
11959
+ const lView = context ? context.lView : null;
11960
+ if (lView === null)
11782
11961
  return Injector.NULL;
11783
- const tNode = context.lView[TVIEW].data[context.nodeIndex];
11784
- return new NodeInjector(tNode, context.lView);
11962
+ const tNode = lView[TVIEW].data[context.nodeIndex];
11963
+ return new NodeInjector(tNode, lView);
11785
11964
  }
11786
11965
  /**
11787
11966
  * Retrieve a set of injection tokens at a given DOM node.
@@ -11790,9 +11969,9 @@ function getInjector(elementOrDir) {
11790
11969
  */
11791
11970
  function getInjectionTokens(element) {
11792
11971
  const context = getLContext(element);
11793
- if (context === null)
11972
+ const lView = context ? context.lView : null;
11973
+ if (lView === null)
11794
11974
  return [];
11795
- const lView = context.lView;
11796
11975
  const tView = lView[TVIEW];
11797
11976
  const tNode = tView.data[context.nodeIndex];
11798
11977
  const providerTokens = [];
@@ -11842,10 +12021,10 @@ function getDirectives(node) {
11842
12021
  return [];
11843
12022
  }
11844
12023
  const context = getLContext(node);
11845
- if (context === null) {
12024
+ const lView = context ? context.lView : null;
12025
+ if (lView === null) {
11846
12026
  return [];
11847
12027
  }
11848
- const lView = context.lView;
11849
12028
  const tView = lView[TVIEW];
11850
12029
  const nodeIndex = context.nodeIndex;
11851
12030
  if (!tView?.data[nodeIndex]) {
@@ -11905,7 +12084,11 @@ function getLocalRefs(target) {
11905
12084
  if (context === null)
11906
12085
  return {};
11907
12086
  if (context.localRefs === undefined) {
11908
- context.localRefs = discoverLocalRefs(context.lView, context.nodeIndex);
12087
+ const lView = context.lView;
12088
+ if (lView === null) {
12089
+ return {};
12090
+ }
12091
+ context.localRefs = discoverLocalRefs(lView, context.nodeIndex);
11909
12092
  }
11910
12093
  return context.localRefs || {};
11911
12094
  }
@@ -11969,11 +12152,11 @@ function getRenderedText(component) {
11969
12152
  * @globalApi ng
11970
12153
  */
11971
12154
  function getListeners(element) {
11972
- assertDomElement(element);
12155
+ ngDevMode && assertDomElement(element);
11973
12156
  const lContext = getLContext(element);
11974
- if (lContext === null)
12157
+ const lView = lContext === null ? null : lContext.lView;
12158
+ if (lView === null)
11975
12159
  return [];
11976
- const lView = lContext.lView;
11977
12160
  const tView = lView[TVIEW];
11978
12161
  const lCleanup = lView[CLEANUP];
11979
12162
  const tCleanup = tView.cleanup;
@@ -12024,10 +12207,10 @@ function getDebugNode$1(element) {
12024
12207
  throw new Error('Expecting instance of DOM Element');
12025
12208
  }
12026
12209
  const lContext = getLContext(element);
12027
- if (lContext === null) {
12210
+ const lView = lContext ? lContext.lView : null;
12211
+ if (lView === null) {
12028
12212
  return null;
12029
12213
  }
12030
- const lView = lContext.lView;
12031
12214
  const nodeIndex = lContext.nodeIndex;
12032
12215
  if (nodeIndex !== -1) {
12033
12216
  const valueInLView = lView[nodeIndex];
@@ -12052,6 +12235,7 @@ function getComponentLView(target) {
12052
12235
  const lContext = getLContext(target);
12053
12236
  const nodeIndx = lContext.nodeIndex;
12054
12237
  const lView = lContext.lView;
12238
+ ngDevMode && assertLView(lView);
12055
12239
  const componentLView = lView[nodeIndx];
12056
12240
  ngDevMode && assertLView(componentLView);
12057
12241
  return componentLView;
@@ -12199,7 +12383,7 @@ function renderComponent(componentType /* Type as workaround for: Microsoft/Type
12199
12383
  const rootContext = createRootContext(opts.scheduler, opts.playerHandler);
12200
12384
  const renderer = rendererFactory.createRenderer(hostRNode, componentDef);
12201
12385
  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);
12386
+ const rootView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, renderer, null, opts.injector || null, null);
12203
12387
  enterView(rootView);
12204
12388
  let component;
12205
12389
  try {
@@ -12254,7 +12438,7 @@ function createRootComponentView(rNode, def, rootView, rendererFactory, hostRend
12254
12438
  }
12255
12439
  }
12256
12440
  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);
12441
+ const componentView = createLView(rootView, getOrCreateTComponentView(def), null, def.onPush ? 64 /* Dirty */ : 16 /* CheckAlways */, rootView[index], tNode, rendererFactory, viewRenderer, sanitizer || null, null, null);
12258
12442
  if (tView.firstCreatePass) {
12259
12443
  diPublicInInjector(getOrCreateNodeInjectorForNode(tNode, rootView), tView, def.type);
12260
12444
  markAsComponentHost(tView, tNode);
@@ -21102,7 +21286,7 @@ class Version {
21102
21286
  /**
21103
21287
  * @publicApi
21104
21288
  */
21105
- const VERSION = new Version('14.0.0-next.3');
21289
+ const VERSION = new Version('14.0.0-next.6');
21106
21290
 
21107
21291
  /**
21108
21292
  * @license
@@ -21508,29 +21692,27 @@ function getNamespace(elementName) {
21508
21692
  return name === 'svg' ? SVG_NAMESPACE : (name === 'math' ? MATH_ML_NAMESPACE : null);
21509
21693
  }
21510
21694
  /**
21511
- * A change detection scheduler token for {@link RootContext}. This token is the default value used
21512
- * for the default `RootContext` found in the {@link ROOT_CONTEXT} token.
21695
+ * Injector that looks up a value using a specific injector, before falling back to the module
21696
+ * injector. Used primarily when creating components or embedded views dynamically.
21513
21697
  */
21514
- const SCHEDULER = new InjectionToken('SCHEDULER_TOKEN', {
21515
- providedIn: 'root',
21516
- factory: () => defaultScheduler,
21517
- });
21518
- function createChainedInjector(rootViewInjector, moduleInjector) {
21519
- return {
21520
- get: (token, notFoundValue, flags) => {
21521
- const value = rootViewInjector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
21522
- if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
21523
- notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
21524
- // Return the value from the root element injector when
21525
- // - it provides it
21526
- // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21527
- // - the module injector should not be checked
21528
- // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21529
- return value;
21530
- }
21531
- return moduleInjector.get(token, notFoundValue, flags);
21698
+ class ChainedInjector {
21699
+ constructor(injector, parentInjector) {
21700
+ this.injector = injector;
21701
+ this.parentInjector = parentInjector;
21702
+ }
21703
+ get(token, notFoundValue, flags) {
21704
+ const value = this.injector.get(token, NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, flags);
21705
+ if (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR ||
21706
+ notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
21707
+ // Return the value from the root element injector when
21708
+ // - it provides it
21709
+ // (value !== NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21710
+ // - the module injector should not be checked
21711
+ // (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR)
21712
+ return value;
21532
21713
  }
21533
- };
21714
+ return this.parentInjector.get(token, notFoundValue, flags);
21715
+ }
21534
21716
  }
21535
21717
  /**
21536
21718
  * Render3 implementation of {@link viewEngine_ComponentFactory}.
@@ -21558,7 +21740,7 @@ class ComponentFactory extends ComponentFactory$1 {
21558
21740
  }
21559
21741
  create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
21560
21742
  ngModule = ngModule || this.ngModule;
21561
- const rootViewInjector = ngModule ? createChainedInjector(injector, ngModule.injector) : injector;
21743
+ const rootViewInjector = ngModule ? new ChainedInjector(injector, ngModule.injector) : injector;
21562
21744
  const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
21563
21745
  const sanitizer = rootViewInjector.get(Sanitizer, null);
21564
21746
  const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
@@ -21573,7 +21755,7 @@ class ComponentFactory extends ComponentFactory$1 {
21573
21755
  const rootContext = createRootContext();
21574
21756
  // Create the root view. Uses empty TView and ContentTemplate.
21575
21757
  const rootTView = createTView(0 /* Root */, null, null, 1, 0, null, null, null, null, null);
21576
- const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector);
21758
+ const rootLView = createLView(null, rootTView, rootContext, rootFlags, null, null, rendererFactory, hostRenderer, sanitizer, rootViewInjector, null);
21577
21759
  // rootView is the parent when bootstrapping
21578
21760
  // TODO(misko): it looks like we are entering view here but we don't really need to as
21579
21761
  // `renderView` does that. However as the code is written it is needed because
@@ -22693,9 +22875,9 @@ const R3TemplateRef = class TemplateRef extends ViewEngineTemplateRef {
22693
22875
  this._declarationTContainer = _declarationTContainer;
22694
22876
  this.elementRef = elementRef;
22695
22877
  }
22696
- createEmbeddedView(context) {
22878
+ createEmbeddedView(context, injector) {
22697
22879
  const embeddedTView = this._declarationTContainer.tViews;
22698
- const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null);
22880
+ const embeddedLView = createLView(this._declarationLView, embeddedTView, context, 16 /* CheckAlways */, null, embeddedTView.declTNode, null, null, null, null, injector || null);
22699
22881
  const declarationLContainer = this._declarationLView[this._declarationTContainer.index];
22700
22882
  ngDevMode && assertLContainer(declarationLContainer);
22701
22883
  embeddedLView[DECLARATION_LCONTAINER] = declarationLContainer;
@@ -22811,8 +22993,17 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22811
22993
  get length() {
22812
22994
  return this._lContainer.length - CONTAINER_HEADER_OFFSET;
22813
22995
  }
22814
- createEmbeddedView(templateRef, context, index) {
22815
- const viewRef = templateRef.createEmbeddedView(context || {});
22996
+ createEmbeddedView(templateRef, context, indexOrOptions) {
22997
+ let index;
22998
+ let injector;
22999
+ if (typeof indexOrOptions === 'number') {
23000
+ index = indexOrOptions;
23001
+ }
23002
+ else if (indexOrOptions != null) {
23003
+ index = indexOrOptions.index;
23004
+ injector = indexOrOptions.injector;
23005
+ }
23006
+ const viewRef = templateRef.createEmbeddedView(context || {}, injector);
22816
23007
  this.insert(viewRef, index);
22817
23008
  return viewRef;
22818
23009
  }
@@ -24844,9 +25035,10 @@ class ApplicationInitStatus {
24844
25035
  }
24845
25036
  }
24846
25037
  ApplicationInitStatus.ɵfac = function ApplicationInitStatus_Factory(t) { return new (t || ApplicationInitStatus)(ɵɵinject(APP_INITIALIZER, 8)); };
24847
- ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac });
25038
+ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationInitStatus, factory: ApplicationInitStatus.ɵfac, providedIn: 'root' });
24848
25039
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationInitStatus, [{
24849
- type: Injectable
25040
+ type: Injectable,
25041
+ args: [{ providedIn: 'root' }]
24850
25042
  }], function () { return [{ type: undefined, decorators: [{
24851
25043
  type: Inject,
24852
25044
  args: [APP_INITIALIZER]
@@ -24872,7 +25064,10 @@ ApplicationInitStatus.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Appli
24872
25064
  *
24873
25065
  * @publicApi
24874
25066
  */
24875
- const APP_ID = new InjectionToken('AppId');
25067
+ const APP_ID = new InjectionToken('AppId', {
25068
+ providedIn: 'root',
25069
+ factory: _appIdRandomProviderFactory,
25070
+ });
24876
25071
  function _appIdRandomProviderFactory() {
24877
25072
  return `${_randomChar()}${_randomChar()}${_randomChar()}`;
24878
25073
  }
@@ -24956,6 +25151,33 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
24956
25151
  * Use of this source code is governed by an MIT-style license that can be
24957
25152
  * found in the LICENSE file at https://angular.io/license
24958
25153
  */
25154
+ /**
25155
+ * Work out the locale from the potential global properties.
25156
+ *
25157
+ * * Closure Compiler: use `goog.getLocale()`.
25158
+ * * Ivy enabled: use `$localize.locale`
25159
+ */
25160
+ function getGlobalLocale() {
25161
+ if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
25162
+ typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
25163
+ // * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
25164
+ // * In order to preserve backwards compatibility, we use Angular default value over
25165
+ // Closure Compiler's one.
25166
+ return goog.getLocale();
25167
+ }
25168
+ else {
25169
+ // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
25170
+ // COMPILE-TIME INLINER.
25171
+ //
25172
+ // * During compile time inlining of translations the expression will be replaced
25173
+ // with a string literal that is the current locale. Other forms of this expression are not
25174
+ // guaranteed to be replaced.
25175
+ //
25176
+ // * During runtime translation evaluation, the developer is required to set `$localize.locale`
25177
+ // if required, or just to provide their own `LOCALE_ID` provider.
25178
+ return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
25179
+ }
25180
+ }
24959
25181
  /**
24960
25182
  * Provide this token to set the locale of your application.
24961
25183
  * It is used for i18n extraction, by i18n pipes (DatePipe, I18nPluralPipe, CurrencyPipe,
@@ -24978,7 +25200,10 @@ Console.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Console, factory: C
24978
25200
  *
24979
25201
  * @publicApi
24980
25202
  */
24981
- const LOCALE_ID = new InjectionToken('LocaleId');
25203
+ const LOCALE_ID = new InjectionToken('LocaleId', {
25204
+ providedIn: 'root',
25205
+ factory: () => inject(LOCALE_ID, InjectFlags.Optional | InjectFlags.SkipSelf) || getGlobalLocale(),
25206
+ });
24982
25207
  /**
24983
25208
  * Provide this token to set the default currency code your application uses for
24984
25209
  * CurrencyPipe when there is no currency code passed into it. This is only used by
@@ -25017,7 +25242,10 @@ const LOCALE_ID = new InjectionToken('LocaleId');
25017
25242
  *
25018
25243
  * @publicApi
25019
25244
  */
25020
- const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode');
25245
+ const DEFAULT_CURRENCY_CODE = new InjectionToken('DefaultCurrencyCode', {
25246
+ providedIn: 'root',
25247
+ factory: () => USD_CURRENCY_CODE,
25248
+ });
25021
25249
  /**
25022
25250
  * Use this token at bootstrap to provide the content of your translation file (`xtb`,
25023
25251
  * `xlf` or `xlf2`) when you want to translate your application in another language.
@@ -25184,9 +25412,10 @@ class Compiler {
25184
25412
  }
25185
25413
  }
25186
25414
  Compiler.ɵfac = function Compiler_Factory(t) { return new (t || Compiler)(); };
25187
- Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac });
25415
+ Compiler.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: Compiler, factory: Compiler.ɵfac, providedIn: 'root' });
25188
25416
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(Compiler, [{
25189
- type: Injectable
25417
+ type: Injectable,
25418
+ args: [{ providedIn: 'root' }]
25190
25419
  }], null, null); })();
25191
25420
  /**
25192
25421
  * Token to provide CompilerOptions in the platform injector.
@@ -26547,9 +26776,10 @@ class ApplicationRef {
26547
26776
  }
26548
26777
  }
26549
26778
  ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ComponentFactoryResolver$1), ɵɵinject(ApplicationInitStatus)); };
26550
- ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac });
26779
+ ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
26551
26780
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationRef, [{
26552
- type: Injectable
26781
+ type: Injectable,
26782
+ args: [{ providedIn: 'root' }]
26553
26783
  }], function () { return [{ type: NgZone }, { type: Injector }, { type: ErrorHandler }, { type: ComponentFactoryResolver$1 }, { type: ApplicationInitStatus }]; }, null); })();
26554
26784
  function remove(list, el) {
26555
26785
  const index = list.indexOf(el);
@@ -26955,8 +27185,8 @@ class DebugElement extends DebugNode {
26955
27185
  */
26956
27186
  get name() {
26957
27187
  const context = getLContext(this.nativeNode);
26958
- if (context !== null) {
26959
- const lView = context.lView;
27188
+ const lView = context ? context.lView : null;
27189
+ if (lView !== null) {
26960
27190
  const tData = lView[TVIEW].data;
26961
27191
  const tNode = tData[context.nodeIndex];
26962
27192
  return tNode.value;
@@ -26979,10 +27209,10 @@ class DebugElement extends DebugNode {
26979
27209
  */
26980
27210
  get properties() {
26981
27211
  const context = getLContext(this.nativeNode);
26982
- if (context === null) {
27212
+ const lView = context ? context.lView : null;
27213
+ if (lView === null) {
26983
27214
  return {};
26984
27215
  }
26985
- const lView = context.lView;
26986
27216
  const tData = lView[TVIEW].data;
26987
27217
  const tNode = tData[context.nodeIndex];
26988
27218
  const properties = {};
@@ -27003,10 +27233,10 @@ class DebugElement extends DebugNode {
27003
27233
  return attributes;
27004
27234
  }
27005
27235
  const context = getLContext(element);
27006
- if (context === null) {
27236
+ const lView = context ? context.lView : null;
27237
+ if (lView === null) {
27007
27238
  return {};
27008
27239
  }
27009
- const lView = context.lView;
27010
27240
  const tNodeAttrs = lView[TVIEW].data[context.nodeIndex].attrs;
27011
27241
  const lowercaseTNodeAttrs = [];
27012
27242
  // For debug nodes we take the element's attribute directly from the DOM since it allows us
@@ -27200,9 +27430,10 @@ function isPrimitiveValue(value) {
27200
27430
  }
27201
27431
  function _queryAll(parentElement, predicate, matches, elementsOnly) {
27202
27432
  const context = getLContext(parentElement.nativeNode);
27203
- if (context !== null) {
27204
- const parentTNode = context.lView[TVIEW].data[context.nodeIndex];
27205
- _queryNodeChildren(parentTNode, context.lView, predicate, matches, elementsOnly, parentElement.nativeNode);
27433
+ const lView = context ? context.lView : null;
27434
+ if (lView !== null) {
27435
+ const parentTNode = lView[TVIEW].data[context.nodeIndex];
27436
+ _queryNodeChildren(parentTNode, lView, predicate, matches, elementsOnly, parentElement.nativeNode);
27206
27437
  }
27207
27438
  else {
27208
27439
  // If the context is null, then `parentElement` was either created with Renderer2 or native DOM
@@ -28553,88 +28784,10 @@ const platformCore = createPlatformFactory(null, 'core', _CORE_PLATFORM_PROVIDER
28553
28784
  * Use of this source code is governed by an MIT-style license that can be
28554
28785
  * found in the LICENSE file at https://angular.io/license
28555
28786
  */
28556
- function _localeFactory(locale) {
28557
- return locale || getGlobalLocale();
28558
- }
28559
- /**
28560
- * Work out the locale from the potential global properties.
28561
- *
28562
- * * Closure Compiler: use `goog.getLocale()`.
28563
- * * Ivy enabled: use `$localize.locale`
28564
- */
28565
- function getGlobalLocale() {
28566
- if (typeof ngI18nClosureMode !== 'undefined' && ngI18nClosureMode &&
28567
- typeof goog !== 'undefined' && goog.getLocale() !== 'en') {
28568
- // * The default `goog.getLocale()` value is `en`, while Angular used `en-US`.
28569
- // * In order to preserve backwards compatibility, we use Angular default value over
28570
- // Closure Compiler's one.
28571
- return goog.getLocale();
28572
- }
28573
- else {
28574
- // KEEP `typeof $localize !== 'undefined' && $localize.locale` IN SYNC WITH THE LOCALIZE
28575
- // COMPILE-TIME INLINER.
28576
- //
28577
- // * During compile time inlining of translations the expression will be replaced
28578
- // with a string literal that is the current locale. Other forms of this expression are not
28579
- // guaranteed to be replaced.
28580
- //
28581
- // * During runtime translation evaluation, the developer is required to set `$localize.locale`
28582
- // if required, or just to provide their own `LOCALE_ID` provider.
28583
- return (typeof $localize !== 'undefined' && $localize.locale) || DEFAULT_LOCALE_ID;
28584
- }
28585
- }
28586
- /**
28587
- * A built-in [dependency injection token](guide/glossary#di-token)
28588
- * that is used to configure the root injector for bootstrapping.
28589
- */
28590
- const APPLICATION_MODULE_PROVIDERS = [
28591
- {
28592
- provide: ApplicationRef,
28593
- useClass: ApplicationRef,
28594
- deps: [NgZone, Injector, ErrorHandler, ComponentFactoryResolver$1, ApplicationInitStatus]
28595
- },
28596
- { provide: SCHEDULER, deps: [NgZone], useFactory: zoneSchedulerFactory },
28597
- {
28598
- provide: ApplicationInitStatus,
28599
- useClass: ApplicationInitStatus,
28600
- deps: [[new Optional(), APP_INITIALIZER]]
28601
- },
28602
- { provide: Compiler, useClass: Compiler, deps: [] },
28603
- APP_ID_RANDOM_PROVIDER,
28604
- {
28605
- provide: LOCALE_ID,
28606
- useFactory: _localeFactory,
28607
- deps: [[new Inject(LOCALE_ID), new Optional(), new SkipSelf()]]
28608
- },
28609
- { provide: DEFAULT_CURRENCY_CODE, useValue: USD_CURRENCY_CODE },
28610
- ];
28611
- /**
28612
- * Schedule work at next available slot.
28613
- *
28614
- * In Ivy this is just `requestAnimationFrame`. For compatibility reasons when bootstrapped
28615
- * using `platformRef.bootstrap` we need to use `NgZone.onStable` as the scheduling mechanism.
28616
- * This overrides the scheduling mechanism in Ivy to `NgZone.onStable`.
28617
- *
28618
- * @param ngZone NgZone to use for scheduling.
28619
- */
28620
- function zoneSchedulerFactory(ngZone) {
28621
- let queue = [];
28622
- ngZone.onStable.subscribe(() => {
28623
- while (queue.length) {
28624
- queue.pop()();
28625
- }
28626
- });
28627
- return function (fn) {
28628
- queue.push(fn);
28629
- };
28630
- }
28631
28787
  /**
28632
- * Configures the root injector for an app with
28633
- * providers of `@angular/core` dependencies that `ApplicationRef` needs
28634
- * to bootstrap components.
28635
- *
28636
28788
  * Re-exported by `BrowserModule`, which is included automatically in the root
28637
- * `AppModule` when you create a new app with the CLI `new` command.
28789
+ * `AppModule` when you create a new app with the CLI `new` command. Eagerly injects
28790
+ * `ApplicationRef` to instantiate it.
28638
28791
  *
28639
28792
  * @publicApi
28640
28793
  */
@@ -28644,10 +28797,9 @@ class ApplicationModule {
28644
28797
  }
28645
28798
  ApplicationModule.ɵfac = function ApplicationModule_Factory(t) { return new (t || ApplicationModule)(ɵɵinject(ApplicationRef)); };
28646
28799
  ApplicationModule.ɵmod = /*@__PURE__*/ ɵɵdefineNgModule({ type: ApplicationModule });
28647
- ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({ providers: APPLICATION_MODULE_PROVIDERS });
28800
+ ApplicationModule.ɵinj = /*@__PURE__*/ ɵɵdefineInjector({});
28648
28801
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && setClassMetadata(ApplicationModule, [{
28649
- type: NgModule,
28650
- args: [{ providers: APPLICATION_MODULE_PROVIDERS }]
28802
+ type: NgModule
28651
28803
  }], function () { return [{ type: ApplicationRef }]; }, null); })();
28652
28804
 
28653
28805
  /**
@@ -28819,5 +28971,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
28819
28971
  * Generated bundle index. Do not edit.
28820
28972
  */
28821
28973
 
28822
- 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, 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 };
28974
+ 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 };
28823
28975
  //# sourceMappingURL=core.mjs.map