UNPKG

@spartacus/core

Version:

Spartacus - the core framework

49 lines 6.47 kB
import { InjectFlags, } from '@angular/core'; const NOT_FOUND_SYMBOL = {}; /** * CombinedInjector is able to combine more than one injector together. * * Can be used to instantiate lazy loaded modules with dependency modules, * so lazy loaded module can use instances provided in all dependency modules. * * Injector tries to resolve token in all Injector, taking into account the order * in which they were provided in complementaryInjectors and fallbacks to the * mainInjector. */ export class CombinedInjector { /** * @param mainInjector Component hierarchical injector * @param complementaryInjectors Additional injector that will be taken into an account when resolving dependencies */ constructor(mainInjector, complementaryInjectors) { this.mainInjector = mainInjector; this.complementaryInjectors = complementaryInjectors; } get(token, notFoundValue, flags) { // eslint-disable-next-line no-bitwise if (flags & InjectFlags.Self) { if (notFoundValue !== undefined) { return notFoundValue; } throw new Error("CombinedInjector should be used as a parent injector / doesn't support self dependencies"); } for (const injector of this.complementaryInjectors) { // First we are resolving providers provided at Self level // in all complementary injectors... const service = injector.get(token, NOT_FOUND_SYMBOL, InjectFlags.Self); if (service !== NOT_FOUND_SYMBOL) { return service; } } for (const injector of this.complementaryInjectors) { // next we try to resolve tokens from all levels const service = injector.get(token, NOT_FOUND_SYMBOL); if (service !== NOT_FOUND_SYMBOL) { return service; } } // ...and then fallback to main injector return this.mainInjector.get(token, notFoundValue); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYmluZWQtaW5qZWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlsL2NvbWJpbmVkLWluamVjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxXQUFXLEdBSVosTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFFNUI7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQjs7O09BR0c7SUFDSCxZQUNVLFlBQXNCLEVBQ3RCLHNCQUFrQztRQURsQyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQVk7SUFDekMsQ0FBQztJQVFKLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBbUIsRUFBRSxLQUFtQjtRQUNqRCxzQ0FBc0M7UUFDdEMsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRTtZQUM1QixJQUFJLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQy9CLE9BQU8sYUFBYSxDQUFDO2FBQ3RCO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYiwwRkFBMEYsQ0FDM0YsQ0FBQztTQUNIO1FBRUQsS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDbEQsMERBQTBEO1lBQzFELG9DQUFvQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEUsSUFBSSxPQUFPLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ2hDLE9BQU8sT0FBTyxDQUFDO2FBQ2hCO1NBQ0Y7UUFFRCxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUNsRCxnREFBZ0Q7WUFDaEQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RCxJQUFJLE9BQU8sS0FBSyxnQkFBZ0IsRUFBRTtnQkFDaEMsT0FBTyxPQUFPLENBQUM7YUFDaEI7U0FDRjtRQUNELHdDQUF3QztRQUN4QyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBYnN0cmFjdFR5cGUsXG4gIEluamVjdEZsYWdzLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5jb25zdCBOT1RfRk9VTkRfU1lNQk9MID0ge307XG5cbi8qKlxuICogQ29tYmluZWRJbmplY3RvciBpcyBhYmxlIHRvIGNvbWJpbmUgbW9yZSB0aGFuIG9uZSBpbmplY3RvciB0b2dldGhlci5cbiAqXG4gKiBDYW4gYmUgdXNlZCB0byBpbnN0YW50aWF0ZSBsYXp5IGxvYWRlZCBtb2R1bGVzIHdpdGggZGVwZW5kZW5jeSBtb2R1bGVzLFxuICogc28gbGF6eSBsb2FkZWQgbW9kdWxlIGNhbiB1c2UgaW5zdGFuY2VzIHByb3ZpZGVkIGluIGFsbCBkZXBlbmRlbmN5IG1vZHVsZXMuXG4gKlxuICogSW5qZWN0b3IgdHJpZXMgdG8gcmVzb2x2ZSB0b2tlbiBpbiBhbGwgSW5qZWN0b3IsIHRha2luZyBpbnRvIGFjY291bnQgdGhlIG9yZGVyXG4gKiBpbiB3aGljaCB0aGV5IHdlcmUgcHJvdmlkZWQgaW4gY29tcGxlbWVudGFyeUluamVjdG9ycyBhbmQgZmFsbGJhY2tzIHRvIHRoZVxuICogbWFpbkluamVjdG9yLlxuICovXG5leHBvcnQgY2xhc3MgQ29tYmluZWRJbmplY3RvciBpbXBsZW1lbnRzIEluamVjdG9yIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBtYWluSW5qZWN0b3IgQ29tcG9uZW50IGhpZXJhcmNoaWNhbCBpbmplY3RvclxuICAgKiBAcGFyYW0gY29tcGxlbWVudGFyeUluamVjdG9ycyBBZGRpdGlvbmFsIGluamVjdG9yIHRoYXQgd2lsbCBiZSB0YWtlbiBpbnRvIGFuIGFjY291bnQgd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1haW5JbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBjb21wbGVtZW50YXJ5SW5qZWN0b3JzOiBJbmplY3RvcltdXG4gICkge31cblxuICBnZXQ8VD4oXG4gICAgdG9rZW46IFR5cGU8VD4gfCBJbmplY3Rpb25Ub2tlbjxUPiB8IEFic3RyYWN0VHlwZTxUPixcbiAgICBub3RGb3VuZFZhbHVlPzogVCxcbiAgICBmbGFncz86IEluamVjdEZsYWdzXG4gICk6IFQ7XG4gIGdldCh0b2tlbjogYW55LCBub3RGb3VuZFZhbHVlPzogYW55KTogYW55O1xuICBnZXQodG9rZW4sIG5vdEZvdW5kVmFsdWU/OiBhbnksIGZsYWdzPzogSW5qZWN0RmxhZ3MpOiBhbnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgaWYgKGZsYWdzICYgSW5qZWN0RmxhZ3MuU2VsZikge1xuICAgICAgaWYgKG5vdEZvdW5kVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbm90Rm91bmRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDb21iaW5lZEluamVjdG9yIHNob3VsZCBiZSB1c2VkIGFzIGEgcGFyZW50IGluamVjdG9yIC8gZG9lc24ndCBzdXBwb3J0IHNlbGYgZGVwZW5kZW5jaWVzXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpbmplY3RvciBvZiB0aGlzLmNvbXBsZW1lbnRhcnlJbmplY3RvcnMpIHtcbiAgICAgIC8vIEZpcnN0IHdlIGFyZSByZXNvbHZpbmcgcHJvdmlkZXJzIHByb3ZpZGVkIGF0IFNlbGYgbGV2ZWxcbiAgICAgIC8vIGluIGFsbCBjb21wbGVtZW50YXJ5IGluamVjdG9ycy4uLlxuICAgICAgY29uc3Qgc2VydmljZSA9IGluamVjdG9yLmdldCh0b2tlbiwgTk9UX0ZPVU5EX1NZTUJPTCwgSW5qZWN0RmxhZ3MuU2VsZik7XG4gICAgICBpZiAoc2VydmljZSAhPT0gTk9UX0ZPVU5EX1NZTUJPTCkge1xuICAgICAgICByZXR1cm4gc2VydmljZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGluamVjdG9yIG9mIHRoaXMuY29tcGxlbWVudGFyeUluamVjdG9ycykge1xuICAgICAgLy8gbmV4dCB3ZSB0cnkgdG8gcmVzb2x2ZSB0b2tlbnMgZnJvbSBhbGwgbGV2ZWxzXG4gICAgICBjb25zdCBzZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KHRva2VuLCBOT1RfRk9VTkRfU1lNQk9MKTtcbiAgICAgIGlmIChzZXJ2aWNlICE9PSBOT1RfRk9VTkRfU1lNQk9MKSB7XG4gICAgICAgIHJldHVybiBzZXJ2aWNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyAuLi5hbmQgdGhlbiBmYWxsYmFjayB0byBtYWluIGluamVjdG9yXG4gICAgcmV0dXJuIHRoaXMubWFpbkluamVjdG9yLmdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSk7XG4gIH1cbn1cbiJdfQ==