@angular/core 14.0.0-next.13 → 14.0.0-next.14

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 (38) hide show
  1. package/core.d.ts +121 -65
  2. package/esm2020/src/application_ref.mjs +109 -22
  3. package/esm2020/src/compiler/compiler_facade_interface.mjs +7 -1
  4. package/esm2020/src/core.mjs +2 -2
  5. package/esm2020/src/core_render3_private_export.mjs +2 -2
  6. package/esm2020/src/di/index.mjs +2 -1
  7. package/esm2020/src/di/injection_token.mjs +7 -1
  8. package/esm2020/src/di/interface/defs.mjs +1 -1
  9. package/esm2020/src/di/r3_injector.mjs +216 -125
  10. package/esm2020/src/di/scope.mjs +1 -1
  11. package/esm2020/src/errors.mjs +1 -1
  12. package/esm2020/src/linker/component_factory.mjs +1 -1
  13. package/esm2020/src/linker/ng_module_factory.mjs +1 -1
  14. package/esm2020/src/linker/view_container_ref.mjs +12 -9
  15. package/esm2020/src/render3/component_ref.mjs +8 -4
  16. package/esm2020/src/render3/definition.mjs +14 -20
  17. package/esm2020/src/render3/errors.mjs +6 -3
  18. package/esm2020/src/render3/errors_di.mjs +1 -1
  19. package/esm2020/src/render3/features/inherit_definition_feature.mjs +3 -2
  20. package/esm2020/src/render3/features/standalone_feature.mjs +7 -0
  21. package/esm2020/src/render3/index.mjs +4 -3
  22. package/esm2020/src/render3/instructions/shared.mjs +6 -3
  23. package/esm2020/src/render3/interfaces/definition.mjs +1 -1
  24. package/esm2020/src/render3/interfaces/public_definitions.mjs +1 -1
  25. package/esm2020/src/render3/jit/directive.mjs +2 -3
  26. package/esm2020/src/render3/jit/environment.mjs +2 -1
  27. package/esm2020/src/render3/ng_module_ref.mjs +33 -4
  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 +414 -180
  32. package/fesm2015/core.mjs.map +1 -1
  33. package/fesm2015/testing.mjs +1 -1
  34. package/fesm2020/core.mjs +412 -181
  35. package/fesm2020/core.mjs.map +1 -1
  36. package/fesm2020/testing.mjs +1 -1
  37. package/package.json +1 -1
  38. package/testing/testing.d.ts +1 -1
package/fesm2015/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v14.0.0-next.13
2
+ * @license Angular v14.0.0-next.14
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -918,19 +918,21 @@ function ɵɵdefineComponent(componentDefinition) {
918
918
  schemas: componentDefinition.schemas || null,
919
919
  tView: null,
920
920
  };
921
- const directiveTypes = componentDefinition.directives;
921
+ const dependencies = componentDefinition.dependencies;
922
922
  const feature = componentDefinition.features;
923
- const pipeTypes = componentDefinition.pipes;
924
923
  def.id += _renderCompCount++;
925
924
  def.inputs = invertObject(componentDefinition.inputs, declaredInputs),
926
925
  def.outputs = invertObject(componentDefinition.outputs),
927
926
  feature && feature.forEach((fn) => fn(def));
928
- def.directiveDefs = directiveTypes ?
929
- () => (typeof directiveTypes === 'function' ? directiveTypes() : directiveTypes)
930
- .map(extractDirectiveDef) :
927
+ def.directiveDefs = dependencies ?
928
+ (() => (typeof dependencies === 'function' ? dependencies() : dependencies)
929
+ .map(extractDirectiveDef)
930
+ .filter(nonNull)) :
931
931
  null;
932
- def.pipeDefs = pipeTypes ?
933
- () => (typeof pipeTypes === 'function' ? pipeTypes() : pipeTypes).map(extractPipeDef) :
932
+ def.pipeDefs = dependencies ?
933
+ (() => (typeof dependencies === 'function' ? dependencies() : dependencies)
934
+ .map(getPipeDef$1)
935
+ .filter(nonNull)) :
934
936
  null;
935
937
  return def;
936
938
  });
@@ -947,21 +949,13 @@ function ɵɵdefineComponent(componentDefinition) {
947
949
  function ɵɵsetComponentScope(type, directives, pipes) {
948
950
  const def = type.ɵcmp;
949
951
  def.directiveDefs = () => directives.map(extractDirectiveDef);
950
- def.pipeDefs = () => pipes.map(extractPipeDef);
952
+ def.pipeDefs = () => pipes.map(getPipeDef$1);
951
953
  }
952
954
  function extractDirectiveDef(type) {
953
- const def = getComponentDef(type) || getDirectiveDef(type);
954
- if (ngDevMode && !def) {
955
- throw new Error(`'${type.name}' is neither 'ComponentType' or 'DirectiveType'.`);
956
- }
957
- return def;
955
+ return getComponentDef(type) || getDirectiveDef(type);
958
956
  }
959
- function extractPipeDef(type) {
960
- const def = getPipeDef$1(type);
961
- if (ngDevMode && !def) {
962
- throw new Error(`'${type.name}' is not a 'PipeType'.`);
963
- }
964
- return def;
957
+ function nonNull(value) {
958
+ return value !== null;
965
959
  }
966
960
  const autoRegisterModuleById = {};
967
961
  /**
@@ -4008,6 +4002,12 @@ class InjectionToken {
4008
4002
  });
4009
4003
  }
4010
4004
  }
4005
+ /**
4006
+ * @internal
4007
+ */
4008
+ get multi() {
4009
+ return this;
4010
+ }
4011
4011
  toString() {
4012
4012
  return `InjectionToken ${this._desc}`;
4013
4013
  }
@@ -4120,6 +4120,12 @@ var FactoryTarget;
4120
4120
  FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
4121
4121
  FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
4122
4122
  })(FactoryTarget || (FactoryTarget = {}));
4123
+ var R3TemplateDependencyKind;
4124
+ (function (R3TemplateDependencyKind) {
4125
+ R3TemplateDependencyKind[R3TemplateDependencyKind["Directive"] = 0] = "Directive";
4126
+ R3TemplateDependencyKind[R3TemplateDependencyKind["Pipe"] = 1] = "Pipe";
4127
+ R3TemplateDependencyKind[R3TemplateDependencyKind["NgModule"] = 2] = "NgModule";
4128
+ })(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
4123
4129
  var ViewEncapsulation;
4124
4130
  (function (ViewEncapsulation) {
4125
4131
  ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
@@ -6907,8 +6913,10 @@ function maybeUnwrapFn(value) {
6907
6913
  * found in the LICENSE file at https://angular.io/license
6908
6914
  */
6909
6915
  /** Called when there are multiple component selectors that match a given node */
6910
- function throwMultipleComponentError(tNode) {
6911
- throw new RuntimeError(-300 /* MULTIPLE_COMPONENTS_MATCH */, `Multiple components match node with tagname ${tNode.value}`);
6916
+ function throwMultipleComponentError(tNode, first, second) {
6917
+ throw new RuntimeError(-300 /* MULTIPLE_COMPONENTS_MATCH */, `Multiple components match node with tagname ${tNode.value}: ` +
6918
+ `${stringifyForError(first)} and ` +
6919
+ `${stringifyForError(second)}`);
6912
6920
  }
6913
6921
  /** Throws an ExpressionChangedAfterChecked error if checkNoChanges mode is on. */
6914
6922
  function throwErrorIfNoChangesMode(creationMode, oldValue, currValue, propName) {
@@ -10583,8 +10591,11 @@ function findDirectiveDefMatches(tView, viewData, tNode) {
10583
10591
  if (ngDevMode) {
10584
10592
  assertTNodeType(tNode, 2 /* Element */, `"${tNode.value}" tags cannot be used as component hosts. ` +
10585
10593
  `Please use a different tag to activate the ${stringify(def.type)} component.`);
10586
- if (tNode.flags & 2 /* isComponentHost */)
10587
- throwMultipleComponentError(tNode);
10594
+ if (tNode.flags & 2 /* isComponentHost */) {
10595
+ // If another component has been matched previously, it's the first element in the
10596
+ // `matches` array, see how we store components/directives in `matches` below.
10597
+ throwMultipleComponentError(tNode, matches[0].type, def.type);
10598
+ }
10588
10599
  }
10589
10600
  markAsComponentHost(tView, tNode);
10590
10601
  // The component is always stored first with directives after.
@@ -11386,6 +11397,14 @@ const NOT_YET = {};
11386
11397
  * a circular dependency among the providers.
11387
11398
  */
11388
11399
  const CIRCULAR = {};
11400
+ /**
11401
+ * A multi-provider token for initialization functions that will run upon construction of a
11402
+ * non-view injector.
11403
+ *
11404
+ * @publicApi
11405
+ */
11406
+ const INJECTOR_INITIALIZER = new InjectionToken('INJECTOR_INITIALIZER');
11407
+ const INJECTOR_DEF_TYPES = new InjectionToken('INJECTOR_DEF_TYPES');
11389
11408
  /**
11390
11409
  * A lazily initialized NullInjector.
11391
11410
  */
@@ -11403,7 +11422,7 @@ function getNullInjector() {
11403
11422
  */
11404
11423
  function createInjector(defType, parent = null, additionalProviders = null, name) {
11405
11424
  const injector = createInjectorWithoutInjectorInstances(defType, parent, additionalProviders, name);
11406
- injector._resolveInjectorDefTypes();
11425
+ injector.resolveInjectorInitializers();
11407
11426
  return injector;
11408
11427
  }
11409
11428
  /**
@@ -11411,42 +11430,180 @@ function createInjector(defType, parent = null, additionalProviders = null, name
11411
11430
  * where resolving the injector types immediately can lead to an infinite loop. The injector types
11412
11431
  * should be resolved at a later point by calling `_resolveInjectorDefTypes`.
11413
11432
  */
11414
- function createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name) {
11415
- return new R3Injector(defType, additionalProviders, parent || getNullInjector(), name);
11433
+ function createInjectorWithoutInjectorInstances(defType, parent = null, additionalProviders = null, name, scopes = new Set()) {
11434
+ const providers = [
11435
+ ...flatten(additionalProviders || EMPTY_ARRAY),
11436
+ ...importProvidersFrom(defType),
11437
+ ];
11438
+ name = name || (typeof defType === 'object' ? undefined : stringify(defType));
11439
+ return new R3Injector(providers, parent || getNullInjector(), name || null, scopes);
11440
+ }
11441
+ /**
11442
+ * The logic visits an `InjectorType` or `InjectorTypeWithProviders` and all of its transitive
11443
+ * providers and invokes specified callbacks when:
11444
+ * - an injector type is visited (typically an NgModule)
11445
+ * - a provider is visited
11446
+ *
11447
+ * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,
11448
+ * the function will return "true" to indicate that the providers of the type definition need
11449
+ * to be processed. This allows us to process providers of injector types after all imports of
11450
+ * an injector definition are processed. (following View Engine semantics: see FW-1349)
11451
+ */
11452
+ function walkProviderTree(container, providersOut, parents, dedup) {
11453
+ container = resolveForwardRef(container);
11454
+ if (!container)
11455
+ return false;
11456
+ // Either the defOrWrappedDef is an InjectorType (with injector def) or an
11457
+ // InjectorDefTypeWithProviders (aka ModuleWithProviders). Detecting either is a megamorphic
11458
+ // read, so care is taken to only do the read once.
11459
+ // First attempt to read the injector def (`ɵinj`).
11460
+ let def = getInjectorDef(container);
11461
+ // If that's not present, then attempt to read ngModule from the InjectorDefTypeWithProviders.
11462
+ const ngModule = (def == null) && container.ngModule || undefined;
11463
+ // Determine the InjectorType. In the case where `defOrWrappedDef` is an `InjectorType`,
11464
+ // then this is easy. In the case of an InjectorDefTypeWithProviders, then the definition type
11465
+ // is the `ngModule`.
11466
+ const defType = (ngModule === undefined) ? container : ngModule;
11467
+ // Check for circular dependencies.
11468
+ if (ngDevMode && parents.indexOf(defType) !== -1) {
11469
+ const defName = stringify(defType);
11470
+ const path = parents.map(stringify);
11471
+ throwCyclicDependencyError(defName, path);
11472
+ }
11473
+ // Check for multiple imports of the same module
11474
+ const isDuplicate = dedup.has(defType);
11475
+ // Finally, if defOrWrappedType was an `InjectorDefTypeWithProviders`, then the actual
11476
+ // `InjectorDef` is on its `ngModule`.
11477
+ if (ngModule !== undefined) {
11478
+ def = getInjectorDef(ngModule);
11479
+ }
11480
+ // If no definition was found, it might be from exports. Remove it.
11481
+ if (def == null) {
11482
+ return false;
11483
+ }
11484
+ // Add providers in the same way that @NgModule resolution did:
11485
+ // First, include providers from any imports.
11486
+ if (def.imports != null && !isDuplicate) {
11487
+ // Before processing defType's imports, add it to the set of parents. This way, if it ends
11488
+ // up deeply importing itself, this can be detected.
11489
+ ngDevMode && parents.push(defType);
11490
+ // Add it to the set of dedups. This way we can detect multiple imports of the same module
11491
+ dedup.add(defType);
11492
+ let importTypesWithProviders;
11493
+ try {
11494
+ deepForEach(def.imports, imported => {
11495
+ if (walkProviderTree(imported, providersOut, parents, dedup)) {
11496
+ if (importTypesWithProviders === undefined)
11497
+ importTypesWithProviders = [];
11498
+ // If the processed import is an injector type with providers, we store it in the
11499
+ // list of import types with providers, so that we can process those afterwards.
11500
+ importTypesWithProviders.push(imported);
11501
+ }
11502
+ });
11503
+ }
11504
+ finally {
11505
+ // Remove it from the parents set when finished.
11506
+ ngDevMode && parents.pop();
11507
+ }
11508
+ // Imports which are declared with providers (TypeWithProviders) need to be processed
11509
+ // after all imported modules are processed. This is similar to how View Engine
11510
+ // processes/merges module imports in the metadata resolver. See: FW-1349.
11511
+ if (importTypesWithProviders !== undefined) {
11512
+ for (let i = 0; i < importTypesWithProviders.length; i++) {
11513
+ const { ngModule, providers } = importTypesWithProviders[i];
11514
+ deepForEach(providers, provider => {
11515
+ validateProvider(provider, providers || EMPTY_ARRAY, ngModule);
11516
+ providersOut.push(provider);
11517
+ });
11518
+ }
11519
+ }
11520
+ }
11521
+ // Track the InjectorType and add a provider for it.
11522
+ // It's important that this is done after the def's imports.
11523
+ const factory = getFactoryDef(defType) || (() => new defType());
11524
+ // Provider to create `defType` using its factory.
11525
+ providersOut.push({
11526
+ provide: defType,
11527
+ useFactory: factory,
11528
+ deps: EMPTY_ARRAY,
11529
+ });
11530
+ providersOut.push({
11531
+ provide: INJECTOR_DEF_TYPES,
11532
+ useValue: defType,
11533
+ multi: true,
11534
+ });
11535
+ // Provider to eagerly instantiate `defType` via `INJECTOR_INITIALIZER`.
11536
+ providersOut.push({
11537
+ provide: INJECTOR_INITIALIZER,
11538
+ useValue: () => inject(defType),
11539
+ multi: true,
11540
+ });
11541
+ // Next, include providers listed on the definition itself.
11542
+ const defProviders = def.providers;
11543
+ if (defProviders != null && !isDuplicate) {
11544
+ const injectorType = container;
11545
+ deepForEach(defProviders, provider => {
11546
+ // TODO: fix cast
11547
+ validateProvider(provider, defProviders, injectorType);
11548
+ providersOut.push(provider);
11549
+ });
11550
+ }
11551
+ return (ngModule !== undefined &&
11552
+ container.providers !== undefined);
11553
+ }
11554
+ /**
11555
+ * An `Injector` that's part of the environment injector hierarchy, which exists outside of the
11556
+ * component tree.
11557
+ */
11558
+ class EnvironmentInjector {
11559
+ }
11560
+ /**
11561
+ * Collects providers from all NgModules, including transitively imported ones.
11562
+ *
11563
+ * @returns The list of collected providers from the specified list of NgModules.
11564
+ * @publicApi
11565
+ */
11566
+ function importProvidersFrom(...injectorTypes) {
11567
+ const providers = [];
11568
+ deepForEach(injectorTypes, injectorDef => walkProviderTree(injectorDef, providers, [], new Set()));
11569
+ return providers;
11416
11570
  }
11417
- class R3Injector {
11418
- constructor(def, additionalProviders, parent, source = null) {
11571
+ class R3Injector extends EnvironmentInjector {
11572
+ constructor(providers, parent, source, scopes) {
11573
+ super();
11419
11574
  this.parent = parent;
11575
+ this.source = source;
11576
+ this.scopes = scopes;
11420
11577
  /**
11421
11578
  * Map of tokens to records which contain the instances of those tokens.
11422
11579
  * - `null` value implies that we don't have the record. Used by tree-shakable injectors
11423
11580
  * to prevent further searches.
11424
11581
  */
11425
11582
  this.records = new Map();
11426
- /**
11427
- * The transitive set of `InjectorType`s which define this injector.
11428
- */
11429
- this.injectorDefTypes = new Set();
11430
11583
  /**
11431
11584
  * Set of values instantiated by this injector which contain `ngOnDestroy` lifecycle hooks.
11432
11585
  */
11433
- this.onDestroy = new Set();
11586
+ this._ngOnDestroyHooks = new Set();
11587
+ this._onDestroyHooks = [];
11434
11588
  this._destroyed = false;
11435
- const dedupStack = [];
11436
- // Start off by creating Records for every provider declared in every InjectorType
11437
- // included transitively in additional providers then do the same for `def`. This order is
11438
- // important because `def` may include providers that override ones in additionalProviders.
11439
- additionalProviders &&
11440
- deepForEach(additionalProviders, provider => this.processProvider(provider, def, additionalProviders));
11441
- deepForEach([def], injectorDef => this.processInjectorType(injectorDef, [], dedupStack));
11589
+ // Start off by creating Records for every provider.
11590
+ for (const provider of providers) {
11591
+ this.processProvider(provider);
11592
+ }
11442
11593
  // Make sure the INJECTOR token provides this injector.
11443
11594
  this.records.set(INJECTOR, makeRecord(undefined, this));
11595
+ // And `EnvironmentInjector` if the current injector is supposed to be env-scoped.
11596
+ if (scopes.has('environment')) {
11597
+ this.records.set(EnvironmentInjector, makeRecord(undefined, this));
11598
+ }
11444
11599
  // Detect whether this injector has the APP_ROOT_SCOPE token and thus should provide
11445
11600
  // any injectable scoped to APP_ROOT_SCOPE.
11446
11601
  const record = this.records.get(INJECTOR_SCOPE);
11447
- this.scope = record != null ? record.value : null;
11448
- // Source name, used for debugging
11449
- this.source = source || (typeof def === 'object' ? null : stringify(def));
11602
+ if (record != null && typeof record.value === 'string') {
11603
+ this.scopes.add(record.value);
11604
+ }
11605
+ this.injectorDefTypes =
11606
+ new Set(this.get(INJECTOR_DEF_TYPES.multi, EMPTY_ARRAY, InjectFlags.Self));
11450
11607
  }
11451
11608
  /**
11452
11609
  * Flag indicating that this injector was previously destroyed.
@@ -11466,15 +11623,24 @@ class R3Injector {
11466
11623
  this._destroyed = true;
11467
11624
  try {
11468
11625
  // Call all the lifecycle hooks.
11469
- this.onDestroy.forEach(service => service.ngOnDestroy());
11626
+ for (const service of this._ngOnDestroyHooks) {
11627
+ service.ngOnDestroy();
11628
+ }
11629
+ for (const hook of this._onDestroyHooks) {
11630
+ hook();
11631
+ }
11470
11632
  }
11471
11633
  finally {
11472
11634
  // Release all references.
11473
11635
  this.records.clear();
11474
- this.onDestroy.clear();
11636
+ this._ngOnDestroyHooks.clear();
11475
11637
  this.injectorDefTypes.clear();
11638
+ this._onDestroyHooks.length = 0;
11476
11639
  }
11477
11640
  }
11641
+ onDestroy(callback) {
11642
+ this._onDestroyHooks.push(callback);
11643
+ }
11478
11644
  get(token, notFoundValue = THROW_IF_NOT_FOUND, flags = InjectFlags.Default) {
11479
11645
  this.assertNotDestroyed();
11480
11646
  // Set the injection context.
@@ -11538,12 +11704,26 @@ class R3Injector {
11538
11704
  }
11539
11705
  }
11540
11706
  /** @internal */
11541
- _resolveInjectorDefTypes() {
11542
- this.injectorDefTypes.forEach(defType => this.get(defType));
11707
+ resolveInjectorInitializers() {
11708
+ const previousInjector = setCurrentInjector(this);
11709
+ const previousInjectImplementation = setInjectImplementation(undefined);
11710
+ try {
11711
+ const initializers = this.get(INJECTOR_INITIALIZER.multi, EMPTY_ARRAY, InjectFlags.Self);
11712
+ for (const initializer of initializers) {
11713
+ initializer();
11714
+ }
11715
+ }
11716
+ finally {
11717
+ setCurrentInjector(previousInjector);
11718
+ setInjectImplementation(previousInjectImplementation);
11719
+ }
11543
11720
  }
11544
11721
  toString() {
11545
- const tokens = [], records = this.records;
11546
- records.forEach((v, token) => tokens.push(stringify(token)));
11722
+ const tokens = [];
11723
+ const records = this.records;
11724
+ for (const token of records.keys()) {
11725
+ tokens.push(stringify(token));
11726
+ }
11547
11727
  return `R3Injector[${tokens.join(', ')}]`;
11548
11728
  }
11549
11729
  assertNotDestroyed() {
@@ -11551,105 +11731,16 @@ class R3Injector {
11551
11731
  throw new RuntimeError(205 /* INJECTOR_ALREADY_DESTROYED */, ngDevMode && 'Injector has already been destroyed.');
11552
11732
  }
11553
11733
  }
11554
- /**
11555
- * Add an `InjectorType` or `InjectorTypeWithProviders` and all of its transitive providers
11556
- * to this injector.
11557
- *
11558
- * If an `InjectorTypeWithProviders` that declares providers besides the type is specified,
11559
- * the function will return "true" to indicate that the providers of the type definition need
11560
- * to be processed. This allows us to process providers of injector types after all imports of
11561
- * an injector definition are processed. (following View Engine semantics: see FW-1349)
11562
- */
11563
- processInjectorType(defOrWrappedDef, parents, dedupStack) {
11564
- defOrWrappedDef = resolveForwardRef(defOrWrappedDef);
11565
- if (!defOrWrappedDef)
11566
- return false;
11567
- // Either the defOrWrappedDef is an InjectorType (with injector def) or an
11568
- // InjectorDefTypeWithProviders (aka ModuleWithProviders). Detecting either is a megamorphic
11569
- // read, so care is taken to only do the read once.
11570
- // First attempt to read the injector def (`ɵinj`).
11571
- let def = getInjectorDef(defOrWrappedDef);
11572
- // If that's not present, then attempt to read ngModule from the InjectorDefTypeWithProviders.
11573
- const ngModule = (def == null) && defOrWrappedDef.ngModule || undefined;
11574
- // Determine the InjectorType. In the case where `defOrWrappedDef` is an `InjectorType`,
11575
- // then this is easy. In the case of an InjectorDefTypeWithProviders, then the definition type
11576
- // is the `ngModule`.
11577
- const defType = (ngModule === undefined) ? defOrWrappedDef : ngModule;
11578
- // Check for circular dependencies.
11579
- if (ngDevMode && parents.indexOf(defType) !== -1) {
11580
- const defName = stringify(defType);
11581
- const path = parents.map(stringify);
11582
- throwCyclicDependencyError(defName, path);
11583
- }
11584
- // Check for multiple imports of the same module
11585
- const isDuplicate = dedupStack.indexOf(defType) !== -1;
11586
- // Finally, if defOrWrappedType was an `InjectorDefTypeWithProviders`, then the actual
11587
- // `InjectorDef` is on its `ngModule`.
11588
- if (ngModule !== undefined) {
11589
- def = getInjectorDef(ngModule);
11590
- }
11591
- // If no definition was found, it might be from exports. Remove it.
11592
- if (def == null) {
11593
- return false;
11594
- }
11595
- // Add providers in the same way that @NgModule resolution did:
11596
- // First, include providers from any imports.
11597
- if (def.imports != null && !isDuplicate) {
11598
- // Before processing defType's imports, add it to the set of parents. This way, if it ends
11599
- // up deeply importing itself, this can be detected.
11600
- ngDevMode && parents.push(defType);
11601
- // Add it to the set of dedups. This way we can detect multiple imports of the same module
11602
- dedupStack.push(defType);
11603
- let importTypesWithProviders;
11604
- try {
11605
- deepForEach(def.imports, imported => {
11606
- if (this.processInjectorType(imported, parents, dedupStack)) {
11607
- if (importTypesWithProviders === undefined)
11608
- importTypesWithProviders = [];
11609
- // If the processed import is an injector type with providers, we store it in the
11610
- // list of import types with providers, so that we can process those afterwards.
11611
- importTypesWithProviders.push(imported);
11612
- }
11613
- });
11614
- }
11615
- finally {
11616
- // Remove it from the parents set when finished.
11617
- ngDevMode && parents.pop();
11618
- }
11619
- // Imports which are declared with providers (TypeWithProviders) need to be processed
11620
- // after all imported modules are processed. This is similar to how View Engine
11621
- // processes/merges module imports in the metadata resolver. See: FW-1349.
11622
- if (importTypesWithProviders !== undefined) {
11623
- for (let i = 0; i < importTypesWithProviders.length; i++) {
11624
- const { ngModule, providers } = importTypesWithProviders[i];
11625
- deepForEach(providers, provider => this.processProvider(provider, ngModule, providers || EMPTY_ARRAY));
11626
- }
11627
- }
11628
- }
11629
- // Track the InjectorType and add a provider for it. It's important that this is done after the
11630
- // def's imports.
11631
- this.injectorDefTypes.add(defType);
11632
- const factory = getFactoryDef(defType) || (() => new defType());
11633
- this.records.set(defType, makeRecord(factory, NOT_YET));
11634
- // Next, include providers listed on the definition itself.
11635
- const defProviders = def.providers;
11636
- if (defProviders != null && !isDuplicate) {
11637
- const injectorType = defOrWrappedDef;
11638
- deepForEach(defProviders, provider => this.processProvider(provider, injectorType, defProviders));
11639
- }
11640
- return (ngModule !== undefined &&
11641
- defOrWrappedDef.providers !== undefined);
11642
- }
11643
11734
  /**
11644
11735
  * Process a `SingleProvider` and add it.
11645
11736
  */
11646
- processProvider(provider, ngModuleType, providers) {
11737
+ processProvider(provider) {
11647
11738
  // Determine the token from the provider. Either it's its own token, or has a {provide: ...}
11648
11739
  // property.
11649
11740
  provider = resolveForwardRef(provider);
11650
11741
  let token = isTypeProvider(provider) ? provider : resolveForwardRef(provider && provider.provide);
11651
11742
  // Construct a `Record` for the provider.
11652
- const record = providerToRecord(provider, ngModuleType, providers);
11743
+ const record = providerToRecord(provider);
11653
11744
  if (!isTypeProvider(provider) && provider.multi === true) {
11654
11745
  // If the provider indicates that it's a multi-provider, process it specially.
11655
11746
  // First check whether it's been defined already.
@@ -11685,7 +11776,7 @@ class R3Injector {
11685
11776
  record.value = record.factory();
11686
11777
  }
11687
11778
  if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {
11688
- this.onDestroy.add(record.value);
11779
+ this._ngOnDestroyHooks.add(record.value);
11689
11780
  }
11690
11781
  return record.value;
11691
11782
  }
@@ -11695,7 +11786,7 @@ class R3Injector {
11695
11786
  }
11696
11787
  const providedIn = resolveForwardRef(def.providedIn);
11697
11788
  if (typeof providedIn === 'string') {
11698
- return providedIn === 'any' || (providedIn === this.scope);
11789
+ return providedIn === 'any' || (this.scopes.has(providedIn));
11699
11790
  }
11700
11791
  else {
11701
11792
  return this.injectorDefTypes.has(providedIn);
@@ -11741,12 +11832,12 @@ function getUndecoratedInjectableFactory(token) {
11741
11832
  return () => new token();
11742
11833
  }
11743
11834
  }
11744
- function providerToRecord(provider, ngModuleType, providers) {
11835
+ function providerToRecord(provider) {
11745
11836
  if (isValueProvider(provider)) {
11746
11837
  return makeRecord(undefined, provider.useValue);
11747
11838
  }
11748
11839
  else {
11749
- const factory = providerToFactory(provider, ngModuleType, providers);
11840
+ const factory = providerToFactory(provider);
11750
11841
  return makeRecord(factory, NOT_YET);
11751
11842
  }
11752
11843
  }
@@ -11820,6 +11911,17 @@ function couldBeInjectableType(value) {
11820
11911
  return (typeof value === 'function') ||
11821
11912
  (typeof value === 'object' && value instanceof InjectionToken);
11822
11913
  }
11914
+ function validateProvider(provider, providers, containerType) {
11915
+ if (isTypeProvider(provider) || isValueProvider(provider) || isFactoryProvider(provider) ||
11916
+ isExistingProvider(provider)) {
11917
+ return;
11918
+ }
11919
+ // Here we expect the provider to be a `useClass` provider (by elimination).
11920
+ const classRef = resolveForwardRef(provider && (provider.useClass || provider.provide));
11921
+ if (ngDevMode && !classRef) {
11922
+ throwInvalidProviderError(containerType, providers, provider);
11923
+ }
11924
+ }
11823
11925
 
11824
11926
  /**
11825
11927
  * @license
@@ -12597,7 +12699,7 @@ function ɵɵInheritDefinitionFeature(definition) {
12597
12699
  else {
12598
12700
  if (superType.ɵcmp) {
12599
12701
  const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?
12600
- 'Directives cannot inherit Components' :
12702
+ `Directives cannot inherit Components. Directive ${stringifyForError(definition.type)} is attempting to extend component ${stringifyForError(superType)}` :
12601
12703
  '';
12602
12704
  throw new RuntimeError(903 /* INVALID_INHERITANCE */, errorMessage);
12603
12705
  }
@@ -21054,6 +21156,13 @@ function ɵɵProvidersFeature(providers, viewProviders = []) {
21054
21156
  };
21055
21157
  }
21056
21158
 
21159
+ /**
21160
+ * TODO: Implements standalone stuff!
21161
+ *
21162
+ * @codeGenApi
21163
+ */
21164
+ function ɵɵStandaloneFeature(definition) { }
21165
+
21057
21166
  /**
21058
21167
  * @license
21059
21168
  * Copyright Google LLC All Rights Reserved.
@@ -21284,7 +21393,7 @@ class Version {
21284
21393
  /**
21285
21394
  * @publicApi
21286
21395
  */
21287
- const VERSION = new Version('14.0.0-next.13');
21396
+ const VERSION = new Version('14.0.0-next.14');
21288
21397
 
21289
21398
  /**
21290
21399
  * @license
@@ -21736,9 +21845,12 @@ class ComponentFactory extends ComponentFactory$1 {
21736
21845
  get outputs() {
21737
21846
  return toRefArray(this.componentDef.outputs);
21738
21847
  }
21739
- create(injector, projectableNodes, rootSelectorOrNode, ngModule) {
21740
- ngModule = ngModule || this.ngModule;
21741
- const rootViewInjector = ngModule ? new ChainedInjector(injector, ngModule.injector) : injector;
21848
+ create(injector, projectableNodes, rootSelectorOrNode, environmentInjector) {
21849
+ environmentInjector = environmentInjector || this.ngModule;
21850
+ let realEnvironmentInjector = environmentInjector instanceof EnvironmentInjector ?
21851
+ environmentInjector :
21852
+ environmentInjector === null || environmentInjector === void 0 ? void 0 : environmentInjector.injector;
21853
+ const rootViewInjector = realEnvironmentInjector ? new ChainedInjector(injector, realEnvironmentInjector) : injector;
21742
21854
  const rendererFactory = rootViewInjector.get(RendererFactory2, domRendererFactory3);
21743
21855
  const sanitizer = rootViewInjector.get(Sanitizer, null);
21744
21856
  const hostRenderer = rendererFactory.createRenderer(null, this.componentDef);
@@ -21964,11 +22076,11 @@ class NgModuleRef extends NgModuleRef$1 {
21964
22076
  provide: ComponentFactoryResolver$1,
21965
22077
  useValue: this.componentFactoryResolver
21966
22078
  }
21967
- ], stringify(ngModuleType));
22079
+ ], stringify(ngModuleType), new Set(['environment']));
21968
22080
  // We need to resolve the injector types separately from the injector creation, because
21969
22081
  // the module might be trying to use this ref in its constructor for DI which will cause a
21970
22082
  // circular error that will eventually error out, because the injector isn't created yet.
21971
- this._r3Injector._resolveInjectorDefTypes();
22083
+ this._r3Injector.resolveInjectorInitializers();
21972
22084
  this.instance = this.get(ngModuleType);
21973
22085
  }
21974
22086
  get(token, notFoundValue = Injector.THROW_IF_NOT_FOUND, injectFlags = InjectFlags.Default) {
@@ -21998,6 +22110,35 @@ class NgModuleFactory extends NgModuleFactory$1 {
21998
22110
  return new NgModuleRef(this.moduleType, parentInjector);
21999
22111
  }
22000
22112
  }
22113
+ class EnvironmentNgModuleRefAdapter extends NgModuleRef$1 {
22114
+ constructor(providers, parent, source) {
22115
+ super();
22116
+ this.componentFactoryResolver = new ComponentFactoryResolver(this);
22117
+ this.instance = null;
22118
+ const injector = new R3Injector([
22119
+ ...providers,
22120
+ { provide: NgModuleRef$1, useValue: this },
22121
+ { provide: ComponentFactoryResolver$1, useValue: this.componentFactoryResolver },
22122
+ ], parent || getNullInjector(), source, new Set(['environment']));
22123
+ this.injector = injector;
22124
+ injector.resolveInjectorInitializers();
22125
+ }
22126
+ destroy() {
22127
+ this.injector.destroy();
22128
+ }
22129
+ onDestroy(callback) {
22130
+ this.injector.onDestroy(callback);
22131
+ }
22132
+ }
22133
+ /**
22134
+ * Create a new environment injector.
22135
+ *
22136
+ * @publicApi
22137
+ */
22138
+ function createEnvironmentInjector(providers, parent = null, debugName = null) {
22139
+ const adapter = new EnvironmentNgModuleRefAdapter(providers, parent, debugName);
22140
+ return adapter.injector;
22141
+ }
22001
22142
 
22002
22143
  /**
22003
22144
  * @license
@@ -22923,7 +23064,7 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22923
23064
  this.insert(viewRef, index);
22924
23065
  return viewRef;
22925
23066
  }
22926
- createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, ngModuleRef) {
23067
+ createComponent(componentFactoryOrType, indexOrOptions, injector, projectableNodes, environmentInjector) {
22927
23068
  const isComponentFactory = componentFactoryOrType && !isType(componentFactoryOrType);
22928
23069
  let index;
22929
23070
  // This function supports 2 signatures and we need to handle options correctly for both:
@@ -22951,17 +23092,20 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22951
23092
  'is incompatible. Please use an object as the second argument instead.');
22952
23093
  }
22953
23094
  const options = (indexOrOptions || {});
23095
+ if (ngDevMode && options.environmentInjector && options.ngModuleRef) {
23096
+ throwError(`Cannot pass both environmentInjector and ngModuleRef options to createComponent().`);
23097
+ }
22954
23098
  index = options.index;
22955
23099
  injector = options.injector;
22956
23100
  projectableNodes = options.projectableNodes;
22957
- ngModuleRef = options.ngModuleRef;
23101
+ environmentInjector = options.environmentInjector || options.ngModuleRef;
22958
23102
  }
22959
23103
  const componentFactory = isComponentFactory ?
22960
23104
  componentFactoryOrType :
22961
23105
  new ComponentFactory(getComponentDef(componentFactoryOrType));
22962
23106
  const contextInjector = injector || this.parentInjector;
22963
23107
  // If an `NgModuleRef` is not provided explicitly, try retrieving it from the DI tree.
22964
- if (!ngModuleRef && componentFactory.ngModule == null) {
23108
+ if (!environmentInjector && componentFactory.ngModule == null) {
22965
23109
  // For the `ComponentFactory` case, entering this logic is very unlikely, since we expect that
22966
23110
  // an instance of a `ComponentFactory`, resolved via `ComponentFactoryResolver` would have an
22967
23111
  // `ngModule` field. This is possible in some test scenarios and potentially in some JIT-based
@@ -22982,12 +23126,12 @@ const R3ViewContainerRef = class ViewContainerRef extends VE_ViewContainerRef {
22982
23126
  // DO NOT REFACTOR. The code here used to have a `injector.get(NgModuleRef, null) ||
22983
23127
  // undefined` expression which seems to cause internal google apps to fail. This is documented
22984
23128
  // in the following internal bug issue: go/b/142967802
22985
- const result = _injector.get(NgModuleRef$1, null);
23129
+ const result = _injector.get(EnvironmentInjector, null);
22986
23130
  if (result) {
22987
- ngModuleRef = result;
23131
+ environmentInjector = result;
22988
23132
  }
22989
23133
  }
22990
- const componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, ngModuleRef);
23134
+ const componentRef = componentFactory.create(contextInjector, projectableNodes, undefined, environmentInjector);
22991
23135
  this.insert(componentRef.hostView, index);
22992
23136
  return componentRef;
22993
23137
  }
@@ -23677,6 +23821,7 @@ const angularCoreEnv = (() => ({
23677
23821
  'ɵɵProvidersFeature': ɵɵProvidersFeature,
23678
23822
  'ɵɵCopyDefinitionFeature': ɵɵCopyDefinitionFeature,
23679
23823
  'ɵɵInheritDefinitionFeature': ɵɵInheritDefinitionFeature,
23824
+ 'ɵɵStandaloneFeature': ɵɵStandaloneFeature,
23680
23825
  'ɵɵnextContext': ɵɵnextContext,
23681
23826
  'ɵɵnamespaceHTML': ɵɵnamespaceHTML,
23682
23827
  'ɵɵnamespaceMathML': ɵɵnamespaceMathML,
@@ -24381,7 +24526,7 @@ function compileComponent(type, metadata) {
24381
24526
  }
24382
24527
  }
24383
24528
  const templateUrl = metadata.templateUrl || `ng:///${type.name}/template.html`;
24384
- const meta = Object.assign(Object.assign({}, directiveMetadata(type, metadata)), { typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl), template: metadata.template || '', preserveWhitespaces, styles: metadata.styles || EMPTY_ARRAY, animations: metadata.animations, directives: [], changeDetection: metadata.changeDetection, pipes: new Map(), encapsulation, interpolation: metadata.interpolation, viewProviders: metadata.viewProviders || null });
24529
+ const meta = Object.assign(Object.assign({}, directiveMetadata(type, metadata)), { typeSourceSpan: compiler.createParseSourceSpan('Component', type.name, templateUrl), template: metadata.template || '', preserveWhitespaces, styles: metadata.styles || EMPTY_ARRAY, animations: metadata.animations, declarations: [], changeDetection: metadata.changeDetection, encapsulation, interpolation: metadata.interpolation, viewProviders: metadata.viewProviders || null });
24385
24530
  compilationDepth++;
24386
24531
  try {
24387
24532
  if (meta.usesInheritance) {
@@ -26054,7 +26199,20 @@ let _testabilityGetter = new _NoopGetTestability();
26054
26199
  * Use of this source code is governed by an MIT-style license that can be
26055
26200
  * found in the LICENSE file at https://angular.io/license
26056
26201
  */
26057
- let _platform;
26202
+ let _platformInjector = null;
26203
+ /**
26204
+ * Internal token to indicate whether having multiple bootstrapped platform should be allowed (only
26205
+ * one bootstrapped platform is allowed by default). This token helps to support SSR scenarios.
26206
+ */
26207
+ const ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');
26208
+ /**
26209
+ * Internal token that allows to register extra callbacks that should be invoked during the
26210
+ * `PlatformRef.destroy` operation. This token is needed to avoid a direct reference to the
26211
+ * `PlatformRef` class (i.e. register the callback via `PlatformRef.onDestroy`), thus making the
26212
+ * entire class tree-shakeable.
26213
+ */
26214
+ const PLATFORM_ON_DESTROY = new InjectionToken('PlatformOnDestroy');
26215
+ const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
26058
26216
  function compileNgModuleFactory(injector, options, moduleType) {
26059
26217
  ngDevMode && assertNgModuleType(moduleType);
26060
26218
  const moduleFactory = new NgModuleFactory(moduleType);
@@ -26099,7 +26257,6 @@ function publishDefaultGlobalUtils() {
26099
26257
  function isBoundToModule(cf) {
26100
26258
  return cf.isBoundToModule;
26101
26259
  }
26102
- const ALLOW_MULTIPLE_PLATFORMS = new InjectionToken('AllowMultipleToken');
26103
26260
  /**
26104
26261
  * A token for third-party components that can register themselves with NgProbe.
26105
26262
  *
@@ -26118,19 +26275,19 @@ class NgProbeToken {
26118
26275
  * @publicApi
26119
26276
  */
26120
26277
  function createPlatform(injector) {
26121
- if (_platform && !_platform.destroyed &&
26122
- !_platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
26278
+ if (_platformInjector && !_platformInjector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
26123
26279
  const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?
26124
26280
  'There can be only one platform. Destroy the previous one to create a new one.' :
26125
26281
  '';
26126
26282
  throw new RuntimeError(400 /* MULTIPLE_PLATFORMS */, errorMessage);
26127
26283
  }
26128
26284
  publishDefaultGlobalUtils();
26129
- _platform = injector.get(PlatformRef);
26285
+ _platformInjector = injector;
26286
+ const platform = injector.get(PlatformRef);
26130
26287
  const inits = injector.get(PLATFORM_INITIALIZER, null);
26131
26288
  if (inits)
26132
- inits.forEach((init) => init());
26133
- return _platform;
26289
+ inits.forEach(initFn => initFn());
26290
+ return platform;
26134
26291
  }
26135
26292
  /**
26136
26293
  * Creates a factory for a platform. Can be used to provide or override `Providers` specific to
@@ -26149,15 +26306,16 @@ function createPlatformFactory(parentPlatformFactory, name, providers = []) {
26149
26306
  return (extraProviders = []) => {
26150
26307
  let platform = getPlatform();
26151
26308
  if (!platform || platform.injector.get(ALLOW_MULTIPLE_PLATFORMS, false)) {
26309
+ const platformProviders = [
26310
+ ...providers,
26311
+ ...extraProviders,
26312
+ { provide: marker, useValue: true }
26313
+ ];
26152
26314
  if (parentPlatformFactory) {
26153
- parentPlatformFactory(providers.concat(extraProviders).concat({ provide: marker, useValue: true }));
26315
+ parentPlatformFactory(platformProviders);
26154
26316
  }
26155
26317
  else {
26156
- const injectedProviders = providers.concat(extraProviders).concat({ provide: marker, useValue: true }, {
26157
- provide: INJECTOR_SCOPE,
26158
- useValue: 'platform'
26159
- });
26160
- createPlatform(Injector.create({ providers: injectedProviders, name: desc }));
26318
+ createPlatform(createPlatformInjector(platformProviders, desc));
26161
26319
  }
26162
26320
  }
26163
26321
  return assertPlatform(marker);
@@ -26180,6 +26338,20 @@ function assertPlatform(requiredToken) {
26180
26338
  }
26181
26339
  return platform;
26182
26340
  }
26341
+ /**
26342
+ * Helper function to create an instance of a platform injector (that maintains the 'platform'
26343
+ * scope).
26344
+ */
26345
+ function createPlatformInjector(providers = [], name) {
26346
+ return Injector.create({
26347
+ name,
26348
+ providers: [
26349
+ { provide: INJECTOR_SCOPE, useValue: 'platform' },
26350
+ { provide: PLATFORM_ON_DESTROY, useValue: () => _platformInjector = null },
26351
+ ...providers
26352
+ ],
26353
+ });
26354
+ }
26183
26355
  /**
26184
26356
  * Destroys the current Angular platform and all Angular applications on the page.
26185
26357
  * Destroys all modules and listeners registered with the platform.
@@ -26187,9 +26359,8 @@ function assertPlatform(requiredToken) {
26187
26359
  * @publicApi
26188
26360
  */
26189
26361
  function destroyPlatform() {
26190
- if (_platform && !_platform.destroyed) {
26191
- _platform.destroy();
26192
- }
26362
+ var _a;
26363
+ (_a = getPlatform()) === null || _a === void 0 ? void 0 : _a.destroy();
26193
26364
  }
26194
26365
  /**
26195
26366
  * Returns the current platform.
@@ -26197,7 +26368,8 @@ function destroyPlatform() {
26197
26368
  * @publicApi
26198
26369
  */
26199
26370
  function getPlatform() {
26200
- return _platform && !_platform.destroyed ? _platform : null;
26371
+ var _a;
26372
+ return (_a = _platformInjector === null || _platformInjector === void 0 ? void 0 : _platformInjector.get(PlatformRef)) !== null && _a !== void 0 ? _a : null;
26201
26373
  }
26202
26374
  /**
26203
26375
  * The Angular platform is the entry point for Angular on a web page.
@@ -26331,12 +26503,17 @@ class PlatformRef {
26331
26503
  const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?
26332
26504
  'The platform has already been destroyed!' :
26333
26505
  '';
26334
- throw new RuntimeError(404 /* ALREADY_DESTROYED_PLATFORM */, errorMessage);
26506
+ throw new RuntimeError(404 /* PLATFORM_ALREADY_DESTROYED */, errorMessage);
26335
26507
  }
26336
26508
  this._modules.slice().forEach(module => module.destroy());
26337
26509
  this._destroyListeners.forEach(listener => listener());
26510
+ const destroyListener = this._injector.get(PLATFORM_ON_DESTROY, null);
26511
+ destroyListener === null || destroyListener === void 0 ? void 0 : destroyListener();
26338
26512
  this._destroyed = true;
26339
26513
  }
26514
+ /**
26515
+ * Indicates whether this instance was destroyed.
26516
+ */
26340
26517
  get destroyed() {
26341
26518
  return this._destroyed;
26342
26519
  }
@@ -26495,6 +26672,8 @@ class ApplicationRef {
26495
26672
  this._views = [];
26496
26673
  this._runningTick = false;
26497
26674
  this._stable = true;
26675
+ this._destroyed = false;
26676
+ this._destroyListeners = [];
26498
26677
  /**
26499
26678
  * Get a list of component types registered to this application.
26500
26679
  * This list is populated even before the component is created.
@@ -26554,6 +26733,12 @@ class ApplicationRef {
26554
26733
  this.isStable =
26555
26734
  merge$1(isCurrentlyStable, isStable.pipe(share()));
26556
26735
  }
26736
+ /**
26737
+ * Indicates whether this instance was destroyed.
26738
+ */
26739
+ get destroyed() {
26740
+ return this._destroyed;
26741
+ }
26557
26742
  /**
26558
26743
  * Bootstrap a component onto the element identified by its selector or, optionally, to a
26559
26744
  * specified element.
@@ -26592,6 +26777,7 @@ class ApplicationRef {
26592
26777
  * {@example core/ts/platform/platform.ts region='domNode'}
26593
26778
  */
26594
26779
  bootstrap(componentOrFactory, rootSelectorOrNode) {
26780
+ NG_DEV_MODE && this.warnIfDestroyed();
26595
26781
  if (!this._initStatus.done) {
26596
26782
  const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?
26597
26783
  'Cannot bootstrap as there are still asynchronous initializers running. ' +
@@ -26643,6 +26829,7 @@ class ApplicationRef {
26643
26829
  * detection pass during which all change detection must complete.
26644
26830
  */
26645
26831
  tick() {
26832
+ NG_DEV_MODE && this.warnIfDestroyed();
26646
26833
  if (this._runningTick) {
26647
26834
  const errorMessage = (typeof ngDevMode === 'undefined' || ngDevMode) ?
26648
26835
  'ApplicationRef.tick is called recursively' :
@@ -26674,6 +26861,7 @@ class ApplicationRef {
26674
26861
  * This will throw if the view is already attached to a ViewContainer.
26675
26862
  */
26676
26863
  attachView(viewRef) {
26864
+ NG_DEV_MODE && this.warnIfDestroyed();
26677
26865
  const view = viewRef;
26678
26866
  this._views.push(view);
26679
26867
  view.attachToAppRef(this);
@@ -26682,6 +26870,7 @@ class ApplicationRef {
26682
26870
  * Detaches a view from dirty checking again.
26683
26871
  */
26684
26872
  detachView(viewRef) {
26873
+ NG_DEV_MODE && this.warnIfDestroyed();
26685
26874
  const view = viewRef;
26686
26875
  remove(this._views, view);
26687
26876
  view.detachFromAppRef();
@@ -26696,8 +26885,48 @@ class ApplicationRef {
26696
26885
  }
26697
26886
  /** @internal */
26698
26887
  ngOnDestroy() {
26699
- this._views.slice().forEach((view) => view.destroy());
26700
- this._onMicrotaskEmptySubscription.unsubscribe();
26888
+ if (this._destroyed)
26889
+ return;
26890
+ try {
26891
+ // Call all the lifecycle hooks.
26892
+ this._destroyListeners.forEach(listener => listener());
26893
+ // Destroy all registered views.
26894
+ this._views.slice().forEach((view) => view.destroy());
26895
+ this._onMicrotaskEmptySubscription.unsubscribe();
26896
+ }
26897
+ finally {
26898
+ // Indicate that this instance is destroyed.
26899
+ this._destroyed = true;
26900
+ // Release all references.
26901
+ this._views = [];
26902
+ this._bootstrapListeners = [];
26903
+ this._destroyListeners = [];
26904
+ }
26905
+ }
26906
+ /**
26907
+ * Registers a listener to be called when an instance is destroyed.
26908
+ *
26909
+ * @param callback A callback function to add as a listener.
26910
+ * @returns A function which unregisters a listener.
26911
+ *
26912
+ * @internal
26913
+ */
26914
+ onDestroy(callback) {
26915
+ NG_DEV_MODE && this.warnIfDestroyed();
26916
+ this._destroyListeners.push(callback);
26917
+ return () => remove(this._destroyListeners, callback);
26918
+ }
26919
+ destroy() {
26920
+ if (this._destroyed) {
26921
+ throw new RuntimeError(406 /* APPLICATION_REF_ALREADY_DESTROYED */, NG_DEV_MODE && 'This instance of the `ApplicationRef` has already been destroyed.');
26922
+ }
26923
+ const injector = this._injector;
26924
+ // Check that this injector instance supports destroy operation.
26925
+ if (injector.destroy && !injector.destroyed) {
26926
+ // Destroying an underlying injector will trigger the `ngOnDestroy` lifecycle
26927
+ // hook, which invokes the remaining cleanup actions.
26928
+ injector.destroy();
26929
+ }
26701
26930
  }
26702
26931
  /**
26703
26932
  * Returns the number of attached views.
@@ -26705,6 +26934,11 @@ class ApplicationRef {
26705
26934
  get viewCount() {
26706
26935
  return this._views.length;
26707
26936
  }
26937
+ warnIfDestroyed() {
26938
+ if (NG_DEV_MODE && this._destroyed) {
26939
+ console.warn(formatRuntimeError(406 /* APPLICATION_REF_ALREADY_DESTROYED */, 'This instance of the `ApplicationRef` has already been destroyed.'));
26940
+ }
26941
+ }
26708
26942
  }
26709
26943
  ApplicationRef.ɵfac = function ApplicationRef_Factory(t) { return new (t || ApplicationRef)(ɵɵinject(NgZone), ɵɵinject(Injector), ɵɵinject(ErrorHandler), ɵɵinject(ApplicationInitStatus)); };
26710
26944
  ApplicationRef.ɵprov = /*@__PURE__*/ ɵɵdefineInjectable({ token: ApplicationRef, factory: ApplicationRef.ɵfac, providedIn: 'root' });
@@ -28893,5 +29127,5 @@ if (typeof ngDevMode !== 'undefined' && ngDevMode) {
28893
29127
  * Generated bundle index. Do not edit.
28894
29128
  */
28895
29129
 
28896
- 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, renderComponent as ɵrenderComponent, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, 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, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵresetView, ɵɵ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 };
29130
+ 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, EnvironmentInjector, ErrorHandler, EventEmitter, Host, HostBinding, HostListener, INJECTOR, INJECTOR_INITIALIZER, 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, createEnvironmentInjector, 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, renderComponent as ɵrenderComponent, resetCompiledComponents as ɵresetCompiledComponents, resetJitOptions as ɵresetJitOptions, resolveComponentResources as ɵresolveComponentResources, setAllowDuplicateNgModuleIdsForTest as ɵsetAllowDuplicateNgModuleIdsForTest, 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, ɵɵStandaloneFeature, ɵɵ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, registerNgModuleType as ɵɵregisterNgModuleType, ɵɵresetView, ɵɵ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 };
28897
29131
  //# sourceMappingURL=core.mjs.map