{"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  new InjectionToken<MessageformatConfig>('TRANSLOCO_MESSAGE_FORMAT_CONFIG');\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 {DefaultTranspiler, getValue, isObject, setValue, TranspileParams,} from '@jsverse/transloco';\nimport MessageFormat, {MessageFormatOptions} from '@messageformat/core';\n\nimport {MessageformatConfig, MFLocale, TRANSLOCO_MESSAGE_FORMAT_CONFIG,} from './messageformat.config';\nimport {cachedFactory, defaultFactory, MFFactory,} 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() @Inject(TRANSLOCO_MESSAGE_FORMAT_CONFIG) 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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"}