{"version":3,"sources":["../../../../../src/transpiler/declaration_file_to_dictionary/intlayer_dictionary/writeDynamicDictionary.ts"],"sourcesContent":["import { getConfiguration, Locales } from '@intlayer/config';\nimport { type Dictionary } from '@intlayer/core';\nimport { mkdir, writeFile } from 'fs/promises';\nimport { relative, resolve } from 'path';\nimport { getFilteredLocalesContent } from '../../../getFilteredLocalesContent';\nimport { formatDictionaryText } from './formatDictionaryText';\nimport { MergedDictionaryOutput } from './writeMergedDictionary';\n\nexport type DictionaryResult = {\n  dictionaryPath: string;\n  dictionary: Dictionary;\n};\n\nexport type LocalizedDictionaryResult = Partial<\n  Record<Locales, DictionaryResult>\n>;\n\nexport type LocalizedDictionaryOutput = Record<\n  string,\n  LocalizedDictionaryResult\n>;\n\n/**\n * This function generates the content of the dictionary list file\n */\nexport const generateDictionaryEntryPoint = (\n  localedDictionariesPathsRecord: LocalizedDictionaryResult,\n  format: 'cjs' | 'esm' = 'esm',\n  configuration = getConfiguration()\n): string => {\n  const { dynamicDictionariesDir } = configuration.content;\n\n  let content = '';\n\n  // Format Dictionary Map - map locales to functions\n  const formattedDictionaryMap: string = Object.entries(\n    localedDictionariesPathsRecord\n  )\n    .map(([locale, dictionary]) => {\n      const relativePath = relative(\n        dynamicDictionariesDir,\n        dictionary.dictionaryPath\n      );\n\n      if (format === 'esm') {\n        return `  '${locale}': () => import('./${relativePath}', { assert: { type: 'json' }}).then(mod => mod.default)`;\n      }\n\n      return `  '${locale}': () => Promise.resolve(require('./${relativePath}'))`;\n    })\n    .join(',\\n');\n\n  content += `const content = {\\n${formattedDictionaryMap}\\n};\\n`;\n\n  if (format === 'esm') content += `export default content;\\n`;\n  if (format === 'cjs') content += `module.exports = content;\\n`;\n\n  return content;\n};\n\n/**\n * Write the localized dictionaries to the dictionariesDir\n * @param mergedDictionaries - The merged dictionaries\n * @param configuration - The configuration\n * @returns The final dictionaries\n *\n * @example\n * ```ts\n * const unmergedDictionaries = await writeUnmergedDictionaries(dictionaries);\n * const finalDictionaries = await writeFinalDictionaries(unmergedDictionaries);\n * console.log(finalDictionaries);\n *\n * // .intlayer/dictionaries/home.json\n * // { key: 'home', content: { ... } },\n * ```\n */\nexport const writeDynamicDictionary = async (\n  mergedDictionaries: MergedDictionaryOutput,\n  configuration = getConfiguration(),\n  formats: ('cjs' | 'esm')[] = ['cjs', 'esm']\n): Promise<LocalizedDictionaryOutput> => {\n  const { locales, defaultLocale } = configuration.internationalization;\n  const { dynamicDictionariesDir } = configuration.content;\n\n  // Create the dictionaries folder if it doesn't exist\n  await mkdir(resolve(dynamicDictionariesDir), { recursive: true });\n\n  let resultDictionariesPaths: LocalizedDictionaryOutput = {};\n\n  // Merge dictionaries with the same key and write to dictionariesDir\n  for await (const [key, dictionaryEntry] of Object.entries(\n    mergedDictionaries\n  )) {\n    if (key === 'undefined') continue;\n\n    let localedDictionariesPathsRecord: LocalizedDictionaryResult = {};\n\n    for await (const locale of locales) {\n      const localizedDictionary = {\n        ...dictionaryEntry.dictionary,\n        locale,\n        content: getFilteredLocalesContent(\n          dictionaryEntry.dictionary.content as any,\n          locale,\n          { dictionaryKey: key, keyPath: [] },\n          defaultLocale\n        ),\n      };\n\n      const contentString = formatDictionaryText(localizedDictionary);\n\n      const outputFileName = `${key}.${locale}.json`;\n      const resultFilePath = resolve(dynamicDictionariesDir, outputFileName);\n\n      // Write the localized dictionary\n      await writeFile(resultFilePath, contentString, 'utf8').catch((err) => {\n        console.error(`Error creating localized ${outputFileName}:`, err);\n      });\n\n      localedDictionariesPathsRecord[locale] = {\n        dictionaryPath: resultFilePath,\n        dictionary: localizedDictionary,\n      };\n    }\n\n    resultDictionariesPaths[key] = localedDictionariesPathsRecord;\n\n    for await (const format of formats) {\n      const extension = format === 'cjs' ? 'cjs' : 'mjs';\n      const content = generateDictionaryEntryPoint(\n        localedDictionariesPathsRecord,\n        format,\n        configuration\n      );\n\n      await writeFile(\n        resolve(dynamicDictionariesDir, `${key}.${extension}`),\n        content\n      );\n    }\n  }\n\n  return resultDictionariesPaths;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA0C;AAE1C,sBAAiC;AACjC,kBAAkC;AAClC,uCAA0C;AAC1C,kCAAqC;AAoB9B,MAAM,+BAA+B,CAC1C,gCACA,SAAwB,OACxB,oBAAgB,gCAAiB,MACtB;AACX,QAAM,EAAE,uBAAuB,IAAI,cAAc;AAEjD,MAAI,UAAU;AAGd,QAAM,yBAAiC,OAAO;AAAA,IAC5C;AAAA,EACF,EACG,IAAI,CAAC,CAAC,QAAQ,UAAU,MAAM;AAC7B,UAAM,mBAAe;AAAA,MACnB;AAAA,MACA,WAAW;AAAA,IACb;AAEA,QAAI,WAAW,OAAO;AACpB,aAAO,MAAM,MAAM,sBAAsB,YAAY;AAAA,IACvD;AAEA,WAAO,MAAM,MAAM,uCAAuC,YAAY;AAAA,EACxE,CAAC,EACA,KAAK,KAAK;AAEb,aAAW;AAAA,EAAsB,sBAAsB;AAAA;AAAA;AAEvD,MAAI,WAAW,MAAO,YAAW;AAAA;AACjC,MAAI,WAAW,MAAO,YAAW;AAAA;AAEjC,SAAO;AACT;AAkBO,MAAM,yBAAyB,OACpC,oBACA,oBAAgB,gCAAiB,GACjC,UAA6B,CAAC,OAAO,KAAK,MACH;AACvC,QAAM,EAAE,SAAS,cAAc,IAAI,cAAc;AACjD,QAAM,EAAE,uBAAuB,IAAI,cAAc;AAGjD,YAAM,2BAAM,qBAAQ,sBAAsB,GAAG,EAAE,WAAW,KAAK,CAAC;AAEhE,MAAI,0BAAqD,CAAC;AAG1D,mBAAiB,CAAC,KAAK,eAAe,KAAK,OAAO;AAAA,IAChD;AAAA,EACF,GAAG;AACD,QAAI,QAAQ,YAAa;AAEzB,QAAI,iCAA4D,CAAC;AAEjE,qBAAiB,UAAU,SAAS;AAClC,YAAM,sBAAsB;AAAA,QAC1B,GAAG,gBAAgB;AAAA,QACnB;AAAA,QACA,aAAS;AAAA,UACP,gBAAgB,WAAW;AAAA,UAC3B;AAAA,UACA,EAAE,eAAe,KAAK,SAAS,CAAC,EAAE;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAEA,YAAM,oBAAgB,kDAAqB,mBAAmB;AAE9D,YAAM,iBAAiB,GAAG,GAAG,IAAI,MAAM;AACvC,YAAM,qBAAiB,qBAAQ,wBAAwB,cAAc;AAGrE,gBAAM,2BAAU,gBAAgB,eAAe,MAAM,EAAE,MAAM,CAAC,QAAQ;AACpE,gBAAQ,MAAM,4BAA4B,cAAc,KAAK,GAAG;AAAA,MAClE,CAAC;AAED,qCAA+B,MAAM,IAAI;AAAA,QACvC,gBAAgB;AAAA,QAChB,YAAY;AAAA,MACd;AAAA,IACF;AAEA,4BAAwB,GAAG,IAAI;AAE/B,qBAAiB,UAAU,SAAS;AAClC,YAAM,YAAY,WAAW,QAAQ,QAAQ;AAC7C,YAAM,UAAU;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,gBAAM;AAAA,YACJ,qBAAQ,wBAAwB,GAAG,GAAG,IAAI,SAAS,EAAE;AAAA,QACrD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}