{"version":3,"file":"igo2-core-language.mjs","sources":["../../../packages/core/language/src/language.module.ts","../../../packages/core/language/src/shared/language.interface.ts","../../../packages/core/language/src/shared/language.loader.ts","../../../packages/core/language/src/shared/language.service.ts","../../../packages/core/language/src/shared/missing-translation.guard.ts","../../../packages/core/language/src/shared/language.provider.ts","../../../packages/core/language/src/shared/language-mock.provider.ts","../../../packages/core/language/src/utils/coercion.ts","../../../packages/core/language/src/igo2-core-language.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n  exports: [TranslateModule]\n})\nexport class IgoLanguageModule {}\n","import { TranslateLoader } from '@ngx-translate/core';\nimport { Observable } from 'rxjs';\n\nexport interface LanguageOptions {\n  prefix?: string | string[];\n  ignoreLibsLocale?: boolean;\n}\n\nexport abstract class LanguageLoaderBase implements TranslateLoader {\n  abstract isLoaded$: Observable<boolean>;\n  abstract getTranslation(lang: string): Observable<any>;\n}\n\nexport type Translation =\n  | string\n  | Translation[]\n  | TranslationObject\n\n  // required to prevent error \"Type instantiation is excessively deep and possibly infinite.\"\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  | any;\n\n// using Record<> does not work because TS does not support recursive definitions\nexport interface TranslationObject {\n  [key: string]: Translation;\n}\n","import { isPlatformServer } from '@angular/common';\nimport { HttpBackend, HttpClient } from '@angular/common/http';\nimport { DOCUMENT, PLATFORM_ID, inject } from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\nimport { ObjectUtils } from '@igo2/utils';\n\nimport {\n  BehaviorSubject,\n  Observable,\n  first,\n  forkJoin,\n  map,\n  of,\n  switchMap,\n  tap\n} from 'rxjs';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\n\nexport class LanguageLoader implements LanguageLoaderBase {\n  private httpClient: HttpClient;\n\n  private _isLoaded$ = new BehaviorSubject<boolean>(null);\n  isLoaded$ = this._isLoaded$.asObservable();\n\n  suffix = '.json';\n  prefix?: string | string[];\n  options: LanguageOptions;\n\n  baseUrl: string;\n\n  constructor(handler: HttpBackend, options: LanguageOptions) {\n    this.httpClient = new HttpClient(handler);\n    this.options = options;\n\n    const document = inject(DOCUMENT);\n    const platformId = inject(PLATFORM_ID);\n    this.baseUrl = isPlatformServer(platformId)\n      ? this.getServerUrl(document)\n      : '';\n  }\n\n  private getServerUrl(document: Document): string {\n    const origin = document.location.origin;\n    return origin.endsWith('/') ? origin : origin + '/';\n  }\n\n  public getTranslation(lang: string): Observable<any> {\n    const igoLocale$ = this.httpClient.get(\n      `${this.baseUrl}locale/libs_locale/${lang}.json`\n    );\n    if (!this.prefix) {\n      const prefix = this.options.prefix;\n      this.prefix = !prefix || Array.isArray(prefix) ? prefix : [prefix];\n    }\n\n    if (!this.prefix || this.prefix.length === 0) {\n      this._isLoaded$.next(true);\n      return this.options.ignoreLibsLocale ? of(undefined) : igoLocale$;\n    }\n\n    const appLocale$ = (this.prefix as string[]).map((prefix) =>\n      this.httpClient.get(`${this.baseUrl}${prefix}${lang}${this.suffix}`)\n    );\n\n    const locale$ = [...appLocale$];\n\n    if (!this.options.ignoreLibsLocale) {\n      locale$.unshift(igoLocale$);\n    }\n\n    return forkJoin(locale$).pipe(\n      map((translations) => {\n        return translations.reduce(\n          (acc, current) => ObjectUtils.mergeDeep(acc, current),\n          {}\n        );\n      }),\n      tap(() => {\n        this._isLoaded$.next(true);\n      })\n    );\n  }\n}\n\nexport class LanguageLoaderWithAsyncConfig extends LanguageLoader {\n  constructor(\n    handler: HttpBackend,\n    private configService: ConfigService,\n    prefix?: string | string[],\n    suffix = '.json'\n  ) {\n    super(handler, undefined);\n    this.prefix = prefix;\n    this.suffix = suffix;\n  }\n\n  public getTranslation(lang: string): Observable<any> {\n    return this.configService.isLoaded$.pipe(\n      first((isLoaded) => isLoaded),\n      switchMap(() => {\n        this.options =\n          this.configService.getConfig<LanguageOptions>('language');\n\n        return super.getTranslation(lang);\n      })\n    );\n  }\n}\n","import { Injectable, inject } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LanguageService {\n  translate = inject(TranslateService);\n\n  private language: string;\n  readonly language$ = new BehaviorSubject<string>(undefined);\n\n  constructor() {\n    const defaultLang = this.translate.defaultLang;\n    if (defaultLang && this.matchLanguage(defaultLang)) {\n      this.language = defaultLang;\n      this.language$.next(defaultLang);\n    } else {\n      this.setBrowserLanguage();\n    }\n  }\n  private setBrowserLanguage() {\n    this.language = this.translate.getBrowserLang();\n    const lang = this.getLanguage();\n    this.translate.setDefaultLang(lang);\n    this.language$.next(lang);\n  }\n\n  public getLanguage(): string {\n    return this.matchLanguage(this.language) ? this.language : 'en';\n  }\n\n  private matchLanguage(lang: string): boolean {\n    return !!lang.match(/en|fr/);\n  }\n\n  public setLanguage(language: string) {\n    this.language = this.matchLanguage(language) ? language : 'en';\n    combineLatest([\n      this.translate.use(this.language),\n      this.translate.reloadLang(this.language)\n    ]).subscribe(() => {\n      this.language$.next(this.language);\n    });\n  }\n}\n","import {\n  MissingTranslationHandler,\n  MissingTranslationHandlerParams\n} from '@ngx-translate/core';\n\nexport class IgoMissingTranslationHandler implements MissingTranslationHandler {\n  handle(params: MissingTranslationHandlerParams) {\n    if (!params.translateService.langs.length) {\n      const error =\n        'Translations are not yet loaded. \\\n         Check that the LanguageService is injected.';\n      throw new Error(error);\n    }\n\n    if (params.key.substr(0, 4) === 'igo.') {\n      throw new Error(`The Key \"${params.key}\" is missing in locale file.`);\n    } else {\n      return params.key;\n    }\n  }\n}\n","import { HttpBackend } from '@angular/common/http';\nimport {\n  DOCUMENT,\n  EnvironmentProviders,\n  Provider,\n  inject,\n  makeEnvironmentProviders,\n  provideAppInitializer\n} from '@angular/core';\n\nimport { ConfigService } from '@igo2/core/config';\n\nimport {\n  Language,\n  MissingTranslationHandler,\n  TRANSLATE_SERVICE_CONFIG,\n  TranslateLoader,\n  TranslateModuleConfig,\n  TranslateServiceConfig,\n  provideTranslateService\n} from '@ngx-translate/core';\nimport { first } from 'rxjs';\nimport { catchError, timeout } from 'rxjs/operators';\n\nimport { LanguageLoaderBase, LanguageOptions } from './language.interface';\nimport {\n  LanguageLoader,\n  LanguageLoaderWithAsyncConfig\n} from './language.loader';\nimport { LanguageService } from './language.service';\nimport { IgoMissingTranslationHandler } from './missing-translation.guard';\n\n// 5 seconds\nconst TIMEOUT_DURATION = 5000;\n\nexport interface TranslationFeature<KindT extends TranslationFeatureKind> {\n  kind: KindT;\n  providers: (Provider | EnvironmentProviders)[];\n}\n\nexport enum TranslationFeatureKind {\n  Translation = 0,\n  DefaultLanguage = 1\n}\n\n/**\n * Make sure you only call this method in the root module of your application, most of the time called AppModule.\n */\nexport function provideTranslation(\n  featureConfig: TranslationFeature<TranslationFeatureKind.Translation>\n): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    ...featureConfig.providers,\n    provideAppInitializer(() => {\n      const languageService = inject(LanguageService);\n      return (\n        languageService.translate.currentLoader as LanguageLoaderBase\n      ).isLoaded$?.pipe(\n        timeout(TIMEOUT_DURATION),\n        first((isLoaded) => isLoaded === true),\n        catchError((error) => {\n          error.message += ` - Request timed out for language loader after: ${TIMEOUT_DURATION}`;\n          throw error;\n        })\n      );\n    })\n  ]);\n}\n\nexport function withStaticConfig(\n  options: LanguageOptions,\n  defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n  const loader: Provider = {\n    provide: TranslateLoader,\n    useFactory: (http: HttpBackend) => languageLoaderWithStatic(http, options),\n    deps: [HttpBackend]\n  };\n  return {\n    kind: TranslationFeatureKind.Translation,\n    providers: [\n      provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n    ]\n  };\n}\n\nexport function withAsyncConfig(\n  defaultLanguage?: string | undefined\n): TranslationFeature<TranslationFeatureKind.Translation> {\n  const loader: Provider = {\n    provide: TranslateLoader,\n    useFactory: languageLoaderWithAsync,\n    deps: [HttpBackend, ConfigService]\n  };\n  return {\n    kind: TranslationFeatureKind.Translation,\n    providers: [\n      provideTranslateService(setTranslationConfig(loader, defaultLanguage))\n    ]\n  };\n}\n\n/**\n * Get the first segment of the path (e.g., '/en/alerts' => 'en')\n * @param allowedLanguages default to ['fr', 'en']\n */\nexport function withUrlDefaultLanguage(\n  fallbackLang?: Language,\n  allowedLanguages: Language[] = ['fr', 'en']\n): TranslationFeature<TranslationFeatureKind.DefaultLanguage> {\n  return {\n    kind: TranslationFeatureKind.DefaultLanguage,\n    providers: [\n      {\n        provide: TRANSLATE_SERVICE_CONFIG,\n        useFactory: defaultLanguageSegmentFactory(\n          allowedLanguages,\n          fallbackLang\n        )\n      }\n    ]\n  };\n}\n\nfunction defaultLanguageSegmentFactory(\n  allowedLanguages: Language[],\n  fallbackLang?: Language\n): () => TranslateServiceConfig {\n  return () => {\n    const doc = inject(DOCUMENT);\n    const url = new URL(doc.location.href);\n\n    const firstSegment = url.pathname.split('/').filter(Boolean)[0];\n    if (allowedLanguages.includes(firstSegment)) {\n      return {\n        extend: true,\n        lang: firstSegment\n      } satisfies TranslateServiceConfig;\n    }\n\n    return {\n      extend: true,\n      lang: fallbackLang,\n      fallbackLang: fallbackLang ?? 'fr'\n    } satisfies TranslateServiceConfig;\n  };\n}\n\nexport const setTranslationConfig = (\n  loader?: Provider,\n  defaultLanguage?: string\n): TranslateModuleConfig => ({\n  defaultLanguage: defaultLanguage,\n  loader: loader ?? DEFAULT_LANGUAGE_LOADER,\n  missingTranslationHandler: {\n    provide: MissingTranslationHandler,\n    useClass: IgoMissingTranslationHandler\n  }\n});\n\nfunction languageLoaderWithStatic(\n  http: HttpBackend,\n  options?: LanguageOptions\n) {\n  return new LanguageLoader(http, options);\n}\n\nexport const LANGUAGE_LOADER: Provider = {\n  provide: TranslateLoader,\n  useFactory: languageLoaderWithAsync,\n  deps: [HttpBackend, ConfigService]\n};\n\nfunction languageLoaderWithAsync(http: HttpBackend, config?: ConfigService) {\n  return new LanguageLoaderWithAsyncConfig(http, config, undefined, undefined);\n}\n\nexport const DEFAULT_LANGUAGE_LOADER: Provider = {\n  provide: TranslateLoader,\n  useFactory: languageLoaderWithAsync,\n  deps: [HttpBackend, ConfigService]\n};\n","import { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\n\nimport { provideTranslateService } from '@ngx-translate/core';\n\nexport function provideMockTranslation(): EnvironmentProviders {\n  return makeEnvironmentProviders([provideTranslateService()]);\n}\n","import { Translation, TranslationObject } from '../shared/language.interface';\n\nexport function labelAttribute(\n  value: Translation | TranslationObject | undefined,\n  defaultValue: Translation | TranslationObject = {}\n): Translation | TranslationObject {\n  return { ...defaultValue, ...(value ?? {}) };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}