{"version":3,"file":"ngx-locutus.mjs","sources":["../../../projects/ngx-locutus/src/lib/services/locutus.service.ts","../../../projects/ngx-locutus/src/lib/directives/locutus.directive.ts","../../../projects/ngx-locutus/src/lib/pipes/locutus.pipe.ts","../../../projects/ngx-locutus/src/lib/injection-tokens.ts","../../../projects/ngx-locutus/src/lib/models/registration-queue.model.ts","../../../projects/ngx-locutus/src/lib/pipes/interpolate.pipe.ts","../../../projects/ngx-locutus/src/lib/services/registration.service.ts","../../../projects/ngx-locutus/src/lib/locutus.module.ts","../../../projects/ngx-locutus/src/lib/models/languages.model.ts","../../../projects/ngx-locutus/src/lib/models/translation-loader.model.ts","../../../projects/ngx-locutus/src/public-api.ts","../../../projects/ngx-locutus/src/ngx-locutus.ts"],"sourcesContent":["import { Injectable, OnDestroy } from '@angular/core';\r\nimport { Language } from '../models/languages.model';\r\nimport { RootTranslationConfiguration, TranslationConfiguration } from '../models/translation-configuration.model';\r\nimport { distinctUntilChanged, EMPTY, map, of, Subscription, switchMap, tap } from 'rxjs';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { Translation } from '../models/translation.model';\r\nimport { Observable } from 'rxjs';\r\n\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class LocutusService implements OnDestroy {\r\n  activeLanguage$ = new BehaviorSubject<Language | null>(null);\r\n  private translations$ = new BehaviorSubject<Translation[]>([]);\r\n  private subscription = new Subscription();\r\n  private activeLanguage: Language | null = null;\r\n  private translations: Translation[] = [];\r\n  private configurations: TranslationConfiguration[] = [];\r\n  private childConfigQueue: TranslationConfiguration[] = [];\r\n  private readonly interpolationPattern = /{{[^}]*}}/g;\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscription.unsubscribe();\r\n  }\r\n\r\n  setActiveLanguage(lang: Language) {\r\n    if (this.activeLanguage === lang) {\r\n      console.warn(`Language: ${lang} is already the active language.`);\r\n      return;\r\n    }\r\n\r\n    this.activeLanguage = lang;\r\n    this.activeLanguage$.next(this.activeLanguage);\r\n    this.loadAllTranslations([...this.configurations], lang).subscribe(_ => {\r\n      this.translations$.next(this.translations);\r\n    });\r\n  }\r\n\r\n  getActiveLanguage(): Language {\r\n    return this.activeLanguage as Language;\r\n  }\r\n\r\n  getTranslations(scope: string): Observable<any> {\r\n    return this.translations$.pipe(\r\n      map(_ => {\r\n        const index = this.translations.findIndex(\r\n          x => x.scope === scope && x.language === this.activeLanguage);\r\n        if (index < 0) return of(null);\r\n        return of(this.translations[index].translations);\r\n      }),\r\n      switchMap(translations => translations),\r\n      distinctUntilChanged()\r\n    );\r\n  }\r\n\r\n  translate(scope: string, key: string, interpolations: string[] = []): Observable<string> {\r\n    return this.getTranslations(scope).pipe(\r\n      map(translations => {\r\n        if (!translations) return EMPTY;\r\n        if (!translations[key]) return EMPTY;\r\n\r\n        if (interpolations.length > 0) return this.interpolate(translations[key], interpolations);\r\n\r\n        return translations[key];\r\n      })\r\n    )\r\n  }\r\n\r\n  instant(scope: string, key: string, interpolations: string[] = []): string {\r\n    const scopeIndex = this.translations.findIndex(x => x.scope === scope && x.language === this.activeLanguage);\r\n    if (scopeIndex < 0)\r\n      throw { name: 'TranslationNotFoundError', message: `Translation with scope=${scope} not found!` };\r\n    if (!this.translations[scopeIndex].translations[key])\r\n      throw { name: 'TranslationNotFoundError', message: `Translation with scope=${scope} and key=${key} not found!` };\r\n\r\n    if (interpolations.length > 0) return this.interpolate(this.translations[scopeIndex].translations[key], interpolations);\r\n\r\n    return this.translations[scopeIndex].translations[key];\r\n  }\r\n\r\n\r\n  interpolate(translation: string, args: string[]): string {\r\n    if (!translation) return translation;\r\n    let index = 0;\r\n    let interpolation = translation;\r\n    [...translation.matchAll(this.interpolationPattern)].forEach(match => {\r\n      interpolation = interpolation.replace(match[0], args[index++]);\r\n    });\r\n\r\n    return interpolation;\r\n  }\r\n\r\n  registerRoot(config: RootTranslationConfiguration) {\r\n    this.configurations = [\r\n      ...this.configurations,\r\n      config\r\n    ];\r\n    this.activeLanguage = config.language;\r\n    this.activeLanguage$.next(this.activeLanguage);\r\n\r\n    this.subscription.add(\r\n      this.loadTranslation(config, config.language).subscribe(_ => {\r\n        this.workQueue();\r\n      })\r\n    );\r\n  }\r\n\r\n  registerChild(config: TranslationConfiguration) {\r\n    if (this.configurations.findIndex(c => c.scope === config.scope) >= 0) return;\r\n    if (this.translations.findIndex(t => t.scope === config.scope) >= 0) return;\r\n\r\n    if (!this.activeLanguage) {\r\n      this.childConfigQueue = [...this.childConfigQueue, config];\r\n      return;\r\n    }\r\n\r\n    this.configurations = [\r\n      ...this.configurations,\r\n      config\r\n    ];\r\n\r\n    this.subscription.add(\r\n      this.loadTranslation(config, this.activeLanguage as Language).subscribe()\r\n    );\r\n  }\r\n\r\n  replace(replacement: TranslationConfiguration) {\r\n    if (this.configurations.findIndex(c => c.scope === replacement.scope) < 0) {\r\n      console.warn(`Could not replace scope=${replacement.scope} because it does not exist.`)\r\n      return;\r\n    }\r\n\r\n    this.configurations = this.configurations.filter(c => c.scope !== replacement.scope);\r\n    this.translations = this.translations.filter(c => c.scope !== replacement.scope);\r\n    this.registerChild(replacement);\r\n  }\r\n\r\n  private loadAllTranslations(configs: TranslationConfiguration[], lang: Language): Observable<any> {\r\n    let config = configs.shift();\r\n    if (!config) return of(null);\r\n\r\n    return this.loadAllTranslations(configs, lang).pipe(\r\n      switchMap(_ => this.loadTranslation(config as TranslationConfiguration, lang))\r\n    );\r\n  }\r\n\r\n  private loadTranslation(config: TranslationConfiguration, lang: Language): Observable<any> {\r\n    if (this.isLoaded(config.scope, lang)) return of(null);\r\n\r\n    const loaderIndex = config.loaders.findIndex(loader => lang in loader);\r\n    if (loaderIndex < 0) return of(null);\r\n\r\n    return config.loaders[loaderIndex][lang]()\r\n      .pipe(\r\n        map(translations => {\r\n          const index = this.translations.findIndex(t => t.scope === config.scope && t.language === lang);\r\n          if (index >= 0) return this.translations[index];\r\n          this.translations = [\r\n            ...this.translations,\r\n            {\r\n              scope: config.scope,\r\n              language: lang,\r\n              translations: translations\r\n            }\r\n          ];\r\n          return translations;\r\n        }),\r\n        tap(_ => this.translations$.next(this.translations))\r\n      );\r\n  }\r\n\r\n\r\n  private isLoaded(scope: string, lang: Language): boolean {\r\n    return this.getTranslationIndex(scope, lang) >= 0;\r\n  }\r\n\r\n  private getTranslationIndex(scope: string, lang: Language): number {\r\n    return this.translations.findIndex(t => t.scope === scope && t.language === lang);\r\n  }\r\n\r\n  private workQueue() {\r\n    this.childConfigQueue.forEach(config => {\r\n      this.registerChild(config);\r\n    });\r\n    this.childConfigQueue = [];\r\n  }\r\n}\r\n","import { Directive, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { LocutusService } from '../services/locutus.service';\r\n\r\n@Directive({\r\n  selector: '[locutus]'\r\n})\r\nexport class LocutusDirective implements OnDestroy {\r\n  subscription = new Subscription();\r\n\r\n  @Input()\r\n  set locutusOf(scope: string) {\r\n    this.subscription.add(\r\n      this.locutus.getTranslations(scope).subscribe(translations => {\r\n        if (!translations) return;\r\n        this.view.clear();\r\n        this.view.createEmbeddedView(this.template, {\r\n          $implicit: translations\r\n        });\r\n      })\r\n    );\r\n  }\r\n\r\n  constructor(\r\n    private locutus: LocutusService,\r\n    private view: ViewContainerRef,\r\n    private template: TemplateRef<any>\r\n  ) { }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscription.unsubscribe();\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { of } from 'rxjs';\r\nimport { map, Observable } from 'rxjs';\r\nimport { LocutusService } from '../services/locutus.service';\r\n\r\n@Pipe({\r\n  name: 'locutus'\r\n})\r\nexport class LocutussPipe implements PipeTransform {\r\n  constructor(private locutus: LocutusService) { }\r\n\r\n  transform(value: string, ...args: string[]): Observable<string> {\r\n    if (!value) return of(value);\r\n    if (!args) return of(value);\r\n    if (args.length < 1) return of(value);\r\n\r\n    return this.locutus.getTranslations(args[0])\r\n      .pipe(\r\n        map(translations => {\r\n          if (!translations) return value;\r\n\r\n          const translation = this.getValue(translations, value.split('.')) as string ?? value;\r\n\r\n          if (args.length > 1) {\r\n            const [, ...interpolations] = args;\r\n            return this.locutus.interpolate(translation, interpolations);\r\n          }\r\n\r\n          return translation;\r\n        })\r\n      );\r\n  }\r\n\r\n  private getValue(translation: any, keys: string[]): any {\r\n    if (!translation) return null;\r\n    if (keys.length == 0) return translation;\r\n    if (!translation[keys[0]]) return null;\r\n    const key = keys[0];\r\n    keys.shift();\r\n    return this.getValue(translation[key], keys);\r\n  }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { TranslationConfiguration } from \"./models/translation-configuration.model\";\r\n\r\nexport const TRANSLATION_CONFIGURATIONS = new InjectionToken<TranslationConfiguration>('');\r\n","import { BehaviorSubject } from \"rxjs\";\r\nimport { TranslationConfiguration } from \"./translation-configuration.model\";\r\n\r\nexport var registrationQueue$ = new BehaviorSubject<TranslationConfiguration[]>([]);\r\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocutusService } from '../services/locutus.service';\n\n@Pipe({\n  name: 'interpolate'\n})\nexport class InterpolatePipe implements PipeTransform {\n  constructor(private locutus: LocutusService) {}\n\n  transform(value: string, ...args: string[]): string {\n    return this.locutus.interpolate(value, args);\n  }\n\n}\n","import { Injectable, OnDestroy } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { registrationQueue$ } from '../models/registration-queue.model';\r\nimport { LocutusService } from './locutus.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class RegistrationService implements OnDestroy {\r\n  subscription = new Subscription();\r\n\r\n  constructor(private locutus: LocutusService) {\r\n    this.subscription.add(\r\n      registrationQueue$.subscribe(configs => {\r\n        configs.forEach(config => {\r\n          this.locutus.registerChild(config);\r\n        })\r\n      })\r\n    );\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.subscription.unsubscribe();\r\n  }\r\n}\r\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocutusDirective } from './directives/locutus.directive';\r\nimport { LocutussPipe } from './pipes/locutus.pipe';\r\nimport { LocutusService } from './services/locutus.service';\r\nimport { RootTranslationConfiguration, TranslationConfiguration } from './models/translation-configuration.model';\r\nimport { TRANSLATION_CONFIGURATIONS } from './injection-tokens';\r\nimport { RegistrationService } from './services/registration.service';\r\nimport { registrationQueue$ } from './models/registration-queue.model';\r\nimport { InterpolatePipe } from './pipes/interpolate.pipe';\r\n\r\n\r\nfunction initializeAppFactory(configs: (TranslationConfiguration | RootTranslationConfiguration)[], locutus: LocutusService): () => void {\r\n  return () => {\r\n      configs.forEach(config => {\r\n        if (Object.keys(config).includes('language')) {\r\n          locutus.registerRoot(config as RootTranslationConfiguration);\r\n        }\r\n        else {\r\n          locutus.registerChild({\r\n            scope: config.scope,\r\n            loaders: config.loaders\r\n          });\r\n        }\r\n      });\r\n  };\r\n}\r\n\r\n@NgModule({\r\n  declarations: [\r\n    LocutusDirective,\r\n    LocutussPipe,\r\n    InterpolatePipe,\r\n  ],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [\r\n    LocutusDirective,\r\n    LocutussPipe,\r\n    InterpolatePipe\r\n  ]\r\n})\r\nexport class LocutusModule {\r\n\r\n  constructor(private registration: RegistrationService) {}\r\n\r\n  static forRoot(configs: (TranslationConfiguration | RootTranslationConfiguration)[]): ModuleWithProviders<LocutusModule> {\r\n    return {\r\n      ngModule: LocutusModule,\r\n      providers: [\r\n        {\r\n          provide: TRANSLATION_CONFIGURATIONS,\r\n          useValue: configs,\r\n        },\r\n        {\r\n          provide: APP_INITIALIZER,\r\n          useFactory: initializeAppFactory,\r\n          deps: [\r\n            TRANSLATION_CONFIGURATIONS,\r\n            LocutusService\r\n          ],\r\n          multi: true\r\n        },\r\n      ]\r\n    };\r\n  }\r\n\r\n  static forChild(configs: TranslationConfiguration[]): ModuleWithProviders<LocutusModule> {\r\n      registrationQueue$.next(configs);\r\n\r\n    return {\r\n      ngModule: LocutusModule,\r\n      providers: [\r\n      ]\r\n    };\r\n  }\r\n}\r\n","export const LANGUAGES = [\r\n  'aa',\r\n  'ab',\r\n  'ae',\r\n  'af',\r\n  'ak',\r\n  'am',\r\n  'an',\r\n  'ar',\r\n  'as',\r\n  'av',\r\n  'ay',\r\n  'az',\r\n  'ba',\r\n  'be',\r\n  'bg',\r\n  'bh',\r\n  'bi',\r\n  'bm',\r\n  'bn',\r\n  'bo',\r\n  'br',\r\n  'bs',\r\n  'ca',\r\n  'ce',\r\n  'ch',\r\n  'co',\r\n  'cr',\r\n  'cs',\r\n  'cu',\r\n  'cv',\r\n  'cy',\r\n  'da',\r\n  'de',\r\n  'dv',\r\n  'dz',\r\n  'ee',\r\n  'el',\r\n  'en',\r\n  'eo',\r\n  'es',\r\n  'et',\r\n  'eu',\r\n  'fa',\r\n  'ff',\r\n  'fi',\r\n  'fj',\r\n  'fo',\r\n  'fr',\r\n  'fy',\r\n  'ga',\r\n  'gd',\r\n  'gl',\r\n  'gn',\r\n  'gu',\r\n  'gv',\r\n  'ha',\r\n  'he',\r\n  'hi',\r\n  'ho',\r\n  'hr',\r\n  'ht',\r\n  'hu',\r\n  'hy',\r\n  'hz',\r\n  'ia',\r\n  'id',\r\n  'ie',\r\n  'ig',\r\n  'ii',\r\n  'ik',\r\n  'io',\r\n  'is',\r\n  'it',\r\n  'iu',\r\n  'ja',\r\n  'jv',\r\n  'ka',\r\n  'kg',\r\n  'ki',\r\n  'kj',\r\n  'kk',\r\n  'kl',\r\n  'km',\r\n  'kn',\r\n  'ko',\r\n  'kr',\r\n  'ks',\r\n  'ku',\r\n  'kv',\r\n  'kw',\r\n  'ky',\r\n  'la',\r\n  'lb',\r\n  'lg',\r\n  'li',\r\n  'ln',\r\n  'lo',\r\n  'lt',\r\n  'lu',\r\n  'lv',\r\n  'mg',\r\n  'mh',\r\n  'mi',\r\n  'mk',\r\n  'ml',\r\n  'mn',\r\n  'mr',\r\n  'ms',\r\n  'mt',\r\n  'my',\r\n  'na',\r\n  'nb',\r\n  'nd',\r\n  'ne',\r\n  'ng',\r\n  'nl',\r\n  'nn',\r\n  'no',\r\n  'nr',\r\n  'nv',\r\n  'ny',\r\n  'oc',\r\n  'oj',\r\n  'om',\r\n  'or',\r\n  'os',\r\n  'pa',\r\n  'pi',\r\n  'pl',\r\n  'ps',\r\n  'pt',\r\n  'qu',\r\n  'rm',\r\n  'rn',\r\n  'ro',\r\n  'ru',\r\n  'rw',\r\n  'sa',\r\n  'sc',\r\n  'sd',\r\n  'se',\r\n  'sg',\r\n  'si',\r\n  'sk',\r\n  'sl',\r\n  'sm',\r\n  'sn',\r\n  'so',\r\n  'sq',\r\n  'sr',\r\n  'ss',\r\n  'st',\r\n  'su',\r\n  'sv',\r\n  'sw',\r\n  'ta',\r\n  'te',\r\n  'tg',\r\n  'th',\r\n  'ti',\r\n  'tk',\r\n  'tl',\r\n  'tn',\r\n  'to',\r\n  'tr',\r\n  'ts',\r\n  'tt',\r\n  'tw',\r\n  'ty',\r\n  'ug',\r\n  'uk',\r\n  'ur',\r\n  'uz',\r\n  've',\r\n  'vi',\r\n  'vo',\r\n  'wa',\r\n  'wo',\r\n  'xh',\r\n  'yi',\r\n  'yo',\r\n  'za',\r\n  'zh',\r\n  'zu'\r\n];\r\n\r\nexport type Language = typeof LANGUAGES[number];\r\n","import { Observable } from \"rxjs\";\r\n\r\nexport interface TranslationLoader {\r\n  [key: string]: () => Observable<any>;\r\n};\r\n","/*\r\n * Public API Surface of ngx-locutus\r\n */\r\n\r\nexport * from './lib/locutus.module';\r\nexport * from './lib/models/languages.model';\r\nexport * from './lib/models/translation-configuration.model';\r\nexport * from './lib/models/translation-loader.model';\r\nexport * from './lib/services/locutus.service';\r\nexport * from './lib/directives/locutus.directive';\r\nexport * from './lib/pipes/locutus.pipe';\r\nexport * from './lib/pipes/interpolate.pipe';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocutusService","i1.RegistrationService"],"mappings":"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;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;;;ACpLL;;ACJD;;AAEG;;ACFH;;AAEG;;;;"}