UNPKG

@spartacus/core

Version:

Spartacus - the core framework

94 lines 11.7 kB
import { Injectable } from '@angular/core'; import { defer, forkJoin, of, throwError } from 'rxjs'; import { shareReplay, switchMap } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "../cms/config/cms-config"; import * as i2 from "./lazy-modules.service"; export class FeatureModulesService { constructor(cmsConfig, lazyModules) { this.cmsConfig = cmsConfig; this.lazyModules = lazyModules; /* * Contains resolvers for features. * Each resolver runs only once and caches the result. */ this.features = new Map(); } /** * Check if feature is configured properly by providing module the shell app * * @param featureName */ isConfigured(featureName) { var _a; return !!((_a = this.getFeatureConfig(featureName)) === null || _a === void 0 ? void 0 : _a.module); } /** * Resolve feature based on feature name, if feature was not yet resolved * * It will first resolve all module dependencies if defined */ resolveFeature(featureName) { featureName = this.resolveFeatureAlias(featureName); return defer(() => { if (!this.features.has(featureName)) { if (!this.isConfigured(featureName)) { return throwError(new Error('No module defined for Feature Module ' + featureName)); } const featureConfig = this.getFeatureConfig(featureName); this.features.set(featureName, this.resolveDependencies(featureConfig.dependencies).pipe(switchMap((deps) => this.lazyModules.resolveModuleInstance(featureConfig.module, featureName, deps)), shareReplay())); } return this.features.get(featureName); }); } /** * Resolve * @param featureName * @protected */ getFeatureConfig(featureName) { var _a; return (_a = this.cmsConfig.featureModules) === null || _a === void 0 ? void 0 : _a[this.resolveFeatureAlias(featureName)]; } /** * Will return target feature name, resolving optional feature to feature * string mapping * * @param featureName * @protected */ resolveFeatureAlias(featureName) { var _a, _b; while (typeof ((_a = this.cmsConfig.featureModules) === null || _a === void 0 ? void 0 : _a[featureName]) === 'string') { featureName = (_b = this.cmsConfig.featureModules) === null || _b === void 0 ? void 0 : _b[featureName]; } return featureName; } /** * Resolve dependency modules for the feature * * @param dependencies * @protected */ resolveDependencies(dependencies = []) { return (dependencies === null || dependencies === void 0 ? void 0 : dependencies.length) ? forkJoin(dependencies.map((dependency) => { if (typeof dependency === 'string') { // dependency is a feature, referenced by a feature name return this.resolveFeature(dependency); } // resolve dependency from a module function return this.lazyModules.resolveDependencyModuleInstance(dependency); })) : of(undefined); } } FeatureModulesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: FeatureModulesService, deps: [{ token: i1.CmsConfig }, { token: i2.LazyModulesService }], target: i0.ɵɵFactoryTarget.Injectable }); FeatureModulesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: FeatureModulesService, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: FeatureModulesService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: function () { return [{ type: i1.CmsConfig }, { type: i2.LazyModulesService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1tb2R1bGVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9sYXp5LWxvYWRpbmcvZmVhdHVyZS1tb2R1bGVzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFNeEQsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUNZLFNBQW9CLEVBQ3BCLFdBQStCO1FBRC9CLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBUjNDOzs7V0FHRztRQUNLLGFBQVEsR0FBOEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUtyRSxDQUFDO0lBRUo7Ozs7T0FJRztJQUNILFlBQVksQ0FBQyxXQUFtQjs7UUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FBQSxNQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsMENBQUUsTUFBTSxDQUFBLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsV0FBbUI7UUFDaEMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwRCxPQUFPLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDbkMsT0FBTyxVQUFVLENBQ2YsSUFBSSxLQUFLLENBQUMsdUNBQXVDLEdBQUcsV0FBVyxDQUFDLENBQ2pFLENBQUM7aUJBQ0g7Z0JBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUV6RCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDZixXQUFXLEVBQ1gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQ3BDLGFBQWEsQ0FBQyxNQUFNLEVBQ3BCLFdBQVcsRUFDWCxJQUFJLENBQ0wsQ0FDRixFQUNELFdBQVcsRUFBRSxDQUNkLENBQ0YsQ0FBQzthQUNIO1lBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sZ0JBQWdCLENBQ3hCLFdBQW1COztRQUVuQixPQUFPLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLDBDQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQ0gsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ08sbUJBQW1CLENBQUMsV0FBbUI7O1FBQy9DLE9BQU8sT0FBTyxDQUFBLE1BQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLDBDQUFHLFdBQVcsQ0FBQyxDQUFBLEtBQUssUUFBUSxFQUFFO1lBQ3ZFLFdBQVcsR0FBRyxNQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYywwQ0FBRyxXQUFXLENBQVcsQ0FBQztTQUN0RTtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLG1CQUFtQixDQUMzQixlQUFzQixFQUFFO1FBRXhCLE9BQU8sQ0FBQSxZQUFZLGFBQVosWUFBWSx1QkFBWixZQUFZLENBQUUsTUFBTTtZQUN6QixDQUFDLENBQUMsUUFBUSxDQUNOLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUU7b0JBQ2xDLHdEQUF3RDtvQkFDeEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN4QztnQkFDRCw0Q0FBNEM7Z0JBQzVDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsQ0FDSDtZQUNILENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEIsQ0FBQzs7a0hBMUdVLHFCQUFxQjtzSEFBckIscUJBQXFCLGNBRnBCLE1BQU07MkZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nTW9kdWxlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TW9kdWxlc1NlcnZpY2UgfSBmcm9tICcuL2xhenktbW9kdWxlcy5zZXJ2aWNlJztcbmltcG9ydCB7IGRlZmVyLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDbXNDb25maWcsIEZlYXR1cmVNb2R1bGVDb25maWcgfSBmcm9tICcuLi9jbXMvY29uZmlnL2Ntcy1jb25maWcnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgRmVhdHVyZU1vZHVsZXNTZXJ2aWNlIHtcbiAgLypcbiAgICogQ29udGFpbnMgcmVzb2x2ZXJzIGZvciBmZWF0dXJlcy5cbiAgICogRWFjaCByZXNvbHZlciBydW5zIG9ubHkgb25jZSBhbmQgY2FjaGVzIHRoZSByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGZlYXR1cmVzOiBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPE5nTW9kdWxlUmVmPGFueT4+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY21zQ29uZmlnOiBDbXNDb25maWcsXG4gICAgcHJvdGVjdGVkIGxhenlNb2R1bGVzOiBMYXp5TW9kdWxlc1NlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBmZWF0dXJlIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgYnkgcHJvdmlkaW5nIG1vZHVsZSB0aGUgc2hlbGwgYXBwXG4gICAqXG4gICAqIEBwYXJhbSBmZWF0dXJlTmFtZVxuICAgKi9cbiAgaXNDb25maWd1cmVkKGZlYXR1cmVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmdldEZlYXR1cmVDb25maWcoZmVhdHVyZU5hbWUpPy5tb2R1bGU7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBmZWF0dXJlIGJhc2VkIG9uIGZlYXR1cmUgbmFtZSwgaWYgZmVhdHVyZSB3YXMgbm90IHlldCByZXNvbHZlZFxuICAgKlxuICAgKiBJdCB3aWxsIGZpcnN0IHJlc29sdmUgYWxsIG1vZHVsZSBkZXBlbmRlbmNpZXMgaWYgZGVmaW5lZFxuICAgKi9cbiAgcmVzb2x2ZUZlYXR1cmUoZmVhdHVyZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8TmdNb2R1bGVSZWY8YW55Pj4ge1xuICAgIGZlYXR1cmVOYW1lID0gdGhpcy5yZXNvbHZlRmVhdHVyZUFsaWFzKGZlYXR1cmVOYW1lKTtcblxuICAgIHJldHVybiBkZWZlcigoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmVhdHVyZXMuaGFzKGZlYXR1cmVOYW1lKSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNDb25maWd1cmVkKGZlYXR1cmVOYW1lKSkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgbmV3IEVycm9yKCdObyBtb2R1bGUgZGVmaW5lZCBmb3IgRmVhdHVyZSBNb2R1bGUgJyArIGZlYXR1cmVOYW1lKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmZWF0dXJlQ29uZmlnID0gdGhpcy5nZXRGZWF0dXJlQ29uZmlnKGZlYXR1cmVOYW1lKTtcblxuICAgICAgICB0aGlzLmZlYXR1cmVzLnNldChcbiAgICAgICAgICBmZWF0dXJlTmFtZSxcbiAgICAgICAgICB0aGlzLnJlc29sdmVEZXBlbmRlbmNpZXMoZmVhdHVyZUNvbmZpZy5kZXBlbmRlbmNpZXMpLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGRlcHMpID0+XG4gICAgICAgICAgICAgIHRoaXMubGF6eU1vZHVsZXMucmVzb2x2ZU1vZHVsZUluc3RhbmNlKFxuICAgICAgICAgICAgICAgIGZlYXR1cmVDb25maWcubW9kdWxlLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVOYW1lLFxuICAgICAgICAgICAgICAgIGRlcHNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmZlYXR1cmVzLmdldChmZWF0dXJlTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZVxuICAgKiBAcGFyYW0gZmVhdHVyZU5hbWVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldEZlYXR1cmVDb25maWcoXG4gICAgZmVhdHVyZU5hbWU6IHN0cmluZ1xuICApOiBGZWF0dXJlTW9kdWxlQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jbXNDb25maWcuZmVhdHVyZU1vZHVsZXM/LltcbiAgICAgIHRoaXMucmVzb2x2ZUZlYXR1cmVBbGlhcyhmZWF0dXJlTmFtZSlcbiAgICBdIGFzIEZlYXR1cmVNb2R1bGVDb25maWcgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZXR1cm4gdGFyZ2V0IGZlYXR1cmUgbmFtZSwgcmVzb2x2aW5nIG9wdGlvbmFsIGZlYXR1cmUgdG8gZmVhdHVyZVxuICAgKiBzdHJpbmcgbWFwcGluZ1xuICAgKlxuICAgKiBAcGFyYW0gZmVhdHVyZU5hbWVcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVGZWF0dXJlQWxpYXMoZmVhdHVyZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgd2hpbGUgKHR5cGVvZiB0aGlzLmNtc0NvbmZpZy5mZWF0dXJlTW9kdWxlcz8uW2ZlYXR1cmVOYW1lXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZlYXR1cmVOYW1lID0gdGhpcy5jbXNDb25maWcuZmVhdHVyZU1vZHVsZXM/LltmZWF0dXJlTmFtZV0gYXMgc3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4gZmVhdHVyZU5hbWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSBkZXBlbmRlbmN5IG1vZHVsZXMgZm9yIHRoZSBmZWF0dXJlXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXNcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmVEZXBlbmRlbmNpZXMoXG4gICAgZGVwZW5kZW5jaWVzOiBhbnlbXSA9IFtdXG4gICk6IE9ic2VydmFibGU8TmdNb2R1bGVSZWY8YW55PltdIHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIGRlcGVuZGVuY2llcz8ubGVuZ3RoXG4gICAgICA/IGZvcmtKb2luKFxuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXAoKGRlcGVuZGVuY3kpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGVwZW5kZW5jeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgLy8gZGVwZW5kZW5jeSBpcyBhIGZlYXR1cmUsIHJlZmVyZW5jZWQgYnkgYSBmZWF0dXJlIG5hbWVcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVzb2x2ZUZlYXR1cmUoZGVwZW5kZW5jeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyByZXNvbHZlIGRlcGVuZGVuY3kgZnJvbSBhIG1vZHVsZSBmdW5jdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGF6eU1vZHVsZXMucmVzb2x2ZURlcGVuZGVuY3lNb2R1bGVJbnN0YW5jZShkZXBlbmRlbmN5KTtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICA6IG9mKHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==