@spartacus/core
Version:
Spartacus - the core framework
71 lines • 11.3 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { BehaviorSubject, zip } from 'rxjs';
import { skip, tap } from 'rxjs/operators';
import { isFeatureEnabled } from '../../features-config';
import { ConfigChunk, DefaultConfig, DefaultConfigChunk, RootConfig, } from '../config-tokens';
import { deepMerge } from '../utils/deep-merge';
import * as i0 from "@angular/core";
import * as i1 from "../../lazy-loading/unified-injector";
import * as i2 from "../config-tokens";
export class ConfigurationService {
constructor(rootConfig, defaultConfig, unifiedInjector, config) {
this.rootConfig = rootConfig;
this.defaultConfig = defaultConfig;
this.unifiedInjector = unifiedInjector;
this.ambientDefaultConfig = {};
this.ambientConfig = {};
this.config = config;
this.unifiedConfig$ = new BehaviorSubject(config);
// We need to use subscription to propagate changes to the config from the beginning.
// It will be possible to make it lazy, when we drop this compatibility feature
// in the future.
this.subscription = this.feedUnifiedConfig().subscribe();
}
feedUnifiedConfig() {
const configChunks$ = this.unifiedInjector.get(ConfigChunk, []);
const defaultConfigChunks$ = this.unifiedInjector.get(DefaultConfigChunk, []);
return zip(configChunks$, defaultConfigChunks$).pipe(
// we don't need result from the root injector
skip(1), tap(([configChunks, defaultConfigChunks]) => this.processConfig(configChunks, defaultConfigChunks)));
}
processConfig(configChunks, defaultConfigChunks) {
if (defaultConfigChunks === null || defaultConfigChunks === void 0 ? void 0 : defaultConfigChunks.length) {
deepMerge(this.ambientDefaultConfig, ...defaultConfigChunks);
}
if (configChunks.length) {
deepMerge(this.ambientConfig, ...configChunks);
}
if (configChunks.length || defaultConfigChunks.length) {
this.emitUnifiedConfig();
}
}
emitUnifiedConfig() {
const newConfig = deepMerge({}, this.defaultConfig, this.ambientDefaultConfig, this.ambientConfig, this.rootConfig);
this.unifiedConfig$.next(newConfig);
// compatibility mechanism, can be disabled with feature toggle
if (!isFeatureEnabled(this.config, 'disableConfigUpdates')) {
deepMerge(this.config, newConfig);
}
}
ngOnDestroy() {
if (this.subscription) {
this.subscription.unsubscribe();
}
this.unifiedConfig$.complete();
}
}
ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ConfigurationService, deps: [{ token: RootConfig }, { token: DefaultConfig }, { token: i1.UnifiedInjector }, { token: i2.Config }], target: i0.ɵɵFactoryTarget.Injectable });
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ConfigurationService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ConfigurationService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i2.Config, decorators: [{
type: Inject,
args: [RootConfig]
}] }, { type: i2.Config, decorators: [{
type: Inject,
args: [DefaultConfig]
}] }, { type: i1.UnifiedInjector }, { type: i2.Config }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zcmMvY29uZmlnL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUE0QixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV6RCxPQUFPLEVBRUwsV0FBVyxFQUNYLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsVUFBVSxHQUNYLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS2hELE1BQU0sT0FBTyxvQkFBb0I7SUFrQi9CLFlBQ2dDLFVBQWtCLEVBQ2YsYUFBcUIsRUFDNUMsZUFBZ0MsRUFDMUMsTUFBYztRQUhnQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDNUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBUjNCLHlCQUFvQixHQUFXLEVBQUUsQ0FBQztRQUNsQyxrQkFBYSxHQUFXLEVBQUUsQ0FBQztRQVUxQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxELHFGQUFxRjtRQUNyRiwrRUFBK0U7UUFDL0UsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLGFBQWEsR0FBeUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQ2xFLFdBQVcsRUFDWCxFQUFFLENBQ0gsQ0FBQztRQUNGLE1BQU0sb0JBQW9CLEdBQXlCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUN6RSxrQkFBa0IsRUFDbEIsRUFBRSxDQUNILENBQUM7UUFFRixPQUFPLEdBQUcsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxJQUFJO1FBQ2xELDhDQUE4QztRQUM5QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQ3RELENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsWUFBc0IsRUFBRSxtQkFBNkI7UUFDekUsSUFBSSxtQkFBbUIsYUFBbkIsbUJBQW1CLHVCQUFuQixtQkFBbUIsQ0FBRSxNQUFNLEVBQUU7WUFDL0IsU0FBUyxDQUNQLElBQUksQ0FBQyxvQkFBK0MsRUFDcEQsR0FBRyxtQkFBbUIsQ0FDdkIsQ0FBQztTQUNIO1FBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBd0MsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO1NBQzNFO1FBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sRUFBRTtZQUNyRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxTQUFTLEdBQVcsU0FBUyxDQUNqQyxFQUFFLEVBQ0YsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLG9CQUFvQixFQUN6QixJQUFJLENBQUMsYUFBYSxFQUNsQixJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQTBDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpFLCtEQUErRDtRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxFQUFFO1lBQzFELFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBaUMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7UUFDQSxJQUFJLENBQUMsY0FBMEMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5RCxDQUFDOztpSEF6RlUsb0JBQW9CLGtCQW1CckIsVUFBVSxhQUNWLGFBQWE7cUhBcEJaLG9CQUFvQixjQUZuQixNQUFNOzJGQUVQLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW9CSSxNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2tpcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaXNGZWF0dXJlRW5hYmxlZCB9IGZyb20gJy4uLy4uL2ZlYXR1cmVzLWNvbmZpZyc7XG5pbXBvcnQgeyBVbmlmaWVkSW5qZWN0b3IgfSBmcm9tICcuLi8uLi9sYXp5LWxvYWRpbmcvdW5pZmllZC1pbmplY3Rvcic7XG5pbXBvcnQge1xuICBDb25maWcsXG4gIENvbmZpZ0NodW5rLFxuICBEZWZhdWx0Q29uZmlnLFxuICBEZWZhdWx0Q29uZmlnQ2h1bmssXG4gIFJvb3RDb25maWcsXG59IGZyb20gJy4uL2NvbmZpZy10b2tlbnMnO1xuaW1wb3J0IHsgZGVlcE1lcmdlIH0gZnJvbSAnLi4vdXRpbHMvZGVlcC1tZXJnZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBXaWxsIGVtaXQgdW5pZmllZCBjb25maWd1cmF0aW9uIHdoZW4gc29tZSBhbWJpZW50IGNvbmZpZ3VyYXRpb24gd2lsbCBhcHBlYXJcbiAgICpcbiAgICogQW1iaWVudCBjb25maWd1cmF0aW9uIGNhbiBhcHBlYXIgd2hlbiB3ZSBsYXp5IGxvYWQgbW9kdWxlIHdpdGggY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdW5pZmllZENvbmZpZyQ6IE9ic2VydmFibGU8Q29uZmlnPjtcblxuICAvKipcbiAgICogR2xvYmFsIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYW1iaWVudERlZmF1bHRDb25maWc6IENvbmZpZyA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGFtYmllbnRDb25maWc6IENvbmZpZyA9IHt9O1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChSb290Q29uZmlnKSBwcm90ZWN0ZWQgcm9vdENvbmZpZzogQ29uZmlnLFxuICAgIEBJbmplY3QoRGVmYXVsdENvbmZpZykgcHJvdGVjdGVkIGRlZmF1bHRDb25maWc6IENvbmZpZyxcbiAgICBwcm90ZWN0ZWQgdW5pZmllZEluamVjdG9yOiBVbmlmaWVkSW5qZWN0b3IsXG4gICAgY29uZmlnOiBDb25maWdcbiAgKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy51bmlmaWVkQ29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoY29uZmlnKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gdXNlIHN1YnNjcmlwdGlvbiB0byBwcm9wYWdhdGUgY2hhbmdlcyB0byB0aGUgY29uZmlnIGZyb20gdGhlIGJlZ2lubmluZy5cbiAgICAvLyBJdCB3aWxsIGJlIHBvc3NpYmxlIHRvIG1ha2UgaXQgbGF6eSwgd2hlbiB3ZSBkcm9wIHRoaXMgY29tcGF0aWJpbGl0eSBmZWF0dXJlXG4gICAgLy8gaW4gdGhlIGZ1dHVyZS5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZmVlZFVuaWZpZWRDb25maWcoKS5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgZmVlZFVuaWZpZWRDb25maWcoKTogT2JzZXJ2YWJsZTxbQ29uZmlnW10sIENvbmZpZ1tdXT4ge1xuICAgIGNvbnN0IGNvbmZpZ0NodW5rcyQ6IE9ic2VydmFibGU8Q29uZmlnW10+ID0gdGhpcy51bmlmaWVkSW5qZWN0b3IuZ2V0KFxuICAgICAgQ29uZmlnQ2h1bmssXG4gICAgICBbXVxuICAgICk7XG4gICAgY29uc3QgZGVmYXVsdENvbmZpZ0NodW5rcyQ6IE9ic2VydmFibGU8Q29uZmlnW10+ID0gdGhpcy51bmlmaWVkSW5qZWN0b3IuZ2V0KFxuICAgICAgRGVmYXVsdENvbmZpZ0NodW5rLFxuICAgICAgW11cbiAgICApO1xuXG4gICAgcmV0dXJuIHppcChjb25maWdDaHVua3MkLCBkZWZhdWx0Q29uZmlnQ2h1bmtzJCkucGlwZShcbiAgICAgIC8vIHdlIGRvbid0IG5lZWQgcmVzdWx0IGZyb20gdGhlIHJvb3QgaW5qZWN0b3JcbiAgICAgIHNraXAoMSksXG4gICAgICB0YXAoKFtjb25maWdDaHVua3MsIGRlZmF1bHRDb25maWdDaHVua3NdKSA9PlxuICAgICAgICB0aGlzLnByb2Nlc3NDb25maWcoY29uZmlnQ2h1bmtzLCBkZWZhdWx0Q29uZmlnQ2h1bmtzKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDb25maWcoY29uZmlnQ2h1bmtzOiBDb25maWdbXSwgZGVmYXVsdENvbmZpZ0NodW5rczogQ29uZmlnW10pIHtcbiAgICBpZiAoZGVmYXVsdENvbmZpZ0NodW5rcz8ubGVuZ3RoKSB7XG4gICAgICBkZWVwTWVyZ2UoXG4gICAgICAgIHRoaXMuYW1iaWVudERlZmF1bHRDb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgIC4uLmRlZmF1bHRDb25maWdDaHVua3NcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjb25maWdDaHVua3MubGVuZ3RoKSB7XG4gICAgICBkZWVwTWVyZ2UodGhpcy5hbWJpZW50Q29uZmlnIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCAuLi5jb25maWdDaHVua3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWdDaHVua3MubGVuZ3RoIHx8IGRlZmF1bHRDb25maWdDaHVua3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmVtaXRVbmlmaWVkQ29uZmlnKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0VW5pZmllZENvbmZpZygpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdDb25maWc6IENvbmZpZyA9IGRlZXBNZXJnZShcbiAgICAgIHt9LFxuICAgICAgdGhpcy5kZWZhdWx0Q29uZmlnLFxuICAgICAgdGhpcy5hbWJpZW50RGVmYXVsdENvbmZpZyxcbiAgICAgIHRoaXMuYW1iaWVudENvbmZpZyxcbiAgICAgIHRoaXMucm9vdENvbmZpZ1xuICAgICk7XG4gICAgKHRoaXMudW5pZmllZENvbmZpZyQgYXMgQmVoYXZpb3JTdWJqZWN0PENvbmZpZz4pLm5leHQobmV3Q29uZmlnKTtcblxuICAgIC8vIGNvbXBhdGliaWxpdHkgbWVjaGFuaXNtLCBjYW4gYmUgZGlzYWJsZWQgd2l0aCBmZWF0dXJlIHRvZ2dsZVxuICAgIGlmICghaXNGZWF0dXJlRW5hYmxlZCh0aGlzLmNvbmZpZywgJ2Rpc2FibGVDb25maWdVcGRhdGVzJykpIHtcbiAgICAgIGRlZXBNZXJnZSh0aGlzLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgbmV3Q29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgICh0aGlzLnVuaWZpZWRDb25maWckIGFzIEJlaGF2aW9yU3ViamVjdDxDb25maWc+KS5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=