{"version":3,"file":"jsverse-transloco-messageformat.mjs","sources":["../../../../libs/transloco-messageformat/src/lib/messageformat.config.ts","../../../../libs/transloco-messageformat/src/lib/messageformat.factory.ts","../../../../libs/transloco-messageformat/src/lib/messageformat.transpiler.ts","../../../../libs/transloco-messageformat/src/lib/messageformat.providers.ts","../../../../libs/transloco-messageformat/src/jsverse-transloco-messageformat.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport MessageFormat, { MessageFormatOptions } from '@messageformat/core';\n\nexport const TRANSLOCO_MESSAGE_FORMAT_CONFIG =\n  /* @__PURE__ */ new InjectionToken<MessageformatConfig>(\n    typeof ngDevMode !== 'undefined' && ngDevMode\n      ? 'TRANSLOCO_MESSAGE_FORMAT_CONFIG'\n      : '',\n  );\n\nexport type MFLocale = ConstructorParameters<typeof MessageFormat>[0];\n\nexport interface MessageformatConfig extends MessageFormatOptions<'string'> {\n  locales?: MFLocale;\n  enableCache?: boolean;\n}\n","import MessageFormat, {\n  MessageFormatOptions,\n  MessageFunction,\n} from '@messageformat/core';\n\nimport { MFLocale } from './messageformat.config';\n\nexport type MFFactory = (\n  locales: MFLocale,\n  messageConfig: MessageFormatOptions<'string'>,\n) => MessageFormat;\n\nexport function defaultFactory(\n  locales: MFLocale,\n  messageConfig: MessageFormatOptions<'string'>,\n): MessageFormat {\n  return new MessageFormat<'string'>(locales, messageConfig);\n}\n\nexport function cachedFactory(\n  locales: MFLocale,\n  messageConfig: MessageFormatOptions<'string'>,\n): MessageFormat {\n  const mf = defaultFactory(locales, messageConfig);\n  const original = mf.compile;\n  const cache = new Map<string, MessageFunction<'string'>>();\n  const localeKey = `__${locales?.toString() || MessageFormat.defaultLocale}__`;\n\n  mf.compile = function (messages: string): MessageFunction<'string'> {\n    const cacheKey = `${localeKey}${messages}`;\n    const cachedMsg = cache.get(cacheKey);\n\n    if (cachedMsg) {\n      return cachedMsg;\n    }\n\n    const msg = original.call(this, messages);\n    cache.set(cacheKey, msg);\n\n    return msg;\n  };\n\n  return mf;\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport {\n  DefaultTranspiler,\n  getValue,\n  setValue,\n  TranspileParams,\n} from '@jsverse/transloco';\nimport { isObject } from '@jsverse/utils';\nimport MessageFormat, { MessageFormatOptions } from '@messageformat/core';\n\nimport {\n  MessageformatConfig,\n  MFLocale,\n  TRANSLOCO_MESSAGE_FORMAT_CONFIG,\n} from './messageformat.config';\nimport {\n  cachedFactory,\n  defaultFactory,\n  MFFactory,\n} from './messageformat.factory';\n\n@Injectable()\nexport class MessageFormatTranspiler extends DefaultTranspiler {\n  private messageFormat: MessageFormat;\n  private readonly messageConfig: MessageFormatOptions<'string'>;\n  private readonly mfFactory: MFFactory;\n\n  constructor(\n    @Optional()\n    @Inject(TRANSLOCO_MESSAGE_FORMAT_CONFIG)\n    config: MessageformatConfig,\n  ) {\n    super();\n    const {\n      locales,\n      enableCache = true,\n      ...messageConfig\n    } = { locales: null, ...config };\n    this.messageConfig = messageConfig;\n    this.mfFactory = enableCache ? cachedFactory : defaultFactory;\n    this.messageFormat = this.mfFactory(locales, messageConfig);\n  }\n\n  transpile({ value, params = {}, translation, key }: TranspileParams) {\n    if (!value) {\n      return value;\n    }\n\n    if (isObject(value) && params) {\n      Object.keys(params).forEach((p) => {\n        const transpiled = super.transpile({\n          value: getValue(value as Record<string, unknown>, p),\n          params: getValue(params, p),\n          translation,\n          key,\n        });\n        const message = this.messageFormat.compile(transpiled);\n        value = setValue(value, p, message(params[p]));\n      });\n    } else if (!Array.isArray(value)) {\n      const transpiled = super.transpile({ value, params, translation, key });\n\n      const message = this.messageFormat.compile(transpiled);\n      return message(params);\n    }\n\n    return value;\n  }\n\n  onLangChanged(lang: string) {\n    this.setLocale(lang);\n  }\n\n  setLocale(locale: MFLocale) {\n    this.messageFormat = this.mfFactory(locale, this.messageConfig);\n  }\n}\n","import { makeEnvironmentProviders } from '@angular/core';\nimport { TRANSLOCO_TRANSPILER } from '@jsverse/transloco';\n\nimport {\n  MessageformatConfig,\n  TRANSLOCO_MESSAGE_FORMAT_CONFIG,\n} from './messageformat.config';\nimport { MessageFormatTranspiler } from './messageformat.transpiler';\n\nexport function provideTranslocoMessageformat(config?: MessageformatConfig) {\n  return makeEnvironmentProviders([\n    { provide: TRANSLOCO_MESSAGE_FORMAT_CONFIG, useValue: config },\n    {\n      provide: TRANSLOCO_TRANSPILER,\n      useClass: MessageFormatTranspiler,\n    },\n  ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}