@intlayer/chokidar 8.4.2 → 8.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/cjs/buildIntlayerDictionary/buildIntlayerDictionary.cjs +1 -1
  2. package/dist/cjs/buildIntlayerDictionary/buildIntlayerDictionary.cjs.map +1 -1
  3. package/dist/cjs/buildIntlayerDictionary/writeDynamicDictionary.cjs +5 -4
  4. package/dist/cjs/buildIntlayerDictionary/writeDynamicDictionary.cjs.map +1 -1
  5. package/dist/cjs/buildIntlayerDictionary/writeFetchDictionary.cjs +4 -4
  6. package/dist/cjs/buildIntlayerDictionary/writeFetchDictionary.cjs.map +1 -1
  7. package/dist/cjs/buildIntlayerDictionary/writeMergedDictionary.cjs +1 -1
  8. package/dist/cjs/buildIntlayerDictionary/writeMergedDictionary.cjs.map +1 -1
  9. package/dist/cjs/buildIntlayerDictionary/writeRemoteDictionary.cjs +1 -1
  10. package/dist/cjs/buildIntlayerDictionary/writeRemoteDictionary.cjs.map +1 -1
  11. package/dist/cjs/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.cjs +1 -1
  12. package/dist/cjs/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.cjs.map +1 -1
  13. package/dist/cjs/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.cjs +1 -1
  14. package/dist/cjs/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.cjs.map +1 -1
  15. package/dist/cjs/filterInvalidDictionaries.cjs +1 -1
  16. package/dist/cjs/filterInvalidDictionaries.cjs.map +1 -1
  17. package/dist/cjs/init/index.cjs +1 -1
  18. package/dist/cjs/init/index.cjs.map +1 -1
  19. package/dist/cjs/loadDictionaries/loadDictionaries.cjs +1 -1
  20. package/dist/cjs/loadDictionaries/loadDictionaries.cjs.map +1 -1
  21. package/dist/cjs/loadDictionaries/log.cjs +3 -3
  22. package/dist/cjs/loadDictionaries/log.cjs.map +1 -1
  23. package/dist/cjs/logConfigDetails.cjs +2 -2
  24. package/dist/cjs/logConfigDetails.cjs.map +1 -1
  25. package/dist/cjs/prepareIntlayer.cjs +1 -1
  26. package/dist/cjs/prepareIntlayer.cjs.map +1 -1
  27. package/dist/cjs/utils/formatter.cjs +1 -1
  28. package/dist/cjs/utils/formatter.cjs.map +1 -1
  29. package/dist/cjs/writeConfiguration/index.cjs +1 -1
  30. package/dist/cjs/writeConfiguration/index.cjs.map +1 -1
  31. package/dist/cjs/writeContentDeclaration/writeContentDeclaration.cjs +1 -1
  32. package/dist/cjs/writeContentDeclaration/writeContentDeclaration.cjs.map +1 -1
  33. package/dist/esm/buildIntlayerDictionary/buildIntlayerDictionary.mjs +1 -1
  34. package/dist/esm/buildIntlayerDictionary/buildIntlayerDictionary.mjs.map +1 -1
  35. package/dist/esm/buildIntlayerDictionary/writeDynamicDictionary.mjs +5 -4
  36. package/dist/esm/buildIntlayerDictionary/writeDynamicDictionary.mjs.map +1 -1
  37. package/dist/esm/buildIntlayerDictionary/writeFetchDictionary.mjs +4 -4
  38. package/dist/esm/buildIntlayerDictionary/writeFetchDictionary.mjs.map +1 -1
  39. package/dist/esm/buildIntlayerDictionary/writeMergedDictionary.mjs +1 -1
  40. package/dist/esm/buildIntlayerDictionary/writeMergedDictionary.mjs.map +1 -1
  41. package/dist/esm/buildIntlayerDictionary/writeRemoteDictionary.mjs +1 -1
  42. package/dist/esm/buildIntlayerDictionary/writeRemoteDictionary.mjs.map +1 -1
  43. package/dist/esm/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.mjs +1 -1
  44. package/dist/esm/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.mjs.map +1 -1
  45. package/dist/esm/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.mjs +1 -1
  46. package/dist/esm/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.mjs.map +1 -1
  47. package/dist/esm/filterInvalidDictionaries.mjs +1 -1
  48. package/dist/esm/filterInvalidDictionaries.mjs.map +1 -1
  49. package/dist/esm/init/index.mjs +1 -1
  50. package/dist/esm/init/index.mjs.map +1 -1
  51. package/dist/esm/loadDictionaries/loadDictionaries.mjs +1 -1
  52. package/dist/esm/loadDictionaries/loadDictionaries.mjs.map +1 -1
  53. package/dist/esm/loadDictionaries/log.mjs +1 -1
  54. package/dist/esm/loadDictionaries/log.mjs.map +1 -1
  55. package/dist/esm/logConfigDetails.mjs +2 -2
  56. package/dist/esm/logConfigDetails.mjs.map +1 -1
  57. package/dist/esm/prepareIntlayer.mjs +1 -1
  58. package/dist/esm/prepareIntlayer.mjs.map +1 -1
  59. package/dist/esm/utils/formatter.mjs +1 -1
  60. package/dist/esm/utils/formatter.mjs.map +1 -1
  61. package/dist/esm/writeConfiguration/index.mjs +1 -1
  62. package/dist/esm/writeConfiguration/index.mjs.map +1 -1
  63. package/dist/esm/writeContentDeclaration/writeContentDeclaration.mjs +1 -1
  64. package/dist/esm/writeContentDeclaration/writeContentDeclaration.mjs.map +1 -1
  65. package/dist/types/build.d.ts +1 -1
  66. package/dist/types/buildIntlayerDictionary/buildIntlayerDictionary.d.ts +1 -1
  67. package/dist/types/buildIntlayerDictionary/index.d.ts +1 -1
  68. package/dist/types/buildIntlayerDictionary/writeDynamicDictionary.d.ts +2 -2
  69. package/dist/types/buildIntlayerDictionary/writeFetchDictionary.d.ts +15 -8
  70. package/dist/types/buildIntlayerDictionary/writeFetchDictionary.d.ts.map +1 -1
  71. package/dist/types/buildIntlayerDictionary/writeMergedDictionary.d.ts +1 -1
  72. package/dist/types/buildIntlayerDictionary/writeRemoteDictionary.d.ts +2 -2
  73. package/dist/types/buildIntlayerDictionary/writeRemoteDictionary.d.ts.map +1 -1
  74. package/dist/types/{buildIntlayerDictionary-BGj5jDFy.d.ts → buildIntlayerDictionary-C-LWgPIL.d.ts} +7 -6
  75. package/dist/types/buildIntlayerDictionary-C-LWgPIL.d.ts.map +1 -0
  76. package/dist/types/init/index.d.ts.map +1 -1
  77. package/dist/types/prepareIntlayer.d.ts.map +1 -1
  78. package/dist/types/utils/formatter.d.ts +0 -1
  79. package/dist/types/utils/formatter.d.ts.map +1 -1
  80. package/dist/types/writeConfiguration/index.d.ts.map +1 -1
  81. package/dist/types/writeDynamicDictionary-BE0mF2zZ.d.ts +49 -0
  82. package/dist/types/writeDynamicDictionary-BE0mF2zZ.d.ts.map +1 -0
  83. package/dist/types/{writeMergedDictionary-C4EvgXbL.d.ts → writeMergedDictionary-CMeghcRI.d.ts} +3 -3
  84. package/dist/types/writeMergedDictionary-CMeghcRI.d.ts.map +1 -0
  85. package/package.json +8 -8
  86. package/dist/types/buildIntlayerDictionary-BGj5jDFy.d.ts.map +0 -1
  87. package/dist/types/writeDynamicDictionary-DE3SJg-g.d.ts +0 -36
  88. package/dist/types/writeDynamicDictionary-DE3SJg-g.d.ts.map +0 -1
  89. package/dist/types/writeMergedDictionary-C4EvgXbL.d.ts.map +0 -1
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`./writeDynamicDictionary.cjs`),t=require(`./writeFetchDictionary.cjs`),n=require(`./writeMergedDictionary.cjs`),r=require(`./writeUnmergedDictionary.cjs`);let i=require(`@intlayer/config/client`),a=require(`@intlayer/unmerged-dictionaries-entry`),o=require(`@intlayer/config/node`);const s={formats:[`cjs`,`esm`],importOtherDictionaries:!0,env:`dev`},c=async(c,l=(0,o.getConfiguration)(),u)=>{let d=l?.build?.importMode??l?.dictionary?.importMode??i.DefaultValues.Dictionary.IMPORT_MODE,{importOtherDictionaries:f,env:p,formats:m}={...s,...u},h=[...c];if(f){let e=(0,a.getUnmergedDictionaries)(l);for(let t of c){let n=e[t.key];if(n?.length>0){let e=n.filter(e=>e.localId!==t.localId);h.push(...e)}}}let g=await r.writeUnmergedDictionaries(h,l,p),_=await n.writeMergedDictionaries(g,l),v={},y=new Set;for(let[e,t]of Object.entries(_)){let n=t.dictionary.importMode??d;(n===`dynamic`||n===`fetch`)&&(v[e]=t),n===`fetch`&&y.add(e)}let b=null;Object.keys(v).length>0&&(b=await e.writeDynamicDictionary(v,l,m));let x=null;if(b&&y.size>0){let e={};for(let t of y)b[t]&&(e[t]=b[t]);Object.keys(e).length>0&&(x=await t.writeFetchDictionary(e,l,m))}return{unmergedDictionaries:g,mergedDictionaries:_,dynamicDictionaries:b,fetchDictionaries:x}};exports.buildDictionary=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`./writeDynamicDictionary.cjs`),t=require(`./writeFetchDictionary.cjs`),n=require(`./writeMergedDictionary.cjs`),r=require(`./writeUnmergedDictionary.cjs`);let i=require(`@intlayer/unmerged-dictionaries-entry`),a=require(`@intlayer/config/defaultValues`);const o={formats:a.OUTPUT_FORMAT,importOtherDictionaries:!0,env:`dev`},s=async(s,c,l)=>{let u=c?.build?.importMode??c?.dictionary?.importMode??a.IMPORT_MODE,{importOtherDictionaries:d,env:f,formats:p}={...o,...l},m=[...s];if(d){let e=(0,i.getUnmergedDictionaries)(c);for(let t of s){let n=e[t.key];if(n?.length>0){let e=n.filter(e=>e.localId!==t.localId);m.push(...e)}}}let h=await r.writeUnmergedDictionaries(m,c,f),g=await n.writeMergedDictionaries(h,c),_={},v=new Set;for(let[e,t]of Object.entries(g)){let n=t.dictionary.importMode??u;(n===`dynamic`||n===`fetch`)&&(_[e]=t),n===`fetch`&&v.add(e)}let y=null;Object.keys(_).length>0&&(y=await e.writeDynamicDictionary(_,c,p));let b=null;if(y&&v.size>0){let e={};for(let t of v)y[t]&&(e[t]=y[t]);Object.keys(e).length>0&&(b=await t.writeFetchDictionary(e,c,p))}return{unmergedDictionaries:h,mergedDictionaries:g,dynamicDictionaries:y,fetchDictionaries:b}};exports.buildDictionary=s;
2
2
  //# sourceMappingURL=buildIntlayerDictionary.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildIntlayerDictionary.cjs","names":["DefaultValues","writeUnmergedDictionaries","writeMergedDictionaries","writeDynamicDictionary","writeFetchDictionary"],"sources":["../../../src/buildIntlayerDictionary/buildIntlayerDictionary.ts"],"sourcesContent":["import { DefaultValues } from '@intlayer/config/client';\nimport { getConfiguration } from '@intlayer/config/node';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\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: ('cjs' | 'esm')[];\n importOtherDictionaries: boolean;\n env: 'prod' | 'dev';\n}>;\n\nconst defaultOptions = {\n formats: ['cjs', 'esm'],\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 = getConfiguration(),\n options?: BuildDictionariesOptions\n) => {\n const importMode =\n configuration?.build?.importMode ??\n configuration?.dictionary?.importMode ??\n DefaultValues.Dictionary.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 getUnmergedDictionaries(configuration);\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":"+YAkBA,MAAM,EAAiB,CACrB,QAAS,CAAC,MAAO,MAAM,CACvB,wBAAyB,GACzB,IAAK,MACN,CAKY,EAAkB,MAC7B,EACA,GAAA,EAAA,EAAA,mBAAkC,CAClC,IACG,CACH,IAAM,EACJ,GAAe,OAAO,YACtB,GAAe,YAAY,YAC3BA,EAAAA,cAAc,WAAW,YAErB,CAAE,0BAAyB,MAAK,WAAY,CAChD,GAAG,EACH,GAAG,EACJ,CAEK,EAA6C,CACjD,GAAG,EACJ,CAED,GAAI,EAAyB,CAC3B,IAAM,GAAA,EAAA,EAAA,yBACoB,EAAc,CAGxC,IAAK,IAAM,KAAqB,EAA0B,CACxD,IAAM,EACJ,EAAyB,EAAkB,KAE7C,GAAI,GAAiC,OAAS,EAAG,CAE/C,IAAM,EACJ,EAAgC,OAC7B,GACC,EAAmB,UAAY,EAAkB,QACpD,CAEH,EAA6B,KAAK,GAAG,EAA0B,GAKrE,IAAM,EAAuB,MAAMC,EAAAA,0BACjC,EACA,EACA,EACD,CAEK,EAAqB,MAAMC,EAAAA,wBAC/B,EACA,EACD,CAEK,EAAwD,EAAE,CAC1D,EAAmB,IAAI,IAE7B,IAAK,GAAM,CAAC,EAAK,KAAiB,OAAO,QAAQ,EAAmB,CAAE,CAEpE,IAAM,EADa,EAAa,WACR,YAAc,GAElC,IAAS,WAAa,IAAS,WACjC,EAA2B,GAAO,GAGhC,IAAS,SACX,EAAiB,IAAI,EAAI,CAI7B,IAAI,EAAwD,KAExD,OAAO,KAAK,EAA2B,CAAC,OAAS,IACnD,EAAsB,MAAMC,EAAAA,uBAC1B,EACA,EACA,EACD,EAGH,IAAI,EAAsD,KAE1D,GAAI,GAAuB,EAAiB,KAAO,EAAG,CACpD,IAAM,EAAsD,EAAE,CAE9D,IAAK,IAAM,KAAO,EACZ,EAAoB,KACtB,EAAyB,GAAO,EAAoB,IAIpD,OAAO,KAAK,EAAyB,CAAC,OAAS,IACjD,EAAoB,MAAMC,EAAAA,qBACxB,EACA,EACA,EACD,EAIL,MAAO,CACL,uBACA,qBACA,sBACA,oBACD"}
1
+ {"version":3,"file":"buildIntlayerDictionary.cjs","names":["OUTPUT_FORMAT","IMPORT_MODE","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 { getUnmergedDictionaries } from '@intlayer/unmerged-dictionaries-entry';\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 getUnmergedDictionaries(configuration);\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":"mXAkBA,MAAM,EAAiB,CACrB,QAASA,EAAAA,cACT,wBAAyB,GACzB,IAAK,MACN,CAKY,EAAkB,MAC7B,EACA,EACA,IACG,CACH,IAAM,EACJ,GAAe,OAAO,YACtB,GAAe,YAAY,YAC3BC,EAAAA,YAEI,CAAE,0BAAyB,MAAK,WAAY,CAChD,GAAG,EACH,GAAG,EACJ,CAEK,EAA6C,CACjD,GAAG,EACJ,CAED,GAAI,EAAyB,CAC3B,IAAM,GAAA,EAAA,EAAA,yBACoB,EAAc,CAGxC,IAAK,IAAM,KAAqB,EAA0B,CACxD,IAAM,EACJ,EAAyB,EAAkB,KAE7C,GAAI,GAAiC,OAAS,EAAG,CAE/C,IAAM,EACJ,EAAgC,OAC7B,GACC,EAAmB,UAAY,EAAkB,QACpD,CAEH,EAA6B,KAAK,GAAG,EAA0B,GAKrE,IAAM,EAAuB,MAAMC,EAAAA,0BACjC,EACA,EACA,EACD,CAEK,EAAqB,MAAMC,EAAAA,wBAC/B,EACA,EACD,CAEK,EAAwD,EAAE,CAC1D,EAAmB,IAAI,IAE7B,IAAK,GAAM,CAAC,EAAK,KAAiB,OAAO,QAAQ,EAAmB,CAAE,CAEpE,IAAM,EADa,EAAa,WACR,YAAc,GAElC,IAAS,WAAa,IAAS,WACjC,EAA2B,GAAO,GAGhC,IAAS,SACX,EAAiB,IAAI,EAAI,CAI7B,IAAI,EAAwD,KAExD,OAAO,KAAK,EAA2B,CAAC,OAAS,IACnD,EAAsB,MAAMC,EAAAA,uBAC1B,EACA,EACA,EACD,EAGH,IAAI,EAAsD,KAE1D,GAAI,GAAuB,EAAiB,KAAO,EAAG,CACpD,IAAM,EAAsD,EAAE,CAE9D,IAAK,IAAM,KAAO,EACZ,EAAoB,KACtB,EAAyB,GAAO,EAAoB,IAIpD,OAAO,KAAK,EAAyB,CAAC,OAAS,IACjD,EAAoB,MAAMC,EAAAA,qBACxB,EACA,EACA,EACD,EAIL,MAAO,CACL,uBACA,qBACA,sBACA,oBACD"}
@@ -1,5 +1,6 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeFileIfChanged.cjs`),n=require(`../writeJsonIfChanged.cjs`);let r=require(`node:fs/promises`),i=require(`node:path`),a=require(`@intlayer/config/logger`),o=require(`@intlayer/config/node`),s=require(`@intlayer/config/utils`),c=require(`@intlayer/core/plugins`);const l=(e,t=`esm`,n=(0,o.getConfiguration)())=>{let{dynamicDictionariesDir:r}=n.system,a=``,c=Object.entries(e).filter(e=>!!e[1]).sort(([e],[t])=>String(e).localeCompare(String(t))).map(([e,n])=>{let a=(0,s.normalizePath)((0,i.relative)(r,n.dictionaryPath));return t===`esm`?` '${e}': () => import('./${a}', { assert: { type: 'json' }}).then(mod => mod.default)`:` '${e}': () => Promise.resolve(require('./${a}'))`}).join(`,
2
- `);return a+=`const content = {\n${c}\n};\n`,t===`esm`&&(a+=`export default content;
3
- `),t===`cjs`&&(a+=`module.exports = content;
4
- `),a},u=async(s,u=(0,o.getConfiguration)(),d=[`cjs`,`esm`])=>{let{locales:f,defaultLocale:p}=u.internationalization,{dynamicDictionariesDir:m}=u.system;await(0,r.mkdir)((0,i.resolve)(m),{recursive:!0});let h={};return await e.parallelize(Object.entries(s).sort(([e],[t])=>String(e).localeCompare(String(t))),async([r,o])=>{if(r===`undefined`)return;let s={};await e.parallelize(f,async e=>{let t=(0,c.getPerLocaleDictionary)(o.dictionary,e,p),a=`${r}.${e}.json`,l=(0,i.resolve)(m,a);await n.writeJsonIfChanged(l,t).catch(e=>{console.error(`Error creating localized ${a}:`,e)}),s[e]={dictionaryPath:l,dictionary:t}}),h[r]=s,await e.parallelize(d,async e=>{let n=e===`cjs`?`cjs`:`mjs`,o=l(s,e,u);await t.writeFileIfChanged((0,i.resolve)(m,`${r}.${n}`),o).catch(e=>{console.error(`Error creating dynamic ${(0,a.colorizePath)((0,i.resolve)(m,`${r}.${n}`))}:`,e)})})}),h};exports.generateDictionaryEntryPoint=l,exports.writeDynamicDictionary=u;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeFileIfChanged.cjs`),n=require(`../writeJsonIfChanged.cjs`);let r=require(`node:fs/promises`),i=require(`node:path`),a=require(`@intlayer/config/logger`),o=require(`@intlayer/config/defaultValues`),s=require(`@intlayer/core/plugins`);const c=`json`,l=`_loadjson`,u=(e,t,n,r=`esm`)=>{let i=Object.keys(t).sort((e,t)=>String(e).localeCompare(String(t))).map(e=>` '${e}': () => loadContent('${n}', '${e}')`).join(`,
2
+ `),a=e;return a+=`const content = {\n${i}\n};\n\n`,r===`esm`&&(a+=`export default content;
3
+ `),r===`cjs`&&(a+=`module.exports = content;
4
+ `),a},d=(e,t)=>{let n=`const loadContent = (key) => ({\n${[...t].sort((e,t)=>String(e).localeCompare(String(t))).map(t=>e===`esm`?` '${t}': () => import(\`./${c}/\${key}/${t}.json\`).then(m => m.default)`:` '${t}': () => Promise.resolve(require(\`./${c}/\${key}/${t}.json\`))`).join(`,
5
+ `)}\n});\n`;return e===`esm`?`${n}\nexport { loadContent };\n`:`${n}\nmodule.exports = { loadContent };\n`},f=(e,t=`esm`)=>{let n=t===`cjs`?`cjs`:`mjs`;return t===`esm`?`import { loadContent } from './${l}.${n}';\n\nconst content = loadContent('${e}');\n\nexport default content;\n`:`const { loadContent } = require('./${l}.${n}');\n\nmodule.exports = loadContent('${e}');\n`},p=async(u,p,m=o.OUTPUT_FORMAT)=>{let{locales:h,defaultLocale:g}=p.internationalization,{dynamicDictionariesDir:_}=p.system,v=(0,i.resolve)(_,c);await(0,r.mkdir)(v,{recursive:!0}),await e.parallelize(m,async e=>{let n=e===`cjs`?`cjs`:`mjs`;await t.writeFileIfChanged((0,i.resolve)(_,`${l}.${n}`),d(e,h)).catch(e=>{console.error(`Error creating dynamic ${(0,a.colorizePath)((0,i.resolve)(_,`${l}.${n}`))}:`,e)})});let y={};return await e.parallelize(Object.entries(u).sort(([e],[t])=>String(e).localeCompare(String(t))),async([o,c])=>{if(o===`undefined`)return;let l={},u=(0,i.resolve)(v,o);await(0,r.mkdir)(u,{recursive:!0}),await e.parallelize(h,async e=>{let t=(0,s.getPerLocaleDictionary)(c.dictionary,e,g),r=(0,i.resolve)(u,`${e}.json`);await n.writeJsonIfChanged(r,t).catch(t=>{console.error(`Error creating localized ${o}/${e}.json:`,t)}),l[e]={dictionaryPath:r,dictionary:t}}),y[o]=l,await e.parallelize(m,async e=>{let n=e===`cjs`?`cjs`:`mjs`,r=f(o,e);await t.writeFileIfChanged((0,i.resolve)(_,`${o}.${n}`),r).catch(e=>{console.error(`Error creating dynamic ${(0,a.colorizePath)((0,i.resolve)(_,`${o}.${n}`))}:`,e)})})}),y};exports.buildEntryPointContent=u,exports.generateDictionaryEntryPoint=f,exports.generateDynamicLoadContentModule=d,exports.writeDynamicDictionary=p;
5
6
  //# sourceMappingURL=writeDynamicDictionary.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeDynamicDictionary.cjs","names":["parallelize","writeJsonIfChanged","writeFileIfChanged"],"sources":["../../../src/buildIntlayerDictionary/writeDynamicDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { relative, resolve } from 'node:path';\nimport { colorizePath } from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\nimport { normalizePath } from '@intlayer/config/utils';\nimport { getPerLocaleDictionary } from '@intlayer/core/plugins';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport { parallelize } from '../utils/parallelize';\nimport { writeFileIfChanged } from '../writeFileIfChanged';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\nimport type { MergedDictionaryOutput } from './writeMergedDictionary';\n\nexport type DictionaryResult = {\n dictionaryPath: string;\n dictionary: Dictionary;\n};\n\nexport type LocalizedDictionaryResult = Partial<\n Record<Locale, 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 localizedDictionariesPathsRecord: LocalizedDictionaryResult,\n format: 'cjs' | 'esm' = 'esm',\n configuration = getConfiguration()\n): string => {\n const { dynamicDictionariesDir } = configuration.system;\n\n let content = '';\n\n // Format Dictionary Map - map locales to functions\n const formattedDictionaryMap: string = Object.entries(\n localizedDictionariesPathsRecord\n )\n // The following filter/sort preserve determinism of the generated map\n // when files are built in parallel or across different Node versions.\n .filter((entry): entry is [string, DictionaryResult] => Boolean(entry[1]))\n .sort(([a], [b]) => String(a).localeCompare(String(b)))\n .map(([locale, dictionary]) => {\n const relativePath = normalizePath(\n relative(dynamicDictionariesDir, 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/dynamic_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.system;\n\n // Create the dictionaries folder if it doesn't exist\n await mkdir(resolve(dynamicDictionariesDir), { recursive: true });\n\n const resultDictionariesPaths: LocalizedDictionaryOutput = {};\n\n // Merge dictionaries with the same key and write to dictionariesDir\n await parallelize(\n Object.entries(mergedDictionaries).sort(([a], [b]) =>\n String(a).localeCompare(String(b))\n ),\n async ([key, dictionaryEntry]) => {\n if (key === 'undefined') return;\n\n const localizedDictionariesPathsRecord: LocalizedDictionaryResult = {};\n\n await parallelize(locales, async (locale) => {\n const localizedDictionary = getPerLocaleDictionary(\n dictionaryEntry.dictionary,\n locale,\n defaultLocale\n );\n\n const outputFileName = `${key}.${locale}.json`;\n const resultFilePath = resolve(dynamicDictionariesDir, outputFileName);\n\n // Write the localized dictionary\n await writeJsonIfChanged(resultFilePath, localizedDictionary).catch(\n (err) => {\n console.error(`Error creating localized ${outputFileName}:`, err);\n }\n );\n\n localizedDictionariesPathsRecord[locale] = {\n dictionaryPath: resultFilePath,\n dictionary: localizedDictionary,\n };\n });\n\n resultDictionariesPaths[key] = localizedDictionariesPathsRecord;\n\n await parallelize(formats, async (format) => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n const content = generateDictionaryEntryPoint(\n localizedDictionariesPathsRecord,\n format,\n configuration\n );\n\n await writeFileIfChanged(\n resolve(dynamicDictionariesDir, `${key}.${extension}`),\n content\n ).catch((err) => {\n console.error(\n `Error creating dynamic ${colorizePath(resolve(dynamicDictionariesDir, `${key}.${extension}`))}:`,\n err\n );\n });\n });\n }\n );\n\n return resultDictionariesPaths;\n};\n"],"mappings":"uaA8BA,MAAa,GACX,EACA,EAAwB,MACxB,GAAA,EAAA,EAAA,mBAAkC,GACvB,CACX,GAAM,CAAE,0BAA2B,EAAc,OAE7C,EAAU,GAGR,EAAiC,OAAO,QAC5C,EACD,CAGE,OAAQ,GAA+C,EAAQ,EAAM,GAAI,CACzE,MAAM,CAAC,GAAI,CAAC,KAAO,OAAO,EAAE,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CACtD,KAAK,CAAC,EAAQ,KAAgB,CAC7B,IAAM,GAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,UACK,EAAwB,EAAW,eAAe,CAC5D,CAMD,OAJI,IAAW,MACN,MAAM,EAAO,qBAAqB,EAAa,0DAGjD,MAAM,EAAO,sCAAsC,EAAa,MACvE,CACD,KAAK;EAAM,CAOd,MALA,IAAW,sBAAsB,EAAuB,QAEpD,IAAW,QAAO,GAAW;GAC7B,IAAW,QAAO,GAAW;GAE1B,GAmBI,EAAyB,MACpC,EACA,GAAA,EAAA,EAAA,mBAAkC,CAClC,EAA6B,CAAC,MAAO,MAAM,GACJ,CACvC,GAAM,CAAE,UAAS,iBAAkB,EAAc,qBAC3C,CAAE,0BAA2B,EAAc,OAGjD,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAuB,CAAE,CAAE,UAAW,GAAM,CAAC,CAEjE,IAAM,EAAqD,EAAE,CA0D7D,OAvDA,MAAMA,EAAAA,YACJ,OAAO,QAAQ,EAAmB,CAAC,MAAM,CAAC,GAAI,CAAC,KAC7C,OAAO,EAAE,CAAC,cAAc,OAAO,EAAE,CAAC,CACnC,CACD,MAAO,CAAC,EAAK,KAAqB,CAChC,GAAI,IAAQ,YAAa,OAEzB,IAAM,EAA8D,EAAE,CAEtE,MAAMA,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,GAAA,EAAA,EAAA,wBACJ,EAAgB,WAChB,EACA,EACD,CAEK,EAAiB,GAAG,EAAI,GAAG,EAAO,OAClC,GAAA,EAAA,EAAA,SAAyB,EAAwB,EAAe,CAGtE,MAAMC,EAAAA,mBAAmB,EAAgB,EAAoB,CAAC,MAC3D,GAAQ,CACP,QAAQ,MAAM,4BAA4B,EAAe,GAAI,EAAI,EAEpE,CAED,EAAiC,GAAU,CACzC,eAAgB,EAChB,WAAY,EACb,EACD,CAEF,EAAwB,GAAO,EAE/B,MAAMD,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,EAAY,IAAW,MAAQ,MAAQ,MACvC,EAAU,EACd,EACA,EACA,EACD,CAED,MAAME,EAAAA,oBAAAA,EAAAA,EAAAA,SACI,EAAwB,GAAG,EAAI,GAAG,IAAY,CACtD,EACD,CAAC,MAAO,GAAQ,CACf,QAAQ,MACN,2BAAA,EAAA,EAAA,eAAA,EAAA,EAAA,SAA+C,EAAwB,GAAG,EAAI,GAAG,IAAY,CAAC,CAAC,GAC/F,EACD,EACD,EACF,EAEL,CAEM"}
1
+ {"version":3,"file":"writeDynamicDictionary.cjs","names":["OUTPUT_FORMAT","parallelize","writeFileIfChanged","writeJsonIfChanged"],"sources":["../../../src/buildIntlayerDictionary/writeDynamicDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { OUTPUT_FORMAT } from '@intlayer/config/defaultValues';\nimport { colorizePath } from '@intlayer/config/logger';\nimport { getPerLocaleDictionary } from '@intlayer/core/plugins';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { parallelize } from '../utils/parallelize';\nimport { writeFileIfChanged } from '../writeFileIfChanged';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\nimport type { MergedDictionaryOutput } from './writeMergedDictionary';\n\nexport type DictionaryResult = {\n dictionaryPath: string;\n dictionary: Dictionary;\n};\n\nexport type LocalizedDictionaryResult = Partial<\n Record<Locale, DictionaryResult>\n>;\n\nexport type LocalizedDictionaryOutput = Record<\n string,\n LocalizedDictionaryResult\n>;\n\nconst DICTIONARIES_SUBDIR = 'json'; // Necessary to add a static first dir for Turbopack\nconst LOAD_CONTENT_MODULE = '_loadjson';\n\n/**\n * Assembles the entry point file content from a pre-built preamble (import/require line),\n * the locale→path record, the dictionary key, and the output format.\n * Shared by all dictionary entry point generators.\n */\nexport const buildEntryPointContent = (\n preamble: string,\n localizedDictionariesPathsRecord: LocalizedDictionaryResult,\n key: string,\n format: 'cjs' | 'esm' = 'esm'\n): string => {\n const formattedDictionaryMap: string = Object.keys(\n localizedDictionariesPathsRecord\n )\n .sort((a, b) => String(a).localeCompare(String(b)))\n .map((locale) => ` '${locale}': () => loadContent('${key}', '${locale}')`)\n .join(',\\n');\n\n let content = preamble;\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 * Generates the content of the shared `loadContent` module written once per\n * output directory. Locales are baked in so each dynamic import has only one\n * variable (`key`), making it statically analyzable by Vite/Rollup.\n */\nexport const generateDynamicLoadContentModule = (\n format: 'cjs' | 'esm',\n locales: string[]\n): string => {\n const sortedLocales = [...locales].sort((a, b) =>\n String(a).localeCompare(String(b))\n );\n\n const localeEntries = sortedLocales\n .map((locale) =>\n format === 'esm'\n ? ` '${locale}': () => import(\\`./${DICTIONARIES_SUBDIR}/\\${key}/${locale}.json\\`).then(m => m.default)`\n : ` '${locale}': () => Promise.resolve(require(\\`./${DICTIONARIES_SUBDIR}/\\${key}/${locale}.json\\`))`\n )\n .join(',\\n');\n\n const body = `const loadContent = (key) => ({\\n${localeEntries}\\n});\\n`;\n\n if (format === 'esm') return `${body}\\nexport { loadContent };\\n`;\n return `${body}\\nmodule.exports = { loadContent };\\n`;\n};\n\n/**\n * Generates the content of a dictionary entry point file.\n * `loadContent` is imported from the shared module and called with the key.\n */\nexport const generateDictionaryEntryPoint = (\n key: string,\n format: 'cjs' | 'esm' = 'esm'\n): string => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n if (format === 'esm') {\n return (\n `import { loadContent } from './${LOAD_CONTENT_MODULE}.${extension}';\\n\\n` +\n `const content = loadContent('${key}');\\n\\n` +\n `export default content;\\n`\n );\n }\n return (\n `const { loadContent } = require('./${LOAD_CONTENT_MODULE}.${extension}');\\n\\n` +\n `module.exports = loadContent('${key}');\\n`\n );\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/dynamic_dictionary/dictionaries/en_home.json\n * // .intlayer/dynamic_dictionary/dictionaries/fr_home.json\n * ```\n */\nexport const writeDynamicDictionary = async (\n mergedDictionaries: MergedDictionaryOutput,\n configuration: IntlayerConfig,\n formats: ('cjs' | 'esm')[] = OUTPUT_FORMAT\n): Promise<LocalizedDictionaryOutput> => {\n const { locales, defaultLocale } = configuration.internationalization;\n const { dynamicDictionariesDir } = configuration.system;\n\n const dictDir = resolve(dynamicDictionariesDir, DICTIONARIES_SUBDIR);\n await mkdir(dictDir, { recursive: true });\n await parallelize(formats, async (format) => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n await writeFileIfChanged(\n resolve(dynamicDictionariesDir, `${LOAD_CONTENT_MODULE}.${extension}`),\n generateDynamicLoadContentModule(format, locales)\n ).catch((err) => {\n console.error(\n `Error creating dynamic ${colorizePath(resolve(dynamicDictionariesDir, `${LOAD_CONTENT_MODULE}.${extension}`))}:`,\n err\n );\n });\n });\n\n const resultDictionariesPaths: LocalizedDictionaryOutput = {};\n\n // Merge dictionaries with the same key and write to dictionariesDir\n await parallelize(\n Object.entries(mergedDictionaries).sort(([a], [b]) =>\n String(a).localeCompare(String(b))\n ),\n async ([key, dictionaryEntry]) => {\n if (key === 'undefined') return;\n\n const localizedDictionariesPathsRecord: LocalizedDictionaryResult = {};\n\n const keyDir = resolve(dictDir, key);\n await mkdir(keyDir, { recursive: true });\n\n await parallelize(locales, async (locale) => {\n const localizedDictionary = getPerLocaleDictionary(\n dictionaryEntry.dictionary,\n locale,\n defaultLocale\n );\n\n // Directory structure: json/key/locale.json\n const resultFilePath = resolve(keyDir, `${locale}.json`);\n\n await writeJsonIfChanged(resultFilePath, localizedDictionary).catch(\n (err) => {\n console.error(\n `Error creating localized ${key}/${locale}.json:`,\n err\n );\n }\n );\n\n localizedDictionariesPathsRecord[locale] = {\n dictionaryPath: resultFilePath,\n dictionary: localizedDictionary,\n };\n });\n\n resultDictionariesPaths[key] = localizedDictionariesPathsRecord;\n\n await parallelize(formats, async (format) => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n const content = generateDictionaryEntryPoint(key, format);\n\n await writeFileIfChanged(\n resolve(dynamicDictionariesDir, `${key}.${extension}`),\n content\n ).catch((err) => {\n console.error(\n `Error creating dynamic ${colorizePath(resolve(dynamicDictionariesDir, `${key}.${extension}`))}:`,\n err\n );\n });\n });\n }\n );\n\n return resultDictionariesPaths;\n};\n"],"mappings":"4YA2BA,MAAM,EAAsB,OACtB,EAAsB,YAOf,GACX,EACA,EACA,EACA,EAAwB,QACb,CACX,IAAM,EAAiC,OAAO,KAC5C,EACD,CACE,MAAM,EAAG,IAAM,OAAO,EAAE,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC,CAClD,IAAK,GAAW,MAAM,EAAO,wBAAwB,EAAI,MAAM,EAAO,IAAI,CAC1E,KAAK;EAAM,CAEV,EAAU,EAKd,MAJA,IAAW,sBAAsB,EAAuB,UACpD,IAAW,QAAO,GAAW;GAC7B,IAAW,QAAO,GAAW;GAE1B,GAQI,GACX,EACA,IACW,CAaX,IAAM,EAAO,oCAZS,CAAC,GAAG,EAAQ,CAAC,MAAM,EAAG,IAC1C,OAAO,EAAE,CAAC,cAAc,OAAO,EAAE,CAAC,CACnC,CAGE,IAAK,GACJ,IAAW,MACP,MAAM,EAAO,sBAAsB,EAAoB,WAAW,EAAO,+BACzE,MAAM,EAAO,uCAAuC,EAAoB,WAAW,EAAO,WAC/F,CACA,KAAK;EAAM,CAEiD,SAG/D,OADI,IAAW,MAAc,GAAG,EAAK,6BAC9B,GAAG,EAAK,wCAOJ,GACX,EACA,EAAwB,QACb,CACX,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAQ7C,OAPI,IAAW,MAEX,kCAAkC,EAAoB,GAAG,EAAU,qCACnC,EAAI,kCAKtC,sCAAsC,EAAoB,GAAG,EAAU,uCACtC,EAAI,QAoB5B,EAAyB,MACpC,EACA,EACA,EAA6BA,EAAAA,gBACU,CACvC,GAAM,CAAE,UAAS,iBAAkB,EAAc,qBAC3C,CAAE,0BAA2B,EAAc,OAE3C,GAAA,EAAA,EAAA,SAAkB,EAAwB,EAAoB,CACpE,MAAA,EAAA,EAAA,OAAY,EAAS,CAAE,UAAW,GAAM,CAAC,CACzC,MAAMC,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAC7C,MAAMC,EAAAA,oBAAAA,EAAAA,EAAAA,SACI,EAAwB,GAAG,EAAoB,GAAG,IAAY,CACtE,EAAiC,EAAQ,EAAQ,CAClD,CAAC,MAAO,GAAQ,CACf,QAAQ,MACN,2BAAA,EAAA,EAAA,eAAA,EAAA,EAAA,SAA+C,EAAwB,GAAG,EAAoB,GAAG,IAAY,CAAC,CAAC,GAC/G,EACD,EACD,EACF,CAEF,IAAM,EAAqD,EAAE,CA2D7D,OAxDA,MAAMD,EAAAA,YACJ,OAAO,QAAQ,EAAmB,CAAC,MAAM,CAAC,GAAI,CAAC,KAC7C,OAAO,EAAE,CAAC,cAAc,OAAO,EAAE,CAAC,CACnC,CACD,MAAO,CAAC,EAAK,KAAqB,CAChC,GAAI,IAAQ,YAAa,OAEzB,IAAM,EAA8D,EAAE,CAEhE,GAAA,EAAA,EAAA,SAAiB,EAAS,EAAI,CACpC,MAAA,EAAA,EAAA,OAAY,EAAQ,CAAE,UAAW,GAAM,CAAC,CAExC,MAAMA,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,GAAA,EAAA,EAAA,wBACJ,EAAgB,WAChB,EACA,EACD,CAGK,GAAA,EAAA,EAAA,SAAyB,EAAQ,GAAG,EAAO,OAAO,CAExD,MAAME,EAAAA,mBAAmB,EAAgB,EAAoB,CAAC,MAC3D,GAAQ,CACP,QAAQ,MACN,4BAA4B,EAAI,GAAG,EAAO,QAC1C,EACD,EAEJ,CAED,EAAiC,GAAU,CACzC,eAAgB,EAChB,WAAY,EACb,EACD,CAEF,EAAwB,GAAO,EAE/B,MAAMF,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,EAAY,IAAW,MAAQ,MAAQ,MACvC,EAAU,EAA6B,EAAK,EAAO,CAEzD,MAAMC,EAAAA,oBAAAA,EAAAA,EAAAA,SACI,EAAwB,GAAG,EAAI,GAAG,IAAY,CACtD,EACD,CAAC,MAAO,GAAQ,CACf,QAAQ,MACN,2BAAA,EAAA,EAAA,eAAA,EAAA,EAAA,SAA+C,EAAwB,GAAG,EAAI,GAAG,IAAY,CAAC,CAAC,GAC/F,EACD,EACD,EACF,EAEL,CAEM"}
@@ -1,5 +1,5 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeFileIfChanged.cjs`);let n=require(`node:fs/promises`),r=require(`node:path`),i=require(`@intlayer/config/logger`),a=require(`@intlayer/config/node`),o=require(`@intlayer/config/utils`);const s=(e,t=`esm`,n=(0,a.getConfiguration)())=>{let{fetchDictionariesDir:i}=n.system,{liveSyncURL:s}=n.editor,c=``,l=Object.entries(e).map(([e,n])=>{let a=(0,o.normalizePath)((0,r.relative)(i,n.dictionaryPath));return t===`esm`?` '${e}': () => (async () => { try {return await fetch('${s}/dictionaries/${n.dictionary.key}/${e}').then(res => res.json())} catch (_error) {return await import('./${a}', { assert: { type: 'json' }}).then(mod => mod.default)}})()`:` '${e}': () => (async () => { try {return await fetch('${s}/dictionaries/${n.dictionary.key}/${e}').then(res => res.json())} catch (_error) {return Promise.resolve(require('./${a}'))}})()`}).join(`,
2
- `);return c+=`const content = {\n${l}\n};\n`,t===`esm`&&(c+=`export default content;
3
- `),t===`cjs`&&(c+=`module.exports = content;
4
- `),c},c=async(o,c=(0,a.getConfiguration)(),l=[`cjs`,`esm`])=>{let{fetchDictionariesDir:u}=c.system;return await(0,n.mkdir)((0,r.resolve)(u),{recursive:!0}),await e.parallelize(Object.entries(o),async([n,a])=>{n!==`undefined`&&await e.parallelize(l,async e=>{let o=e===`cjs`?`cjs`:`mjs`,l=s(a,e,c);await t.writeFileIfChanged((0,r.resolve)(u,`${n}.${o}`),l).catch(e=>{console.error(`Error creating fetch ${(0,i.colorizePath)((0,r.resolve)(u,`${n}.${o}`))}:`,e)})})}),{}};exports.generateDictionaryEntryPoint=s,exports.writeFetchDictionary=c;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeFileIfChanged.cjs`);let n=require(`node:fs/promises`),r=require(`node:path`),i=require(`@intlayer/config/logger`),a=require(`@intlayer/config/utils`),o=require(`@intlayer/config/defaultValues`);const s=`_loadjson`,c=(e,t,n)=>{let r=[...n].sort((e,t)=>String(e).localeCompare(String(t))),i=e===`cjs`?`cjs`:`mjs`,a=`const loadContent = (key) => {
2
+ const dynContent = loadContentDyn(key);
3
+ return {\n${r.map(e=>` '${e}': async () => {\n try {\n const res = await fetch(\`\${configuration.editor.liveSyncURL}/dictionaries/\${key}/${e}\`);\n return await res.json();\n } catch {\n return dynContent['${e}']();\n }\n }`).join(`,
4
+ `)}\n };\n};\n`;return e===`esm`?`import { configuration } from 'intlayer';\nimport { loadContent as loadContentDyn } from '${t}/${s}.${i}';\n\n${a}\nexport { loadContent };\n`:`const { configuration } = require('intlayer');\nconst { loadContent: loadContentDyn } = require('${t}/${s}.${i}');\n\n${a}\nmodule.exports = { loadContent };\n`},l=(e,t=`esm`)=>{let n=t===`cjs`?`cjs`:`mjs`;return t===`esm`?`import { loadContent } from './${s}.${n}';\n\nconst content = loadContent('${e}');\n\nexport default content;\n`:`const { loadContent } = require('./${s}.${n}');\n\nmodule.exports = loadContent('${e}');\n`},u=async(u,d,f=o.OUTPUT_FORMAT)=>{let{fetchDictionariesDir:p,dynamicDictionariesDir:m}=d.system,{locales:h}=d.internationalization,g=(0,a.normalizePath)((0,r.relative)(p,m));return g.startsWith(`.`)||(g=`./${g}`),await(0,n.mkdir)((0,r.resolve)(p),{recursive:!0}),await e.parallelize(f,async e=>{let n=e===`cjs`?`cjs`:`mjs`;await t.writeFileIfChanged((0,r.resolve)(p,`${s}.${n}`),c(e,g,h)).catch(e=>{console.error(`Error creating fetch ${(0,i.colorizePath)((0,r.resolve)(p,`${s}.${n}`))}:`,e)})}),await e.parallelize(Object.entries(u),async([n])=>{n!==`undefined`&&await e.parallelize(f,async e=>{let a=e===`cjs`?`cjs`:`mjs`,o=l(n,e);await t.writeFileIfChanged((0,r.resolve)(p,`${n}.${a}`),o).catch(e=>{console.error(`Error creating fetch ${(0,i.colorizePath)((0,r.resolve)(p,`${n}.${a}`))}:`,e)})})}),{}};exports.generateDictionaryEntryPoint=l,exports.generateFetchLoadContentModule=c,exports.writeFetchDictionary=u;
5
5
  //# sourceMappingURL=writeFetchDictionary.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeFetchDictionary.cjs","names":["parallelize","writeFileIfChanged"],"sources":["../../../src/buildIntlayerDictionary/writeFetchDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { relative, resolve } from 'node:path';\nimport { colorizePath } from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\nimport { normalizePath } from '@intlayer/config/utils';\nimport { parallelize } from '../utils/parallelize';\nimport { writeFileIfChanged } from '../writeFileIfChanged';\nimport type {\n LocalizedDictionaryOutput,\n LocalizedDictionaryResult,\n} from './writeDynamicDictionary';\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 { fetchDictionariesDir } = configuration.system;\n const { liveSyncURL } = configuration.editor;\n\n let content = '';\n\n const formattedDictionaryMap: string = Object.entries(\n localedDictionariesPathsRecord\n )\n .map(([locale, dictionary]) => {\n const relativePath = normalizePath(\n relative(fetchDictionariesDir, dictionary.dictionaryPath)\n );\n\n if (format === 'esm') {\n return ` '${locale}': () => (async () => { try {return await fetch('${liveSyncURL}/dictionaries/${dictionary.dictionary.key}/${locale}').then(res => res.json())} catch (_error) {return await import('./${relativePath}', { assert: { type: 'json' }}).then(mod => mod.default)}})()`;\n }\n\n return ` '${locale}': () => (async () => { try {return await fetch('${liveSyncURL}/dictionaries/${dictionary.dictionary.key}/${locale}').then(res => res.json())} catch (_error) {return 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/fetch_dictionaries/home.json\n * // { key: 'home', content: { ... } },\n * ```\n */\nexport const writeFetchDictionary = async (\n dynamicDictionaries: LocalizedDictionaryOutput,\n configuration = getConfiguration(),\n formats: ('cjs' | 'esm')[] = ['cjs', 'esm']\n): Promise<LocalizedDictionaryOutput> => {\n const { fetchDictionariesDir } = configuration.system;\n\n // Create the dictionaries folder if it doesn't exist\n await mkdir(resolve(fetchDictionariesDir), { recursive: true });\n\n const resultDictionariesPaths: LocalizedDictionaryOutput = {};\n\n // Write entry points for each dictionary in parallel\n await parallelize(\n Object.entries(dynamicDictionaries),\n async ([key, localedDictionariesPathsRecord]) => {\n if (key === 'undefined') return;\n\n await parallelize(formats, async (format) => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n const content = generateDictionaryEntryPoint(\n localedDictionariesPathsRecord,\n format,\n configuration\n );\n\n await writeFileIfChanged(\n resolve(fetchDictionariesDir, `${key}.${extension}`),\n content\n ).catch((err) => {\n console.error(\n `Error creating fetch ${colorizePath(resolve(fetchDictionariesDir, `${key}.${extension}`))}:`,\n err\n );\n });\n });\n }\n );\n\n return resultDictionariesPaths;\n};\n"],"mappings":"4VAeA,MAAa,GACX,EACA,EAAwB,MACxB,GAAA,EAAA,EAAA,mBAAkC,GACvB,CACX,GAAM,CAAE,wBAAyB,EAAc,OACzC,CAAE,eAAgB,EAAc,OAElC,EAAU,GAER,EAAiC,OAAO,QAC5C,EACD,CACE,KAAK,CAAC,EAAQ,KAAgB,CAC7B,IAAM,GAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,UACK,EAAsB,EAAW,eAAe,CAC1D,CAMD,OAJI,IAAW,MACN,MAAM,EAAO,mDAAmD,EAAY,gBAAgB,EAAW,WAAW,IAAI,GAAG,EAAO,qEAAqE,EAAa,+DAGpN,MAAM,EAAO,mDAAmD,EAAY,gBAAgB,EAAW,WAAW,IAAI,GAAG,EAAO,gFAAgF,EAAa,WACpO,CACD,KAAK;EAAM,CAOd,MALA,IAAW,sBAAsB,EAAuB,QAEpD,IAAW,QAAO,GAAW;GAC7B,IAAW,QAAO,GAAW;GAE1B,GAmBI,EAAuB,MAClC,EACA,GAAA,EAAA,EAAA,mBAAkC,CAClC,EAA6B,CAAC,MAAO,MAAM,GACJ,CACvC,GAAM,CAAE,wBAAyB,EAAc,OAkC/C,OA/BA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAqB,CAAE,CAAE,UAAW,GAAM,CAAC,CAK/D,MAAMA,EAAAA,YACJ,OAAO,QAAQ,EAAoB,CACnC,MAAO,CAAC,EAAK,KAAoC,CAC3C,IAAQ,aAEZ,MAAMA,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,EAAY,IAAW,MAAQ,MAAQ,MACvC,EAAU,EACd,EACA,EACA,EACD,CAED,MAAMC,EAAAA,oBAAAA,EAAAA,EAAAA,SACI,EAAsB,GAAG,EAAI,GAAG,IAAY,CACpD,EACD,CAAC,MAAO,GAAQ,CACf,QAAQ,MACN,yBAAA,EAAA,EAAA,eAAA,EAAA,EAAA,SAA6C,EAAsB,GAAG,EAAI,GAAG,IAAY,CAAC,CAAC,GAC3F,EACD,EACD,EACF,EAEL,CA3B0D,EAAE"}
1
+ {"version":3,"file":"writeFetchDictionary.cjs","names":["OUTPUT_FORMAT","parallelize","writeFileIfChanged"],"sources":["../../../src/buildIntlayerDictionary/writeFetchDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { relative, resolve } from 'node:path';\nimport { OUTPUT_FORMAT } from '@intlayer/config/defaultValues';\nimport { colorizePath } from '@intlayer/config/logger';\nimport { normalizePath } from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport { parallelize } from '../utils/parallelize';\nimport { writeFileIfChanged } from '../writeFileIfChanged';\nimport type { LocalizedDictionaryOutput } from './writeDynamicDictionary';\n\nconst LOAD_CONTENT_MODULE = '_loadjson';\n\n/**\n * Generates the content of the shared `loadContent` module for fetch dictionaries.\n * - `configuration` is imported at runtime from \"intlayer\" (liveSyncURL not baked in).\n * - Fallback delegates to the dynamic dictionary's `_loadjson` module.\n * - Locales are baked in so each entry is a static function referencing one locale.\n */\nexport const generateFetchLoadContentModule = (\n format: 'cjs' | 'esm',\n relativePrefix: string,\n locales: string[]\n): string => {\n const sortedLocales = [...locales].sort((a, b) =>\n String(a).localeCompare(String(b))\n );\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n\n const localeEntries = sortedLocales\n .map(\n (locale) =>\n ` '${locale}': async () => {\\n` +\n ` try {\\n` +\n ` const res = await fetch(\\`\\${configuration.editor.liveSyncURL}/dictionaries/\\${key}/${locale}\\`);\\n` +\n ` return await res.json();\\n` +\n ` } catch {\\n` +\n ` return dynContent['${locale}']();\\n` +\n ` }\\n` +\n ` }`\n )\n .join(',\\n');\n\n const body =\n `const loadContent = (key) => {\\n` +\n ` const dynContent = loadContentDyn(key);\\n` +\n ` return {\\n${localeEntries}\\n };\\n` +\n `};\\n`;\n\n if (format === 'esm') {\n return (\n `import { configuration } from 'intlayer';\\n` +\n `import { loadContent as loadContentDyn } from '${relativePrefix}/${LOAD_CONTENT_MODULE}.${extension}';\\n\\n` +\n `${body}\\nexport { loadContent };\\n`\n );\n }\n return (\n `const { configuration } = require('intlayer');\\n` +\n `const { loadContent: loadContentDyn } = require('${relativePrefix}/${LOAD_CONTENT_MODULE}.${extension}');\\n\\n` +\n `${body}\\nmodule.exports = { loadContent };\\n`\n );\n};\n\n/**\n * Generates the content of a fetch dictionary entry point file.\n */\nexport const generateDictionaryEntryPoint = (\n key: string,\n format: 'cjs' | 'esm' = 'esm'\n): string => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n if (format === 'esm') {\n return (\n `import { loadContent } from './${LOAD_CONTENT_MODULE}.${extension}';\\n\\n` +\n `const content = loadContent('${key}');\\n\\n` +\n `export default content;\\n`\n );\n }\n return (\n `const { loadContent } = require('./${LOAD_CONTENT_MODULE}.${extension}');\\n\\n` +\n `module.exports = loadContent('${key}');\\n`\n );\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/fetch_dictionary/home.mjs\n * // .intlayer/fetch_dictionary/home.cjs\n * ```\n */\nexport const writeFetchDictionary = async (\n dynamicDictionaries: LocalizedDictionaryOutput,\n configuration: IntlayerConfig,\n formats: ('cjs' | 'esm')[] = OUTPUT_FORMAT\n): Promise<LocalizedDictionaryOutput> => {\n const { fetchDictionariesDir, dynamicDictionariesDir } = configuration.system;\n const { locales } = configuration.internationalization;\n\n // Compute relative path from fetch dir (where _loadjson lives) to dynamic dir\n let relativePrefix = normalizePath(\n relative(fetchDictionariesDir, dynamicDictionariesDir)\n );\n if (!relativePrefix.startsWith('.')) {\n relativePrefix = `./${relativePrefix}`;\n }\n\n await mkdir(resolve(fetchDictionariesDir), { recursive: true });\n\n // Write the shared loadContent module once per format\n await parallelize(formats, async (format) => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n await writeFileIfChanged(\n resolve(fetchDictionariesDir, `${LOAD_CONTENT_MODULE}.${extension}`),\n generateFetchLoadContentModule(format, relativePrefix, locales)\n ).catch((err) => {\n console.error(\n `Error creating fetch ${colorizePath(resolve(fetchDictionariesDir, `${LOAD_CONTENT_MODULE}.${extension}`))}:`,\n err\n );\n });\n });\n\n const resultDictionariesPaths: LocalizedDictionaryOutput = {};\n\n // Write entry points for each dictionary in parallel\n await parallelize(Object.entries(dynamicDictionaries), async ([key]) => {\n if (key === 'undefined') return;\n\n await parallelize(formats, async (format) => {\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n const content = generateDictionaryEntryPoint(key, format);\n\n await writeFileIfChanged(\n resolve(fetchDictionariesDir, `${key}.${extension}`),\n content\n ).catch((err) => {\n console.error(\n `Error creating fetch ${colorizePath(resolve(fetchDictionariesDir, `${key}.${extension}`))}:`,\n err\n );\n });\n });\n });\n\n return resultDictionariesPaths;\n};\n"],"mappings":"qWAUA,MAAM,EAAsB,YAQf,GACX,EACA,EACA,IACW,CACX,IAAM,EAAgB,CAAC,GAAG,EAAQ,CAAC,MAAM,EAAG,IAC1C,OAAO,EAAE,CAAC,cAAc,OAAO,EAAE,CAAC,CACnC,CACK,EAAY,IAAW,MAAQ,MAAQ,MAgBvC,EACJ;;cAfoB,EACnB,IACE,GACC,MAAM,EAAO,yHAEgF,EAAO,gFAGxE,EAAO,mBAGtC,CACA,KAAK;EAAM,CAKiB,cAU/B,OAPI,IAAW,MAEX,6FACkD,EAAe,GAAG,EAAoB,GAAG,EAAU,QAClG,EAAK,6BAIV,oGACoD,EAAe,GAAG,EAAoB,GAAG,EAAU,SACpG,EAAK,wCAOC,GACX,EACA,EAAwB,QACb,CACX,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAQ7C,OAPI,IAAW,MAEX,kCAAkC,EAAoB,GAAG,EAAU,qCACnC,EAAI,kCAKtC,sCAAsC,EAAoB,GAAG,EAAU,uCACtC,EAAI,QAoB5B,EAAuB,MAClC,EACA,EACA,EAA6BA,EAAAA,gBACU,CACvC,GAAM,CAAE,uBAAsB,0BAA2B,EAAc,OACjE,CAAE,WAAY,EAAc,qBAG9B,GAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,UACO,EAAsB,EAAuB,CACvD,CA2CD,OA1CK,EAAe,WAAW,IAAI,GACjC,EAAiB,KAAK,KAGxB,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAqB,CAAE,CAAE,UAAW,GAAM,CAAC,CAG/D,MAAMC,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAC7C,MAAMC,EAAAA,oBAAAA,EAAAA,EAAAA,SACI,EAAsB,GAAG,EAAoB,GAAG,IAAY,CACpE,EAA+B,EAAQ,EAAgB,EAAQ,CAChE,CAAC,MAAO,GAAQ,CACf,QAAQ,MACN,yBAAA,EAAA,EAAA,eAAA,EAAA,EAAA,SAA6C,EAAsB,GAAG,EAAoB,GAAG,IAAY,CAAC,CAAC,GAC3G,EACD,EACD,EACF,CAKF,MAAMD,EAAAA,YAAY,OAAO,QAAQ,EAAoB,CAAE,MAAO,CAAC,KAAS,CAClE,IAAQ,aAEZ,MAAMA,EAAAA,YAAY,EAAS,KAAO,IAAW,CAC3C,IAAM,EAAY,IAAW,MAAQ,MAAQ,MACvC,EAAU,EAA6B,EAAK,EAAO,CAEzD,MAAMC,EAAAA,oBAAAA,EAAAA,EAAAA,SACI,EAAsB,GAAG,EAAI,GAAG,IAAY,CACpD,EACD,CAAC,MAAO,GAAQ,CACf,QAAQ,MACN,yBAAA,EAAA,EAAA,eAAA,EAAA,EAAA,SAA6C,EAAsB,GAAG,EAAI,GAAG,IAAY,CAAC,CAAC,GAC3F,EACD,EACD,EACF,EACF,CApByD,EAAE"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeJsonIfChanged.cjs`);let n=require(`node:fs/promises`),r=require(`node:path`),i=require(`@intlayer/config/logger`),a=require(`@intlayer/config/node`),o=require(`@intlayer/core/dictionaryManipulator`);const s=async(s,c=(0,a.getConfiguration)())=>{let{dictionariesDir:l}=c.system;await(0,n.mkdir)((0,r.resolve)(l),{recursive:!0});let u=await e.parallelize(Object.entries(s),async([e,n])=>{if(e===`undefined`)return;let a=(0,o.mergeDictionaries)((0,o.normalizeDictionaries)(n.dictionaries,c)),s=(0,r.resolve)(l,`${e}.json`);return await t.writeJsonIfChanged(s,a).catch(e=>{console.error(`Error creating merged ${(0,i.colorizePath)(s)}:`,e)}),[e,{dictionaryPath:s,dictionary:a}]});return Object.fromEntries(u.filter(Boolean))};exports.writeMergedDictionaries=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeJsonIfChanged.cjs`);let n=require(`node:fs/promises`),r=require(`node:path`),i=require(`@intlayer/config/logger`),a=require(`@intlayer/core/dictionaryManipulator`);const o=async(o,s)=>{let{dictionariesDir:c}=s.system;await(0,n.mkdir)((0,r.resolve)(c),{recursive:!0});let l=await e.parallelize(Object.entries(o),async([e,n])=>{if(e===`undefined`)return;let o=(0,a.mergeDictionaries)((0,a.normalizeDictionaries)(n.dictionaries,s)),l=(0,r.resolve)(c,`${e}.json`);return await t.writeJsonIfChanged(l,o).catch(e=>{console.error(`Error creating merged ${(0,i.colorizePath)(l)}:`,e)}),[e,{dictionaryPath:l,dictionary:o}]});return Object.fromEntries(l.filter(Boolean))};exports.writeMergedDictionaries=o;
2
2
  //# sourceMappingURL=writeMergedDictionary.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeMergedDictionary.cjs","names":["parallelize","writeJsonIfChanged"],"sources":["../../../src/buildIntlayerDictionary/writeMergedDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { colorizePath } from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\nimport {\n mergeDictionaries,\n normalizeDictionaries,\n} from '@intlayer/core/dictionaryManipulator';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { parallelize } from '../utils/parallelize';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\nimport type { UnmergedDictionaryOutput } from './writeUnmergedDictionary';\n\nexport type MergedDictionaryResult = {\n dictionaryPath: string;\n dictionary: Dictionary;\n};\n\nexport type MergedDictionaryOutput = Record<string, MergedDictionaryResult>;\n\n/**\n * Write the merged dictionaries to the dictionariesDir\n * @param groupedDictionaries - The grouped dictionaries\n * @param configuration - The configuration\n * @returns The merged 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/dictionary/home.json\n * // { key: 'home', content: { ... } },\n * ```\n */\nexport const writeMergedDictionaries = async (\n groupedDictionaries: UnmergedDictionaryOutput,\n configuration = getConfiguration()\n): Promise<MergedDictionaryOutput> => {\n const { dictionariesDir } = configuration.system;\n\n // Create the dictionaries folder if it doesn't exist\n await mkdir(resolve(dictionariesDir), { recursive: true });\n\n const results = await parallelize(\n Object.entries(groupedDictionaries),\n async ([key, dictionariesEntry]) => {\n if (key === 'undefined') {\n return undefined as unknown as readonly [\n string,\n MergedDictionaryResult,\n ];\n }\n\n const normalizedDictionaries = normalizeDictionaries(\n dictionariesEntry.dictionaries,\n configuration\n );\n\n const mergedDictionary = mergeDictionaries(normalizedDictionaries);\n\n const outputFileName = `${key}.json`;\n const resultFilePath = resolve(dictionariesDir, outputFileName);\n\n // Write the merged dictionary\n await writeJsonIfChanged(resultFilePath, mergedDictionary).catch(\n (err) => {\n console.error(\n `Error creating merged ${colorizePath(resultFilePath)}:`,\n err\n );\n }\n );\n\n return [\n key,\n {\n dictionaryPath: resultFilePath,\n dictionary: mergedDictionary,\n } as MergedDictionaryResult,\n ] as const;\n }\n );\n\n return Object.fromEntries(\n results.filter(Boolean) as Array<readonly [string, MergedDictionaryResult]>\n );\n};\n"],"mappings":"0WAoCA,MAAa,EAA0B,MACrC,EACA,GAAA,EAAA,EAAA,mBAAkC,GACE,CACpC,GAAM,CAAE,mBAAoB,EAAc,OAG1C,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAgB,CAAE,CAAE,UAAW,GAAM,CAAC,CAE1D,IAAM,EAAU,MAAMA,EAAAA,YACpB,OAAO,QAAQ,EAAoB,CACnC,MAAO,CAAC,EAAK,KAAuB,CAClC,GAAI,IAAQ,YACV,OAWF,IAAM,GAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,uBAJJ,EAAkB,aAClB,EACD,CAEiE,CAG5D,GAAA,EAAA,EAAA,SAAyB,EADR,GAAG,EAAI,OACiC,CAY/D,OATA,MAAMC,EAAAA,mBAAmB,EAAgB,EAAiB,CAAC,MACxD,GAAQ,CACP,QAAQ,MACN,0BAAA,EAAA,EAAA,cAAsC,EAAe,CAAC,GACtD,EACD,EAEJ,CAEM,CACL,EACA,CACE,eAAgB,EAChB,WAAY,EACb,CACF,EAEJ,CAED,OAAO,OAAO,YACZ,EAAQ,OAAO,QAAQ,CACxB"}
1
+ {"version":3,"file":"writeMergedDictionary.cjs","names":["parallelize","writeJsonIfChanged"],"sources":["../../../src/buildIntlayerDictionary/writeMergedDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { colorizePath } from '@intlayer/config/logger';\nimport {\n mergeDictionaries,\n normalizeDictionaries,\n} from '@intlayer/core/dictionaryManipulator';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { parallelize } from '../utils/parallelize';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\nimport type { UnmergedDictionaryOutput } from './writeUnmergedDictionary';\n\nexport type MergedDictionaryResult = {\n dictionaryPath: string;\n dictionary: Dictionary;\n};\n\nexport type MergedDictionaryOutput = Record<string, MergedDictionaryResult>;\n\n/**\n * Write the merged dictionaries to the dictionariesDir\n * @param groupedDictionaries - The grouped dictionaries\n * @param configuration - The configuration\n * @returns The merged 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/dictionary/home.json\n * // { key: 'home', content: { ... } },\n * ```\n */\nexport const writeMergedDictionaries = async (\n groupedDictionaries: UnmergedDictionaryOutput,\n configuration: IntlayerConfig\n): Promise<MergedDictionaryOutput> => {\n const { dictionariesDir } = configuration.system;\n\n // Create the dictionaries folder if it doesn't exist\n await mkdir(resolve(dictionariesDir), { recursive: true });\n\n const results = await parallelize(\n Object.entries(groupedDictionaries),\n async ([key, dictionariesEntry]) => {\n if (key === 'undefined') {\n return undefined as unknown as readonly [\n string,\n MergedDictionaryResult,\n ];\n }\n\n const normalizedDictionaries = normalizeDictionaries(\n dictionariesEntry.dictionaries,\n configuration\n );\n\n const mergedDictionary = mergeDictionaries(normalizedDictionaries);\n\n const outputFileName = `${key}.json`;\n const resultFilePath = resolve(dictionariesDir, outputFileName);\n\n // Write the merged dictionary\n await writeJsonIfChanged(resultFilePath, mergedDictionary).catch(\n (err) => {\n console.error(\n `Error creating merged ${colorizePath(resultFilePath)}:`,\n err\n );\n }\n );\n\n return [\n key,\n {\n dictionaryPath: resultFilePath,\n dictionary: mergedDictionary,\n } as MergedDictionaryResult,\n ] as const;\n }\n );\n\n return Object.fromEntries(\n results.filter(Boolean) as Array<readonly [string, MergedDictionaryResult]>\n );\n};\n"],"mappings":"uUAoCA,MAAa,EAA0B,MACrC,EACA,IACoC,CACpC,GAAM,CAAE,mBAAoB,EAAc,OAG1C,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAgB,CAAE,CAAE,UAAW,GAAM,CAAC,CAE1D,IAAM,EAAU,MAAMA,EAAAA,YACpB,OAAO,QAAQ,EAAoB,CACnC,MAAO,CAAC,EAAK,KAAuB,CAClC,GAAI,IAAQ,YACV,OAWF,IAAM,GAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,uBAJJ,EAAkB,aAClB,EACD,CAEiE,CAG5D,GAAA,EAAA,EAAA,SAAyB,EADR,GAAG,EAAI,OACiC,CAY/D,OATA,MAAMC,EAAAA,mBAAmB,EAAgB,EAAiB,CAAC,MACxD,GAAQ,CACP,QAAQ,MACN,0BAAA,EAAA,EAAA,cAAsC,EAAe,CAAC,GACtD,EACD,EAEJ,CAEM,CACL,EACA,CACE,eAAgB,EAChB,WAAY,EACb,CACF,EAEJ,CAED,OAAO,OAAO,YACZ,EAAQ,OAAO,QAAQ,CACxB"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeJsonIfChanged.cjs`),n=require(`../filterInvalidDictionaries.cjs`),r=require(`./writeUnmergedDictionary.cjs`),i=require(`../loadDictionaries/loadRemoteDictionaries.cjs`);let a=require(`node:fs/promises`),o=require(`node:path`),s=require(`@intlayer/config/logger`),c=require(`@intlayer/config/node`),l=require(`@intlayer/core/dictionaryManipulator`);const u=async(u,d=(0,c.getConfiguration)())=>{let{remoteDictionariesDir:f}=d.system;await(0,a.mkdir)((0,o.resolve)(f),{recursive:!0});let p=r.groupDictionariesByKey(n.filterInvalidDictionaries(u,d)),m=await e.parallelize(Object.entries(p),async([e,n])=>{if(e===`undefined`)return;let r=(0,l.orderDictionaries)(i.formatDistantDictionaries(n),d),a=(0,o.resolve)(f,`${e}.json`);return await t.writeJsonIfChanged(a,r).catch(e=>{console.error(`${s.x} Error creating unmerged ${(0,s.colorizePath)(a)}:`,e)}),[e,{dictionaryPath:a,dictionaries:n}]});return Object.fromEntries(m.filter(Boolean))};exports.writeRemoteDictionary=u;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../utils/parallelize.cjs`),t=require(`../writeJsonIfChanged.cjs`),n=require(`../filterInvalidDictionaries.cjs`),r=require(`./writeUnmergedDictionary.cjs`),i=require(`../loadDictionaries/loadRemoteDictionaries.cjs`);let a=require(`node:fs/promises`),o=require(`node:path`),s=require(`@intlayer/config/logger`),c=require(`@intlayer/core/dictionaryManipulator`);const l=async(l,u)=>{let{remoteDictionariesDir:d}=u.system;await(0,a.mkdir)((0,o.resolve)(d),{recursive:!0});let f=r.groupDictionariesByKey(n.filterInvalidDictionaries(l,u)),p=await e.parallelize(Object.entries(f),async([e,n])=>{if(e===`undefined`)return;let r=(0,c.orderDictionaries)(i.formatDistantDictionaries(n),u),a=(0,o.resolve)(d,`${e}.json`);return await t.writeJsonIfChanged(a,r).catch(e=>{console.error(`${s.x} Error creating unmerged ${(0,s.colorizePath)(a)}:`,e)}),[e,{dictionaryPath:a,dictionaries:n}]});return Object.fromEntries(p.filter(Boolean))};exports.writeRemoteDictionary=l;
2
2
  //# sourceMappingURL=writeRemoteDictionary.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeRemoteDictionary.cjs","names":["groupDictionariesByKey","filterInvalidDictionaries","parallelize","formatDistantDictionaries","writeJsonIfChanged","x"],"sources":["../../../src/buildIntlayerDictionary/writeRemoteDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { colorizePath, x } from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\nimport { orderDictionaries } from '@intlayer/core/dictionaryManipulator';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { filterInvalidDictionaries } from '../filterInvalidDictionaries';\nimport { formatDistantDictionaries } from '../loadDictionaries';\nimport { parallelize } from '../utils/parallelize';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\nimport {\n groupDictionariesByKey,\n type UnmergedDictionaryResult,\n} from './writeUnmergedDictionary';\n\nexport type RemoteDictionaryResult = {\n dictionaryPath: string;\n dictionaries: Dictionary[];\n};\n\nexport type RemoteDictionaryOutput = Record<string, RemoteDictionaryResult>;\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/fetch_dictionaries/home.json\n * // { key: 'home', content: { ... } },\n * ```\n */\nexport const writeRemoteDictionary = async (\n remoteDictionaries: Dictionary[],\n configuration = getConfiguration()\n): Promise<RemoteDictionaryOutput> => {\n const { remoteDictionariesDir } = configuration.system;\n\n // Create the dictionaries folder if it doesn't exist\n await mkdir(resolve(remoteDictionariesDir), { recursive: true });\n\n const filteredDictionaries = filterInvalidDictionaries(\n remoteDictionaries,\n configuration\n );\n\n // Group dictionaries by key and write to unmergedDictionariesDir\n const groupedDictionaries = groupDictionariesByKey(filteredDictionaries);\n\n // Merge dictionaries with the same key and write to dictionariesDir\n const results = await parallelize(\n Object.entries(groupedDictionaries),\n async ([key, dictionaries]) => {\n if (key === 'undefined') {\n return undefined as unknown as readonly [\n string,\n UnmergedDictionaryResult,\n ];\n }\n\n const formattedDictionaries = formatDistantDictionaries(dictionaries);\n\n const orderedDictionaries = orderDictionaries(\n formattedDictionaries,\n configuration\n );\n\n const outputFileName = `${key}.json`;\n const unmergedFilePath = resolve(remoteDictionariesDir, outputFileName);\n\n // Write the grouped dictionaries\n await writeJsonIfChanged(unmergedFilePath, orderedDictionaries).catch(\n (err) => {\n console.error(\n `${x} Error creating unmerged ${colorizePath(unmergedFilePath)}:`,\n err\n );\n }\n );\n\n return [\n key,\n {\n dictionaryPath: unmergedFilePath,\n dictionaries,\n } as UnmergedDictionaryResult,\n ] as const;\n }\n );\n\n return Object.fromEntries(\n results.filter(Boolean) as Array<\n readonly [string, UnmergedDictionaryResult]\n >\n );\n};\n"],"mappings":"+fAsCA,MAAa,EAAwB,MACnC,EACA,GAAA,EAAA,EAAA,mBAAkC,GACE,CACpC,GAAM,CAAE,yBAA0B,EAAc,OAGhD,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAsB,CAAE,CAAE,UAAW,GAAM,CAAC,CAQhE,IAAM,EAAsBA,EAAAA,uBANCC,EAAAA,0BAC3B,EACA,EACD,CAGuE,CAGlE,EAAU,MAAMC,EAAAA,YACpB,OAAO,QAAQ,EAAoB,CACnC,MAAO,CAAC,EAAK,KAAkB,CAC7B,GAAI,IAAQ,YACV,OAQF,IAAM,GAAA,EAAA,EAAA,mBAFwBC,EAAAA,0BAA0B,EAAa,CAInE,EACD,CAGK,GAAA,EAAA,EAAA,SAA2B,EADV,GAAG,EAAI,OACyC,CAYvE,OATA,MAAMC,EAAAA,mBAAmB,EAAkB,EAAoB,CAAC,MAC7D,GAAQ,CACP,QAAQ,MACN,GAAGC,EAAAA,EAAE,4BAAA,EAAA,EAAA,cAAwC,EAAiB,CAAC,GAC/D,EACD,EAEJ,CAEM,CACL,EACA,CACE,eAAgB,EAChB,eACD,CACF,EAEJ,CAED,OAAO,OAAO,YACZ,EAAQ,OAAO,QAAQ,CAGxB"}
1
+ {"version":3,"file":"writeRemoteDictionary.cjs","names":["groupDictionariesByKey","filterInvalidDictionaries","parallelize","formatDistantDictionaries","writeJsonIfChanged","x"],"sources":["../../../src/buildIntlayerDictionary/writeRemoteDictionary.ts"],"sourcesContent":["import { mkdir } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { colorizePath, x } from '@intlayer/config/logger';\nimport { orderDictionaries } from '@intlayer/core/dictionaryManipulator';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { filterInvalidDictionaries } from '../filterInvalidDictionaries';\nimport { formatDistantDictionaries } from '../loadDictionaries';\nimport { parallelize } from '../utils/parallelize';\nimport { writeJsonIfChanged } from '../writeJsonIfChanged';\nimport {\n groupDictionariesByKey,\n type UnmergedDictionaryResult,\n} from './writeUnmergedDictionary';\n\nexport type RemoteDictionaryResult = {\n dictionaryPath: string;\n dictionaries: Dictionary[];\n};\n\nexport type RemoteDictionaryOutput = Record<string, RemoteDictionaryResult>;\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/fetch_dictionaries/home.json\n * // { key: 'home', content: { ... } },\n * ```\n */\nexport const writeRemoteDictionary = async (\n remoteDictionaries: Dictionary[],\n configuration: IntlayerConfig\n): Promise<RemoteDictionaryOutput> => {\n const { remoteDictionariesDir } = configuration.system;\n\n // Create the dictionaries folder if it doesn't exist\n await mkdir(resolve(remoteDictionariesDir), { recursive: true });\n\n const filteredDictionaries = filterInvalidDictionaries(\n remoteDictionaries,\n configuration\n );\n\n // Group dictionaries by key and write to unmergedDictionariesDir\n const groupedDictionaries = groupDictionariesByKey(filteredDictionaries);\n\n // Merge dictionaries with the same key and write to dictionariesDir\n const results = await parallelize(\n Object.entries(groupedDictionaries),\n async ([key, dictionaries]) => {\n if (key === 'undefined') {\n return undefined as unknown as readonly [\n string,\n UnmergedDictionaryResult,\n ];\n }\n\n const formattedDictionaries = formatDistantDictionaries(dictionaries);\n\n const orderedDictionaries = orderDictionaries(\n formattedDictionaries,\n configuration\n );\n\n const outputFileName = `${key}.json`;\n const unmergedFilePath = resolve(remoteDictionariesDir, outputFileName);\n\n // Write the grouped dictionaries\n await writeJsonIfChanged(unmergedFilePath, orderedDictionaries).catch(\n (err) => {\n console.error(\n `${x} Error creating unmerged ${colorizePath(unmergedFilePath)}:`,\n err\n );\n }\n );\n\n return [\n key,\n {\n dictionaryPath: unmergedFilePath,\n dictionaries,\n } as UnmergedDictionaryResult,\n ] as const;\n }\n );\n\n return Object.fromEntries(\n results.filter(Boolean) as Array<\n readonly [string, UnmergedDictionaryResult]\n >\n );\n};\n"],"mappings":"4dAsCA,MAAa,EAAwB,MACnC,EACA,IACoC,CACpC,GAAM,CAAE,yBAA0B,EAAc,OAGhD,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,SAAoB,EAAsB,CAAE,CAAE,UAAW,GAAM,CAAC,CAQhE,IAAM,EAAsBA,EAAAA,uBANCC,EAAAA,0BAC3B,EACA,EACD,CAGuE,CAGlE,EAAU,MAAMC,EAAAA,YACpB,OAAO,QAAQ,EAAoB,CACnC,MAAO,CAAC,EAAK,KAAkB,CAC7B,GAAI,IAAQ,YACV,OAQF,IAAM,GAAA,EAAA,EAAA,mBAFwBC,EAAAA,0BAA0B,EAAa,CAInE,EACD,CAGK,GAAA,EAAA,EAAA,SAA2B,EADV,GAAG,EAAI,OACyC,CAYvE,OATA,MAAMC,EAAAA,mBAAmB,EAAkB,EAAoB,CAAC,MAC7D,GAAQ,CACP,QAAQ,MACN,GAAGC,EAAAA,EAAE,4BAAA,EAAA,EAAA,cAAwC,EAAiB,CAAC,GAC/D,EACD,EAEJ,CAEM,CACL,EACA,CACE,eAAgB,EAChB,eACD,CACF,EAEJ,CAED,OAAO,OAAO,YACZ,EAAQ,OAAO,QAAQ,CAGxB"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`);let t=require(`node:path`),n=require(`fast-glob`);n=e.t(n);let r=require(`node:fs`),i=require(`@intlayer/config/utils`);const a=async(e,a=`esm`,o=[])=>{let{dynamicDictionariesDir:s,mainDir:c}=e.system;(0,r.existsSync)(c)||(0,r.mkdirSync)(c,{recursive:!0});let l=a===`cjs`?`cjs`:`mjs`;return(await(0,n.default)(`${(0,i.normalizePath)(s)}/**/*.${l}`)).filter(e=>{let n=(0,t.basename)(e,`.${l}`);return!o.includes(n)})};exports.getBuiltDynamicDictionariesPath=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`);let t=require(`node:path`),n=require(`fast-glob`);n=e.t(n);let r=require(`node:fs`),i=require(`@intlayer/config/utils`);const a=async(e,a=`esm`,o=[])=>{let{dynamicDictionariesDir:s,mainDir:c}=e.system;(0,r.existsSync)(c)||(0,r.mkdirSync)(c,{recursive:!0});let l=a===`cjs`?`cjs`:`mjs`;return(await(0,n.default)(`${(0,i.normalizePath)(s)}/*.${l}`)).filter(e=>{let n=(0,t.basename)(e,`.${l}`);return!o.includes(n)})};exports.getBuiltDynamicDictionariesPath=a;
2
2
  //# sourceMappingURL=getBuiltDynamicDictionariesPath.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"getBuiltDynamicDictionariesPath.cjs","names":[],"sources":["../../../src/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.ts"],"sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport { normalizePath } from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport fg from 'fast-glob';\n\n/**\n * This function generates a list of dictionaries in the main directory\n */\nexport const getBuiltDynamicDictionariesPath = async (\n configuration: IntlayerConfig,\n format: 'cjs' | 'esm' = 'esm',\n excludeKeys: string[] = []\n) => {\n const { dynamicDictionariesDir, mainDir } = configuration.system;\n\n // Create main directory if it doesn't exist\n if (!existsSync(mainDir)) {\n mkdirSync(mainDir, { recursive: true });\n }\n\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n\n const dictionariesPath: string[] = await fg(\n `${normalizePath(dynamicDictionariesDir)}/**/*.${extension}`\n );\n\n return dictionariesPath.filter((path) => {\n const key = basename(path, `.${extension}`);\n return !excludeKeys.includes(key);\n });\n};\n"],"mappings":"oOASA,MAAa,EAAkC,MAC7C,EACA,EAAwB,MACxB,EAAwB,EAAE,GACvB,CACH,GAAM,CAAE,yBAAwB,WAAY,EAAc,QAGtD,EAAA,EAAA,YAAY,EAAQ,GACtB,EAAA,EAAA,WAAU,EAAS,CAAE,UAAW,GAAM,CAAC,CAGzC,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAM7C,OAJmC,MAAA,EAAA,EAAA,SACjC,IAAA,EAAA,EAAA,eAAiB,EAAuB,CAAC,QAAQ,IAClD,EAEuB,OAAQ,GAAS,CACvC,IAAM,GAAA,EAAA,EAAA,UAAe,EAAM,IAAI,IAAY,CAC3C,MAAO,CAAC,EAAY,SAAS,EAAI,EACjC"}
1
+ {"version":3,"file":"getBuiltDynamicDictionariesPath.cjs","names":[],"sources":["../../../src/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.ts"],"sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport { normalizePath } from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport fg from 'fast-glob';\n\n/**\n * This function generates a list of dictionaries in the main directory\n */\nexport const getBuiltDynamicDictionariesPath = async (\n configuration: IntlayerConfig,\n format: 'cjs' | 'esm' = 'esm',\n excludeKeys: string[] = []\n) => {\n const { dynamicDictionariesDir, mainDir } = configuration.system;\n\n // Create main directory if it doesn't exist\n if (!existsSync(mainDir)) {\n mkdirSync(mainDir, { recursive: true });\n }\n\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n\n const dictionariesPath: string[] = await fg(\n `${normalizePath(dynamicDictionariesDir)}/*.${extension}`\n );\n\n return dictionariesPath.filter((path) => {\n const key = basename(path, `.${extension}`);\n return !excludeKeys.includes(key);\n });\n};\n"],"mappings":"oOASA,MAAa,EAAkC,MAC7C,EACA,EAAwB,MACxB,EAAwB,EAAE,GACvB,CACH,GAAM,CAAE,yBAAwB,WAAY,EAAc,QAGtD,EAAA,EAAA,YAAY,EAAQ,GACtB,EAAA,EAAA,WAAU,EAAS,CAAE,UAAW,GAAM,CAAC,CAGzC,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAM7C,OAJmC,MAAA,EAAA,EAAA,SACjC,IAAA,EAAA,EAAA,eAAiB,EAAuB,CAAC,KAAK,IAC/C,EAEuB,OAAQ,GAAS,CACvC,IAAM,GAAA,EAAA,EAAA,UAAe,EAAM,IAAI,IAAY,CAC3C,MAAO,CAAC,EAAY,SAAS,EAAI,EACjC"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`);let t=require(`node:path`),n=require(`fast-glob`);n=e.t(n);let r=require(`node:fs`),i=require(`@intlayer/config/utils`);const a=async(e,a=`esm`,o=[])=>{let{fetchDictionariesDir:s,mainDir:c}=e.system;(0,r.existsSync)(c)||(0,r.mkdirSync)(c,{recursive:!0});let l=a===`cjs`?`cjs`:`mjs`;return(await(0,n.default)(`${(0,i.normalizePath)(s)}/**/*.${l}`)).filter(e=>{let n=(0,t.basename)(e,`.${l}`);return!o.includes(n)})};exports.getBuiltFetchDictionariesPath=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`);let t=require(`node:path`),n=require(`fast-glob`);n=e.t(n);let r=require(`node:fs`),i=require(`@intlayer/config/utils`);const a=async(e,a=`esm`,o=[])=>{let{fetchDictionariesDir:s,mainDir:c}=e.system;(0,r.existsSync)(c)||(0,r.mkdirSync)(c,{recursive:!0});let l=a===`cjs`?`cjs`:`mjs`;return(await(0,n.default)(`${(0,i.normalizePath)(s)}/*.${l}`)).filter(e=>{let n=(0,t.basename)(e,`.${l}`);return!o.includes(n)})};exports.getBuiltFetchDictionariesPath=a;
2
2
  //# sourceMappingURL=getBuiltFetchDictionariesPath.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"getBuiltFetchDictionariesPath.cjs","names":[],"sources":["../../../src/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.ts"],"sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport { normalizePath } from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport fg from 'fast-glob';\n\n/**\n * This function generates a list of dictionaries in the main directory\n */\nexport const getBuiltFetchDictionariesPath = async (\n configuration: IntlayerConfig,\n format: 'cjs' | 'esm' = 'esm',\n excludeKeys: string[] = []\n) => {\n const { fetchDictionariesDir, mainDir } = configuration.system;\n\n // Create main directory if it doesn't exist\n if (!existsSync(mainDir)) {\n mkdirSync(mainDir, { recursive: true });\n }\n\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n\n const dictionariesPath: string[] = await fg(\n `${normalizePath(fetchDictionariesDir)}/**/*.${extension}`\n );\n\n return dictionariesPath.filter((path) => {\n const key = basename(path, `.${extension}`);\n return !excludeKeys.includes(key);\n });\n};\n"],"mappings":"oOASA,MAAa,EAAgC,MAC3C,EACA,EAAwB,MACxB,EAAwB,EAAE,GACvB,CACH,GAAM,CAAE,uBAAsB,WAAY,EAAc,QAGpD,EAAA,EAAA,YAAY,EAAQ,GACtB,EAAA,EAAA,WAAU,EAAS,CAAE,UAAW,GAAM,CAAC,CAGzC,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAM7C,OAJmC,MAAA,EAAA,EAAA,SACjC,IAAA,EAAA,EAAA,eAAiB,EAAqB,CAAC,QAAQ,IAChD,EAEuB,OAAQ,GAAS,CACvC,IAAM,GAAA,EAAA,EAAA,UAAe,EAAM,IAAI,IAAY,CAC3C,MAAO,CAAC,EAAY,SAAS,EAAI,EACjC"}
1
+ {"version":3,"file":"getBuiltFetchDictionariesPath.cjs","names":[],"sources":["../../../src/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.ts"],"sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { basename } from 'node:path';\nimport { normalizePath } from '@intlayer/config/utils';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport fg from 'fast-glob';\n\n/**\n * This function generates a list of dictionaries in the main directory\n */\nexport const getBuiltFetchDictionariesPath = async (\n configuration: IntlayerConfig,\n format: 'cjs' | 'esm' = 'esm',\n excludeKeys: string[] = []\n) => {\n const { fetchDictionariesDir, mainDir } = configuration.system;\n\n // Create main directory if it doesn't exist\n if (!existsSync(mainDir)) {\n mkdirSync(mainDir, { recursive: true });\n }\n\n const extension = format === 'cjs' ? 'cjs' : 'mjs';\n\n const dictionariesPath: string[] = await fg(\n `${normalizePath(fetchDictionariesDir)}/*.${extension}`\n );\n\n return dictionariesPath.filter((path) => {\n const key = basename(path, `.${extension}`);\n return !excludeKeys.includes(key);\n });\n};\n"],"mappings":"oOASA,MAAa,EAAgC,MAC3C,EACA,EAAwB,MACxB,EAAwB,EAAE,GACvB,CACH,GAAM,CAAE,uBAAsB,WAAY,EAAc,QAGpD,EAAA,EAAA,YAAY,EAAQ,GACtB,EAAA,EAAA,WAAU,EAAS,CAAE,UAAW,GAAM,CAAC,CAGzC,IAAM,EAAY,IAAW,MAAQ,MAAQ,MAM7C,OAJmC,MAAA,EAAA,EAAA,SACjC,IAAA,EAAA,EAAA,eAAiB,EAAqB,CAAC,KAAK,IAC7C,EAEuB,OAAQ,GAAS,CACvC,IAAM,GAAA,EAAA,EAAA,UAAe,EAAM,IAAI,IAAY,CAC3C,MAAO,CAAC,EAAY,SAAS,EAAI,EACjC"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./chunk-Bmb41Sf3.cjs`);const e=require(`./utils/formatter.cjs`);let t=require(`@intlayer/config/logger`),n=require(`@intlayer/core/interpreter`);const r=(r,i,a)=>{let o=(0,t.getAppLogger)(i);if(!r)return!1;let s=r.location===`local`||typeof r.filePath==`string`?`Local`:`Remote`,c=!!r.key,l=!!r.content;if(!c)return o(`${s} dictionary has no key`,{level:`error`}),!1;if(!l)return o(`${s} dictionary ${(0,t.colorizeKey)(r.key)} has no content - ${r.filePath?e.formatPath(r.filePath):(0,t.colorizePath)(`Remote`)}`,{level:`error`}),!1;if(r.schema&&a?.checkSchema&&!(typeof r.content==`function`||typeof r.content==`object`&&r.content!==null&&typeof r.content.then==`function`)){let a=i?.internationalization?.locales??[],c=i?.internationalization.strictMode===`strict`,l=typeof r.schema==`string`?i?.schemas?.[r.schema]:void 0;if(l&&typeof l.safeParse==`function`)for(let i of a){let a=(0,n.getContent)(r.content,{dictionaryKey:r.key,keyPath:[],locale:i},(0,n.getBasePlugins)(i,!c)),u=l.safeParse(a);if(!u.success)return o(`${s} dictionary ${(0,t.colorizeKey)(r.key)} has invalid content according to schema ${(0,t.colorize)(r.schema,t.ANSIColors.ORANGE)} for locale ${e.formatLocale(i)} - ${r.filePath?e.formatPath(r.filePath):(0,t.colorizePath)(`Remote`)}`,{level:`error`}),u.error.issues.forEach(n=>{o(`${t.x} Error: ${(0,t.colorizeKey)(r.key)} - ${e.formatLocale(i)} - ${(0,t.colorize)(`${n.path.join(`.`)}:`,t.ANSIColors.BLUE)} ${(0,t.colorize)(n.message,t.ANSIColors.GREY)}`,{level:`error`})}),!1}}return!0},i=(e,t,n)=>(e??[])?.filter(e=>r(e,t,n));exports.filterInvalidDictionaries=i,exports.isInvalidDictionary=r;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./chunk-Bmb41Sf3.cjs`),t=require(`./utils/formatter.cjs`);let n=require(`@intlayer/config/logger`),r=require(`@intlayer/config/colors`);r=e.t(r);let i=require(`@intlayer/core/interpreter`);const a=(e,a,o)=>{let s=(0,n.getAppLogger)(a);if(!e)return!1;let c=e.location===`local`||typeof e.filePath==`string`?`Local`:`Remote`,l=!!e.key,u=!!e.content;if(!l)return s(`${c} dictionary has no key`,{level:`error`}),!1;if(!u)return s(`${c} dictionary ${(0,n.colorizeKey)(e.key)} has no content - ${e.filePath?t.formatPath(e.filePath):(0,n.colorizePath)(`Remote`)}`,{level:`error`}),!1;if(e.schema&&o?.checkSchema&&!(typeof e.content==`function`||typeof e.content==`object`&&e.content!==null&&typeof e.content.then==`function`)){let o=a?.internationalization?.locales??[],l=a?.internationalization.strictMode===`strict`,u=typeof e.schema==`string`?a?.schemas?.[e.schema]:void 0;if(u&&typeof u.safeParse==`function`)for(let a of o){let o=(0,i.getContent)(e.content,{dictionaryKey:e.key,keyPath:[],locale:a},(0,i.getBasePlugins)(a,!l)),d=u.safeParse(o);if(!d.success)return s(`${c} dictionary ${(0,n.colorizeKey)(e.key)} has invalid content according to schema ${(0,n.colorize)(e.schema,r.ORANGE)} for locale ${t.formatLocale(a)} - ${e.filePath?t.formatPath(e.filePath):(0,n.colorizePath)(`Remote`)}`,{level:`error`}),d.error.issues.forEach(i=>{s(`${n.x} Error: ${(0,n.colorizeKey)(e.key)} - ${t.formatLocale(a)} - ${(0,n.colorize)(`${i.path.join(`.`)}:`,r.BLUE)} ${(0,n.colorize)(i.message,r.GREY)}`,{level:`error`})}),!1}}return!0},o=(e,t,n)=>(e??[])?.filter(e=>a(e,t,n));exports.filterInvalidDictionaries=o,exports.isInvalidDictionary=a;
2
2
  //# sourceMappingURL=filterInvalidDictionaries.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"filterInvalidDictionaries.cjs","names":["formatPath","ANSIColors","formatLocale","x"],"sources":["../../src/filterInvalidDictionaries.ts"],"sourcesContent":["import {\n ANSIColors,\n colorize,\n colorizeKey,\n colorizePath,\n getAppLogger,\n x,\n} from '@intlayer/config/logger';\nimport { getBasePlugins, getContent } from '@intlayer/core/interpreter';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { formatLocale, formatPath } from './utils/formatter';\n\ntype IsInvalidDictionaryOptions = { checkSchema: boolean };\n\nexport const isInvalidDictionary = (\n dictionary: Dictionary | undefined,\n configuration?: IntlayerConfig,\n options?: IsInvalidDictionaryOptions\n): boolean => {\n const appLogger = getAppLogger(configuration);\n\n if (!dictionary) return false;\n\n const isLocal = Boolean(\n dictionary.location === 'local' || typeof dictionary.filePath === 'string'\n );\n const location = isLocal ? 'Local' : 'Remote';\n const hasKey = Boolean(dictionary.key);\n const hasContent = Boolean(dictionary.content);\n\n if (!hasKey) {\n appLogger(`${location} dictionary has no key`, {\n level: 'error',\n });\n\n return false;\n }\n\n if (!hasContent) {\n appLogger(\n `${location} dictionary ${colorizeKey(dictionary.key)} has no content - ${dictionary.filePath ? formatPath(dictionary.filePath) : colorizePath('Remote')}`,\n {\n level: 'error',\n }\n );\n return false;\n }\n\n if (dictionary.schema && options?.checkSchema) {\n const isAsync =\n typeof dictionary.content === 'function' ||\n (typeof dictionary.content === 'object' &&\n dictionary.content !== null &&\n typeof (dictionary.content as any).then === 'function');\n\n if (!isAsync) {\n const locales = configuration?.internationalization?.locales ?? [];\n const isStrict =\n configuration?.internationalization.strictMode === 'strict';\n\n const schema =\n typeof dictionary.schema === 'string'\n ? configuration?.schemas?.[dictionary.schema]\n : undefined;\n\n if (schema && typeof schema.safeParse === 'function') {\n for (const locale of locales) {\n const resolvedContent = getContent(\n dictionary.content,\n {\n dictionaryKey: dictionary.key,\n keyPath: [],\n locale,\n },\n getBasePlugins(locale, !isStrict)\n );\n const result = (schema as any).safeParse(resolvedContent);\n\n if (!result.success) {\n appLogger(\n `${location} dictionary ${colorizeKey(dictionary.key)} has invalid content according to schema ${colorize(dictionary.schema as string, ANSIColors.ORANGE)} for locale ${formatLocale(locale)} - ${dictionary.filePath ? formatPath(dictionary.filePath) : colorizePath('Remote')}`,\n {\n level: 'error',\n }\n );\n\n result.error.issues.forEach((issue: any) => {\n appLogger(\n `${x} Error: ${colorizeKey(dictionary.key)} - ${formatLocale(locale)} - ${colorize(`${issue.path.join('.')}:`, ANSIColors.BLUE)} ${colorize(issue.message, ANSIColors.GREY)}`,\n {\n level: 'error',\n }\n );\n });\n\n return false;\n }\n }\n }\n }\n }\n\n return true;\n};\n\nexport const filterInvalidDictionaries = (\n dictionaries: (Dictionary | undefined)[] | undefined,\n configuration: IntlayerConfig,\n options?: IsInvalidDictionaryOptions\n): Dictionary[] =>\n (dictionaries ?? [])?.filter((dictionary) =>\n isInvalidDictionary(dictionary, configuration, options)\n ) as Dictionary[];\n"],"mappings":"6NAeA,MAAa,GACX,EACA,EACA,IACY,CACZ,IAAM,GAAA,EAAA,EAAA,cAAyB,EAAc,CAE7C,GAAI,CAAC,EAAY,MAAO,GAKxB,IAAM,EAFJ,EAAW,WAAa,SAAW,OAAO,EAAW,UAAa,SAEzC,QAAU,SAC/B,EAAS,EAAQ,EAAW,IAC5B,EAAa,EAAQ,EAAW,QAEtC,GAAI,CAAC,EAKH,OAJA,EAAU,GAAG,EAAS,wBAAyB,CAC7C,MAAO,QACR,CAAC,CAEK,GAGT,GAAI,CAAC,EAOH,OANA,EACE,GAAG,EAAS,eAAA,EAAA,EAAA,aAA0B,EAAW,IAAI,CAAC,oBAAoB,EAAW,SAAWA,EAAAA,WAAW,EAAW,SAAS,EAAA,EAAA,EAAA,cAAgB,SAAS,GACxJ,CACE,MAAO,QACR,CACF,CACM,GAGT,GAAI,EAAW,QAAU,GAAS,aAO5B,EALF,OAAO,EAAW,SAAY,YAC7B,OAAO,EAAW,SAAY,UAC7B,EAAW,UAAY,MACvB,OAAQ,EAAW,QAAgB,MAAS,YAElC,CACZ,IAAM,EAAU,GAAe,sBAAsB,SAAW,EAAE,CAC5D,EACJ,GAAe,qBAAqB,aAAe,SAE/C,EACJ,OAAO,EAAW,QAAW,SACzB,GAAe,UAAU,EAAW,QACpC,IAAA,GAEN,GAAI,GAAU,OAAO,EAAO,WAAc,WACxC,IAAK,IAAM,KAAU,EAAS,CAC5B,IAAM,GAAA,EAAA,EAAA,YACJ,EAAW,QACX,CACE,cAAe,EAAW,IAC1B,QAAS,EAAE,CACX,SACD,EAAA,EAAA,EAAA,gBACc,EAAQ,CAAC,EAAS,CAClC,CACK,EAAU,EAAe,UAAU,EAAgB,CAEzD,GAAI,CAAC,EAAO,QAiBV,OAhBA,EACE,GAAG,EAAS,eAAA,EAAA,EAAA,aAA0B,EAAW,IAAI,CAAC,4CAAA,EAAA,EAAA,UAAoD,EAAW,OAAkBC,EAAAA,WAAW,OAAO,CAAC,cAAcC,EAAAA,aAAa,EAAO,CAAC,KAAK,EAAW,SAAWF,EAAAA,WAAW,EAAW,SAAS,EAAA,EAAA,EAAA,cAAgB,SAAS,GAChR,CACE,MAAO,QACR,CACF,CAED,EAAO,MAAM,OAAO,QAAS,GAAe,CAC1C,EACE,GAAGG,EAAAA,EAAE,WAAA,EAAA,EAAA,aAAsB,EAAW,IAAI,CAAC,KAAKD,EAAAA,aAAa,EAAO,CAAC,MAAA,EAAA,EAAA,UAAc,GAAG,EAAM,KAAK,KAAK,IAAI,CAAC,GAAID,EAAAA,WAAW,KAAK,CAAC,IAAA,EAAA,EAAA,UAAY,EAAM,QAASA,EAAAA,WAAW,KAAK,GAC3K,CACE,MAAO,QACR,CACF,EACD,CAEK,IAOjB,MAAO,IAGI,GACX,EACA,EACA,KAEC,GAAgB,EAAE,GAAG,OAAQ,GAC5B,EAAoB,EAAY,EAAe,EAAQ,CACxD"}
1
+ {"version":3,"file":"filterInvalidDictionaries.cjs","names":["formatPath","ANSIColors","formatLocale","x"],"sources":["../../src/filterInvalidDictionaries.ts"],"sourcesContent":["import * as ANSIColors from '@intlayer/config/colors';\nimport {\n colorize,\n colorizeKey,\n colorizePath,\n getAppLogger,\n x,\n} from '@intlayer/config/logger';\nimport { getBasePlugins, getContent } from '@intlayer/core/interpreter';\nimport type { IntlayerConfig } from '@intlayer/types/config';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { formatLocale, formatPath } from './utils/formatter';\n\ntype IsInvalidDictionaryOptions = { checkSchema: boolean };\n\nexport const isInvalidDictionary = (\n dictionary: Dictionary | undefined,\n configuration?: IntlayerConfig,\n options?: IsInvalidDictionaryOptions\n): boolean => {\n const appLogger = getAppLogger(configuration);\n\n if (!dictionary) return false;\n\n const isLocal = Boolean(\n dictionary.location === 'local' || typeof dictionary.filePath === 'string'\n );\n const location = isLocal ? 'Local' : 'Remote';\n const hasKey = Boolean(dictionary.key);\n const hasContent = Boolean(dictionary.content);\n\n if (!hasKey) {\n appLogger(`${location} dictionary has no key`, {\n level: 'error',\n });\n\n return false;\n }\n\n if (!hasContent) {\n appLogger(\n `${location} dictionary ${colorizeKey(dictionary.key)} has no content - ${dictionary.filePath ? formatPath(dictionary.filePath) : colorizePath('Remote')}`,\n {\n level: 'error',\n }\n );\n return false;\n }\n\n if (dictionary.schema && options?.checkSchema) {\n const isAsync =\n typeof dictionary.content === 'function' ||\n (typeof dictionary.content === 'object' &&\n dictionary.content !== null &&\n typeof (dictionary.content as any).then === 'function');\n\n if (!isAsync) {\n const locales = configuration?.internationalization?.locales ?? [];\n const isStrict =\n configuration?.internationalization.strictMode === 'strict';\n\n const schema =\n typeof dictionary.schema === 'string'\n ? configuration?.schemas?.[dictionary.schema]\n : undefined;\n\n if (schema && typeof schema.safeParse === 'function') {\n for (const locale of locales) {\n const resolvedContent = getContent(\n dictionary.content,\n {\n dictionaryKey: dictionary.key,\n keyPath: [],\n locale,\n },\n getBasePlugins(locale, !isStrict)\n );\n const result = (schema as any).safeParse(resolvedContent);\n\n if (!result.success) {\n appLogger(\n `${location} dictionary ${colorizeKey(dictionary.key)} has invalid content according to schema ${colorize(dictionary.schema as string, ANSIColors.ORANGE)} for locale ${formatLocale(locale)} - ${dictionary.filePath ? formatPath(dictionary.filePath) : colorizePath('Remote')}`,\n {\n level: 'error',\n }\n );\n\n result.error.issues.forEach((issue: any) => {\n appLogger(\n `${x} Error: ${colorizeKey(dictionary.key)} - ${formatLocale(locale)} - ${colorize(`${issue.path.join('.')}:`, ANSIColors.BLUE)} ${colorize(issue.message, ANSIColors.GREY)}`,\n {\n level: 'error',\n }\n );\n });\n\n return false;\n }\n }\n }\n }\n }\n\n return true;\n};\n\nexport const filterInvalidDictionaries = (\n dictionaries: (Dictionary | undefined)[] | undefined,\n configuration: IntlayerConfig,\n options?: IsInvalidDictionaryOptions\n): Dictionary[] =>\n (dictionaries ?? [])?.filter((dictionary) =>\n isInvalidDictionary(dictionary, configuration, options)\n ) as Dictionary[];\n"],"mappings":"iRAeA,MAAa,GACX,EACA,EACA,IACY,CACZ,IAAM,GAAA,EAAA,EAAA,cAAyB,EAAc,CAE7C,GAAI,CAAC,EAAY,MAAO,GAKxB,IAAM,EAFJ,EAAW,WAAa,SAAW,OAAO,EAAW,UAAa,SAEzC,QAAU,SAC/B,EAAS,EAAQ,EAAW,IAC5B,EAAa,EAAQ,EAAW,QAEtC,GAAI,CAAC,EAKH,OAJA,EAAU,GAAG,EAAS,wBAAyB,CAC7C,MAAO,QACR,CAAC,CAEK,GAGT,GAAI,CAAC,EAOH,OANA,EACE,GAAG,EAAS,eAAA,EAAA,EAAA,aAA0B,EAAW,IAAI,CAAC,oBAAoB,EAAW,SAAWA,EAAAA,WAAW,EAAW,SAAS,EAAA,EAAA,EAAA,cAAgB,SAAS,GACxJ,CACE,MAAO,QACR,CACF,CACM,GAGT,GAAI,EAAW,QAAU,GAAS,aAO5B,EALF,OAAO,EAAW,SAAY,YAC7B,OAAO,EAAW,SAAY,UAC7B,EAAW,UAAY,MACvB,OAAQ,EAAW,QAAgB,MAAS,YAElC,CACZ,IAAM,EAAU,GAAe,sBAAsB,SAAW,EAAE,CAC5D,EACJ,GAAe,qBAAqB,aAAe,SAE/C,EACJ,OAAO,EAAW,QAAW,SACzB,GAAe,UAAU,EAAW,QACpC,IAAA,GAEN,GAAI,GAAU,OAAO,EAAO,WAAc,WACxC,IAAK,IAAM,KAAU,EAAS,CAC5B,IAAM,GAAA,EAAA,EAAA,YACJ,EAAW,QACX,CACE,cAAe,EAAW,IAC1B,QAAS,EAAE,CACX,SACD,EAAA,EAAA,EAAA,gBACc,EAAQ,CAAC,EAAS,CAClC,CACK,EAAU,EAAe,UAAU,EAAgB,CAEzD,GAAI,CAAC,EAAO,QAiBV,OAhBA,EACE,GAAG,EAAS,eAAA,EAAA,EAAA,aAA0B,EAAW,IAAI,CAAC,4CAAA,EAAA,EAAA,UAAoD,EAAW,OAAkBC,EAAW,OAAO,CAAC,cAAcC,EAAAA,aAAa,EAAO,CAAC,KAAK,EAAW,SAAWF,EAAAA,WAAW,EAAW,SAAS,EAAA,EAAA,EAAA,cAAgB,SAAS,GAChR,CACE,MAAO,QACR,CACF,CAED,EAAO,MAAM,OAAO,QAAS,GAAe,CAC1C,EACE,GAAGG,EAAAA,EAAE,WAAA,EAAA,EAAA,aAAsB,EAAW,IAAI,CAAC,KAAKD,EAAAA,aAAa,EAAO,CAAC,MAAA,EAAA,EAAA,UAAc,GAAG,EAAM,KAAK,KAAK,IAAI,CAAC,GAAID,EAAW,KAAK,CAAC,IAAA,EAAA,EAAA,UAAY,EAAM,QAASA,EAAW,KAAK,GAC3K,CACE,MAAO,QACR,CACF,EACD,CAEK,IAOjB,MAAO,IAGI,GACX,EACA,EACA,KAEC,GAAgB,EAAE,GAAG,OAAQ,GAC5B,EAAoB,EAAY,EAAe,EAAQ,CACxD"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../initConfig/index.cjs`),t=require(`./utils/configManipulation.cjs`),n=require(`./utils/fileSystem.cjs`),r=require(`./utils/jsonParser.cjs`),i=require(`./utils/tsConfig.cjs`);let a=require(`node:path`),o=require(`@intlayer/config/logger`),s=require(`@intlayer/config/node`),c=require(`@intlayer/config/utils`);const l={NextJS:`https://intlayer.org/doc/environment/nextjs.md`,NextJS_15:`https://intlayer.org/doc/environment/nextjs/15.md`,NextJS_14:`https://intlayer.org/doc/environment/nextjs/14.md`,CRA:`https://intlayer.org/doc/environment/create-react-app.md`,Astro:`https://intlayer.org/doc/environment/astro.md`,ViteAndReact:`https://intlayer.org/doc/environment/vite-and-react.md`,ViteAndReact_ReactRouterV7:`https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md`,ViteAndReact_ReactRouterV7_FSRoutes:`https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md`,ViteAndVue:`https://intlayer.org/doc/environment/vite-and-vue.md`,ViteAndSolid:`https://intlayer.org/doc/environment/vite-and-solid.md`,ViteAndSvelte:`https://intlayer.org/doc/environment/vite-and-svelte.md`,ViteAndPreact:`https://intlayer.org/doc/environment/vite-and-preact.md`,TanStackRouter:`https://intlayer.org/doc/environment/tanstack.md`,NuxtAndVue:`https://intlayer.org/doc/environment/nuxt-and-vue.md`,Angular:`https://intlayer.org/doc/environment/angular.md`,SvelteKit:`https://intlayer.org/doc/environment/sveltekit.md`,ReactNativeAndExpo:`https://intlayer.org/doc/environment/react-native-and-expo.md`,Lynx:`https://intlayer.org/doc/environment/lynx-and-react.md`,Express:`https://intlayer.org/doc/environment/express.md`,NestJS:`https://intlayer.org/doc/environment/nestjs.md`,Fastify:`https://intlayer.org/doc/environment/fastify.md`,Default:`https://intlayer.org/doc/get-started`,NextIntl:`https://intlayer.org/blog/intlayer-with-next-intl.md`,ReactI18Next:`https://intlayer.org/blog/intlayer-with-react-i18next.md`,ReactIntl:`https://intlayer.org/blog/intlayer-with-react-intl.md`,NextI18Next:`https://intlayer.org/blog/intlayer-with-next-i18next.md`,VueI18n:`https://intlayer.org/blog/intlayer-with-vue-i18n.md`},u=e=>{let t={...e.dependencies,...e.devDependencies},n=(e,t)=>!e||typeof e!=`string`?!1:RegExp(`^[\\^~]?${t}(?:\\.|$)`).test(e);if(t[`@lynx-js/react`]||t[`@lynx-js/core`])return l.Lynx;if(t[`react-native`]||t.expo)return l.ReactNativeAndExpo;if(t.next){let e=t.next;return n(e,14)?l.NextJS_14:n(e,15)?l.NextJS_15:l.NextJS}if(t.nuxt)return l.NuxtAndVue;if(t.astro)return l.Astro;if(t[`@sveltejs/kit`])return l.SvelteKit;if(t[`@tanstack/react-router`])return l.TanStackRouter;let r=t[`react-router`];if(r&&typeof r==`string`){if(t[`@react-router/fs-routes`])return l.ViteAndReact_ReactRouterV7_FSRoutes;if(n(r,7))return l.ViteAndReact_ReactRouterV7}return t.vite?t.vue?l.ViteAndVue:t[`solid-js`]?l.ViteAndSolid:t.svelte?l.ViteAndSvelte:t.preact?l.ViteAndPreact:l.ViteAndReact:t[`react-scripts`]?l.CRA:t[`@angular/core`]?l.Angular:t[`@nestjs/core`]?l.NestJS:t.express?l.Express:t.fastify?l.Fastify:t[`next-intl`]?l.NextIntl:t[`react-i18next`]||t.i18next?l.ReactI18Next:t[`react-intl`]?l.ReactIntl:t[`next-i18next`]?l.NextI18Next:t[`vue-i18n`]?l.VueI18n:l.Default},d=async l=>{(0,o.logger)((0,o.colorize)(`Checking Intlayer configuration...`,o.ANSIColors.CYAN));let d=`package.json`;await n.exists(l,d)||((0,o.logger)(`${o.x} No ${(0,o.colorizePath)(`package.json`)} found. Please run this script from the project root.`,{level:`error`}),process.exit(1));let f=await n.readFileFromRoot(l,d),p;try{p=JSON.parse(f)}catch{(0,o.logger)(`${o.x} Could not parse ${(0,o.colorizePath)(`package.json`)}.`,{level:`error`}),process.exit(1)}let m=u(p),h=`.gitignore`;if(await n.exists(l,h)){let e=await n.readFileFromRoot(l,h);e.includes(`intlayer`)?(0,o.logger)(`${o.v} ${(0,o.colorizePath)(h)} already includes .intlayer`):(await n.writeFileToRoot(l,h,`${e}\n# Intlayer\n.intlayer\n`),(0,o.logger)(`${o.v} Added ${(0,o.colorizePath)(`.intlayer`)} to ${(0,o.colorizePath)(h)}`))}let g=`.vscode`,_=(0,a.join)(g,`extensions.json`),v=`intlayer.intlayer-vs-code-extension`;try{let e={recommendations:[]};await n.exists(l,_)?e=r.parseJSONWithComments(await n.readFileFromRoot(l,_)):await n.ensureDirectory(l,g),e.recommendations||=[],e.recommendations.includes(v)?(0,o.logger)(`${o.v} ${(0,o.colorizePath)(_)} already includes ${(0,o.colorize)(v,o.ANSIColors.MAGENTA)}`):(e.recommendations.push(v),await n.writeFileToRoot(l,_,JSON.stringify(e,null,2)),(0,o.logger)(`${o.v} Added ${(0,o.colorize)(v,o.ANSIColors.MAGENTA)} to ${(0,o.colorizePath)(_)}`))}catch{(0,o.logger)(`${o.x} Could not update ${(0,o.colorizePath)(_)}. You may need to add ${(0,o.colorize)(v,o.ANSIColors.MAGENTA)} manually.`,{level:`warn`})}let y=await i.findTsConfigFiles(l),b=!1;for(let e of y)if(await n.exists(l,e)){b=!0;try{let t=r.parseJSONWithComments(await n.readFileFromRoot(l,e)),i=`.intlayer/**/*.ts`,a=!1;t.include&&(Array.isArray(t.include)&&!t.include.some(e=>e.includes(`.intlayer`))?(t.include.push(i),a=!0):t.include.includes(i)&&(0,o.logger)(`${o.v} ${(0,o.colorizePath)(e)} already includes intlayer types`)),a&&(await n.writeFileToRoot(l,e,JSON.stringify(t,null,2)),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(e)} to include intlayer types`))}catch{(0,o.logger)(`${o.x} Could not parse or update ${(0,o.colorizePath)(e)}. You may need to add ${(0,o.colorizePath)(`.intlayer/types/**/*.ts`)} manually.`,{level:`warn`})}}await e.initConfig(b?`intlayer.config.ts`:`intlayer.config.mjs`,l);let x=!1;for(let e of[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`])if(await n.exists(l,e)){x=!0;let r=await n.readFileFromRoot(l,e);r.includes(`vite-intlayer`)||(await n.writeFileToRoot(l,e,t.updateViteConfig(r,e.split(`.`).pop())),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(e)} to include Intlayer plugin`));break}let S=[`next.config.js`,`next.config.mjs`,`next.config.ts`],C=!1;for(let e of S)if(await n.exists(l,e)){C=!0,x=!0;let r=await n.readFileFromRoot(l,e);r.includes(`next-intlayer`)||(await n.writeFileToRoot(l,e,t.updateNextConfig(r,e.split(`.`).pop())),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(e)} to include Intlayer plugin`));break}if(C){let e=p.dependencies?.next||p.devDependencies?.next;if(e&&((e,t)=>{if(!e||typeof e!=`string`)return!1;let n=e.match(/^[^\d]*(\d+)/);return n?parseInt(n[1],10)>=t:!1})(e,16)){let e=p.scripts?.dev,t=`intlayer watch --with 'bun run --bun next dev'`;e&&e!==t&&e.includes(`next dev`)&&(p.scripts.dev=t,await n.writeFileToRoot(l,d,JSON.stringify(p,null,2)),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(`package.json`)} dev script for Next.js >= 16`))}}for(let e of[`webpack.config.js`,`webpack.config.ts`,`webpack.config.mjs`,`webpack.config.cjs`])if(await n.exists(l,e)){x=!0,(0,o.logger)(`${o.v} Found ${(0,o.colorizePath)(e)}. Make sure to configure aliases manually or use the Intlayer Webpack plugin.`);break}if(!x){let e=(0,c.getAlias)({configuration:(0,s.getConfiguration)({baseDir:l})});if(b&&y.length>0){let t=y.find(e=>e===`tsconfig.json`)||y[0],i=r.parseJSONWithComments(await n.readFileFromRoot(l,t));i.compilerOptions??={},i.compilerOptions.paths??={};let a=!1;Object.entries(e).forEach(([e,t])=>{i.compilerOptions.paths[e]||(i.compilerOptions.paths[e]=[t],a=!0)}),a&&(await n.writeFileToRoot(l,t,JSON.stringify(i,null,2)),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(t)} to include Intlayer aliases`))}else{let t=`jsconfig.json`;if(await n.exists(l,t)){let i=r.parseJSONWithComments(await n.readFileFromRoot(l,t));i.compilerOptions??={},i.compilerOptions.paths??={};let a=!1;Object.entries(e).forEach(([e,t])=>{i.compilerOptions.paths[e]||(i.compilerOptions.paths[e]=[t],a=!0)}),a&&(await n.writeFileToRoot(l,t,JSON.stringify(i,null,2)),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(t)} to include Intlayer aliases`))}else{p.imports??={};let t=!1;Object.entries(e).forEach(([e,n])=>{let r=e.replace(`@`,`#`),i=n.startsWith(`.`)?n:`./${n}`;p.imports[r]||(p.imports[r]=i,t=!0)}),t&&(await n.writeFileToRoot(l,d,JSON.stringify(p,null,2)),(0,o.logger)(`${o.v} Updated ${(0,o.colorizePath)(d)} to include Intlayer imports`))}}}(0,o.logger)(`${o.v} ${(0,o.colorize)(`Intlayer init setup complete.`,o.ANSIColors.GREEN)}`),(0,o.logger)([(0,o.colorize)(`Next →`,o.ANSIColors.MAGENTA),(0,o.colorize)(`Follow the instructions in the documentation to complete the setup:`,o.ANSIColors.GREY_LIGHT),(0,o.colorizePath)(m)])};exports.initIntlayer=d;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`),t=require(`../initConfig/index.cjs`),n=require(`./utils/configManipulation.cjs`),r=require(`./utils/fileSystem.cjs`),i=require(`./utils/jsonParser.cjs`),a=require(`./utils/tsConfig.cjs`);let o=require(`node:path`),s=require(`@intlayer/config/logger`),c=require(`@intlayer/config/node`),l=require(`@intlayer/config/utils`),u=require(`@intlayer/config/colors`);u=e.t(u);const d={NextJS:`https://intlayer.org/doc/environment/nextjs.md`,NextJS_15:`https://intlayer.org/doc/environment/nextjs/15.md`,NextJS_14:`https://intlayer.org/doc/environment/nextjs/14.md`,CRA:`https://intlayer.org/doc/environment/create-react-app.md`,Astro:`https://intlayer.org/doc/environment/astro.md`,ViteAndReact:`https://intlayer.org/doc/environment/vite-and-react.md`,ViteAndReact_ReactRouterV7:`https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md`,ViteAndReact_ReactRouterV7_FSRoutes:`https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md`,ViteAndVue:`https://intlayer.org/doc/environment/vite-and-vue.md`,ViteAndSolid:`https://intlayer.org/doc/environment/vite-and-solid.md`,ViteAndSvelte:`https://intlayer.org/doc/environment/vite-and-svelte.md`,ViteAndPreact:`https://intlayer.org/doc/environment/vite-and-preact.md`,TanStackRouter:`https://intlayer.org/doc/environment/tanstack.md`,NuxtAndVue:`https://intlayer.org/doc/environment/nuxt-and-vue.md`,Angular:`https://intlayer.org/doc/environment/angular.md`,SvelteKit:`https://intlayer.org/doc/environment/sveltekit.md`,ReactNativeAndExpo:`https://intlayer.org/doc/environment/react-native-and-expo.md`,Lynx:`https://intlayer.org/doc/environment/lynx-and-react.md`,Express:`https://intlayer.org/doc/environment/express.md`,NestJS:`https://intlayer.org/doc/environment/nestjs.md`,Fastify:`https://intlayer.org/doc/environment/fastify.md`,Default:`https://intlayer.org/doc/get-started`,NextIntl:`https://intlayer.org/blog/intlayer-with-next-intl.md`,ReactI18Next:`https://intlayer.org/blog/intlayer-with-react-i18next.md`,ReactIntl:`https://intlayer.org/blog/intlayer-with-react-intl.md`,NextI18Next:`https://intlayer.org/blog/intlayer-with-next-i18next.md`,VueI18n:`https://intlayer.org/blog/intlayer-with-vue-i18n.md`},f=e=>{let t={...e.dependencies,...e.devDependencies},n=(e,t)=>!e||typeof e!=`string`?!1:RegExp(`^[\\^~]?${t}(?:\\.|$)`).test(e);if(t[`@lynx-js/react`]||t[`@lynx-js/core`])return d.Lynx;if(t[`react-native`]||t.expo)return d.ReactNativeAndExpo;if(t.next){let e=t.next;return n(e,14)?d.NextJS_14:n(e,15)?d.NextJS_15:d.NextJS}if(t.nuxt)return d.NuxtAndVue;if(t.astro)return d.Astro;if(t[`@sveltejs/kit`])return d.SvelteKit;if(t[`@tanstack/react-router`])return d.TanStackRouter;let r=t[`react-router`];if(r&&typeof r==`string`){if(t[`@react-router/fs-routes`])return d.ViteAndReact_ReactRouterV7_FSRoutes;if(n(r,7))return d.ViteAndReact_ReactRouterV7}return t.vite?t.vue?d.ViteAndVue:t[`solid-js`]?d.ViteAndSolid:t.svelte?d.ViteAndSvelte:t.preact?d.ViteAndPreact:d.ViteAndReact:t[`react-scripts`]?d.CRA:t[`@angular/core`]?d.Angular:t[`@nestjs/core`]?d.NestJS:t.express?d.Express:t.fastify?d.Fastify:t[`next-intl`]?d.NextIntl:t[`react-i18next`]||t.i18next?d.ReactI18Next:t[`react-intl`]?d.ReactIntl:t[`next-i18next`]?d.NextI18Next:t[`vue-i18n`]?d.VueI18n:d.Default},p=async e=>{(0,s.logger)((0,s.colorize)(`Checking Intlayer configuration...`,u.CYAN));let d=`package.json`;await r.exists(e,d)||((0,s.logger)(`${s.x} No ${(0,s.colorizePath)(`package.json`)} found. Please run this script from the project root.`,{level:`error`}),process.exit(1));let p=await r.readFileFromRoot(e,d),m;try{m=JSON.parse(p)}catch{(0,s.logger)(`${s.x} Could not parse ${(0,s.colorizePath)(`package.json`)}.`,{level:`error`}),process.exit(1)}let h=f(m),g=`.gitignore`;if(await r.exists(e,g)){let t=await r.readFileFromRoot(e,g);t.includes(`intlayer`)?(0,s.logger)(`${s.v} ${(0,s.colorizePath)(g)} already includes .intlayer`):(await r.writeFileToRoot(e,g,`${t}\n# Intlayer\n.intlayer\n`),(0,s.logger)(`${s.v} Added ${(0,s.colorizePath)(`.intlayer`)} to ${(0,s.colorizePath)(g)}`))}let _=`.vscode`,v=(0,o.join)(_,`extensions.json`),y=`intlayer.intlayer-vs-code-extension`;try{let t={recommendations:[]};await r.exists(e,v)?t=i.parseJSONWithComments(await r.readFileFromRoot(e,v)):await r.ensureDirectory(e,_),t.recommendations||=[],t.recommendations.includes(y)?(0,s.logger)(`${s.v} ${(0,s.colorizePath)(v)} already includes ${(0,s.colorize)(y,u.MAGENTA)}`):(t.recommendations.push(y),await r.writeFileToRoot(e,v,JSON.stringify(t,null,2)),(0,s.logger)(`${s.v} Added ${(0,s.colorize)(y,u.MAGENTA)} to ${(0,s.colorizePath)(v)}`))}catch{(0,s.logger)(`${s.x} Could not update ${(0,s.colorizePath)(v)}. You may need to add ${(0,s.colorize)(y,u.MAGENTA)} manually.`,{level:`warn`})}let b=await a.findTsConfigFiles(e),x=!1;for(let t of b)if(await r.exists(e,t)){x=!0;try{let n=i.parseJSONWithComments(await r.readFileFromRoot(e,t)),a=`.intlayer/**/*.ts`,o=!1;n.include&&(Array.isArray(n.include)&&!n.include.some(e=>e.includes(`.intlayer`))?(n.include.push(a),o=!0):n.include.includes(a)&&(0,s.logger)(`${s.v} ${(0,s.colorizePath)(t)} already includes intlayer types`)),o&&(await r.writeFileToRoot(e,t,JSON.stringify(n,null,2)),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(t)} to include intlayer types`))}catch{(0,s.logger)(`${s.x} Could not parse or update ${(0,s.colorizePath)(t)}. You may need to add ${(0,s.colorizePath)(`.intlayer/types/**/*.ts`)} manually.`,{level:`warn`})}}await t.initConfig(x?`intlayer.config.ts`:`intlayer.config.mjs`,e);let S=!1;for(let t of[`vite.config.ts`,`vite.config.js`,`vite.config.mjs`])if(await r.exists(e,t)){S=!0;let i=await r.readFileFromRoot(e,t);i.includes(`vite-intlayer`)||(await r.writeFileToRoot(e,t,n.updateViteConfig(i,t.split(`.`).pop())),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(t)} to include Intlayer plugin`));break}let C=[`next.config.js`,`next.config.mjs`,`next.config.ts`],w=!1;for(let t of C)if(await r.exists(e,t)){w=!0,S=!0;let i=await r.readFileFromRoot(e,t);i.includes(`next-intlayer`)||(await r.writeFileToRoot(e,t,n.updateNextConfig(i,t.split(`.`).pop())),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(t)} to include Intlayer plugin`));break}if(w){let t=m.dependencies?.next||m.devDependencies?.next;if(t&&((e,t)=>{if(!e||typeof e!=`string`)return!1;let n=e.match(/^[^\d]*(\d+)/);return n?parseInt(n[1],10)>=t:!1})(t,16)){let t=m.scripts?.dev,n=`intlayer watch --with 'bun run --bun next dev'`;t&&t!==n&&t.includes(`next dev`)&&(m.scripts.dev=n,await r.writeFileToRoot(e,d,JSON.stringify(m,null,2)),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(`package.json`)} dev script for Next.js >= 16`))}}for(let t of[`webpack.config.js`,`webpack.config.ts`,`webpack.config.mjs`,`webpack.config.cjs`])if(await r.exists(e,t)){S=!0,(0,s.logger)(`${s.v} Found ${(0,s.colorizePath)(t)}. Make sure to configure aliases manually or use the Intlayer Webpack plugin.`);break}if(!S){let t=(0,l.getAlias)({configuration:(0,c.getConfiguration)({baseDir:e})});if(x&&b.length>0){let n=b.find(e=>e===`tsconfig.json`)||b[0],a=i.parseJSONWithComments(await r.readFileFromRoot(e,n));a.compilerOptions??={},a.compilerOptions.paths??={};let o=!1;Object.entries(t).forEach(([e,t])=>{a.compilerOptions.paths[e]||(a.compilerOptions.paths[e]=[t],o=!0)}),o&&(await r.writeFileToRoot(e,n,JSON.stringify(a,null,2)),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(n)} to include Intlayer aliases`))}else{let n=`jsconfig.json`;if(await r.exists(e,n)){let a=i.parseJSONWithComments(await r.readFileFromRoot(e,n));a.compilerOptions??={},a.compilerOptions.paths??={};let o=!1;Object.entries(t).forEach(([e,t])=>{a.compilerOptions.paths[e]||(a.compilerOptions.paths[e]=[t],o=!0)}),o&&(await r.writeFileToRoot(e,n,JSON.stringify(a,null,2)),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(n)} to include Intlayer aliases`))}else{m.imports??={};let n=!1;Object.entries(t).forEach(([e,t])=>{let r=e.replace(`@`,`#`),i=t.startsWith(`.`)?t:`./${t}`;m.imports[r]||(m.imports[r]=i,n=!0)}),n&&(await r.writeFileToRoot(e,d,JSON.stringify(m,null,2)),(0,s.logger)(`${s.v} Updated ${(0,s.colorizePath)(d)} to include Intlayer imports`))}}}(0,s.logger)(`${s.v} ${(0,s.colorize)(`Intlayer init setup complete.`,u.GREEN)}`),(0,s.logger)([(0,s.colorize)(`Next →`,u.MAGENTA),(0,s.colorize)(`Follow the instructions in the documentation to complete the setup:`,u.GREY_LIGHT),(0,s.colorizePath)(h)])};exports.initIntlayer=p;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["ANSIColors","exists","x","readFileFromRoot","writeFileToRoot","v","parseJSONWithComments","ensureDirectory","findTsConfigFiles","initConfig","updateViteConfig","updateNextConfig"],"sources":["../../../src/init/index.ts"],"sourcesContent":["import { join } from 'node:path';\nimport {\n ANSIColors,\n colorize,\n colorizePath,\n logger,\n v,\n x,\n} from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\n\nimport { getAlias } from '@intlayer/config/utils';\nimport { initConfig } from '../initConfig';\nimport {\n ensureDirectory,\n exists,\n findTsConfigFiles,\n parseJSONWithComments,\n readFileFromRoot,\n updateNextConfig,\n updateViteConfig,\n writeFileToRoot,\n} from './utils';\n\n/**\n * Documentation URL Constants\n */\nconst DocumentationRouter = {\n NextJS: 'https://intlayer.org/doc/environment/nextjs.md',\n NextJS_15: 'https://intlayer.org/doc/environment/nextjs/15.md',\n NextJS_14: 'https://intlayer.org/doc/environment/nextjs/14.md',\n CRA: 'https://intlayer.org/doc/environment/create-react-app.md',\n Astro: 'https://intlayer.org/doc/environment/astro.md',\n ViteAndReact: 'https://intlayer.org/doc/environment/vite-and-react.md',\n ViteAndReact_ReactRouterV7:\n 'https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md',\n ViteAndReact_ReactRouterV7_FSRoutes:\n 'https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md',\n ViteAndVue: 'https://intlayer.org/doc/environment/vite-and-vue.md',\n ViteAndSolid: 'https://intlayer.org/doc/environment/vite-and-solid.md',\n ViteAndSvelte: 'https://intlayer.org/doc/environment/vite-and-svelte.md',\n ViteAndPreact: 'https://intlayer.org/doc/environment/vite-and-preact.md',\n TanStackRouter: 'https://intlayer.org/doc/environment/tanstack.md',\n NuxtAndVue: 'https://intlayer.org/doc/environment/nuxt-and-vue.md',\n Angular: 'https://intlayer.org/doc/environment/angular.md',\n SvelteKit: 'https://intlayer.org/doc/environment/sveltekit.md',\n ReactNativeAndExpo:\n 'https://intlayer.org/doc/environment/react-native-and-expo.md',\n Lynx: 'https://intlayer.org/doc/environment/lynx-and-react.md',\n Express: 'https://intlayer.org/doc/environment/express.md',\n NestJS: 'https://intlayer.org/doc/environment/nestjs.md',\n Fastify: 'https://intlayer.org/doc/environment/fastify.md',\n Default: 'https://intlayer.org/doc/get-started',\n\n // Check for competitors libs\n NextIntl: 'https://intlayer.org/blog/intlayer-with-next-intl.md',\n ReactI18Next: 'https://intlayer.org/blog/intlayer-with-react-i18next.md',\n ReactIntl: 'https://intlayer.org/blog/intlayer-with-react-intl.md',\n NextI18Next: 'https://intlayer.org/blog/intlayer-with-next-i18next.md',\n VueI18n: 'https://intlayer.org/blog/intlayer-with-vue-i18n.md',\n};\n\n/**\n * Helper: Detects the environment and returns the doc URL\n */\nconst getDocumentationUrl = (packageJson: any): string => {\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n /**\n * Helper to check if a version string matches a specific major version\n * Matches: \"15\", \"^15.0.0\", \"~15.2\", \"15.0.0-beta\"\n */\n const isVersion = (versionString: string, major: number): boolean => {\n if (!versionString || typeof versionString !== 'string') return false;\n const regex = new RegExp(`^[\\\\^~]?${major}(?:\\\\.|$)`);\n return regex.test(versionString);\n };\n\n // Mobile / Cross-platform\n if (deps['@lynx-js/react'] || deps['@lynx-js/core']) {\n return DocumentationRouter.Lynx;\n }\n if (deps['react-native'] || deps.expo) {\n return DocumentationRouter.ReactNativeAndExpo;\n }\n\n // Meta-frameworks (Next, Nuxt, Astro, SvelteKit)\n if (deps.next) {\n const version = deps.next;\n\n if (isVersion(version, 14)) {\n return DocumentationRouter.NextJS_14;\n }\n\n if (isVersion(version, 15)) {\n return DocumentationRouter.NextJS_15;\n }\n\n return DocumentationRouter.NextJS;\n }\n\n if (deps.nuxt) return DocumentationRouter.NuxtAndVue;\n if (deps.astro) return DocumentationRouter.Astro;\n if (deps['@sveltejs/kit']) return DocumentationRouter.SvelteKit;\n\n // Routers (TanStack & React Router v7)\n if (deps['@tanstack/react-router']) {\n return DocumentationRouter.TanStackRouter;\n }\n\n // Check for React Router v7\n const reactRouterVersion = deps['react-router'];\n if (reactRouterVersion && typeof reactRouterVersion === 'string') {\n // Distinguish between standard v7 and v7 with FS routes\n if (deps['@react-router/fs-routes']) {\n return DocumentationRouter.ViteAndReact_ReactRouterV7_FSRoutes;\n }\n\n // Use Regex to ensure it is v7\n if (isVersion(reactRouterVersion, 7)) {\n return DocumentationRouter.ViteAndReact_ReactRouterV7;\n }\n }\n\n // Vite Ecosystem (General)\n if (deps.vite) {\n if (deps.vue) return DocumentationRouter.ViteAndVue;\n if (deps['solid-js']) return DocumentationRouter.ViteAndSolid;\n if (deps.svelte) return DocumentationRouter.ViteAndSvelte;\n if (deps.preact) return DocumentationRouter.ViteAndPreact;\n\n // Default to React if Vite is present but specific other frameworks aren't found\n return DocumentationRouter.ViteAndReact;\n }\n\n // Other Web Frameworks\n if (deps['react-scripts']) return DocumentationRouter.CRA;\n if (deps['@angular/core']) return DocumentationRouter.Angular;\n\n // Backend\n if (deps['@nestjs/core']) return DocumentationRouter.NestJS;\n if (deps.express) return DocumentationRouter.Express;\n if (deps.fastify) return DocumentationRouter.Fastify;\n\n // Competitor Libs (Migration Guides)\n // We check these last as specific environment setup is usually higher priority,\n // but if no specific framework logic matched (or as a fallback), we guide to migration.\n if (deps['next-intl']) return DocumentationRouter.NextIntl;\n if (deps['react-i18next'] || deps.i18next)\n return DocumentationRouter.ReactI18Next;\n if (deps['react-intl']) return DocumentationRouter.ReactIntl;\n if (deps['next-i18next']) return DocumentationRouter.NextI18Next;\n if (deps['vue-i18n']) return DocumentationRouter.VueI18n;\n\n return DocumentationRouter.Default;\n};\n\n/**\n * MAIN LOGIC\n */\nexport const initIntlayer = async (rootDir: string) => {\n logger(colorize('Checking Intlayer configuration...', ANSIColors.CYAN));\n\n // READ PACKAGE.JSON\n const packageJsonPath = 'package.json';\n if (!(await exists(rootDir, packageJsonPath))) {\n logger(\n `${x} No ${colorizePath('package.json')} found. Please run this script from the project root.`,\n { level: 'error' }\n );\n process.exit(1);\n }\n\n const packageJsonContent = await readFileFromRoot(rootDir, packageJsonPath);\n let packageJson: Record<string, any>;\n try {\n packageJson = JSON.parse(packageJsonContent);\n } catch {\n logger(`${x} Could not parse ${colorizePath('package.json')}.`, {\n level: 'error',\n });\n process.exit(1);\n }\n\n // Determine the correct documentation URL based on dependencies\n const guideUrl = getDocumentationUrl(packageJson);\n\n // CHECK .GITIGNORE\n const gitignorePath = '.gitignore';\n if (await exists(rootDir, gitignorePath)) {\n const gitignoreContent = await readFileFromRoot(rootDir, gitignorePath);\n\n if (!gitignoreContent.includes('intlayer')) {\n const newContent = `${gitignoreContent}\\n# Intlayer\\n.intlayer\\n`;\n await writeFileToRoot(rootDir, gitignorePath, newContent);\n logger(\n `${v} Added ${colorizePath('.intlayer')} to ${colorizePath(gitignorePath)}`\n );\n } else {\n logger(`${v} ${colorizePath(gitignorePath)} already includes .intlayer`);\n }\n }\n\n // CHECK VS CODE EXTENSION RECOMMENDATIONS\n const vscodeDir = '.vscode';\n const extensionsJsonPath = join(vscodeDir, 'extensions.json');\n const extensionId = 'intlayer.intlayer-vs-code-extension';\n\n try {\n let extensionsConfig: { recommendations: string[] } = {\n recommendations: [],\n };\n\n if (await exists(rootDir, extensionsJsonPath)) {\n const content = await readFileFromRoot(rootDir, extensionsJsonPath);\n extensionsConfig = parseJSONWithComments(content);\n } else {\n await ensureDirectory(rootDir, vscodeDir);\n }\n\n if (!extensionsConfig.recommendations) {\n extensionsConfig.recommendations = [];\n }\n\n if (!extensionsConfig.recommendations.includes(extensionId)) {\n extensionsConfig.recommendations.push(extensionId);\n await writeFileToRoot(\n rootDir,\n extensionsJsonPath,\n JSON.stringify(extensionsConfig, null, 2)\n );\n logger(\n `${v} Added ${colorize(extensionId, ANSIColors.MAGENTA)} to ${colorizePath(extensionsJsonPath)}`\n );\n } else {\n logger(\n `${v} ${colorizePath(extensionsJsonPath)} already includes ${colorize(extensionId, ANSIColors.MAGENTA)}`\n );\n }\n } catch {\n logger(\n `${x} Could not update ${colorizePath(extensionsJsonPath)}. You may need to add ${colorize(extensionId, ANSIColors.MAGENTA)} manually.`,\n { level: 'warn' }\n );\n }\n\n // CHECK TSCONFIGS\n const tsConfigFiles = await findTsConfigFiles(rootDir);\n let hasTsConfig = false;\n\n for (const fileName of tsConfigFiles) {\n if (await exists(rootDir, fileName)) {\n hasTsConfig = true;\n try {\n const fileContent = await readFileFromRoot(rootDir, fileName);\n const config = parseJSONWithComments(fileContent);\n const typeDefinition = '.intlayer/**/*.ts';\n\n let updated = false;\n\n if (!config.include) {\n // Skip if no include array (solution-style)\n } else if (\n Array.isArray(config.include) &&\n !(config.include as string[]).some((pattern: string) =>\n pattern.includes('.intlayer')\n )\n ) {\n config.include.push(typeDefinition);\n updated = true;\n } else if (config.include.includes(typeDefinition)) {\n logger(\n `${v} ${colorizePath(fileName)} already includes intlayer types`\n );\n }\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n fileName,\n JSON.stringify(config, null, 2)\n );\n logger(\n `${v} Updated ${colorizePath(fileName)} to include intlayer types`\n );\n }\n } catch {\n logger(\n `${x} Could not parse or update ${colorizePath(fileName)}. You may need to add ${colorizePath('.intlayer/types/**/*.ts')} manually.`,\n { level: 'warn' }\n );\n }\n }\n }\n\n // INITIALIZE CONFIG FILE\n const format = hasTsConfig ? 'intlayer.config.ts' : 'intlayer.config.mjs';\n await initConfig(format, rootDir);\n\n let hasAliasConfiguration = false;\n\n // CHECK VITE CONFIG\n const viteConfigs = ['vite.config.ts', 'vite.config.js', 'vite.config.mjs'];\n\n for (const file of viteConfigs) {\n if (await exists(rootDir, file)) {\n hasAliasConfiguration = true;\n const content = await readFileFromRoot(rootDir, file);\n\n if (!content.includes('vite-intlayer')) {\n const extension = file.split('.').pop()!;\n const updatedContent = updateViteConfig(content, extension);\n await writeFileToRoot(rootDir, file, updatedContent);\n logger(`${v} Updated ${colorizePath(file)} to include Intlayer plugin`);\n }\n break;\n }\n }\n\n // CHECK NEXT CONFIG\n const nextConfigs = ['next.config.js', 'next.config.mjs', 'next.config.ts'];\n let isNextJsProject = false;\n\n for (const file of nextConfigs) {\n if (await exists(rootDir, file)) {\n isNextJsProject = true;\n hasAliasConfiguration = true;\n const content = await readFileFromRoot(rootDir, file);\n\n if (!content.includes('next-intlayer')) {\n const extension = file.split('.').pop()!;\n const updatedContent = updateNextConfig(content, extension);\n await writeFileToRoot(rootDir, file, updatedContent);\n logger(`${v} Updated ${colorizePath(file)} to include Intlayer plugin`);\n }\n break;\n }\n }\n\n // UPDATE PACKAGE.JSON DEV SCRIPT FOR NEXT.JS >= 16\n if (isNextJsProject) {\n const nextVersion =\n packageJson.dependencies?.next || packageJson.devDependencies?.next;\n\n const isVersionGreaterOrEqual = (\n versionString: string,\n major: number\n ): boolean => {\n if (!versionString || typeof versionString !== 'string') return false;\n const match = versionString.match(/^[^\\d]*(\\d+)/);\n\n if (!match) return false;\n const majorVersion = parseInt(match[1], 10);\n return majorVersion >= major;\n };\n\n if (nextVersion && isVersionGreaterOrEqual(nextVersion, 16)) {\n const devScript = packageJson.scripts?.dev;\n const expectedScript = \"intlayer watch --with 'bun run --bun next dev'\";\n\n if (\n devScript &&\n devScript !== expectedScript &&\n devScript.includes('next dev')\n ) {\n packageJson.scripts.dev = expectedScript;\n\n await writeFileToRoot(\n rootDir,\n packageJsonPath,\n JSON.stringify(packageJson, null, 2)\n );\n\n logger(\n `${v} Updated ${colorizePath('package.json')} dev script for Next.js >= 16`\n );\n }\n }\n }\n\n // CHECK WEBPACK CONFIG\n const webpackConfigs = [\n 'webpack.config.js',\n 'webpack.config.ts',\n 'webpack.config.mjs',\n 'webpack.config.cjs',\n ];\n\n for (const file of webpackConfigs) {\n if (await exists(rootDir, file)) {\n hasAliasConfiguration = true;\n logger(\n `${v} Found ${colorizePath(\n file\n )}. Make sure to configure aliases manually or use the Intlayer Webpack plugin.`\n );\n break;\n }\n }\n\n if (!hasAliasConfiguration) {\n const configuration = getConfiguration({ baseDir: rootDir });\n const aliases = getAlias({ configuration });\n\n if (hasTsConfig && tsConfigFiles.length > 0) {\n const tsConfigPath =\n tsConfigFiles.find((f) => f === 'tsconfig.json') || tsConfigFiles[0];\n const tsConfigContent = await readFileFromRoot(rootDir, tsConfigPath);\n const config = parseJSONWithComments(tsConfigContent);\n\n config.compilerOptions ??= {};\n config.compilerOptions.paths ??= {};\n\n let updated = false;\n\n Object.entries(aliases).forEach(([alias, path]) => {\n if (!config.compilerOptions.paths[alias]) {\n config.compilerOptions.paths[alias] = [path];\n updated = true;\n }\n });\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n tsConfigPath,\n JSON.stringify(config, null, 2)\n );\n\n logger(\n `${v} Updated ${colorizePath(\n tsConfigPath\n )} to include Intlayer aliases`\n );\n }\n } else {\n const jsConfigPath = 'jsconfig.json';\n\n if (await exists(rootDir, jsConfigPath)) {\n const jsConfigContent = await readFileFromRoot(rootDir, jsConfigPath);\n const config = parseJSONWithComments(jsConfigContent);\n\n config.compilerOptions ??= {};\n config.compilerOptions.paths ??= {};\n\n let updated = false;\n\n Object.entries(aliases).forEach(([alias, path]) => {\n if (!config.compilerOptions.paths[alias]) {\n config.compilerOptions.paths[alias] = [path];\n updated = true;\n }\n });\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n jsConfigPath,\n JSON.stringify(config, null, 2)\n );\n logger(\n `${v} Updated ${colorizePath(\n jsConfigPath\n )} to include Intlayer aliases`\n );\n }\n } else {\n packageJson.imports ??= {};\n\n let updated = false;\n\n Object.entries(aliases).forEach(([alias, path]) => {\n const importAlias = alias.replace('@', '#');\n const importPath = path.startsWith('.') ? path : `./${path}`;\n\n if (!packageJson.imports[importAlias]) {\n packageJson.imports[importAlias] = importPath;\n updated = true;\n }\n });\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n packageJsonPath,\n JSON.stringify(packageJson, null, 2)\n );\n logger(\n `${v} Updated ${colorizePath(\n packageJsonPath\n )} to include Intlayer imports`\n );\n }\n }\n }\n }\n\n // FINAL SUCCESS MESSAGE\n logger(`${v} ${colorize('Intlayer init setup complete.', ANSIColors.GREEN)}`);\n logger([\n colorize('Next →', ANSIColors.MAGENTA),\n colorize(\n `Follow the instructions in the documentation to complete the setup:`,\n ANSIColors.GREY_LIGHT\n ),\n colorizePath(guideUrl),\n ]);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["ANSIColors","exists","x","readFileFromRoot","writeFileToRoot","v","parseJSONWithComments","ensureDirectory","findTsConfigFiles","initConfig","updateViteConfig","updateNextConfig"],"sources":["../../../src/init/index.ts"],"sourcesContent":["import { join } from 'node:path';\nimport * as ANSIColors from '@intlayer/config/colors';\nimport { colorize, colorizePath, logger, v, x } from '@intlayer/config/logger';\nimport { getConfiguration } from '@intlayer/config/node';\n\nimport { getAlias } from '@intlayer/config/utils';\nimport { initConfig } from '../initConfig';\nimport {\n ensureDirectory,\n exists,\n findTsConfigFiles,\n parseJSONWithComments,\n readFileFromRoot,\n updateNextConfig,\n updateViteConfig,\n writeFileToRoot,\n} from './utils';\n\n/**\n * Documentation URL Constants\n */\nconst DocumentationRouter = {\n NextJS: 'https://intlayer.org/doc/environment/nextjs.md',\n NextJS_15: 'https://intlayer.org/doc/environment/nextjs/15.md',\n NextJS_14: 'https://intlayer.org/doc/environment/nextjs/14.md',\n CRA: 'https://intlayer.org/doc/environment/create-react-app.md',\n Astro: 'https://intlayer.org/doc/environment/astro.md',\n ViteAndReact: 'https://intlayer.org/doc/environment/vite-and-react.md',\n ViteAndReact_ReactRouterV7:\n 'https://intlayer.org/doc/environment/vite-and-react/react-router-v7.md',\n ViteAndReact_ReactRouterV7_FSRoutes:\n 'https://intlayer.org/doc/environment/vite-and-react/react-router-v7-fs-routes.md',\n ViteAndVue: 'https://intlayer.org/doc/environment/vite-and-vue.md',\n ViteAndSolid: 'https://intlayer.org/doc/environment/vite-and-solid.md',\n ViteAndSvelte: 'https://intlayer.org/doc/environment/vite-and-svelte.md',\n ViteAndPreact: 'https://intlayer.org/doc/environment/vite-and-preact.md',\n TanStackRouter: 'https://intlayer.org/doc/environment/tanstack.md',\n NuxtAndVue: 'https://intlayer.org/doc/environment/nuxt-and-vue.md',\n Angular: 'https://intlayer.org/doc/environment/angular.md',\n SvelteKit: 'https://intlayer.org/doc/environment/sveltekit.md',\n ReactNativeAndExpo:\n 'https://intlayer.org/doc/environment/react-native-and-expo.md',\n Lynx: 'https://intlayer.org/doc/environment/lynx-and-react.md',\n Express: 'https://intlayer.org/doc/environment/express.md',\n NestJS: 'https://intlayer.org/doc/environment/nestjs.md',\n Fastify: 'https://intlayer.org/doc/environment/fastify.md',\n Default: 'https://intlayer.org/doc/get-started',\n\n // Check for competitors libs\n NextIntl: 'https://intlayer.org/blog/intlayer-with-next-intl.md',\n ReactI18Next: 'https://intlayer.org/blog/intlayer-with-react-i18next.md',\n ReactIntl: 'https://intlayer.org/blog/intlayer-with-react-intl.md',\n NextI18Next: 'https://intlayer.org/blog/intlayer-with-next-i18next.md',\n VueI18n: 'https://intlayer.org/blog/intlayer-with-vue-i18n.md',\n};\n\n/**\n * Helper: Detects the environment and returns the doc URL\n */\nconst getDocumentationUrl = (packageJson: any): string => {\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n /**\n * Helper to check if a version string matches a specific major version\n * Matches: \"15\", \"^15.0.0\", \"~15.2\", \"15.0.0-beta\"\n */\n const isVersion = (versionString: string, major: number): boolean => {\n if (!versionString || typeof versionString !== 'string') return false;\n const regex = new RegExp(`^[\\\\^~]?${major}(?:\\\\.|$)`);\n return regex.test(versionString);\n };\n\n // Mobile / Cross-platform\n if (deps['@lynx-js/react'] || deps['@lynx-js/core']) {\n return DocumentationRouter.Lynx;\n }\n if (deps['react-native'] || deps.expo) {\n return DocumentationRouter.ReactNativeAndExpo;\n }\n\n // Meta-frameworks (Next, Nuxt, Astro, SvelteKit)\n if (deps.next) {\n const version = deps.next;\n\n if (isVersion(version, 14)) {\n return DocumentationRouter.NextJS_14;\n }\n\n if (isVersion(version, 15)) {\n return DocumentationRouter.NextJS_15;\n }\n\n return DocumentationRouter.NextJS;\n }\n\n if (deps.nuxt) return DocumentationRouter.NuxtAndVue;\n if (deps.astro) return DocumentationRouter.Astro;\n if (deps['@sveltejs/kit']) return DocumentationRouter.SvelteKit;\n\n // Routers (TanStack & React Router v7)\n if (deps['@tanstack/react-router']) {\n return DocumentationRouter.TanStackRouter;\n }\n\n // Check for React Router v7\n const reactRouterVersion = deps['react-router'];\n if (reactRouterVersion && typeof reactRouterVersion === 'string') {\n // Distinguish between standard v7 and v7 with FS routes\n if (deps['@react-router/fs-routes']) {\n return DocumentationRouter.ViteAndReact_ReactRouterV7_FSRoutes;\n }\n\n // Use Regex to ensure it is v7\n if (isVersion(reactRouterVersion, 7)) {\n return DocumentationRouter.ViteAndReact_ReactRouterV7;\n }\n }\n\n // Vite Ecosystem (General)\n if (deps.vite) {\n if (deps.vue) return DocumentationRouter.ViteAndVue;\n if (deps['solid-js']) return DocumentationRouter.ViteAndSolid;\n if (deps.svelte) return DocumentationRouter.ViteAndSvelte;\n if (deps.preact) return DocumentationRouter.ViteAndPreact;\n\n // Default to React if Vite is present but specific other frameworks aren't found\n return DocumentationRouter.ViteAndReact;\n }\n\n // Other Web Frameworks\n if (deps['react-scripts']) return DocumentationRouter.CRA;\n if (deps['@angular/core']) return DocumentationRouter.Angular;\n\n // Backend\n if (deps['@nestjs/core']) return DocumentationRouter.NestJS;\n if (deps.express) return DocumentationRouter.Express;\n if (deps.fastify) return DocumentationRouter.Fastify;\n\n // Competitor Libs (Migration Guides)\n // We check these last as specific environment setup is usually higher priority,\n // but if no specific framework logic matched (or as a fallback), we guide to migration.\n if (deps['next-intl']) return DocumentationRouter.NextIntl;\n if (deps['react-i18next'] || deps.i18next)\n return DocumentationRouter.ReactI18Next;\n if (deps['react-intl']) return DocumentationRouter.ReactIntl;\n if (deps['next-i18next']) return DocumentationRouter.NextI18Next;\n if (deps['vue-i18n']) return DocumentationRouter.VueI18n;\n\n return DocumentationRouter.Default;\n};\n\n/**\n * MAIN LOGIC\n */\nexport const initIntlayer = async (rootDir: string) => {\n logger(colorize('Checking Intlayer configuration...', ANSIColors.CYAN));\n\n // READ PACKAGE.JSON\n const packageJsonPath = 'package.json';\n if (!(await exists(rootDir, packageJsonPath))) {\n logger(\n `${x} No ${colorizePath('package.json')} found. Please run this script from the project root.`,\n { level: 'error' }\n );\n process.exit(1);\n }\n\n const packageJsonContent = await readFileFromRoot(rootDir, packageJsonPath);\n let packageJson: Record<string, any>;\n try {\n packageJson = JSON.parse(packageJsonContent);\n } catch {\n logger(`${x} Could not parse ${colorizePath('package.json')}.`, {\n level: 'error',\n });\n process.exit(1);\n }\n\n // Determine the correct documentation URL based on dependencies\n const guideUrl = getDocumentationUrl(packageJson);\n\n // CHECK .GITIGNORE\n const gitignorePath = '.gitignore';\n if (await exists(rootDir, gitignorePath)) {\n const gitignoreContent = await readFileFromRoot(rootDir, gitignorePath);\n\n if (!gitignoreContent.includes('intlayer')) {\n const newContent = `${gitignoreContent}\\n# Intlayer\\n.intlayer\\n`;\n await writeFileToRoot(rootDir, gitignorePath, newContent);\n logger(\n `${v} Added ${colorizePath('.intlayer')} to ${colorizePath(gitignorePath)}`\n );\n } else {\n logger(`${v} ${colorizePath(gitignorePath)} already includes .intlayer`);\n }\n }\n\n // CHECK VS CODE EXTENSION RECOMMENDATIONS\n const vscodeDir = '.vscode';\n const extensionsJsonPath = join(vscodeDir, 'extensions.json');\n const extensionId = 'intlayer.intlayer-vs-code-extension';\n\n try {\n let extensionsConfig: { recommendations: string[] } = {\n recommendations: [],\n };\n\n if (await exists(rootDir, extensionsJsonPath)) {\n const content = await readFileFromRoot(rootDir, extensionsJsonPath);\n extensionsConfig = parseJSONWithComments(content);\n } else {\n await ensureDirectory(rootDir, vscodeDir);\n }\n\n if (!extensionsConfig.recommendations) {\n extensionsConfig.recommendations = [];\n }\n\n if (!extensionsConfig.recommendations.includes(extensionId)) {\n extensionsConfig.recommendations.push(extensionId);\n await writeFileToRoot(\n rootDir,\n extensionsJsonPath,\n JSON.stringify(extensionsConfig, null, 2)\n );\n logger(\n `${v} Added ${colorize(extensionId, ANSIColors.MAGENTA)} to ${colorizePath(extensionsJsonPath)}`\n );\n } else {\n logger(\n `${v} ${colorizePath(extensionsJsonPath)} already includes ${colorize(extensionId, ANSIColors.MAGENTA)}`\n );\n }\n } catch {\n logger(\n `${x} Could not update ${colorizePath(extensionsJsonPath)}. You may need to add ${colorize(extensionId, ANSIColors.MAGENTA)} manually.`,\n { level: 'warn' }\n );\n }\n\n // CHECK TSCONFIGS\n const tsConfigFiles = await findTsConfigFiles(rootDir);\n let hasTsConfig = false;\n\n for (const fileName of tsConfigFiles) {\n if (await exists(rootDir, fileName)) {\n hasTsConfig = true;\n try {\n const fileContent = await readFileFromRoot(rootDir, fileName);\n const config = parseJSONWithComments(fileContent);\n const typeDefinition = '.intlayer/**/*.ts';\n\n let updated = false;\n\n if (!config.include) {\n // Skip if no include array (solution-style)\n } else if (\n Array.isArray(config.include) &&\n !(config.include as string[]).some((pattern: string) =>\n pattern.includes('.intlayer')\n )\n ) {\n config.include.push(typeDefinition);\n updated = true;\n } else if (config.include.includes(typeDefinition)) {\n logger(\n `${v} ${colorizePath(fileName)} already includes intlayer types`\n );\n }\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n fileName,\n JSON.stringify(config, null, 2)\n );\n logger(\n `${v} Updated ${colorizePath(fileName)} to include intlayer types`\n );\n }\n } catch {\n logger(\n `${x} Could not parse or update ${colorizePath(fileName)}. You may need to add ${colorizePath('.intlayer/types/**/*.ts')} manually.`,\n { level: 'warn' }\n );\n }\n }\n }\n\n // INITIALIZE CONFIG FILE\n const format = hasTsConfig ? 'intlayer.config.ts' : 'intlayer.config.mjs';\n await initConfig(format, rootDir);\n\n let hasAliasConfiguration = false;\n\n // CHECK VITE CONFIG\n const viteConfigs = ['vite.config.ts', 'vite.config.js', 'vite.config.mjs'];\n\n for (const file of viteConfigs) {\n if (await exists(rootDir, file)) {\n hasAliasConfiguration = true;\n const content = await readFileFromRoot(rootDir, file);\n\n if (!content.includes('vite-intlayer')) {\n const extension = file.split('.').pop()!;\n const updatedContent = updateViteConfig(content, extension);\n await writeFileToRoot(rootDir, file, updatedContent);\n logger(`${v} Updated ${colorizePath(file)} to include Intlayer plugin`);\n }\n break;\n }\n }\n\n // CHECK NEXT CONFIG\n const nextConfigs = ['next.config.js', 'next.config.mjs', 'next.config.ts'];\n let isNextJsProject = false;\n\n for (const file of nextConfigs) {\n if (await exists(rootDir, file)) {\n isNextJsProject = true;\n hasAliasConfiguration = true;\n const content = await readFileFromRoot(rootDir, file);\n\n if (!content.includes('next-intlayer')) {\n const extension = file.split('.').pop()!;\n const updatedContent = updateNextConfig(content, extension);\n await writeFileToRoot(rootDir, file, updatedContent);\n logger(`${v} Updated ${colorizePath(file)} to include Intlayer plugin`);\n }\n break;\n }\n }\n\n // UPDATE PACKAGE.JSON DEV SCRIPT FOR NEXT.JS >= 16\n if (isNextJsProject) {\n const nextVersion =\n packageJson.dependencies?.next || packageJson.devDependencies?.next;\n\n const isVersionGreaterOrEqual = (\n versionString: string,\n major: number\n ): boolean => {\n if (!versionString || typeof versionString !== 'string') return false;\n const match = versionString.match(/^[^\\d]*(\\d+)/);\n\n if (!match) return false;\n const majorVersion = parseInt(match[1], 10);\n return majorVersion >= major;\n };\n\n if (nextVersion && isVersionGreaterOrEqual(nextVersion, 16)) {\n const devScript = packageJson.scripts?.dev;\n const expectedScript = \"intlayer watch --with 'bun run --bun next dev'\";\n\n if (\n devScript &&\n devScript !== expectedScript &&\n devScript.includes('next dev')\n ) {\n packageJson.scripts.dev = expectedScript;\n\n await writeFileToRoot(\n rootDir,\n packageJsonPath,\n JSON.stringify(packageJson, null, 2)\n );\n\n logger(\n `${v} Updated ${colorizePath('package.json')} dev script for Next.js >= 16`\n );\n }\n }\n }\n\n // CHECK WEBPACK CONFIG\n const webpackConfigs = [\n 'webpack.config.js',\n 'webpack.config.ts',\n 'webpack.config.mjs',\n 'webpack.config.cjs',\n ];\n\n for (const file of webpackConfigs) {\n if (await exists(rootDir, file)) {\n hasAliasConfiguration = true;\n logger(\n `${v} Found ${colorizePath(\n file\n )}. Make sure to configure aliases manually or use the Intlayer Webpack plugin.`\n );\n break;\n }\n }\n\n if (!hasAliasConfiguration) {\n const configuration = getConfiguration({ baseDir: rootDir });\n const aliases = getAlias({ configuration });\n\n if (hasTsConfig && tsConfigFiles.length > 0) {\n const tsConfigPath =\n tsConfigFiles.find((f) => f === 'tsconfig.json') || tsConfigFiles[0];\n const tsConfigContent = await readFileFromRoot(rootDir, tsConfigPath);\n const config = parseJSONWithComments(tsConfigContent);\n\n config.compilerOptions ??= {};\n config.compilerOptions.paths ??= {};\n\n let updated = false;\n\n Object.entries(aliases).forEach(([alias, path]) => {\n if (!config.compilerOptions.paths[alias]) {\n config.compilerOptions.paths[alias] = [path];\n updated = true;\n }\n });\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n tsConfigPath,\n JSON.stringify(config, null, 2)\n );\n\n logger(\n `${v} Updated ${colorizePath(\n tsConfigPath\n )} to include Intlayer aliases`\n );\n }\n } else {\n const jsConfigPath = 'jsconfig.json';\n\n if (await exists(rootDir, jsConfigPath)) {\n const jsConfigContent = await readFileFromRoot(rootDir, jsConfigPath);\n const config = parseJSONWithComments(jsConfigContent);\n\n config.compilerOptions ??= {};\n config.compilerOptions.paths ??= {};\n\n let updated = false;\n\n Object.entries(aliases).forEach(([alias, path]) => {\n if (!config.compilerOptions.paths[alias]) {\n config.compilerOptions.paths[alias] = [path];\n updated = true;\n }\n });\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n jsConfigPath,\n JSON.stringify(config, null, 2)\n );\n logger(\n `${v} Updated ${colorizePath(\n jsConfigPath\n )} to include Intlayer aliases`\n );\n }\n } else {\n packageJson.imports ??= {};\n\n let updated = false;\n\n Object.entries(aliases).forEach(([alias, path]) => {\n const importAlias = alias.replace('@', '#');\n const importPath = path.startsWith('.') ? path : `./${path}`;\n\n if (!packageJson.imports[importAlias]) {\n packageJson.imports[importAlias] = importPath;\n updated = true;\n }\n });\n\n if (updated) {\n await writeFileToRoot(\n rootDir,\n packageJsonPath,\n JSON.stringify(packageJson, null, 2)\n );\n logger(\n `${v} Updated ${colorizePath(\n packageJsonPath\n )} to include Intlayer imports`\n );\n }\n }\n }\n }\n\n // FINAL SUCCESS MESSAGE\n logger(`${v} ${colorize('Intlayer init setup complete.', ANSIColors.GREEN)}`);\n logger([\n colorize('Next →', ANSIColors.MAGENTA),\n colorize(\n `Follow the instructions in the documentation to complete the setup:`,\n ANSIColors.GREY_LIGHT\n ),\n colorizePath(guideUrl),\n ]);\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../chunk-Bmb41Sf3.cjs`);const e=require(`../filterInvalidDictionaries.cjs`),t=require(`./loadContentDeclaration.cjs`),n=require(`../formatDictionary.cjs`),r=require(`./loadRemoteDictionaries.cjs`),i=require(`./log.cjs`);let a=require(`@intlayer/config/logger`),o=[];const s=new i.DictionariesLogger,c=e=>{let t=[...o];for(let n of e){let e=t.findIndex(e=>e.dictionaryKey===n.dictionaryKey&&e.type===n.type);e>=0?t[e]=n:t.push(n)}return o=t,s.update(e),t},l=e=>{switch(e){case`built`:case`imported`:case`fetched`:return`✔`;case`error`:return`✖`;default:return`⏲`}},u=e=>{switch(e){case`built`:case`imported`:case`fetched`:return a.ANSIColors.GREEN;case`error`:return a.ANSIColors.RED;default:return a.ANSIColors.BLUE}},d=e=>{if(e.log.mode!==`verbose`)return;let t=(0,a.getAppLogger)(e),n=new Map;for(let e of o){let t=n.get(e.dictionaryKey)??{};e.type===`local`&&(t.local=e.status),e.type===`remote`&&(t.remote=e.status),n.set(e.dictionaryKey,t)}let r=Array.from(n.keys()).sort((e,t)=>e.localeCompare(t)),i=0;for(let e of r){let t=n.get(e);if(t.local){let e=`[local: ${l(t.local)} ${t.local}]`;e.length>i&&(i=e.length)}}for(let e of r){let o=n.get(e),s=[];if(o.local){let e=(0,a.colorize)(`${l(o.local)} ${o.local}`,u(o.local)),t=`${a.ANSIColors.GREY}[`+(0,a.colorize)(`local: `,a.ANSIColors.GREY)+e+`${a.ANSIColors.GREY}]${a.ANSIColors.RESET}`,n=`[local: ${l(o.local)} ${o.local}]`,r=Math.max(0,i-n.length);s.push(t+` `.repeat(r))}else s.push(` `.repeat(i));if(o.remote){let e=(0,a.colorize)(`${l(o.remote)} ${o.remote}`,u(o.remote));s.push(`${a.ANSIColors.GREY}[`+(0,a.colorize)(`distant: `,a.ANSIColors.GREY)+e+`${a.ANSIColors.GREY}]${a.ANSIColors.RESET}`)}t(` - ${(0,a.colon)((0,a.colorizeKey)(e),{colSize:r})} ${s.join(` `)}`)}},f=async(i,o)=>{let{plugins:l}=o,u=Date.now();(0,a.getAppLogger)(o)(`Dictionaries:`,{isVerbose:!0});let f=(await Promise.all(l??[])).filter(e=>e.loadDictionaries).map(async e=>{try{return await e.loadDictionaries?.({configuration:o})??[]}catch(e){return s.setPluginError(e),[]}}),p=await Promise.all(f).then(e=>e.flat()).then(t=>e.filterInvalidDictionaries(t,o)).then(e=>n.formatDictionaries(e));s.setPluginTotal(p.length),s.setPluginDone(p.length);let m=Date.now(),h=await t.loadContentDeclarations(Array.isArray(i)?i:[i],o,c).then(t=>e.filterInvalidDictionaries(t,o)).then(e=>n.formatDictionaries(e)),g=Date.now();c(h.map(e=>({dictionaryKey:e.key,type:`local`,status:`built`})));let _=!!(o.editor.clientId&&o.editor.clientSecret);_&&s.setExpectRemote(!0);let v=[];_&&(v=await r.loadRemoteDictionaries(o,c,{onStartRemoteCheck:()=>s.startRemoteCheck(),onStopRemoteCheck:()=>s.stopRemoteCheck(),onError:e=>s.setRemoteError(e)}).then(t=>e.filterInvalidDictionaries(t,o)).then(e=>n.formatDictionaries(e)));let y=Date.now();return s.finish(),d(o),{localDictionaries:h,remoteDictionaries:v,pluginDictionaries:p,time:{localDictionaries:g-m,remoteDictionaries:y-g,pluginDictionaries:m-u}}};exports.loadDictionaries=f;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../chunk-Bmb41Sf3.cjs`),t=require(`../filterInvalidDictionaries.cjs`),n=require(`./loadContentDeclaration.cjs`),r=require(`../formatDictionary.cjs`),i=require(`./loadRemoteDictionaries.cjs`),a=require(`./log.cjs`);let o=require(`@intlayer/config/logger`),s=require(`@intlayer/config/colors`);s=e.t(s);let c=[];const l=new a.DictionariesLogger,u=e=>{let t=[...c];for(let n of e){let e=t.findIndex(e=>e.dictionaryKey===n.dictionaryKey&&e.type===n.type);e>=0?t[e]=n:t.push(n)}return c=t,l.update(e),t},d=e=>{switch(e){case`built`:case`imported`:case`fetched`:return`✔`;case`error`:return`✖`;default:return`⏲`}},f=e=>{switch(e){case`built`:case`imported`:case`fetched`:return s.GREEN;case`error`:return s.RED;default:return s.BLUE}},p=e=>{if(e.log.mode!==`verbose`)return;let t=(0,o.getAppLogger)(e),n=new Map;for(let e of c){let t=n.get(e.dictionaryKey)??{};e.type===`local`&&(t.local=e.status),e.type===`remote`&&(t.remote=e.status),n.set(e.dictionaryKey,t)}let r=Array.from(n.keys()).sort((e,t)=>e.localeCompare(t)),i=0;for(let e of r){let t=n.get(e);if(t.local){let e=`[local: ${d(t.local)} ${t.local}]`;e.length>i&&(i=e.length)}}for(let e of r){let a=n.get(e),c=[];if(a.local){let e=(0,o.colorize)(`${d(a.local)} ${a.local}`,f(a.local)),t=`${s.GREY}[`+(0,o.colorize)(`local: `,s.GREY)+e+`${s.GREY}]${s.RESET}`,n=`[local: ${d(a.local)} ${a.local}]`,r=Math.max(0,i-n.length);c.push(t+` `.repeat(r))}else c.push(` `.repeat(i));if(a.remote){let e=(0,o.colorize)(`${d(a.remote)} ${a.remote}`,f(a.remote));c.push(`${s.GREY}[`+(0,o.colorize)(`distant: `,s.GREY)+e+`${s.GREY}]${s.RESET}`)}t(` - ${(0,o.colon)((0,o.colorizeKey)(e),{colSize:r})} ${c.join(` `)}`)}},m=async(e,a)=>{let{plugins:s}=a,c=Date.now();(0,o.getAppLogger)(a)(`Dictionaries:`,{isVerbose:!0});let d=(await Promise.all(s??[])).filter(e=>e.loadDictionaries).map(async e=>{try{return await e.loadDictionaries?.({configuration:a})??[]}catch(e){return l.setPluginError(e),[]}}),f=await Promise.all(d).then(e=>e.flat()).then(e=>t.filterInvalidDictionaries(e,a)).then(e=>r.formatDictionaries(e));l.setPluginTotal(f.length),l.setPluginDone(f.length);let m=Date.now(),h=await n.loadContentDeclarations(Array.isArray(e)?e:[e],a,u).then(e=>t.filterInvalidDictionaries(e,a)).then(e=>r.formatDictionaries(e)),g=Date.now();u(h.map(e=>({dictionaryKey:e.key,type:`local`,status:`built`})));let _=!!(a.editor.clientId&&a.editor.clientSecret);_&&l.setExpectRemote(!0);let v=[];_&&(v=await i.loadRemoteDictionaries(a,u,{onStartRemoteCheck:()=>l.startRemoteCheck(),onStopRemoteCheck:()=>l.stopRemoteCheck(),onError:e=>l.setRemoteError(e)}).then(e=>t.filterInvalidDictionaries(e,a)).then(e=>r.formatDictionaries(e)));let y=Date.now();return l.finish(),p(a),{localDictionaries:h,remoteDictionaries:v,pluginDictionaries:f,time:{localDictionaries:g-m,remoteDictionaries:y-g,pluginDictionaries:m-c}}};exports.loadDictionaries=m;
2
2
  //# sourceMappingURL=loadDictionaries.cjs.map