{"version":3,"file":"angular-runtime-config.mjs","sources":["../../../projects/angular-runtime-config/src/lib/configuration.injection-tokens.ts","../../../projects/angular-runtime-config/src/lib/helpers.ts","../../../projects/angular-runtime-config/src/lib/configuration.service.ts","../../../projects/angular-runtime-config/src/lib/angular-runtime-config.module.ts","../../../projects/angular-runtime-config/src/public-api.ts","../../../projects/angular-runtime-config/src/angular-runtime-config.ts"],"sourcesContent":["import { InjectionToken, Type } from '@angular/core';\nimport { ConfigurationUrlFactory } from './configuration.options';\n\nexport const CONFIGURATION_APP_INITIALIZER = new InjectionToken<(() => unknown | Promise<unknown>)[]>('CONFIGURATION_APP_INITIALIZER');\nexport const CONFIGURATION_TYPE = new InjectionToken<Type<unknown>>('CONFIGURATION_TYPE');\nexport const CONFIGURATION_OPTIONS = new InjectionToken<ConfigurationUrlFactory>('CONFIGURATION_OPTIONS');\n","export function isPromise(x: unknown): boolean {\n  return x != null && typeof (x as Promise<unknown>).then === 'function';\n}\n","import { Inject, Injectable, Injector, Type } from '@angular/core';\nimport { PlatformLocation } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { CONFIGURATION_OPTIONS, CONFIGURATION_TYPE } from './configuration.injection-tokens';\nimport { ConfigurationOptions } from './configuration.options';\nimport { isPromise } from './helpers';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ConfigurationService<TConfiguration> {\n  private config?: TConfiguration;\n\n  public get configuration(): TConfiguration {\n    if (this.config == null) {\n      throw Error('Configuration hasn\\'t been initialized')\n    }\n\n    return this.config;\n  }\n\n  public constructor(\n    private readonly http: HttpClient,\n    private readonly platformLocation: PlatformLocation,\n    private readonly injector: Injector,\n    @Inject(CONFIGURATION_TYPE) private readonly configurationType: Type<TConfiguration>,\n    @Inject(CONFIGURATION_OPTIONS) private readonly configurationOptions: ConfigurationOptions | undefined\n  ) {\n  }\n\n  public async init(): Promise<void> {\n    try {\n      await this.initInternal();\n    } catch (error: any) {\n      throw Error(`Configuration load failed - ${error.message}`);\n    }\n  }\n\n  private async initInternal(): Promise<void> {\n    const urls = await this.getUrls();\n    const externalUrls = urls.map(x => this.ensureExternalUrl(x));\n\n    const promises = externalUrls.map(url => this.http.get(url).toPromise());\n    await Promise.all(promises);\n\n    let config = new this.configurationType();\n    for (const promise of promises) {\n      const value = await promise;\n      for (const prop in value) {\n        if (value.hasOwnProperty(prop)) {\n          // @ts-ignore\n          config[prop] = value[prop];\n        }\n      }\n    }\n\n    this.config = config;\n\n    if (this.configurationOptions?.log === true) {\n      console.log(\"Configuration loaded\", config);\n    }\n  }\n\n  private async getUrls(): Promise<string[]> {\n    if (this.configurationOptions?.urlFactory == null) {\n      return ['config.json'];\n    }\n\n    let result = this.configurationOptions.urlFactory(this.injector);\n\n    if (isPromise(result)) {\n      result = await result;\n    }\n\n    if (typeof result === 'string') {\n      return [result];\n    }\n\n    if (Array.isArray(result)) {\n      return result;\n    }\n\n    throw new Error('Unexpected value returned from ConfigurationUrlFactory');\n  }\n\n  private ensureExternalUrl(url: string): string {\n    if (url.startsWith('//') || url.startsWith('http://') || url.startsWith('https://')) {\n      return url;\n    }\n\n    if (url.startsWith('/')) {\n      url = url.substr(1);\n    }\n\n    const baseHref = this.platformLocation.getBaseHrefFromDOM();\n    const externalUrl = `${baseHref}${url}`;\n    return externalUrl;\n  }\n}\n","import { APP_INITIALIZER, Injector, NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders } from '@angular/core';\nimport { ConfigurationService } from './configuration.service';\nimport { CONFIGURATION_APP_INITIALIZER, CONFIGURATION_OPTIONS, CONFIGURATION_TYPE } from './configuration.injection-tokens';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ConfigurationOptions } from './configuration.options';\nimport { isPromise } from './helpers';\n\n@NgModule({\n  declarations: [],\n  imports: [\n    CommonModule,\n    HttpClientModule\n  ]\n})\nexport class AngularRuntimeConfigModule {\n  public static forRoot<TConfiguration>(configurationType: Type<TConfiguration>, options?: ConfigurationOptions): ModuleWithProviders<AngularRuntimeConfigModule> {\n    return {\n      ngModule: AngularRuntimeConfigModule,\n      providers: [\n        ConfigurationService,\n        {\n          provide: CONFIGURATION_TYPE,\n          useValue: configurationType\n        },\n        {\n          provide: CONFIGURATION_OPTIONS,\n          useValue: options\n        },\n        {\n          provide: configurationType,\n          useFactory: (configurationService: ConfigurationService<TConfiguration>) => configurationService.configuration,\n          deps: [ConfigurationService]\n        },\n        {\n          provide: APP_INITIALIZER,\n          useFactory: (configurationService: ConfigurationService<TConfiguration>, injector: Injector) => async () => {\n            // first we initialize configurations\n            await configurationService.init();\n\n            // then we run other initializations\n            const dispoAppInitializers = injector.get(CONFIGURATION_APP_INITIALIZER, []);\n            const all = dispoAppInitializers.map(p => p());\n            const promises = all.filter(x => isPromise(x));\n            if (promises.length !== 0) {\n              await Promise.all(promises);\n            }\n          },\n          deps: [ConfigurationService, Injector],\n          multi: true\n        }\n      ]\n    };\n  }\n}\n","/*\n * Public API Surface of angular-runtime-config\n */\n\nexport { AngularRuntimeConfigModule } from './lib/angular-runtime-config.module';\nexport { CONFIGURATION_APP_INITIALIZER } from './lib/configuration.injection-tokens';\nexport * from './lib/configuration.options';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}