UNPKG

@spartacus/core

Version:

Spartacus - the core framework

53 lines 8.26 kB
import { Injectable, InjectFlags, } from '@angular/core'; import { filter, map, scan, startWith } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "./lazy-modules.service"; const NOT_FOUND_SYMBOL = {}; /** * UnifiedInjector provides a way to get instances of tokens not only once, from the root injector, * but also from lazy loaded module injectors that can be initialized over time. */ export class UnifiedInjector { constructor(rootInjector, lazyModules) { this.rootInjector = rootInjector; this.lazyModules = lazyModules; /** * Gather all the injectors, with the root injector as a first one * */ this.injectors$ = this.lazyModules.modules$.pipe(map((moduleRef) => moduleRef.injector), startWith(this.rootInjector)); } /** * Gen instances for specified tokens. * * When notFoundValue is provided, it will consistently emit once per injector, * even if injector doesn't contain instances for specified token. * Otherwise, emissions will only involve cases, where new instances will be found. * * @param token * @param notFoundValue */ get(token, notFoundValue) { return this.injectors$.pipe(map((injector, index) => injector.get(token, notFoundValue !== null && notFoundValue !== void 0 ? notFoundValue : NOT_FOUND_SYMBOL, // we want to get only Self instances from all injectors except the // first one, which is a root injector index ? InjectFlags.Self : undefined)), filter((instance) => instance !== NOT_FOUND_SYMBOL)); } getMulti(token) { return this.get(token, []).pipe(filter((instances) => { if (!Array.isArray(instances)) { throw new Error(`Multi-providers mixed with single providers for ${token.toString()}!`); } return instances.length > 0; }), scan((acc, services) => [...acc, ...services], [])); } } UnifiedInjector.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UnifiedInjector, deps: [{ token: i0.Injector }, { token: i1.LazyModulesService }], target: i0.ɵɵFactoryTarget.Injectable }); UnifiedInjector.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UnifiedInjector, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: UnifiedInjector, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.LazyModulesService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pZmllZC1pbmplY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvc3JjL2xhenktbG9hZGluZy91bmlmaWVkLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEVBQ1YsV0FBVyxHQUlaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTlELE1BQU0sZ0JBQWdCLEdBQVEsRUFBRSxDQUFDO0FBRWpDOzs7R0FHRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBVTFCLFlBQ1ksWUFBc0IsRUFDdEIsV0FBK0I7UUFEL0IsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBWDNDOzs7V0FHRztRQUNNLGVBQVUsR0FBeUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN4RSxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFDdEMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FDN0IsQ0FBQztJQUtDLENBQUM7SUFFSjs7Ozs7Ozs7O09BU0c7SUFDSCxHQUFHLENBQ0QsS0FBb0QsRUFDcEQsYUFBaUI7UUFFakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDekIsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQ1YsS0FBSyxFQUNMLGFBQWEsYUFBYixhQUFhLGNBQWIsYUFBYSxHQUFJLGdCQUFnQjtRQUNqQyxtRUFBbUU7UUFDbkUsc0NBQXNDO1FBQ3RDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNyQyxDQUNGLEVBQ0QsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFXRCxRQUFRLENBQ04sS0FBMEQ7UUFFMUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzdCLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUM3QixNQUFNLElBQUksS0FBSyxDQUNiLG1EQUFtRCxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FDdkUsQ0FBQzthQUNIO1lBQ0QsT0FBTyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsRUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDOzs0R0FsRVUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFic3RyYWN0VHlwZSxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0RmxhZ3MsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgVHlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TW9kdWxlc1NlcnZpY2UgfSBmcm9tICcuL2xhenktbW9kdWxlcy5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzY2FuLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IE5PVF9GT1VORF9TWU1CT0w6IGFueSA9IHt9O1xuXG4vKipcbiAqIFVuaWZpZWRJbmplY3RvciBwcm92aWRlcyBhIHdheSB0byBnZXQgaW5zdGFuY2VzIG9mIHRva2VucyBub3Qgb25seSBvbmNlLCBmcm9tIHRoZSByb290IGluamVjdG9yLFxuICogYnV0IGFsc28gZnJvbSBsYXp5IGxvYWRlZCBtb2R1bGUgaW5qZWN0b3JzIHRoYXQgY2FuIGJlIGluaXRpYWxpemVkIG92ZXIgdGltZS5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFVuaWZpZWRJbmplY3RvciB7XG4gIC8qKlxuICAgKiBHYXRoZXIgYWxsIHRoZSBpbmplY3RvcnMsIHdpdGggdGhlIHJvb3QgaW5qZWN0b3IgYXMgYSBmaXJzdCBvbmVcbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGluamVjdG9ycyQ6IE9ic2VydmFibGU8SW5qZWN0b3I+ID0gdGhpcy5sYXp5TW9kdWxlcy5tb2R1bGVzJC5waXBlKFxuICAgIG1hcCgobW9kdWxlUmVmKSA9PiBtb2R1bGVSZWYuaW5qZWN0b3IpLFxuICAgIHN0YXJ0V2l0aCh0aGlzLnJvb3RJbmplY3RvcilcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcm9vdEluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgbGF6eU1vZHVsZXM6IExhenlNb2R1bGVzU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIEdlbiBpbnN0YW5jZXMgZm9yIHNwZWNpZmllZCB0b2tlbnMuXG4gICAqXG4gICAqIFdoZW4gbm90Rm91bmRWYWx1ZSBpcyBwcm92aWRlZCwgaXQgd2lsbCBjb25zaXN0ZW50bHkgZW1pdCBvbmNlIHBlciBpbmplY3RvcixcbiAgICogZXZlbiBpZiBpbmplY3RvciBkb2Vzbid0IGNvbnRhaW4gaW5zdGFuY2VzIGZvciBzcGVjaWZpZWQgdG9rZW4uXG4gICAqIE90aGVyd2lzZSwgZW1pc3Npb25zIHdpbGwgb25seSBpbnZvbHZlIGNhc2VzLCB3aGVyZSBuZXcgaW5zdGFuY2VzIHdpbGwgYmUgZm91bmQuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlblxuICAgKiBAcGFyYW0gbm90Rm91bmRWYWx1ZVxuICAgKi9cbiAgZ2V0PFQ+KFxuICAgIHRva2VuOiBUeXBlPFQ+IHwgSW5qZWN0aW9uVG9rZW48VD4gfCBBYnN0cmFjdFR5cGU8VD4sXG4gICAgbm90Rm91bmRWYWx1ZT86IFRcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3JzJC5waXBlKFxuICAgICAgbWFwKChpbmplY3RvciwgaW5kZXgpID0+XG4gICAgICAgIGluamVjdG9yLmdldDxUPihcbiAgICAgICAgICB0b2tlbixcbiAgICAgICAgICBub3RGb3VuZFZhbHVlID8/IE5PVF9GT1VORF9TWU1CT0wsXG4gICAgICAgICAgLy8gd2Ugd2FudCB0byBnZXQgb25seSBTZWxmIGluc3RhbmNlcyBmcm9tIGFsbCBpbmplY3RvcnMgZXhjZXB0IHRoZVxuICAgICAgICAgIC8vIGZpcnN0IG9uZSwgd2hpY2ggaXMgYSByb290IGluamVjdG9yXG4gICAgICAgICAgaW5kZXggPyBJbmplY3RGbGFncy5TZWxmIDogdW5kZWZpbmVkXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWx0ZXIoKGluc3RhbmNlKSA9PiBpbnN0YW5jZSAhPT0gTk9UX0ZPVU5EX1NZTUJPTClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtdWx0aSBwcm92aWRlZCBpbnN0YW5jZXMgZm9yIGEgc3BlY2lmaWVkIHRva2VuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlblxuICAgKi9cbiAgZ2V0TXVsdGk8VD4oXG4gICAgdG9rZW46IFR5cGU8VD4gfCBJbmplY3Rpb25Ub2tlbjxUPiB8IEFic3RyYWN0VHlwZTxUPlxuICApOiBPYnNlcnZhYmxlPFRbXT47XG4gIGdldE11bHRpPFQ+KHRva2VuOiBhbnkpOiBPYnNlcnZhYmxlPFQ+O1xuICBnZXRNdWx0aTxUPihcbiAgICB0b2tlbjogVHlwZTxUPiB8IEluamVjdGlvblRva2VuPFQ+IHwgQWJzdHJhY3RUeXBlPFQ+IHwgYW55XG4gICk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0KHRva2VuLCBbXSkucGlwZShcbiAgICAgIGZpbHRlcigoaW5zdGFuY2VzKSA9PiB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnN0YW5jZXMpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE11bHRpLXByb3ZpZGVycyBtaXhlZCB3aXRoIHNpbmdsZSBwcm92aWRlcnMgZm9yICR7dG9rZW4udG9TdHJpbmcoKX0hYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcy5sZW5ndGggPiAwO1xuICAgICAgfSksXG4gICAgICBzY2FuKChhY2MsIHNlcnZpY2VzKSA9PiBbLi4uYWNjLCAuLi5zZXJ2aWNlc10sIFtdKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==