{"version":3,"file":"ngx-runtime-i18n-angular.mjs","sources":["../../../../libs/runtime-i18n-angular/src/lib/tokens.ts","../../../../libs/runtime-i18n-angular/src/lib/provide-runtime-i18n.ts","../../../../libs/runtime-i18n-angular/src/lib/i18n.service.ts","../../../../libs/runtime-i18n-angular/src/lib/i18n.pipe.ts","../../../../libs/runtime-i18n-angular/src/lib/i18n-compat.service.ts","../../../../libs/runtime-i18n-angular/src/index.ts","../../../../libs/runtime-i18n-angular/src/ngx-runtime-i18n-angular.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport type { Catalog, RuntimeI18nConfig } from '@ngx-runtime-i18n/core';\n\nexport const RUNTIME_I18N_CONFIG = new InjectionToken<RuntimeI18nConfig>(\n  'RUNTIME_I18N_CONFIG'\n);\n\nexport const RUNTIME_I18N_CATALOGS = new InjectionToken<Map<string, Catalog>>(\n  'RUNTIME_I18N_CATALOGS'\n);\n\nexport const RUNTIME_I18N_LOCALES = new InjectionToken<Set<string>>(\n  'RUNTIME_I18N_LOCALES'\n);\n\nexport const RUNTIME_I18N_STATE_KEY = new InjectionToken<string>(\n  'RUNTIME_I18N_STATE_KEY'\n);\n\nexport const RUNTIME_I18N_LOCALE_LOADERS = new InjectionToken<\n  Record<string, () => Promise<unknown>>\n>('RUNTIME_I18N_LOCALE_LOADERS');\n\n/** Ergonomic options that don’t belong in the core runtime config. */\nexport interface RuntimeI18nOptions {\n  /** Auto-detect from `navigator.language` on first boot if no SSR snapshot or persisted choice. (default: true) */\n  autoDetect?: boolean;\n  /** LocalStorage key to persist the chosen language. Set falsy/empty to disable. (default: '@ngx-runtime-i18n:lang') */\n  storageKey?: string | null;\n  /**\n   * When navigator is a regional tag (e.g., en-GB) but only base exists (en), prefer base if exact not supported.\n   * (default: true)\n   */\n  preferNavigatorBase?: boolean;\n}\n\nexport const RUNTIME_I18N_OPTIONS = new InjectionToken<RuntimeI18nOptions>(\n  'RUNTIME_I18N_OPTIONS'\n);\n","import {\n  ENVIRONMENT_INITIALIZER,\n  inject,\n  makeStateKey,\n  Provider,\n  TransferState,\n} from '@angular/core';\nimport type { Catalog, RuntimeI18nConfig } from '@ngx-runtime-i18n/core';\nimport {\n  RUNTIME_I18N_CATALOGS,\n  RUNTIME_I18N_CONFIG,\n  RUNTIME_I18N_LOCALE_LOADERS,\n  RUNTIME_I18N_LOCALES,\n  RUNTIME_I18N_OPTIONS,\n  RUNTIME_I18N_STATE_KEY,\n  RuntimeI18nOptions,\n} from './tokens';\n\n/**\n * Register runtime i18n in an Angular app.\n *\n * @example\n * provideRuntimeI18n({\n *   defaultLang: 'en',\n *   supported: ['en','hi','de'],\n *   fetchCatalog: (lang, signal) => fetch(`/i18n/${lang}.json`, { signal }).then(r => r.json()),\n *   onMissingKey: (k) => k\n * }, {\n *   localeLoaders: { en: () => import('@angular/common/locales/global/en') },\n *   autoDetect: true,\n *   storageKey: '@ngx-runtime-i18n:lang',\n *   preferNavigatorBase: true\n * });\n */\nexport function provideRuntimeI18n(\n  cfg: RuntimeI18nConfig,\n  opts?: {\n    stateKeyPrefix?: string;\n    localeLoaders?: Record<string, () => Promise<unknown>>;\n    /** See {@link RuntimeI18nOptions} */\n    options?: RuntimeI18nOptions;\n  }\n): Provider[] {\n  const catalogs = new Map<string, Catalog>();\n  const locales = new Set<string>();\n  const stateKeyPrefix = opts?.stateKeyPrefix ?? '@ngx-runtime-i18n/core';\n\n  // Ensure a default onMissingKey (echo key) for consistent behavior\n  const normalizedCfg: RuntimeI18nConfig = {\n    ...cfg,\n    onMissingKey: cfg.onMissingKey ?? ((k) => k),\n  };\n\n  const normalizedOpts: RuntimeI18nOptions = {\n    autoDetect: opts?.options?.autoDetect ?? true,\n    storageKey: opts?.options?.storageKey ?? '@ngx-runtime-i18n:lang',\n    preferNavigatorBase: opts?.options?.preferNavigatorBase ?? true,\n  };\n\n  return [\n    { provide: RUNTIME_I18N_CONFIG, useValue: normalizedCfg },\n    { provide: RUNTIME_I18N_CATALOGS, useValue: catalogs },\n    { provide: RUNTIME_I18N_LOCALES, useValue: locales },\n    { provide: RUNTIME_I18N_STATE_KEY, useValue: stateKeyPrefix },\n    {\n      provide: RUNTIME_I18N_LOCALE_LOADERS,\n      useValue: opts?.localeLoaders ?? {},\n    },\n    { provide: RUNTIME_I18N_OPTIONS, useValue: normalizedOpts },\n\n    // Client boot: populate catalogs from TransferState if present (SSR→CSR).\n    {\n      provide: ENVIRONMENT_INITIALIZER,\n      multi: true,\n      useValue: () => {\n        const ts = inject(TransferState, { optional: true });\n        if (!ts) return;\n        const key = makeStateKey<{\n          lang: string;\n          catalogs: Record<string, Catalog>;\n        }>(`${stateKeyPrefix}:bootstrap`);\n        if (ts.hasKey(key)) {\n          const snap = ts.get(key, {\n            lang: normalizedCfg.defaultLang,\n            catalogs: {} as Record<string, Catalog>,\n          });\n          for (const [l, c] of Object.entries(snap.catalogs)) {\n            catalogs.set(l, c);\n          }\n        }\n      },\n    },\n  ];\n}\n","import {\n  ApplicationRef,\n  DestroyRef,\n  inject,\n  Injectable,\n  makeStateKey,\n  Signal,\n  signal,\n  TransferState,\n} from '@angular/core';\nimport { Catalog, formatIcu } from '@ngx-runtime-i18n/core';\nimport {\n  RUNTIME_I18N_CATALOGS,\n  RUNTIME_I18N_CONFIG,\n  RUNTIME_I18N_LOCALE_LOADERS,\n  RUNTIME_I18N_LOCALES,\n  RUNTIME_I18N_OPTIONS,\n  RUNTIME_I18N_STATE_KEY,\n  RuntimeI18nOptions,\n} from './tokens';\n\nconst isBrowser = typeof window !== 'undefined';\n\n// Angular sets ngDevMode to true in dev builds, undefined in prod (tree-shaken).\ndeclare const ngDevMode: boolean;\nconst DEV = typeof ngDevMode !== 'undefined' && !!ngDevMode;\n\n/**\n * Signals-first runtime i18n service.\n *\n * - Deterministic SSR→CSR: uses TransferState if present.\n * - No DOM mutations before first stability (avoids hydration issues).\n * - Cancellable fetch on rapid language switches.\n *\n * @publicApi\n */\n@Injectable({ providedIn: 'root' })\nexport class I18nService {\n  private cfg = inject(RUNTIME_I18N_CONFIG);\n  private catalogs = inject(RUNTIME_I18N_CATALOGS);\n  private locales = inject(RUNTIME_I18N_LOCALES);\n  private ts = inject(TransferState, { optional: true });\n  private appRef = inject(ApplicationRef);\n  private destroyRef = inject(DestroyRef);\n  private stateKeyPrefix = inject(RUNTIME_I18N_STATE_KEY);\n  private localeLoaders = inject(RUNTIME_I18N_LOCALE_LOADERS);\n  private options = inject<RuntimeI18nOptions>(RUNTIME_I18N_OPTIONS);\n\n  private _lang = signal<string>(this.cfg.defaultLang);\n  private _ready = signal<boolean>(false);\n\n  /** Currently active language (signal). */\n  readonly lang: Signal<string> = this._lang.asReadonly();\n  /** True once the initial locale + catalog are available. */\n  readonly ready: Signal<boolean> = this._ready.asReadonly();\n\n  private abort?: AbortController;\n\n  // Track missing keys warned in dev mode (dedup once per key)\n  private _warnedMissing = DEV ? new Set<string>() : undefined;\n\n  constructor() {\n    // Defer initial work until app is stable (prevents pre-hydration mutations).\n    const sub = this.appRef.isStable.subscribe(async (stable) => {\n      if (!stable) return;\n\n      let initial = this.cfg.defaultLang;\n\n      // 1) TransferState bootstrap (SSR→CSR)\n      if (this.ts) {\n        const key = makeStateKey<{\n          lang: string;\n          catalogs: Record<string, Catalog>;\n        }>(`${this.stateKeyPrefix}:bootstrap`);\n        if (this.ts.hasKey(key)) {\n          const snap = this.ts.get(key, {\n            lang: this.cfg.defaultLang,\n            catalogs: {},\n          });\n          initial = snap.lang || initial;\n          this.ts.remove(key);\n          Object.entries(snap.catalogs).forEach(([l, c]) => {\n            if (!this.catalogs.has(l)) this.catalogs.set(l, c as Catalog);\n          });\n        }\n      }\n\n      // 2) If no SSR lang snapshot, try persisted user choice\n      const candidateFromStorage =\n        isBrowser && this.options.storageKey\n          ? safeLocalStorageGet(this.options.storageKey)\n          : null;\n\n      // 3) Else browser auto-detect (navigator.language), with fallback chain\n      const candidateFromNavigator =\n        isBrowser && this.options.autoDetect\n          ? navigator.language || (navigator as any).userLanguage || null\n          : null;\n\n      // Compute best candidate only if SSR didn't supply lang and no persisted value\n      if (!this.ts || !this.ts.hasKey) {\n        // if TransferState existed, initial already set above\n      }\n      if (initial === this.cfg.defaultLang && candidateFromStorage) {\n        const resolved = resolveSupported(\n          this.cfg.supported,\n          candidateFromStorage,\n          !!this.options.preferNavigatorBase\n        );\n        if (resolved) initial = resolved;\n      } else if (initial === this.cfg.defaultLang && candidateFromNavigator) {\n        const resolved = resolveSupported(\n          this.cfg.supported,\n          candidateFromNavigator,\n          !!this.options.preferNavigatorBase\n        );\n        if (resolved) initial = resolved;\n      }\n\n      this._lang.set(initial);\n\n      await this.ensureLocale(initial);\n      await this.ensureCatalog(initial);\n      this._ready.set(true);\n      sub.unsubscribe();\n    });\n\n    this.destroyRef.onDestroy(() => this.abort?.abort());\n  }\n\n  /**\n   * Translate a key using the active language. Supports ICU-lite + interpolation.\n   * Falls back to {@link RuntimeI18nConfig.onMissingKey} or the raw key.\n   */\n  t(key: string, params?: Record<string, unknown>): string {\n    const lang = this._lang();\n    const cat =\n      this.catalogs.get(lang) ?? this.catalogs.get(this.cfg.defaultLang) ?? {};\n\n    // Dev-only, de-duplicated missing key warning\n    if (DEV && !hasKey(cat, key) && !this._warnedMissing?.has(key)) {\n      console.warn(\n        `[ngx-runtime-i18n] Missing key \"${key}\" for lang \"${lang}\". ` +\n          `Provide it in your catalog or customize onMissingKey().`\n      );\n      this._warnedMissing?.add(key);\n    }\n\n    return formatIcu(lang, key, cat, params, this.cfg.onMissingKey);\n  }\n\n  /**\n   * Switch the active language. Loads locale data + catalog on demand.\n   * Respects {@link RuntimeI18nConfig.supported}.\n   * Persists to localStorage when enabled.\n   */\n  async setLang(lang: string): Promise<void> {\n    if (lang === this._lang()) return;\n    const resolved = resolveSupported(this.cfg.supported, lang, true);\n    if (!resolved) throw new Error(`Unsupported lang: ${lang}`);\n    await this.ensureLocale(resolved);\n    await this.ensureCatalog(resolved);\n    this._lang.set(resolved);\n    if (isBrowser && this.options.storageKey) {\n      try {\n        localStorage.setItem(this.options.storageKey, resolved);\n      } catch {}\n    }\n  }\n\n  // --- Internals -------------------------------------------------------------\n\n  private async ensureLocale(lang: string) {\n    const base = lang.toLowerCase().split('-')[0];\n    if (this.locales.has(base)) return;\n    if (isBrowser) {\n      const loader = this.localeLoaders[base];\n      if (loader) await loader();\n    }\n    this.locales.add(base);\n  }\n\n  private async ensureCatalog(lang: string) {\n    if (this.catalogs.has(lang)) return;\n\n    // Hydration snapshot\n    const k = makeStateKey<Catalog>(`${this.stateKeyPrefix}:catalog:${lang}`);\n    if (this.ts?.hasKey(k)) {\n      const cat = this.ts.get(k, {});\n      this.catalogs.set(lang, cat);\n      this.ts.remove(k);\n      return;\n    }\n\n    if (!isBrowser) return;\n\n    this.abort?.abort();\n    const ctrl = new AbortController();\n    this.abort = ctrl;\n    try {\n      const fetched = await this.cfg.fetchCatalog(lang, ctrl.signal);\n      if (this.abort !== ctrl) return; // stale\n      const base = this.catalogs.get(this.cfg.defaultLang) ?? {};\n      this.catalogs.set(lang, deepMerge(base, fetched));\n    } finally {\n      if (this.abort === ctrl) this.abort = undefined;\n    }\n  }\n}\n\nfunction deepMerge(a: any, b: any): any {\n  if (typeof a !== 'object' || typeof b !== 'object' || !a || !b) return b ?? a;\n  const out: any = Array.isArray(a) ? [...a] : { ...a };\n  for (const k of Object.keys(b)) out[k] = deepMerge(a[k], b[k]);\n  return out;\n}\n\nfunction hasKey(obj: unknown, path: string): boolean {\n  if (!obj || typeof obj !== 'object') return false;\n  let cur: any = obj;\n  for (const p of path.split('.')) {\n    if (cur == null || typeof cur !== 'object' || !(p in cur)) return false;\n    cur = cur[p];\n  }\n  return true;\n}\n\n/** Resolve to a supported language: exact tag, or base fallback when allowed. */\nfunction resolveSupported(\n  supported: string[],\n  candidate: string,\n  allowBaseFallback: boolean\n): string | null {\n  if (!candidate) return null;\n  const lc = candidate.toLowerCase();\n  // exact match (case-insensitive)\n  const exact = supported.find((s) => s.toLowerCase() === lc);\n  if (exact) return exact;\n  if (!allowBaseFallback) return null;\n  // base match: en-GB -> en\n  const base = lc.split('-')[0];\n  const baseHit = supported.find((s) => s.toLowerCase() === base);\n  return baseHit ?? null;\n}\n\nfunction safeLocalStorageGet(key: string): string | null {\n  try {\n    const v = localStorage.getItem(key);\n    return v || null;\n  } catch {\n    return null;\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { I18nService } from './i18n.service';\n\n/**\n * Translate a key within templates.\n *\n * @example\n * {{ 'hello.user' | i18n:{ name: 'Ashwin' } }}\n *\n * Impure by design: re-runs when {@link I18nService.lang} changes.\n * Does not write to signals during render (avoids NG0600).\n * @publicApi\n */\n@Pipe({\n  name: 'i18n',\n  standalone: true,\n  pure: false,\n})\nexport class I18nPipe implements PipeTransform {\n  private i18n = inject(I18nService);\n\n  transform(key: string, params?: Record<string, unknown>): string {\n    // establish dependency on the lang signal (read-only)\n    this.i18n.lang();\n    return this.i18n.t(key, params);\n  }\n}\n","import { DestroyRef, Injectable, Injector, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, firstValueFrom } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { toObservable, takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Catalog, formatIcu } from '@ngx-runtime-i18n/core';\nimport { RUNTIME_I18N_CATALOGS, RUNTIME_I18N_CONFIG } from './tokens';\nimport { I18nService } from './i18n.service';\n\n/**\n * RxJS-backed compatibility service mirroring I18nService.\n * For apps not using signals yet.\n */\n@Injectable({ providedIn: 'root' })\nexport class I18nCompatService {\n  private injector = inject(Injector);\n  private destroyRef = inject(DestroyRef); // ✅ pass DestroyRef to takeUntilDestroyed\n  private cfg = inject(RUNTIME_I18N_CONFIG);\n  private catalogs = inject(RUNTIME_I18N_CATALOGS);\n  private signals = inject(I18nService);\n\n  private _lang$ = new BehaviorSubject<string>(this.cfg.defaultLang);\n  private _ready$ = new BehaviorSubject<boolean>(false);\n\n  /** Active language stream. */\n  readonly lang$: Observable<string> = this._lang$.asObservable();\n  /** Ready when initial locale + catalog are available. */\n  readonly ready$: Observable<boolean> = this._ready$.asObservable();\n\n  constructor() {\n    // Bridge: signals → observables\n    toObservable(this.signals.ready, { injector: this.injector })\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((r) => this._ready$.next(r));\n\n    toObservable(this.signals.lang, { injector: this.injector })\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe((l) => this._lang$.next(l));\n  }\n\n  t(key: string, params?: Record<string, unknown>): string {\n    const lang = this._lang$.value;\n    const cat =\n      this.catalogs.get(lang) ?? this.catalogs.get(this.cfg.defaultLang) ?? {};\n    return formatIcu(lang, key, cat as Catalog, params, this.cfg.onMissingKey);\n  }\n\n  async setLang(lang: string): Promise<void> {\n    await this.signals.setLang(lang);\n  }\n\n  /** Helper for legacy components: await readiness before first render. */\n  async whenReady(): Promise<void> {\n    await firstValueFrom(this.ready$.pipe(map(Boolean)));\n  }\n}\n","/**\n * @packageDocumentation\n * Angular bindings for @ngx-runtime-i18n.\n * Signals-first API, SSR-safe when paired with TransferState.\n */\n\nexport { provideRuntimeI18n } from './lib/provide-runtime-i18n';\nexport { I18nService } from './lib/i18n.service';\nexport { I18nPipe } from './lib/i18n.pipe';\n\n/** Advanced tokens for custom setups (SSR seeding, inspection). */\nexport {\n  RUNTIME_I18N_CONFIG,\n  RUNTIME_I18N_CATALOGS,\n  RUNTIME_I18N_LOCALES,\n  RUNTIME_I18N_STATE_KEY,\n  RUNTIME_I18N_LOCALE_LOADERS,\n} from './lib/tokens';\n\nexport { I18nCompatService } from './lib/i18n-compat.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}