@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.
- package/esm2022/src/application_init.mjs +3 -2
- package/esm2022/src/application_ref.mjs +3 -3
- package/esm2022/src/di/r3_injector.mjs +6 -1
- package/esm2022/src/render3/debug/injector_profiler.mjs +26 -8
- package/esm2022/src/render3/util/injector_discovery_utils.mjs +26 -2
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/logger.mjs +3 -3
- package/fesm2022/core.mjs +147 -100
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +118 -96
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +4 -3
- package/package.json +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/ng-generate/standalone-migration/bundle.js +425 -430
- package/schematics/ng-generate/standalone-migration/bundle.js.map +4 -4
- package/testing/index.d.ts +1 -1
package/esm2022/src/version.mjs
CHANGED
|
@@ -21,5 +21,5 @@ export class Version {
|
|
|
21
21
|
/**
|
|
22
22
|
* @publicApi
|
|
23
23
|
*/
|
|
24
|
-
export const VERSION = new Version('16.2.
|
|
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.
|
|
29
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.
|
|
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.
|
|
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.
|
|
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
|
|
735
|
+
* @param eventProvider A provider object
|
|
649
736
|
*/
|
|
650
|
-
function emitProviderConfiguredEvent(
|
|
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.
|
|
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
|
* ]});
|