{"version":3,"file":"igo2-core-config.mjs","sources":["../../../packages/core/config/src/config-deprecated.ts","../../../packages/core/config/src/version.ts","../../../packages/core/config/src/config.service.ts","../../../packages/core/config/src/config.provider.ts","../../../packages/core/config/src/config.module.ts","../../../packages/core/config/src/igo2-core-config.ts"],"sourcesContent":["import { AlternateConfigOptions, DeprecatedOptions } from './config.interface';\n\nexport const CONFIG_DEPRECATED: Record<string, DeprecatedOptions> = {\n  showMenuButton: {\n    alternativeKey: 'menu.button.visible',\n    mayBeRemoveIn: new Date('2024-06-06')\n  },\n  menuButtonReverseColor: {\n    alternativeKey: 'menu.button.useThemeColor',\n    mayBeRemoveIn: new Date('2024-06-06')\n  },\n  importWithStyle: {\n    alternativeKey: 'importExport.importWithStyle',\n    mayBeRemoveIn: new Date('2024-06-06')\n  },\n  hasGeolocateButton: {\n    alternativeKey: 'geolocate.button.visible',\n    mayBeRemoveIn: new Date('2024-06-06')\n  }\n};\n\nexport const ALTERNATE_CONFIG_FROM_DEPRECATION = new Map<\n  string,\n  AlternateConfigOptions\n>(\n  Object.entries(CONFIG_DEPRECATED)\n    .filter(([_, options]) => options.alternativeKey)\n    .map(([key, options]) => [\n      options.alternativeKey,\n      {\n        deprecatedKey: key\n      } satisfies AlternateConfigOptions\n    ])\n);\n","export interface Version {\n  app?: string;\n  lib?: string;\n  releaseDateApp?: number;\n  releaseDate?: number;\n}\n\nexport const version: Version = {\n  lib: '18.0.0',\n  releaseDate: 1739372054788\n};\n","import { HttpBackend, HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { ObjectUtils } from '@igo2/utils';\n\nimport { BehaviorSubject, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport {\n  ALTERNATE_CONFIG_FROM_DEPRECATION,\n  CONFIG_DEPRECATED\n} from './config-deprecated';\nimport { ConfigOptions } from './config.interface';\nimport { version } from './version';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ConfigService<T extends object = Record<string, any>> {\n  private config: T | null;\n  private httpClient: HttpClient;\n  private configDeprecated = new Map(Object.entries(CONFIG_DEPRECATED));\n\n  private _isLoaded$ = new BehaviorSubject<boolean>(null);\n  isLoaded$ = this._isLoaded$.asObservable();\n\n  constructor(handler: HttpBackend) {\n    this.httpClient = new HttpClient(handler);\n  }\n\n  /**\n   * Use to get the all config file (merge from environnement.ts and config.json)\n   */\n  public getConfigs(): any {\n    Array.from(this.configDeprecated.keys()).map((deprecatedKey) => {\n      const deprecatedValue = ObjectUtils.resolve(this.config, deprecatedKey);\n      if (deprecatedValue !== undefined) {\n        this.handleDeprecatedConfig(deprecatedKey);\n      }\n    });\n    return this.config;\n  }\n\n  /**\n   * Use to get the data found in config file\n   */\n  public getConfig<T = any>(key: string, defaultValue?: unknown): T {\n    let value = ObjectUtils.resolve(this.config, key);\n\n    const isDeprecated = this.configDeprecated.get(key);\n    if (isDeprecated && value !== undefined) {\n      this.handleDeprecatedConfig(key);\n    } else if (value === undefined) {\n      value = this.handleDeprecationPossibility(key);\n    }\n\n    return value ?? defaultValue;\n  }\n\n  private handleDeprecatedConfig(key: string): void {\n    const options = this.configDeprecated.get(key);\n\n    let message = `This config (${key}) is deprecated and will be removed shortly`;\n    if (options.alternativeKey) {\n      message += ` You should use this key (${options.alternativeKey}) as an alternate solution`;\n    }\n\n    const currentDate = new Date();\n    currentDate >= options.mayBeRemoveIn\n      ? console.error(message)\n      : console.warn(message);\n  }\n\n  private handleDeprecationPossibility(key: string): any {\n    const options = ALTERNATE_CONFIG_FROM_DEPRECATION.get(key);\n    if (!options) {\n      return;\n    }\n\n    return this.getConfig(options.deprecatedKey);\n  }\n\n  /**\n   * This method loads \"[path]\" to get all config's variables\n   */\n  public load(options: ConfigOptions<T>) {\n    const baseConfig = options.default;\n    if (!options.path) {\n      this.config = baseConfig;\n      this._isLoaded$.next(true);\n      return true;\n    }\n\n    return new Promise((resolve) => {\n      this.httpClient\n        .get(options.path)\n        .pipe(\n          catchError((error: any): any => {\n            console.log(`Configuration file ${options.path} could not be read`);\n            this._isLoaded$.next(false);\n            resolve(true);\n            return throwError(error.error || 'Server error');\n          })\n        )\n        .subscribe((configResponse: object) => {\n          this.config = ObjectUtils.mergeDeep(\n            ObjectUtils.mergeDeep({ version }, baseConfig),\n            configResponse\n          );\n          this._isLoaded$.next(true);\n          resolve(true);\n        });\n    });\n  }\n}\n","import {\n  APP_INITIALIZER,\n  EnvironmentProviders,\n  InjectionToken,\n  makeEnvironmentProviders\n} from '@angular/core';\n\nimport { ConfigOptions } from './config.interface';\nimport { ConfigService } from './config.service';\n\nexport const CONFIG_OPTIONS = new InjectionToken<ConfigOptions>(\n  'configOptions'\n);\n\nexport function provideConfig(options: ConfigOptions): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    {\n      provide: CONFIG_OPTIONS,\n      useValue: options\n    },\n    {\n      provide: APP_INITIALIZER,\n      useFactory: configFactory,\n      multi: true,\n      deps: [ConfigService, CONFIG_OPTIONS]\n    }\n  ]);\n}\n\nfunction configFactory(configService: ConfigService, options: ConfigOptions) {\n  return () => configService.load(options);\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { provideConfig } from './config.provider';\n\n/**\n * @deprecated import the provideConfig directly\n */\n@NgModule({\n  imports: [],\n  declarations: [],\n  exports: []\n})\nexport class IgoConfigModule {\n  static forRoot(): ModuleWithProviders<IgoConfigModule> {\n    return {\n      ngModule: IgoConfigModule,\n      providers: [provideConfig({})]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}