UNPKG

runtime-config-loader

Version:

Most applications require certain configuration values that can be changed at runtime of the app. The `environment.ts` files in an Angular application technically work for setting configuration values in an app, but those are buildtime configuration value

53 lines 7.39 kB
import { HttpClient } from '@angular/common/http'; import { Injectable, Optional } from '@angular/core'; import { RuntimeConfig } from '../runtime-config'; import { forkJoin, of, Subject } from 'rxjs'; import { catchError, take, tap } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; import * as i2 from "../runtime-config"; export class RuntimeConfigLoaderService { constructor(_http, config) { this._http = _http; this.configUrl = './assets/config.json'; this.configObject = null; this.configSubject = new Subject(); if (config) { this.configUrl = config.configUrl; } } loadConfig() { const urls = Array.isArray(this.configUrl) ? this.configUrl : [this.configUrl]; const observables = urls.map((url) => this.makeHttpCall(url)); return forkJoin(observables).pipe(tap((configDataArray) => { this.configObject = configDataArray.reduce((acc, configData) => { return { ...acc, ...configData }; }, {}); this.configSubject.next(this.configObject); }), catchError((err) => { console.error('Error loading config: ', err); this.configObject = null; this.configSubject.next(this.configObject); return of(null); })); } makeHttpCall(url) { return this._http.get(url).pipe(take(1)); } getConfig() { return this.configObject; } getConfigObjectKey(key) { return this.configObject ? this.configObject[key] : null; } } RuntimeConfigLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: RuntimeConfigLoaderService, deps: [{ token: i1.HttpClient }, { token: i2.RuntimeConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); RuntimeConfigLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: RuntimeConfigLoaderService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: RuntimeConfigLoaderService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.RuntimeConfig, decorators: [{ type: Optional }] }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS1jb25maWctbG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3J1bnRpbWUtY29uZmlnLWxvYWRlci9zcmMvbGliL3J1bnRpbWUtY29uZmlnLWxvYWRlci9ydW50aW1lLWNvbmZpZy1sb2FkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBTyxNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUd2RCxNQUFNLE9BQU8sMEJBQTBCO0lBS3RDLFlBQW9CLEtBQWlCLEVBQWMsTUFBcUI7UUFBcEQsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUo3QixjQUFTLEdBQXNCLHNCQUFzQixDQUFDO1FBQ3RELGlCQUFZLEdBQVEsSUFBSSxDQUFDO1FBQzFCLGtCQUFhLEdBQWlCLElBQUksT0FBTyxFQUFPLENBQUM7UUFHdkQsSUFBSSxNQUFNLEVBQUU7WUFDWCxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDbEM7SUFDRixDQUFDO0lBRUQsVUFBVTtRQUNULE1BQU0sSUFBSSxHQUFhLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBCLE1BQU0sV0FBVyxHQUFzQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FDdEIsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FDaEMsR0FBRyxDQUFDLENBQUMsZUFBc0IsRUFBRSxFQUFFO1lBQzlCLElBQUksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FDekMsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxHQUFHLEdBQUcsRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLENBQUMsRUFDRCxFQUFFLENBQ0YsQ0FBQztZQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsRUFDRixVQUFVLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN2QixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDRixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFXO1FBQy9CLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxTQUFTO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFXO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzFELENBQUM7O3VIQWxEVywwQkFBMEI7MkhBQTFCLDBCQUEwQjsyRkFBMUIsMEJBQTBCO2tCQUR0QyxVQUFVOzswQkFNOEIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUnVudGltZUNvbmZpZyB9IGZyb20gJy4uL3J1bnRpbWUtY29uZmlnJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSdW50aW1lQ29uZmlnTG9hZGVyU2VydmljZSB7XG5cdHByaXZhdGUgY29uZmlnVXJsOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcuL2Fzc2V0cy9jb25maWcuanNvbic7XG5cdHByaXZhdGUgY29uZmlnT2JqZWN0OiBhbnkgPSBudWxsO1xuXHRwdWJsaWMgY29uZmlnU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQsIEBPcHRpb25hbCgpIGNvbmZpZzogUnVudGltZUNvbmZpZykge1xuXHRcdGlmIChjb25maWcpIHtcblx0XHRcdHRoaXMuY29uZmlnVXJsID0gY29uZmlnLmNvbmZpZ1VybDtcblx0XHR9XG5cdH1cblxuXHRsb2FkQ29uZmlnKCk6IE9ic2VydmFibGU8YW55PiB7XG5cdFx0Y29uc3QgdXJsczogc3RyaW5nW10gPSBBcnJheS5pc0FycmF5KHRoaXMuY29uZmlnVXJsKVxuXHRcdFx0PyB0aGlzLmNvbmZpZ1VybFxuXHRcdFx0OiBbdGhpcy5jb25maWdVcmxdO1xuXG5cdFx0Y29uc3Qgb2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8YW55PltdID0gdXJscy5tYXAoKHVybCkgPT5cblx0XHRcdHRoaXMubWFrZUh0dHBDYWxsKHVybClcblx0XHQpO1xuXG5cdFx0cmV0dXJuIGZvcmtKb2luKG9ic2VydmFibGVzKS5waXBlKFxuXHRcdFx0dGFwKChjb25maWdEYXRhQXJyYXk6IGFueVtdKSA9PiB7XG5cdFx0XHRcdHRoaXMuY29uZmlnT2JqZWN0ID0gY29uZmlnRGF0YUFycmF5LnJlZHVjZShcblx0XHRcdFx0XHQoYWNjLCBjb25maWdEYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyAuLi5hY2MsIC4uLmNvbmZpZ0RhdGEgfTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHt9XG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0dGhpcy5jb25maWdTdWJqZWN0Lm5leHQodGhpcy5jb25maWdPYmplY3QpO1xuXHRcdFx0fSksXG5cdFx0XHRjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNvbmZpZzogJywgZXJyKTtcblx0XHRcdFx0dGhpcy5jb25maWdPYmplY3QgPSBudWxsO1xuXHRcdFx0XHR0aGlzLmNvbmZpZ1N1YmplY3QubmV4dCh0aGlzLmNvbmZpZ09iamVjdCk7XG5cdFx0XHRcdHJldHVybiBvZihudWxsKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgbWFrZUh0dHBDYWxsKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHRyZXR1cm4gdGhpcy5faHR0cC5nZXQodXJsKS5waXBlKHRha2UoMSkpO1xuXHR9XG5cblx0Z2V0Q29uZmlnKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ09iamVjdDtcblx0fVxuXG5cdGdldENvbmZpZ09iamVjdEtleShrZXk6IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ09iamVjdCA/IHRoaXMuY29uZmlnT2JqZWN0W2tleV0gOiBudWxsO1xuXHR9XG59XG4iXX0=