@angular/core 16.2.10 → 16.2.12

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.
@@ -21,5 +21,5 @@ export class Version {
21
21
  /**
22
22
  * @publicApi
23
23
  */
24
- export const VERSION = new Version('16.2.10');
24
+ export const VERSION = new Version('16.2.12');
25
25
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxPQUFPO0lBS2xCLFlBQW1CLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQzdCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXByZXNlbnRzIHRoZSB2ZXJzaW9uIG9mIEFuZ3VsYXJcbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBjbGFzcyBWZXJzaW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IG1ham9yOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBtaW5vcjogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgcGF0Y2g6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZnVsbDogc3RyaW5nKSB7XG4gICAgdGhpcy5tYWpvciA9IGZ1bGwuc3BsaXQoJy4nKVswXTtcbiAgICB0aGlzLm1pbm9yID0gZnVsbC5zcGxpdCgnLicpWzFdO1xuICAgIHRoaXMucGF0Y2ggPSBmdWxsLnNwbGl0KCcuJykuc2xpY2UoMikuam9pbignLicpO1xuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcwLjAuMC1QTEFDRUhPTERFUicpO1xuIl19
@@ -25,10 +25,10 @@ export class Log {
25
25
  result() {
26
26
  return this.logItems.join('; ');
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: Log, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: Log }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Log, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
29
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Log }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.10", ngImport: i0, type: Log, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: Log, decorators: [{
32
32
  type: Injectable
33
33
  }], ctorParameters: function () { return []; } });
34
34
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS90ZXN0aW5nL3NyYy9sb2dnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFHekMsTUFBTSxPQUFPLEdBQUc7SUFHZDtRQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxHQUFHLENBQUMsS0FBUTtRQUNWLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxFQUFFLENBQUMsS0FBUTtRQUNULE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt5SEF2QlUsR0FBRzs2SEFBSCxHQUFHOztzR0FBSCxHQUFHO2tCQURmLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvZzxUID0gc3RyaW5nPiB7XG4gIGxvZ0l0ZW1zOiBUW107XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5sb2dJdGVtcyA9IFtdO1xuICB9XG5cbiAgYWRkKHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5sb2dJdGVtcy5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIGZuKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMubG9nSXRlbXMucHVzaCh2YWx1ZSk7XG4gICAgfTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMubG9nSXRlbXMgPSBbXTtcbiAgfVxuXG4gIHJlc3VsdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxvZ0l0ZW1zLmpvaW4oJzsgJyk7XG4gIH1cbn1cbiJdfQ==
package/fesm2022/core.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v16.2.10
2
+ * @license Angular v16.2.12
3
3
  * (c) 2010-2022 Google LLC. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -604,6 +604,93 @@ function initNgDevMode() {
604
604
  return false;
605
605
  }
606
606
 
607
+ /**
608
+ * Creates a token that can be used in a DI Provider.
609
+ *
610
+ * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
611
+ * runtime representation) such as when injecting an interface, callable type, array or
612
+ * parameterized type.
613
+ *
614
+ * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
615
+ * the `Injector`. This provides an additional level of type safety.
616
+ *
617
+ * <div class="alert is-helpful">
618
+ *
619
+ * **Important Note**: Ensure that you use the same instance of the `InjectionToken` in both the
620
+ * provider and the injection call. Creating a new instance of `InjectionToken` in different places,
621
+ * even with the same description, will be treated as different tokens by Angular's DI system,
622
+ * leading to a `NullInjectorError`.
623
+ *
624
+ * </div>
625
+ *
626
+ * <code-example format="typescript" language="typescript" path="injection-token/src/main.ts"
627
+ * region="InjectionToken"></code-example>
628
+ *
629
+ * When creating an `InjectionToken`, you can optionally specify a factory function which returns
630
+ * (possibly by creating) a default value of the parameterized type `T`. This sets up the
631
+ * `InjectionToken` using this factory as a provider as if it was defined explicitly in the
632
+ * application's root injector. If the factory function, which takes zero arguments, needs to inject
633
+ * dependencies, it can do so using the [`inject`](api/core/inject) function.
634
+ * As you can see in the Tree-shakable InjectionToken example below.
635
+ *
636
+ * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which
637
+ * overrides the above behavior and marks the token as belonging to a particular `@NgModule` (note:
638
+ * this option is now deprecated). As mentioned above, `'root'` is the default value for
639
+ * `providedIn`.
640
+ *
641
+ * The `providedIn: NgModule` and `providedIn: 'any'` options are deprecated.
642
+ *
643
+ * @usageNotes
644
+ * ### Basic Examples
645
+ *
646
+ * ### Plain InjectionToken
647
+ *
648
+ * {@example core/di/ts/injector_spec.ts region='InjectionToken'}
649
+ *
650
+ * ### Tree-shakable InjectionToken
651
+ *
652
+ * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
653
+ *
654
+ * @publicApi
655
+ */
656
+ class InjectionToken {
657
+ /**
658
+ * @param _desc Description for the token,
659
+ * used only for debugging purposes,
660
+ * it should but does not need to be unique
661
+ * @param options Options for the token's usage, as described above
662
+ */
663
+ constructor(_desc, options) {
664
+ this._desc = _desc;
665
+ /** @internal */
666
+ this.ngMetadataName = 'InjectionToken';
667
+ this.ɵprov = undefined;
668
+ if (typeof options == 'number') {
669
+ (typeof ngDevMode === 'undefined' || ngDevMode) &&
670
+ assertLessThan(options, 0, 'Only negative numbers are supported here');
671
+ // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.
672
+ // See `InjectorMarkers`
673
+ this.__NG_ELEMENT_ID__ = options;
674
+ }
675
+ else if (options !== undefined) {
676
+ this.ɵprov = ɵɵdefineInjectable({
677
+ token: this,
678
+ providedIn: options.providedIn || 'root',
679
+ factory: options.factory,
680
+ });
681
+ }
682
+ }
683
+ /**
684
+ * @internal
685
+ */
686
+ get multi() {
687
+ return this;
688
+ }
689
+ toString() {
690
+ return `InjectionToken ${this._desc}`;
691
+ }
692
+ }
693
+
607
694
  let _injectorProfilerContext;
608
695
  function getInjectorProfilerContext() {
609
696
  !ngDevMode && throwError('getInjectorProfilerContext should never be called in production mode');
@@ -645,18 +732,35 @@ function injectorProfiler(event) {
645
732
  * Emits an InjectorProfilerEventType.ProviderConfigured to the injector profiler. The data in the
646
733
  * emitted event includes the raw provider, as well as the token that provider is providing.
647
734
  *
648
- * @param provider A provider object
735
+ * @param eventProvider A provider object
649
736
  */
650
- function emitProviderConfiguredEvent(provider, isViewProvider = false) {
737
+ function emitProviderConfiguredEvent(eventProvider, isViewProvider = false) {
651
738
  !ngDevMode && throwError('Injector profiler should never be called in production mode');
739
+ let token;
740
+ // if the provider is a TypeProvider (typeof provider is function) then the token is the
741
+ // provider itself
742
+ if (typeof eventProvider === 'function') {
743
+ token = eventProvider;
744
+ }
745
+ // if the provider is an injection token, then the token is the injection token.
746
+ else if (eventProvider instanceof InjectionToken) {
747
+ token = eventProvider;
748
+ }
749
+ // in all other cases we can access the token via the `provide` property of the provider
750
+ else {
751
+ token = resolveForwardRef(eventProvider.provide);
752
+ }
753
+ let provider = eventProvider;
754
+ // Injection tokens may define their own default provider which gets attached to the token itself
755
+ // as `ɵprov`. In this case, we want to emit the provider that is attached to the token, not the
756
+ // token itself.
757
+ if (eventProvider instanceof InjectionToken) {
758
+ provider = eventProvider.ɵprov || eventProvider;
759
+ }
652
760
  injectorProfiler({
653
761
  type: 2 /* InjectorProfilerEventType.ProviderConfigured */,
654
762
  context: getInjectorProfilerContext(),
655
- providerRecord: {
656
- token: typeof provider === 'function' ? provider : resolveForwardRef(provider.provide),
657
- provider,
658
- isViewProvider
659
- }
763
+ providerRecord: { token, provider, isViewProvider }
660
764
  });
661
765
  }
662
766
  /**
@@ -8757,93 +8861,6 @@ function getSanitizer() {
8757
8861
  return lView && lView[ENVIRONMENT].sanitizer;
8758
8862
  }
8759
8863
 
8760
- /**
8761
- * Creates a token that can be used in a DI Provider.
8762
- *
8763
- * Use an `InjectionToken` whenever the type you are injecting is not reified (does not have a
8764
- * runtime representation) such as when injecting an interface, callable type, array or
8765
- * parameterized type.
8766
- *
8767
- * `InjectionToken` is parameterized on `T` which is the type of object which will be returned by
8768
- * the `Injector`. This provides an additional level of type safety.
8769
- *
8770
- * <div class="alert is-helpful">
8771
- *
8772
- * **Important Note**: Ensure that you use the same instance of the `InjectionToken` in both the
8773
- * provider and the injection call. Creating a new instance of `InjectionToken` in different places,
8774
- * even with the same description, will be treated as different tokens by Angular's DI system,
8775
- * leading to a `NullInjectorError`.
8776
- *
8777
- * </div>
8778
- *
8779
- * <code-example format="typescript" language="typescript" path="injection-token/src/main.ts"
8780
- * region="InjectionToken"></code-example>
8781
- *
8782
- * When creating an `InjectionToken`, you can optionally specify a factory function which returns
8783
- * (possibly by creating) a default value of the parameterized type `T`. This sets up the
8784
- * `InjectionToken` using this factory as a provider as if it was defined explicitly in the
8785
- * application's root injector. If the factory function, which takes zero arguments, needs to inject
8786
- * dependencies, it can do so using the [`inject`](api/core/inject) function.
8787
- * As you can see in the Tree-shakable InjectionToken example below.
8788
- *
8789
- * Additionally, if a `factory` is specified you can also specify the `providedIn` option, which
8790
- * overrides the above behavior and marks the token as belonging to a particular `@NgModule` (note:
8791
- * this option is now deprecated). As mentioned above, `'root'` is the default value for
8792
- * `providedIn`.
8793
- *
8794
- * The `providedIn: NgModule` and `providedIn: 'any'` options are deprecated.
8795
- *
8796
- * @usageNotes
8797
- * ### Basic Examples
8798
- *
8799
- * ### Plain InjectionToken
8800
- *
8801
- * {@example core/di/ts/injector_spec.ts region='InjectionToken'}
8802
- *
8803
- * ### Tree-shakable InjectionToken
8804
- *
8805
- * {@example core/di/ts/injector_spec.ts region='ShakableInjectionToken'}
8806
- *
8807
- * @publicApi
8808
- */
8809
- class InjectionToken {
8810
- /**
8811
- * @param _desc Description for the token,
8812
- * used only for debugging purposes,
8813
- * it should but does not need to be unique
8814
- * @param options Options for the token's usage, as described above
8815
- */
8816
- constructor(_desc, options) {
8817
- this._desc = _desc;
8818
- /** @internal */
8819
- this.ngMetadataName = 'InjectionToken';
8820
- this.ɵprov = undefined;
8821
- if (typeof options == 'number') {
8822
- (typeof ngDevMode === 'undefined' || ngDevMode) &&
8823
- assertLessThan(options, 0, 'Only negative numbers are supported here');
8824
- // This is a special hack to assign __NG_ELEMENT_ID__ to this instance.
8825
- // See `InjectorMarkers`
8826
- this.__NG_ELEMENT_ID__ = options;
8827
- }
8828
- else if (options !== undefined) {
8829
- this.ɵprov = ɵɵdefineInjectable({
8830
- token: this,
8831
- providedIn: options.providedIn || 'root',
8832
- factory: options.factory,
8833
- });
8834
- }
8835
- }
8836
- /**
8837
- * @internal
8838
- */
8839
- get multi() {
8840
- return this;
8841
- }
8842
- toString() {
8843
- return `InjectionToken ${this._desc}`;
8844
- }
8845
- }
8846
-
8847
8864
  /**
8848
8865
  * A multi-provider token for initialization functions that will run upon construction of an
8849
8866
  * environment injector.
@@ -9289,6 +9306,11 @@ class R3Injector extends EnvironmentInjector {
9289
9306
  if (def && this.injectableDefInScope(def)) {
9290
9307
  // Found an injectable def and it's scoped to this injector. Pretend as if it was here
9291
9308
  // all along.
9309
+ if (ngDevMode) {
9310
+ runInInjectorProfilerContext(this, token, () => {
9311
+ emitProviderConfiguredEvent(token);
9312
+ });
9313
+ }
9292
9314
  record = makeRecord(injectableDefOrInjectorDefFactory(token), NOT_YET);
9293
9315
  }
9294
9316
  else {
@@ -10276,7 +10298,7 @@ class Version {
10276
10298
  /**
10277
10299
  * @publicApi
10278
10300
  */
10279
- const VERSION = new Version('16.2.10');
10301
+ const VERSION = new Version('16.2.12');
10280
10302
 
10281
10303
  // This default value is when checking the hierarchy for a token.
10282
10304
  //
@@ -26540,7 +26562,7 @@ const ITS_JUST_ANGULAR = true;
26540
26562
  * ```
26541
26563
  *
26542
26564
  * ### Example with standalone application
26543
- *
26565
+ * ```
26544
26566
  * function initializeAppFactory(httpClient: HttpClient): () => Observable<any> {
26545
26567
  * return () => httpClient.get("https://someUrl.com/api/user")
26546
26568
  * .pipe(
@@ -26559,6 +26581,7 @@ const ITS_JUST_ANGULAR = true;
26559
26581
  * },
26560
26582
  * ],
26561
26583
  * });
26584
+ * ```
26562
26585
  *
26563
26586
  * @publicApi
26564
26587
  */
@@ -27275,6 +27298,11 @@ function getProviderImportsContainer(injector) {
27275
27298
  if (defTypeRef === null) {
27276
27299
  return null;
27277
27300
  }
27301
+ // In standalone applications, the root environment injector created by bootstrapApplication
27302
+ // may have no associated "instance".
27303
+ if (defTypeRef.instance === null) {
27304
+ return null;
27305
+ }
27278
27306
  return defTypeRef.instance.constructor;
27279
27307
  }
27280
27308
  /**
@@ -27456,12 +27484,25 @@ function walkProviderTreeToDiscoverImportPaths(providerToPath, visitedContainers
27456
27484
  * @returns an array of objects representing the providers of the given injector
27457
27485
  */
27458
27486
  function getEnvironmentInjectorProviders(injector) {
27487
+ const providerRecords = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];
27488
+ // platform injector has no provider imports container so can we skip trying to
27489
+ // find import paths
27490
+ if (isPlatformInjector(injector)) {
27491
+ return providerRecords;
27492
+ }
27459
27493
  const providerImportsContainer = getProviderImportsContainer(injector);
27460
27494
  if (providerImportsContainer === null) {
27495
+ // There is a special case where the bootstrapped component does not
27496
+ // import any NgModules. In this case the environment injector connected to
27497
+ // that component is the root injector, which does not have a provider imports
27498
+ // container (and thus no concept of module import paths). Therefore we simply
27499
+ // return the provider records as is.
27500
+ if (isRootInjector(injector)) {
27501
+ return providerRecords;
27502
+ }
27461
27503
  throwError('Could not determine where injector providers were configured.');
27462
27504
  }
27463
27505
  const providerToPath = getProviderImportPaths(providerImportsContainer);
27464
- const providerRecords = getFrameworkDIDebugData().resolverToProviders.get(injector) ?? [];
27465
27506
  return providerRecords.map(providerRecord => {
27466
27507
  let importPath = providerToPath.get(providerRecord.provider) ?? [providerImportsContainer];
27467
27508
  const def = getComponentDef(providerImportsContainer);
@@ -27474,6 +27515,12 @@ function getEnvironmentInjectorProviders(injector) {
27474
27515
  return { ...providerRecord, importPath };
27475
27516
  });
27476
27517
  }
27518
+ function isPlatformInjector(injector) {
27519
+ return injector instanceof R3Injector && injector.scopes.has('platform');
27520
+ }
27521
+ function isRootInjector(injector) {
27522
+ return injector instanceof R3Injector && injector.scopes.has('root');
27523
+ }
27477
27524
  /**
27478
27525
  * Gets the providers configured on an injector.
27479
27526
  *
@@ -28100,10 +28147,10 @@ function createOrReusePlatformInjector(providers = []) {
28100
28147
  // is already bootstrapped and no additional actions are required.
28101
28148
  if (_platformInjector)
28102
28149
  return _platformInjector;
28150
+ publishDefaultGlobalUtils();
28103
28151
  // Otherwise, setup a new platform injector and run platform initializers.
28104
28152
  const injector = createPlatformInjector(providers);
28105
28153
  _platformInjector = injector;
28106
- publishDefaultGlobalUtils();
28107
28154
  publishSignalConfiguration();
28108
28155
  runPlatformInitializers(injector);
28109
28156
  return injector;
@@ -28895,7 +28942,7 @@ function internalProvideZoneChangeDetection(ngZoneFactory) {
28895
28942
  * `BootstrapOptions` instead.
28896
28943
  *
28897
28944
  * @usageNotes
28898
- * ```typescript=
28945
+ * ```typescript
28899
28946
  * bootstrapApplication(MyApp, {providers: [
28900
28947
  * provideZoneChangeDetection({eventCoalescing: true}),
28901
28948
  * ]});