{"version":3,"file":"ngstack-translate.mjs","sources":["../../../../projects/translate/src/lib/translate.service.ts","../../../../projects/translate/src/lib/title.service.ts","../../../../projects/translate/src/lib/translate.pipe.ts","../../../../projects/translate/src/lib/translate.directive.ts","../../../../projects/translate/src/lib/translate.module.ts","../../../../projects/translate/src/public_api.ts","../../../../projects/translate/src/ngstack-translate.ts"],"sourcesContent":["import {\n  Injectable,\n  EventEmitter,\n  Inject,\n  InjectionToken,\n  Optional\n} from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateSettings } from './translate.settings';\n\nexport const TRANSLATE_SETTINGS = new InjectionToken<TranslateSettings>(\n  'TRANSLATE_SETTINGS'\n);\n\nexport interface TranslateParams {\n  [key: string]: string | number;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TranslateService {\n  protected data: { [key: string]: any } = {};\n  private _fallbackLang = 'en';\n  private _activeLang: string;\n  private _translationRoot = 'assets/i18n';\n\n  /**\n   * Raised each time active language gets changed.\n   */\n  activeLangChanged = new EventEmitter<{\n    previousValue: string;\n    currentValue: string;\n  }>();\n\n  /**\n   * Toggles debug mode.\n   *\n   * When in the debug mode, the service automatically prepends active language id to very translated result.\n   * That allows to verify that your components support i18n correctly and do not contain hard-coded text.\n   */\n  debugMode = false;\n\n  /**\n   * Disable caching and always download language files.\n   *\n   * Applies cache busting query parameters to urls, for example: '?v=1522426955882'.\n   */\n  disableCache = false;\n\n  /**\n   * List of supported languages.\n   *\n   * The service will attempt to load resource files only for given set of languages,\n   * and will automatically use fallback language for all unspecified values.\n   *\n   * By default this property is empty and service is going to probe all language files.\n   * Active and Fallback languages are always taken into account even if you do not specify them in the list.\n   */\n  supportedLangs: string[] = [];\n\n  /**\n   * List of extra paths to look for translation files.\n   *\n   * By default this property is empty.\n   * The value of `translationRoot` property is always taken into account.\n   */\n  translatePaths: string[] = [];\n\n  /**\n   * The fallback language to use when a resource string for the active language is not available.\n   */\n  get fallbackLang(): string {\n    return this._fallbackLang;\n  }\n\n  set fallbackLang(value: string) {\n    this._fallbackLang = value || 'en';\n  }\n\n  /**\n   * The language to use for the translations.\n   */\n  get activeLang(): string {\n    return this._activeLang;\n  }\n\n  set activeLang(value: string) {\n    const previousValue = this._activeLang;\n    const newValue = value || this.fallbackLang;\n    const changed = newValue !== previousValue;\n\n    if (changed) {\n      this._activeLang = newValue;\n      this.use(newValue).then(() => {\n        this.activeLangChanged.next({\n          previousValue: previousValue,\n          currentValue: newValue\n        });\n      });\n    }\n  }\n\n  getBrowserLanguage(): string {\n    const [lang /*, locale*/] = navigator.language\n      .replace('-', '_')\n      .toLowerCase()\n      .split('_');\n    return lang;\n  }\n\n  /**\n   * The root path to use when loading default translation files.\n   * Defaults to 'assets/i18n'.\n   */\n  get translationRoot(): string {\n    return this._translationRoot;\n  }\n\n  set translationRoot(value: string) {\n    this._translationRoot = value || 'assets/i18n';\n  }\n\n  constructor(\n    private http: HttpClient,\n    @Optional()\n    @Inject(TRANSLATE_SETTINGS)\n    settings: TranslateSettings\n  ) {\n    this.applySettings(settings);\n  }\n\n  protected applySettings(settings: TranslateSettings) {\n    const {\n      debugMode,\n      disableCache,\n      supportedLangs,\n      translatePaths,\n      translationRoot,\n      activeLang\n    } = this;\n\n    const defaults = {\n      debugMode,\n      disableCache,\n      supportedLangs,\n      translatePaths,\n      translationRoot,\n      activeLang,\n      ...settings\n    };\n\n    this.debugMode = defaults.debugMode;\n    this.disableCache = defaults.disableCache;\n    this.supportedLangs = defaults.supportedLangs;\n    this.translatePaths = defaults.translatePaths;\n    this.translationRoot = defaults.translationRoot;\n    this._activeLang = defaults.activeLang || this.getBrowserLanguage();\n  }\n\n  /**\n   * Get translated string\n   *\n   * @param key Translation key\n   * @param [params] Translation parameters\n   * @param [lang] Language to use for translation\n   * @returns Translated string\n   * @memberof TranslateService\n   */\n  get<T extends string | string[] = string>(\n    key: T,\n    params?: TranslateParams,\n    lang?: string\n  ): T {\n    if (key) {\n      if (Array.isArray(key)) {\n        return <T>key.map((value: string) => {\n          return this.get(value, params, lang);\n        });\n      } else {\n        let value = this.getValue(lang || this.activeLang, <string>key);\n        if (value === key) {\n          value = this.getValue(this.fallbackLang, <string>key);\n        }\n        return <T>this.format(value, params);\n      }\n    } else {\n      return null;\n    }\n  }\n\n  async load(): Promise<any> {\n    await this.use(this.fallbackLang);\n    return this.use(this.activeLang);\n  }\n\n  /**\n   * Load the translation file or use provided data for the given language.\n   *\n   * @param lang Language name\n   * @param [data] Translation data to use\n   * @returns Final translation data merged with existing translations\n   * @memberof TranslateService\n   */\n  async use(lang: string, data?: any): Promise<any> {\n    if (lang && data) {\n      return this.setTranslation(lang, data);\n    }\n\n    let translation = this.data[lang];\n    if (this.isNotSupported(lang)) {\n      translation = this.data[this.fallbackLang];\n    }\n\n    if (translation && Object.keys(translation).length > 0) {\n      return translation;\n    }\n\n    const fileName = `${lang || this.fallbackLang}.json`;\n    const filePaths = [this.translationRoot, ...(this.translatePaths || [])];\n\n    for (const path of filePaths) {\n      const filePath = `${path}/${fileName}`;\n      await this.loadTranslation(lang, filePath);\n    }\n\n    return this.data[lang] || {};\n  }\n\n  protected loadTranslation(lang: string, path: string): Promise<any> {\n    return new Promise<any>((resolve) => {\n      if (this.disableCache) {\n        path += `?v=${Date.now()}`;\n      }\n\n      this.http.get<{}>(path).subscribe(\n        (json) => {\n          resolve(this.setTranslation(lang, json));\n        },\n        () => {\n          resolve(this.data[lang] || {});\n        }\n      );\n    });\n  }\n\n  protected isNotSupported(lang: string): boolean {\n    return (\n      lang !== this.fallbackLang &&\n      lang !== this.activeLang &&\n      this.supportedLangs &&\n      this.supportedLangs.length > 0 &&\n      !(this.supportedLangs.indexOf(lang) >= 0)\n    );\n  }\n\n  protected getValue(lang: string, key: string): string {\n    let data = this.data[lang];\n    if (this.isNotSupported(lang)) {\n      data = this.data[this.fallbackLang];\n    }\n\n    if (!data) {\n      return key;\n    }\n\n    const keys = key.split('.');\n    let propKey = '';\n\n    do {\n      propKey += keys.shift();\n      const value = data[propKey];\n      if (value !== undefined && (typeof value === 'object' || !keys.length)) {\n        data = value;\n        propKey = '';\n      } else if (!keys.length) {\n        data = key;\n      } else {\n        propKey += '.';\n      }\n    } while (keys.length);\n\n    return data;\n  }\n\n  protected setTranslation(lang: string, data: any): any {\n    let finalResult = this.data[lang] || {};\n    finalResult = this.merge(finalResult, data || {});\n    this.data[lang] = finalResult;\n    return finalResult;\n  }\n\n  protected merge(...translations: any[]): any {\n    const result = {};\n\n    translations.forEach((translation) => {\n      Object.keys(translation).forEach((key) => {\n        if (key in result && Array.isArray(result[key])) {\n          result[key] = result[key].concat(translation[key]);\n        } else if (key in result && typeof result[key] === 'object') {\n          result[key] = this.merge(result[key], translation[key]);\n        } else {\n          result[key] = translation[key];\n        }\n      });\n    });\n\n    return result;\n  }\n\n  protected format(str: string, params: TranslateParams): string {\n    let result = str;\n\n    if (params) {\n      Object.keys(params).forEach((key) => {\n        const value = params[key];\n        const template = new RegExp('{' + key + '}', 'gm');\n\n        result = result.replace(template, value.toString());\n      });\n    }\n\n    if (this.debugMode) {\n      result = `[${this.activeLang}] ${result}`;\n    }\n\n    return result;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { TranslateService } from './translate.service';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TitleService {\n  private _titleKey = '';\n\n  changed = new Subject<{\n    previousValue: string;\n    currentValue: string;\n  }>();\n\n  constructor(private title: Title, private translate: TranslateService) {\n    translate.activeLangChanged.subscribe(() => this.onLanguageChanged());\n  }\n\n  getTitle(): string {\n    return this._titleKey;\n  }\n\n  setTitle(key: string): void {\n    const previousValue = this._titleKey;\n    const newValue = key || '';\n    const changed = newValue !== previousValue;\n\n    if (changed) {\n      this._titleKey = newValue;\n\n      const translated = this.translate.get(newValue);\n      this.title.setTitle(translated);\n\n      this.changed.next({\n        previousValue: previousValue,\n        currentValue: newValue\n      });\n    }\n  }\n\n  private onLanguageChanged() {\n    if (this._titleKey) {\n      const translated = this.translate.get(this._titleKey);\n      this.title.setTitle(translated);\n    }\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService, TranslateParams } from './translate.service';\n\n@Pipe({\n  name: 'translate',\n  pure: false\n})\nexport class TranslatePipe implements PipeTransform {\n  constructor(private translate: TranslateService) {}\n\n  transform(key: string, params?: TranslateParams): string {\n    return this.translate.get(key, params);\n  }\n}\n","import { Directive, ElementRef, OnInit, Input, OnDestroy } from '@angular/core';\nimport { TranslateService } from './translate.service';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[translate]'\n})\nexport class TranslateDirective implements OnInit, OnDestroy {\n  private onDestroy$ = new Subject<boolean>();\n\n  @Input('translate')\n  key = '';\n\n  @Input()\n  translateParams: any = null;\n\n  constructor(private el: ElementRef, private translate: TranslateService) {}\n\n  ngOnInit() {\n    this.updateElement();\n\n    this.translate.activeLangChanged\n      .pipe(takeUntil(this.onDestroy$))\n      .subscribe(() => this.updateElement());\n  }\n\n  private updateElement() {\n    if (this.key) {\n      const domElement: HTMLElement = this.el.nativeElement;\n\n      if (domElement) {\n        domElement.innerText = this.translate.get(\n          this.key,\n          this.translateParams\n        );\n      }\n    }\n  }\n\n  ngOnDestroy() {\n    this.onDestroy$.next(true);\n    this.onDestroy$.complete();\n  }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslateService, TRANSLATE_SETTINGS } from './translate.service';\nimport { TranslatePipe } from './translate.pipe';\nimport { TitleService } from './title.service';\nimport { TranslateSettings } from './translate.settings';\nimport { TranslateDirective } from './translate.directive';\n\n@NgModule({\n  imports: [CommonModule],\n  declarations: [TranslatePipe, TranslateDirective],\n  exports: [TranslatePipe, TranslateDirective]\n})\nexport class TranslateModule {\n  static forRoot(\n    settings?: TranslateSettings\n  ): ModuleWithProviders<TranslateModule> {\n    return {\n      ngModule: TranslateModule,\n      providers: [\n        { provide: TRANSLATE_SETTINGS, useValue: settings },\n        TranslateService,\n        TitleService\n      ]\n    };\n  }\n\n  static forChild(): ModuleWithProviders<TranslateModule> {\n    return {\n      ngModule: TranslateModule\n    };\n  }\n}\n","/*\n * Public API Surface of translate\n */\n\nexport * from './lib/translate.service';\nexport * from './lib/title.service';\nexport * from './lib/translate.pipe';\nexport * from './lib/translate.module';\nexport * from './lib/translate.settings';\nexport * from './lib/translate.directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2.TranslateService","i1.TranslateService"],"mappings":"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"}