{"version":3,"sources":["../src/index.ts","../src/helpers.ts","../src/mergeDicts.ts","../src/defaultOptions.ts","../src/getKeys.ts","../src/intlHelpers.ts","../src/store.ts","../src/cache.ts","../src/flattenDict.ts","../src/translate.ts","../src/mapPotentialArray.ts","../src/debug.ts","../src/translator.ts"],"sourcesContent":["export { getPossibleLocales } from './helpers';\nexport { mergeDicts } from './mergeDicts';\nexport { createTranslator } from './translator';\nexport type {\n  CreateTranslatorOptions,\n  CreateTranslatorResult,\n  DeepValue,\n  Dict,\n  FlatDict,\n  FlatKeys,\n  FlattenDict,\n  GetTranslatorOptions,\n  MaybePromise,\n  Merge,\n  Translator,\n  TranslatorFn,\n  Values,\n} from './types';\n","import { TemporalLike } from './temporal-polyfill';\n\nexport function toDate(\n  date: Date | number | string | TemporalLike | undefined,\n  options: Intl.DateTimeFormatOptions | undefined = {},\n): {\n  date: Date;\n  options: Intl.DateTimeFormatOptions;\n  type: 'instant' | 'plainDateTime' | 'plainDate' | 'plainTime';\n} {\n  if (date instanceof Date) {\n    return { date, options, type: 'instant' };\n  }\n\n  if (!(date instanceof Object)) {\n    return { date: date !== undefined ? new Date(date) : new Date(), options, type: 'instant' };\n  }\n\n  if ('epochMilliseconds' in date) {\n    return { date: new Date(date.epochMilliseconds), options, type: 'instant' };\n  } else {\n    const isPlain = !date.timeZone;\n    let iso = date.toString().replace(/\\[.*\\]/, '') + (isPlain ? 'Z' : '');\n    let type: 'instant' | 'plainDateTime' | 'plainDate' | 'plainTime' = 'instant';\n\n    if (isPlain) {\n      // Ignore timeZones, time is relative\n      options = { ...options, timeZone: 'UTC' };\n      type = 'plainDateTime';\n    }\n\n    if (date.hour === undefined) {\n      // Plain date\n      options = { ...options, timeStyle: undefined, hour: undefined, minute: undefined, second: undefined };\n      type = 'plainDate';\n    }\n\n    if (date.month === undefined) {\n      // Plain time\n      iso = `1970-01-01T${iso}`;\n      options = { ...options, dateStyle: undefined, year: undefined, month: undefined, day: undefined };\n      type = 'plainTime';\n    }\n\n    return {\n      date: new Date(iso),\n      options,\n      type,\n    };\n  }\n}\n\nexport function arrEquals(a?: any[], b?: any[]): boolean {\n  if (!a || !b) return a === b;\n  if (a.length !== b.length) return false;\n  return a.every((value, index) => value === b[index]) ?? false;\n}\n\nexport function objEquals(a: Record<string, unknown>, b: Record<string, unknown>): boolean {\n  const keysA = Object.keys(a);\n  const keysB = Object.keys(b);\n  if (keysA.length !== keysB.length) return false;\n  return keysA.every((key) => a[key] === b[key]);\n}\n\nexport function castArray<T>(x: T | readonly T[] = []): readonly T[] {\n  if (x instanceof Array) return x;\n  return [x];\n}\n\nexport function getPossibleLocales(\n  locale: string,\n  {\n    fallbackToLessSpecific = true,\n    fallbackToMoreSpecific = true,\n    fallbackLocale,\n  }: {\n    fallbackToLessSpecific?: boolean;\n    fallbackToMoreSpecific?: boolean;\n    fallbackLocale?: string | readonly string[] | ((locale: string) => string | readonly string[]);\n  } = {},\n): readonly string[] {\n  const requestedLocales = [locale];\n\n  if (fallbackToLessSpecific) {\n    let prefix = locale;\n\n    while (prefix.includes('-')) {\n      const index = prefix.lastIndexOf('-');\n      prefix = prefix.slice(0, index);\n      requestedLocales.push(prefix);\n    }\n  }\n\n  if (fallbackToMoreSpecific) {\n    const prefix = locale.split('-')[0];\n    requestedLocales.push(`${prefix}-XX`);\n  }\n\n  if (fallbackLocale instanceof Function) {\n    requestedLocales.push(...castArray(fallbackLocale(locale)));\n  } else if (fallbackLocale) {\n    requestedLocales.push(...castArray(fallbackLocale));\n  }\n\n  return requestedLocales;\n}\n\nexport function isPromise(x: unknown): x is Promise<unknown> {\n  return typeof x === 'object' && x !== null && 'then' in x && typeof x.then === 'function';\n}\n","import { Dict, Merge } from './types';\n\nfunction mergeImpl(a: any, b: any) {\n  const result = { ...a };\n\n  for (const key in b) {\n    if (!(key in result) || typeof b[key] !== 'object' || typeof result[key] !== 'object') {\n      result[key] = b[key];\n    } else {\n      result[key] = mergeImpl(result[key], b[key]);\n    }\n  }\n\n  return result;\n}\n\nexport function mergeDicts<Parts extends Dict[]>(...parts: Parts): Merge<Parts> {\n  return parts.reduce(mergeImpl, {}) as Merge<Parts>;\n}\n","import type { CreateTranslatorOptions } from './types';\n\nexport default function defaultOptions<\n  T extends Pick<CreateTranslatorOptions<any, any>, 'fallbackToLessSpecific' | 'fallbackToMoreSpecific' | 'fallbackIgnoresFallbackLocales'>,\n>(options: T): T {\n  return {\n    ...options,\n    fallbackToLessSpecific: options.fallbackToLessSpecific ?? true,\n    fallbackToMoreSpecific: options.fallbackToMoreSpecific ?? true,\n    fallbackIgnoresFallbackLocales: options.fallbackIgnoresFallbackLocales ?? false,\n  };\n}\n","import { isPromise } from './helpers';\nimport type { FlatDict, MaybePromise } from './types';\n\nexport default function getKeys<D extends FlatDict>(dict: MaybePromise<D | null | undefined>) {\n  function inner(): (keyof D)[];\n  function inner<TPrefix extends string>(prefix: TPrefix): (keyof D & (TPrefix | `${TPrefix}.${string}`))[];\n  function inner(prefix?: string) {\n    if (isPromise(dict)) {\n      return [];\n    }\n\n    return Object.keys(dict ?? {})\n      .filter((key) => prefix === undefined || key === prefix || key.startsWith(`${prefix}.`))\n      .sort();\n  }\n\n  return inner;\n}\n","import { Cache } from './cache';\nimport { toDate } from './helpers';\nimport type { ReactCreateTranslatorOptions } from './react';\nimport { TemporalLike } from './temporal-polyfill';\nimport { IntlHelpers } from './types';\n\nexport function intlHelpers<Output>(\n  render: (\n    fn: (\n      locale: string,\n      cache: Cache,\n      options: Pick<\n        ReactCreateTranslatorOptions<any, any>,\n        | 'dateTimeFormatOptions'\n        | 'displayNamesOptions'\n        | 'listFormatOptions'\n        | 'numberFormatOptions'\n        | 'pluralRulesOptions'\n        | 'relativeTimeFormatOptions'\n        | 'durationFormatOptions'\n      >,\n    ) => string,\n  ) => Output,\n): IntlHelpers<Output> {\n  return {\n    dateTimeFormat(date, dateTimeFormatOptions) {\n      return render((locale, cache, options) =>\n        customDateTimeFormat(cache, locale, dateTimeFormatOptions ?? options.dateTimeFormatOptions, date),\n      );\n    },\n\n    dateTimeFormatRange(startDate, endDate, dateTimeFormatOptions) {\n      return render((locale, cache, options) =>\n        customDateTimeFormatRange(cache, locale, dateTimeFormatOptions ?? options.dateTimeFormatOptions, startDate, endDate),\n      );\n    },\n\n    displayNames(code, displayNamesOptions) {\n      return render(\n        (locale, cache, options) => cache.get(Intl.DisplayNames, locale, displayNamesOptions ?? options.displayNamesOptions).of(code) ?? '',\n      );\n    },\n\n    listFormat(list, listFormatOptions) {\n      return render((locale, cache, options) =>\n        cache.get(Intl.ListFormat, locale, listFormatOptions ?? options.listFormatOptions).format(list),\n      );\n    },\n\n    numberFormat(number, numberFormatOptions) {\n      return render((locale, cache, options) =>\n        cache.get(Intl.NumberFormat, locale, numberFormatOptions ?? options.numberFormatOptions).format(number),\n      );\n    },\n\n    // numberFormatRange(start, end, options = numberFormatOptions) {\n    //   return transform((locale) => cache.get(Intl.NumberFormat, locale, options).formatRange(start, end));\n    // },\n\n    pluralRules(number, pluralRulesOptions) {\n      return render((locale, cache, options) =>\n        cache.get(Intl.PluralRules, locale, pluralRulesOptions ?? options.pluralRulesOptions).select(number),\n      );\n    },\n\n    relativeTimeFormat(value, unit, relativeTimeFormatOptions) {\n      return render((locale, cache, options) =>\n        cache.get(Intl.RelativeTimeFormat, locale, relativeTimeFormatOptions ?? options.relativeTimeFormatOptions).format(value, unit),\n      );\n    },\n\n    durationFormat(duration, durationFormatOptions) {\n      const intl = Intl as { DurationFormat?: any };\n      if (!intl.DurationFormat) {\n        throw new Error('Intl.DurationFormat is not available in this environment. Try using the polyfill');\n      }\n      return render((locale, cache, options) =>\n        cache.get(intl.DurationFormat, locale, durationFormatOptions ?? options.durationFormatOptions).format(duration),\n      );\n    },\n  };\n}\n\nexport function customDateTimeFormat(\n  cache: Cache,\n  locale: string | undefined,\n  options_: Intl.DateTimeFormatOptions | undefined,\n  date_: Date | number | string | TemporalLike | undefined,\n) {\n  const { date, options } = toDate(date_, options_) ?? {};\n  return cache.get(Intl.DateTimeFormat, locale, options).format(date);\n}\n\nexport function customDateTimeFormatRange(\n  cache: Cache,\n  locale: string | undefined,\n  options_: Intl.DateTimeFormatOptions | undefined,\n  startDate_: Date | number | string | TemporalLike,\n  endDate_: Date | number | string | TemporalLike,\n) {\n  const start = toDate(startDate_, options_);\n  const end = toDate(endDate_);\n\n  if (start.type !== end.type) {\n    throw new Error('Intl.DateTimeFormat.formatRange accepts two values of the same type');\n  }\n\n  return cache.get(Intl.DateTimeFormat, locale, start.options).formatRange(start.date, end.date);\n}\n","import { match } from '@formatjs/intl-localematcher';\nimport { Cache } from './cache';\nimport { flattenDict } from './flattenDict';\nimport { arrEquals, isPromise } from './helpers';\nimport { CreateTranslatorOptions, Dict, MaybePromise, type FlattenDict } from './types';\n\nexport class Store<D extends Dict = any, FD extends FlattenDict<D> = FlattenDict<D>, ProvidedArgs extends string = never> {\n  dicts = new Map<string, MaybePromise<FD | null>>();\n  cache = new Cache(this.options.cacheOptions);\n  subs = new Set<() => void>();\n\n  constructor(\n    public options: Pick<CreateTranslatorOptions<D, ProvidedArgs>, 'sourceLocale' | 'sourceDictionary' | 'dicts' | 'cacheOptions'>,\n  ) {}\n\n  load(locale: string): MaybePromise<FD | null> {\n    let entry = this.dicts.get(locale);\n    if (entry !== undefined) return entry;\n\n    let dict = null;\n    if (match([locale], [this.options.sourceLocale], '') && this.options.sourceDictionary) {\n      dict = this.options.sourceDictionary;\n    } else if (this.options.dicts instanceof Function) {\n      try {\n        dict = this.options.dicts(locale);\n\n        if (isPromise(dict)) {\n          dict = dict.catch(() => {\n            console.warn(`Failed to load dictionary for locale \"${locale}\"`);\n            return null;\n          });\n        }\n      } catch {\n        console.warn(`Failed to load dictionary for locale \"${locale}\"`);\n        dict = null;\n      }\n    } else if (this.options.dicts) {\n      const availableLocales = Object.keys(this.options.dicts);\n      const matching = match([locale], availableLocales, locale);\n      dict = this.options.dicts[matching] ?? null;\n      if (dict instanceof Function) dict = dict();\n    }\n\n    if (isPromise(dict)) {\n      entry = dict.then((resolvedDict) => {\n        const flatDict = resolvedDict && (flattenDict(resolvedDict) as FD);\n        if (this.dicts.get(locale) === entry) {\n          this.dicts.set(locale, flatDict);\n        }\n        return flatDict;\n      });\n    } else {\n      entry = dict && (flattenDict(dict) as FD);\n    }\n\n    this.dicts.set(locale, entry);\n\n    if (isPromise(entry)) {\n      entry.then(() => this.notify());\n    } else {\n      this.notify();\n    }\n\n    return entry;\n  }\n\n  loadAll(...locales: string[]): MaybePromise<FD[]> {\n    const dicts = locales.map((locale) => this.load(locale));\n\n    if (dicts.some(isPromise)) {\n      return Promise.all(dicts).then((dicts) => dicts.filter(Boolean) as FD[]);\n    }\n\n    return dicts.filter(Boolean) as unknown as FD[];\n  }\n\n  getAll(...locales: string[]): MaybePromise<FD>[] {\n    const dicts = locales.map((locale) => this.load(locale));\n    return dicts.filter(Boolean) as MaybePromise<FD>[];\n  }\n\n  subscribe(locales: string[], callback: (dicts?: MaybePromise<FD>[]) => void): () => void {\n    let last: MaybePromise<FD>[] | undefined;\n\n    const sub = () => {\n      const dicts = this.getAll(...locales);\n      if (!arrEquals(dicts, last)) {\n        last = dicts;\n        callback(dicts);\n      }\n    };\n    sub();\n\n    this.subs.add(callback);\n    return () => {\n      this.subs.delete(callback);\n    };\n  }\n\n  clear(): void {\n    this.dicts.clear();\n    this.cache.clear();\n    this.notify();\n  }\n\n  private notify() {\n    setTimeout(() => {\n      for (const sub of this.subs) sub();\n    });\n  }\n}\n","export function hash(obj: unknown): string {\n  return JSON.stringify(obj, (_key, value) => {\n    if (value instanceof Array || !(value instanceof Object)) return value;\n\n    const result: Record<string, unknown> = {};\n\n    for (const key of Object.keys(value).sort()) {\n      result[key] = value[key];\n    }\n\n    return result;\n  });\n}\n\nexport type CacheOptions = { maxEntries?: number; ttl?: number };\n\nexport class Cache {\n  private cache = new Map<any, Map<string, any>>();\n  private delQueue = new Map<any, [t: number, k1: any, k2: string]>();\n\n  constructor(private readonly options?: CacheOptions) {}\n\n  get<C extends new (...args: any[]) => any>(C: C, ...args: ConstructorParameters<C>): InstanceType<C> {\n    if (this.options?.maxEntries === 0) return new C(...args);\n\n    const key = hash(args);\n\n    let innerCache = this.cache.get(C);\n    if (!innerCache) {\n      innerCache = new Map();\n      this.cache.set(C, innerCache);\n    }\n\n    let value = innerCache.get(key);\n    if (!value) {\n      this.clean();\n      value = new C(...args);\n      innerCache.set(key, value);\n    }\n\n    this.delQueue.delete(value);\n    this.delQueue.set(value, [Date.now(), C, key]);\n\n    return value;\n  }\n\n  private clean(): void {\n    const { maxEntries, ttl } = this.options ?? {};\n    const now = Date.now();\n\n    for (const [k, [t, k1, k2]] of this.delQueue.entries()) {\n      if ((maxEntries && maxEntries <= this.delQueue.size) || (ttl && t + ttl > now)) {\n        const innerCache = this.cache.get(k1);\n        this.delQueue.delete(k);\n        innerCache?.delete(k2);\n        if (innerCache?.size === 0) {\n          this.cache.delete(k1);\n        }\n      }\n    }\n  }\n\n  clear(): void {\n    this.cache.clear();\n  }\n}\n","import { Dict, FlattenDict } from './types';\n\nexport function flattenDict<D extends Dict>(dict: D, path = ''): FlattenDict<D> {\n  const flat: any = {};\n\n  for (const [key, value] of Object.entries(dict)) {\n    const newPath = path ? `${path}.${key}` : key;\n    if (value === undefined) continue;\n    if (value instanceof Object && !(value instanceof Array)) Object.assign(flat, flattenDict(value, newPath));\n    else flat[newPath] = value;\n  }\n\n  return flat;\n}\n","import { MessageFormatElement, parse, TYPE } from '@formatjs/icu-messageformat-parser';\nimport { IntlMessageFormat } from 'intl-messageformat';\nimport { MaybePromise } from '.';\nimport { Cache } from './cache';\nimport { customDateTimeFormat, customDateTimeFormatRange } from './intlHelpers';\nimport { mapPotentialArray } from './mapPotentialArray';\nimport { FlatDict, ICUArgument, ICUDateArgument, TranslatorDebugOptions } from './types';\nimport { isPromise } from './helpers';\nimport { applyDebugOutput } from './debug';\n\nexport function translate<F = never>({\n  dicts,\n  sourceDict,\n  id,\n  values,\n  fallback,\n  fallbackIgnoresFallbackLocales,\n  debug,\n  placeholder,\n  locale,\n  warn,\n  cache,\n  ignoreMissingArgs,\n  providedArgs,\n}: {\n  dicts: MaybePromise<FlatDict>[];\n  sourceDict?: MaybePromise<FlatDict> | null;\n  id: string;\n  values?: any;\n  fallback?: F | ((id: string, sourceTranslation?: string | readonly string[]) => F);\n  fallbackIgnoresFallbackLocales?: boolean;\n  debug?: boolean | TranslatorDebugOptions;\n  placeholder?: F | ((id: string, sourceTranslation?: string | readonly string[]) => F);\n  locale: string;\n  warn?: (locale: string, id: string) => void;\n  cache: Cache;\n  ignoreMissingArgs: boolean | string | ((id: string, template: string) => string) | undefined;\n  providedArgs: Record<string, ICUArgument | ICUDateArgument> | undefined;\n}): string | F | (string | F)[] | F {\n  if (fallback !== undefined && fallbackIgnoresFallbackLocales) {\n    dicts = dicts.slice(0, 1);\n  }\n\n  const dict = dicts.find((dict) => isPromise(dict) || id in dict);\n\n  if (isPromise(dict)) {\n    return mapPotentialArray(\n      sourceDict && !isPromise(sourceDict)\n        ? translate<string>({\n            dicts: [sourceDict],\n            sourceDict,\n            id,\n            values,\n            locale,\n            cache,\n            ignoreMissingArgs,\n            providedArgs,\n            debug,\n          })\n        : undefined,\n      (sourceTranslation) => {\n        const translation = placeholder instanceof Function ? placeholder(id, sourceTranslation) : (placeholder ?? '');\n        return applyDebugOutput(\n          {\n            translation,\n            id,\n            values,\n            providedArgs,\n          },\n          debug,\n        );\n      },\n    );\n  }\n\n  const template = dict?.[id];\n  if (!template) {\n    if (fallback instanceof Function) {\n      const sourceTranslation =\n        sourceDict && !isPromise(sourceDict)\n          ? translate<string>({\n              dicts: [sourceDict],\n              sourceDict,\n              id,\n              values,\n              locale,\n              cache,\n              ignoreMissingArgs,\n              providedArgs,\n              debug,\n            })\n          : undefined;\n      const translation = fallback(id, sourceTranslation);\n      return applyDebugOutput(\n        {\n          translation,\n          id,\n          values,\n          providedArgs,\n        },\n        debug,\n      );\n    }\n    if (fallback !== undefined)\n      return applyDebugOutput(\n        {\n          translation: fallback,\n          id,\n          values,\n          providedArgs,\n        },\n        debug,\n      );\n\n    warn?.(locale, id);\n\n    return applyDebugOutput(\n      {\n        translation: id,\n        id,\n        values,\n        providedArgs,\n      },\n      debug,\n    );\n  }\n\n  return mapPotentialArray(template, (template) =>\n    applyDebugOutput(\n      {\n        translation: format({ template, values, locale, cache, ignoreMissingArgs, providedArgs }),\n        id,\n        values,\n        providedArgs,\n      },\n      debug,\n    ),\n  );\n}\n\nexport function format({\n  template,\n  values,\n  locale,\n  cache,\n  ignoreMissingArgs,\n  providedArgs,\n}: {\n  template: string;\n  values?: Record<string, unknown>;\n  locale?: string;\n  cache: Cache;\n  ignoreMissingArgs: boolean | string | ((id: string, template: string) => string) | undefined;\n  providedArgs: Record<string, ICUArgument | ICUDateArgument> | undefined;\n}): string {\n  values = { ...providedArgs, ...values };\n\n  try {\n    const ast = parse(template, { requiresOtherClause: false });\n\n    const f = new IntlMessageFormat(ast, locale, undefined, {\n      formatters: {\n        getDateTimeFormat(locals, options) {\n          const instance = cache.get(Intl.DateTimeFormat, locals, options);\n\n          return {\n            ...instance,\n            format: (date) => customDateTimeFormat(cache, locale, options, date),\n            formatRange: (startDate, endDate) =>\n              typeof startDate === 'bigint' || typeof endDate === 'bigint'\n                ? instance.formatRange(startDate, endDate)\n                : customDateTimeFormatRange(cache, locale, options, startDate, endDate),\n          };\n        },\n        getNumberFormat(locals, options) {\n          return cache.get(Intl.NumberFormat, locals, options as Intl.NumberFormatOptions | undefined);\n        },\n        getPluralRules(locals, options) {\n          return cache.get(Intl.PluralRules, locals, options);\n        },\n      },\n    });\n\n    if (ignoreMissingArgs) {\n      values = { ...values };\n      for (const arg of new Set(findArgs(ast))) {\n        if (!(arg in values)) {\n          if (ignoreMissingArgs === true) {\n            values[arg] = '';\n          } else if (typeof ignoreMissingArgs === 'string') {\n            values[arg] = ignoreMissingArgs;\n          } else {\n            values[arg] = ignoreMissingArgs(arg, template);\n          }\n        }\n      }\n    }\n\n    const msg = f.format(values);\n    if (msg instanceof Array) return msg.join(' ');\n    return String(msg);\n  } catch (e) {\n    return `Wrong format: ${String(e)}`;\n  }\n}\n\nfunction findArgs(ast: MessageFormatElement[]): string[] {\n  return ast.flatMap((el) => {\n    if (el.type === TYPE.argument || el.type === TYPE.number || el.type === TYPE.date || el.type === TYPE.time) {\n      return [el.value];\n    }\n\n    if (el.type === TYPE.select || el.type === TYPE.plural) {\n      return [el.value, ...findArgs(Object.values(el.options).flatMap((option) => option.value))];\n    }\n\n    return [];\n  });\n}\n","export function mapPotentialArray<T, S>(value: T | readonly T[], fn: (value: T) => S): S | S[] {\n  if (value instanceof Array) return value.map(fn);\n  return fn(value);\n}\n","import type { ICUArgument, ICUDateArgument, TranslatorDebugOptions } from './types';\n\nexport function applyDebugOutput<F>(\n  {\n    translation,\n    id,\n    values,\n    providedArgs,\n  }: {\n    translation: string | F;\n    id: string;\n    values?: any;\n    providedArgs: Record<string, ICUArgument | ICUDateArgument> | undefined;\n  },\n  options?: boolean | TranslatorDebugOptions,\n) {\n  const debug = getDebugOptions(options ?? false);\n\n  if (!debug) {\n    return translation;\n  }\n\n  let result = '';\n  if (debug.key) {\n    result += `${id} `;\n  }\n\n  if (debug.variables && typeof values === 'object' && values !== null && Object.keys(values).length > 0) {\n    const stringifiedValues = JSON.stringify({ ...values });\n    if (stringifiedValues !== '{}') {\n      result += `${stringifiedValues} `;\n    }\n  }\n\n  if (debug.providedArgs && typeof providedArgs === 'object' && Object.keys(providedArgs).length > 0) {\n    const stringifiedArgs = JSON.stringify({ ...providedArgs });\n    if (stringifiedArgs !== '{}') {\n      result += `${stringifiedArgs} `;\n    }\n  }\n\n  if (debug.translation) {\n    result += `=\"${translation}\" `;\n  }\n\n  return result.slice(0, -1);\n}\n\nfunction getDebugOptions(options: boolean | TranslatorDebugOptions): Required<TranslatorDebugOptions> | false {\n  if (typeof options === 'boolean') {\n    if (options) {\n      return {\n        key: true,\n        variables: true,\n        translation: true,\n        providedArgs: true,\n      };\n    }\n\n    return false;\n  }\n\n  return {\n    key: options.key ?? false,\n    variables: options.variables ?? false,\n    translation: options.translation ?? false,\n    providedArgs: options.providedArgs ?? false,\n  };\n}\n","import { TranslatorFn } from '.';\nimport defaultOptions from './defaultOptions';\nimport getKeys from './getKeys';\nimport { getPossibleLocales } from './helpers';\nimport { intlHelpers } from './intlHelpers';\nimport { Store } from './store';\nimport { format, translate } from './translate';\nimport { CreateTranslatorOptions, CreateTranslatorResult, Dict, FlattenDict, Translator } from './types';\n\nexport const getTranslator = async <D extends Dict, ProvidedArgs extends string = never>(\n  store: Store<D>,\n  options: CreateTranslatorOptions<D, ProvidedArgs>,\n  locale: string,\n): Promise<Translator<FlattenDict<D>, ProvidedArgs>> => {\n  type FD = FlattenDict<D>;\n\n  const dicts = await store.loadAll(locale, ...getPossibleLocales(locale, options));\n  const sourceDict = store.load(options.sourceLocale) as FD;\n\n  const t: TranslatorFn<FD, ProvidedArgs> = (id, ...[values, translatorOptions]) => {\n    const fallback = translatorOptions?.fallback ?? options.fallback;\n\n    return translate({\n      dicts,\n      sourceDict,\n      id,\n      values,\n      fallback,\n      fallbackIgnoresFallbackLocales: options.fallbackIgnoresFallbackLocales,\n      locale,\n      warn: options.warn,\n      debug: options.debug,\n      cache: store.cache,\n      ignoreMissingArgs: options.ignoreMissingArgs,\n      providedArgs: options.provideArgs,\n    }) as any;\n  };\n\n  return Object.assign<TranslatorFn<FD, ProvidedArgs>, Omit<Translator<FD, ProvidedArgs>, keyof TranslatorFn<FD, ProvidedArgs>>>(t, {\n    locale,\n\n    unknown: t as Translator<FD, ProvidedArgs>['unknown'],\n    dynamic: t as Translator<FD, ProvidedArgs>['dynamic'],\n\n    keys: getKeys(sourceDict),\n\n    format(template, ...[values]) {\n      return format({\n        template,\n        values: values as any,\n        locale,\n        cache: store.cache,\n        ignoreMissingArgs: options.ignoreMissingArgs,\n        providedArgs: options.provideArgs,\n      });\n    },\n\n    ...intlHelpers((fn) => fn(locale, store.cache, options)),\n  });\n};\n\nexport function createTranslator<D extends Dict, ProvidedArgs extends string = never>(\n  options: CreateTranslatorOptions<D, ProvidedArgs>,\n): CreateTranslatorResult<FlattenDict<D>, ProvidedArgs> {\n  let store = new Store(options);\n\n  return {\n    getTranslator: (locale) => getTranslator(store, defaultOptions(options), locale),\n\n    clearDicts() {\n      store.clear();\n    },\n\n    updateOptions(newOptions) {\n      options = { ...options, ...newOptions };\n      store = new Store(options);\n    },\n  };\n}\n"],"mappings":"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","names":["dicts","dict","template"]}