{"version":3,"file":"buildIntlayerDictionary.cjs","names":["OUTPUT_FORMAT","IMPORT_MODE","readDictionariesFromDisk","writeUnmergedDictionaries","writeMergedDictionaries","writeDynamicDictionary","writeFetchDictionary"],"sources":["../../../src/buildIntlayerDictionary/buildIntlayerDictionary.ts"],"sourcesContent":["import { IMPORT_MODE, OUTPUT_FORMAT } from '@intlayer/config/defaultValues';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { readDictionariesFromDisk } from '../utils/readDictionariesFromDisk';\nimport {\n  type LocalizedDictionaryOutput,\n  writeDynamicDictionary,\n} from './writeDynamicDictionary';\nimport { writeFetchDictionary } from './writeFetchDictionary';\nimport { writeMergedDictionaries } from './writeMergedDictionary';\nimport { writeUnmergedDictionaries } from './writeUnmergedDictionary';\n\nexport type BuildDictionariesOptions = Partial<{\n  formats: typeof OUTPUT_FORMAT;\n  importOtherDictionaries: boolean;\n  env: 'prod' | 'dev';\n}>;\n\nconst defaultOptions = {\n  formats: OUTPUT_FORMAT,\n  importOtherDictionaries: true,\n  env: 'dev',\n} as const satisfies BuildDictionariesOptions;\n\n/**\n * This function transpile the bundled code to to make dictionaries as JSON files\n */\nexport const buildDictionary = async (\n  localDictionariesEntries: Dictionary[],\n  configuration: IntlayerConfig,\n  options?: BuildDictionariesOptions\n) => {\n  const importMode =\n    configuration?.build?.importMode ??\n    configuration?.dictionary?.importMode ??\n    IMPORT_MODE;\n\n  const { importOtherDictionaries, env, formats } = {\n    ...defaultOptions,\n    ...options,\n  };\n\n  const unmergedDictionariesToUpdate: Dictionary[] = [\n    ...localDictionariesEntries,\n  ];\n\n  if (importOtherDictionaries) {\n    const prevUnmergedDictionaries: Record<string, Dictionary[]> =\n      readDictionariesFromDisk(configuration.system.unmergedDictionariesDir);\n\n    // Reinsert other dictionaries with the same key to avoid merging errors\n    for (const dictionaryToWrite of localDictionariesEntries) {\n      const allPrebuiltUnmergedDictionaries =\n        prevUnmergedDictionaries[dictionaryToWrite.key];\n\n      if (allPrebuiltUnmergedDictionaries?.length > 0) {\n        // Do not add the same dictionary again by filtering out the one with the same localId\n        const otherUnmergedDictionaries =\n          allPrebuiltUnmergedDictionaries.filter(\n            (unmergedDictionary) =>\n              unmergedDictionary.localId !== dictionaryToWrite.localId\n          );\n\n        unmergedDictionariesToUpdate.push(...otherUnmergedDictionaries);\n      }\n    }\n  }\n\n  const unmergedDictionaries = await writeUnmergedDictionaries(\n    unmergedDictionariesToUpdate,\n    configuration,\n    env\n  );\n\n  const mergedDictionaries = await writeMergedDictionaries(\n    unmergedDictionaries,\n    configuration\n  );\n\n  const dictionariesToBuildDynamic: typeof mergedDictionaries = {};\n  const keysToBuildFetch = new Set<string>();\n\n  for (const [key, mergedResult] of Object.entries(mergedDictionaries)) {\n    const dictionary = mergedResult.dictionary;\n    const mode = dictionary.importMode ?? importMode;\n\n    if (mode === 'dynamic' || mode === 'fetch') {\n      dictionariesToBuildDynamic[key] = mergedResult;\n    }\n\n    if (mode === 'fetch') {\n      keysToBuildFetch.add(key);\n    }\n  }\n\n  let dynamicDictionaries: LocalizedDictionaryOutput | null = null;\n\n  if (Object.keys(dictionariesToBuildDynamic).length > 0) {\n    dynamicDictionaries = await writeDynamicDictionary(\n      dictionariesToBuildDynamic,\n      configuration,\n      formats\n    );\n  }\n\n  let fetchDictionaries: LocalizedDictionaryOutput | null = null;\n\n  if (dynamicDictionaries && keysToBuildFetch.size > 0) {\n    const dictionariesToBuildFetch: LocalizedDictionaryOutput = {};\n\n    for (const key of keysToBuildFetch) {\n      if (dynamicDictionaries[key]) {\n        dictionariesToBuildFetch[key] = dynamicDictionaries[key];\n      }\n    }\n\n    if (Object.keys(dictionariesToBuildFetch).length > 0) {\n      fetchDictionaries = await writeFetchDictionary(\n        dictionariesToBuildFetch,\n        configuration,\n        formats\n      );\n    }\n  }\n\n  return {\n    unmergedDictionaries,\n    mergedDictionaries,\n    dynamicDictionaries,\n    fetchDictionaries,\n  };\n};\n"],"mappings":";;;;;;;;;;AAkBA,MAAM,iBAAiB;CACrB,SAASA;CACT,yBAAyB;CACzB,KAAK;AACP;;;;AAKA,MAAa,kBAAkB,OAC7B,0BACA,eACA,YACG;CACH,MAAM,aACJ,eAAe,OAAO,cACtB,eAAe,YAAY,cAC3BC;CAEF,MAAM,EAAE,yBAAyB,KAAK,YAAY;EAChD,GAAG;EACH,GAAG;CACL;CAEA,MAAM,+BAA6C,CACjD,GAAG,wBACL;CAEA,IAAI,yBAAyB;EAC3B,MAAM,2BACJC,gEAAyB,cAAc,OAAO,uBAAuB;EAGvE,KAAK,MAAM,qBAAqB,0BAA0B;GACxD,MAAM,kCACJ,yBAAyB,kBAAkB;GAE7C,IAAI,iCAAiC,SAAS,GAAG;IAE/C,MAAM,4BACJ,gCAAgC,QAC7B,uBACC,mBAAmB,YAAY,kBAAkB,OACrD;IAEF,6BAA6B,KAAK,GAAG,yBAAyB;GAChE;EACF;CACF;CAEA,MAAM,uBAAuB,MAAMC,kFACjC,8BACA,eACA,GACF;CAEA,MAAM,qBAAqB,MAAMC,8EAC/B,sBACA,aACF;CAEA,MAAM,6BAAwD,CAAC;CAC/D,MAAM,mCAAmB,IAAI,IAAY;CAEzC,KAAK,MAAM,CAAC,KAAK,iBAAiB,OAAO,QAAQ,kBAAkB,GAAG;EAEpE,MAAM,OADa,aAAa,WACR,cAAc;EAEtC,IAAI,SAAS,aAAa,SAAS,SACjC,2BAA2B,OAAO;EAGpC,IAAI,SAAS,SACX,iBAAiB,IAAI,GAAG;CAE5B;CAEA,IAAI,sBAAwD;CAE5D,IAAI,OAAO,KAAK,0BAA0B,EAAE,SAAS,GACnD,sBAAsB,MAAMC,8EAC1B,4BACA,eACA,OACF;CAGF,IAAI,oBAAsD;CAE1D,IAAI,uBAAuB,iBAAiB,OAAO,GAAG;EACpD,MAAM,2BAAsD,CAAC;EAE7D,KAAK,MAAM,OAAO,kBAChB,IAAI,oBAAoB,MACtB,yBAAyB,OAAO,oBAAoB;EAIxD,IAAI,OAAO,KAAK,wBAAwB,EAAE,SAAS,GACjD,oBAAoB,MAAMC,0EACxB,0BACA,eACA,OACF;CAEJ;CAEA,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}