@intlayer/chokidar 8.4.3 → 8.4.5

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 (497) hide show
  1. package/dist/cjs/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/cjs/_virtual/_utils_asset.cjs +98 -0
  3. package/dist/cjs/build.cjs +58 -1
  4. package/dist/cjs/buildIntlayerDictionary/buildIntlayerDictionary.cjs +62 -1
  5. package/dist/cjs/buildIntlayerDictionary/buildIntlayerDictionary.cjs.map +1 -1
  6. package/dist/cjs/buildIntlayerDictionary/index.cjs +6 -1
  7. package/dist/cjs/buildIntlayerDictionary/processContentDeclaration.cjs +26 -1
  8. package/dist/cjs/buildIntlayerDictionary/processContentDeclaration.cjs.map +1 -1
  9. package/dist/cjs/buildIntlayerDictionary/writeDynamicDictionary.cjs +107 -4
  10. package/dist/cjs/buildIntlayerDictionary/writeDynamicDictionary.cjs.map +1 -1
  11. package/dist/cjs/buildIntlayerDictionary/writeFetchDictionary.cjs +81 -5
  12. package/dist/cjs/buildIntlayerDictionary/writeFetchDictionary.cjs.map +1 -1
  13. package/dist/cjs/buildIntlayerDictionary/writeMergedDictionary.cjs +46 -1
  14. package/dist/cjs/buildIntlayerDictionary/writeMergedDictionary.cjs.map +1 -1
  15. package/dist/cjs/buildIntlayerDictionary/writeRemoteDictionary.cjs +50 -1
  16. package/dist/cjs/buildIntlayerDictionary/writeRemoteDictionary.cjs.map +1 -1
  17. package/dist/cjs/buildIntlayerDictionary/writeUnmergedDictionary.cjs +59 -1
  18. package/dist/cjs/buildIntlayerDictionary/writeUnmergedDictionary.cjs.map +1 -1
  19. package/dist/cjs/cleanOutputDir.cjs +30 -1
  20. package/dist/cjs/cleanOutputDir.cjs.map +1 -1
  21. package/dist/cjs/cleanRemovedContentDeclaration.cjs +97 -1
  22. package/dist/cjs/cleanRemovedContentDeclaration.cjs.map +1 -1
  23. package/dist/cjs/cli.cjs +35 -1
  24. package/dist/cjs/createDictionaryEntryPoint/createDictionaryEntryPoint.cjs +70 -1
  25. package/dist/cjs/createDictionaryEntryPoint/createDictionaryEntryPoint.cjs.map +1 -1
  26. package/dist/cjs/createDictionaryEntryPoint/generateDictionaryListContent.cjs +42 -7
  27. package/dist/cjs/createDictionaryEntryPoint/generateDictionaryListContent.cjs.map +1 -1
  28. package/dist/cjs/createDictionaryEntryPoint/getBuiltDictionariesPath.cjs +23 -1
  29. package/dist/cjs/createDictionaryEntryPoint/getBuiltDictionariesPath.cjs.map +1 -1
  30. package/dist/cjs/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.cjs +24 -1
  31. package/dist/cjs/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.cjs.map +1 -1
  32. package/dist/cjs/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.cjs +24 -1
  33. package/dist/cjs/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.cjs.map +1 -1
  34. package/dist/cjs/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.cjs +23 -1
  35. package/dist/cjs/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.cjs.map +1 -1
  36. package/dist/cjs/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.cjs +23 -1
  37. package/dist/cjs/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.cjs.map +1 -1
  38. package/dist/cjs/createDictionaryEntryPoint/index.cjs +16 -1
  39. package/dist/cjs/createType/createModuleAugmentation.cjs +112 -9
  40. package/dist/cjs/createType/createModuleAugmentation.cjs.map +1 -1
  41. package/dist/cjs/createType/createType.cjs +29 -1
  42. package/dist/cjs/createType/createType.cjs.map +1 -1
  43. package/dist/cjs/createType/index.cjs +8 -1
  44. package/dist/cjs/detectFormatCommand.cjs +32 -1
  45. package/dist/cjs/detectFormatCommand.cjs.map +1 -1
  46. package/dist/cjs/fetchDistantDictionaries.cjs +51 -1
  47. package/dist/cjs/fetchDistantDictionaries.cjs.map +1 -1
  48. package/dist/cjs/filterInvalidDictionaries.cjs +52 -1
  49. package/dist/cjs/filterInvalidDictionaries.cjs.map +1 -1
  50. package/dist/cjs/formatDictionary.cjs +49 -1
  51. package/dist/cjs/formatDictionary.cjs.map +1 -1
  52. package/dist/cjs/getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.cjs +61 -7
  53. package/dist/cjs/getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.cjs.map +1 -1
  54. package/dist/cjs/getContentDeclarationFileTemplate/index.cjs +4 -1
  55. package/dist/cjs/handleAdditionalContentDeclarationFile.cjs +34 -1
  56. package/dist/cjs/handleAdditionalContentDeclarationFile.cjs.map +1 -1
  57. package/dist/cjs/handleContentDeclarationFileChange.cjs +49 -1
  58. package/dist/cjs/handleContentDeclarationFileChange.cjs.map +1 -1
  59. package/dist/cjs/handleContentDeclarationFileMoved.cjs +24 -1
  60. package/dist/cjs/handleContentDeclarationFileMoved.cjs.map +1 -1
  61. package/dist/cjs/handleUnlinkedContentDeclarationFile.cjs +37 -1
  62. package/dist/cjs/handleUnlinkedContentDeclarationFile.cjs.map +1 -1
  63. package/dist/cjs/init/index.cjs +284 -1
  64. package/dist/cjs/init/index.cjs.map +1 -1
  65. package/dist/cjs/init/utils/configManipulation.cjs +111 -1
  66. package/dist/cjs/init/utils/configManipulation.cjs.map +1 -1
  67. package/dist/cjs/init/utils/fileSystem.cjs +39 -1
  68. package/dist/cjs/init/utils/fileSystem.cjs.map +1 -1
  69. package/dist/cjs/init/utils/index.cjs +14 -1
  70. package/dist/cjs/init/utils/jsonParser.cjs +42 -3
  71. package/dist/cjs/init/utils/jsonParser.cjs.map +1 -1
  72. package/dist/cjs/init/utils/tsConfig.cjs +18 -1
  73. package/dist/cjs/init/utils/tsConfig.cjs.map +1 -1
  74. package/dist/cjs/initConfig/index.cjs +39 -1
  75. package/dist/cjs/initConfig/index.cjs.map +1 -1
  76. package/dist/cjs/installMCP/installMCP.cjs +50 -1
  77. package/dist/cjs/installMCP/installMCP.cjs.map +1 -1
  78. package/dist/cjs/installSkills/index.cjs +303 -1
  79. package/dist/cjs/installSkills/index.cjs.map +1 -1
  80. package/dist/cjs/listDictionariesPath.cjs +42 -1
  81. package/dist/cjs/listDictionariesPath.cjs.map +1 -1
  82. package/dist/cjs/listGitFiles.cjs +105 -5
  83. package/dist/cjs/listGitFiles.cjs.map +1 -1
  84. package/dist/cjs/listProjects.cjs +47 -1
  85. package/dist/cjs/listProjects.cjs.map +1 -1
  86. package/dist/cjs/loadDictionaries/getIntlayerBundle.cjs +68 -1
  87. package/dist/cjs/loadDictionaries/getIntlayerBundle.cjs.map +1 -1
  88. package/dist/cjs/loadDictionaries/index.cjs +14 -1
  89. package/dist/cjs/loadDictionaries/loadContentDeclaration.cjs +93 -2
  90. package/dist/cjs/loadDictionaries/loadContentDeclaration.cjs.map +1 -1
  91. package/dist/cjs/loadDictionaries/loadDictionaries.cjs +127 -1
  92. package/dist/cjs/loadDictionaries/loadDictionaries.cjs.map +1 -1
  93. package/dist/cjs/loadDictionaries/loadLocalDictionaries.cjs +27 -1
  94. package/dist/cjs/loadDictionaries/loadLocalDictionaries.cjs.map +1 -1
  95. package/dist/cjs/loadDictionaries/loadRemoteDictionaries.cjs +61 -1
  96. package/dist/cjs/loadDictionaries/loadRemoteDictionaries.cjs.map +1 -1
  97. package/dist/cjs/loadDictionaries/log.cjs +138 -3
  98. package/dist/cjs/loadDictionaries/log.cjs.map +1 -1
  99. package/dist/cjs/loadDictionaries/logTypeScriptErrors.cjs +63 -2
  100. package/dist/cjs/loadDictionaries/logTypeScriptErrors.cjs.map +1 -1
  101. package/dist/cjs/logConfigDetails.cjs +39 -2
  102. package/dist/cjs/logConfigDetails.cjs.map +1 -1
  103. package/dist/cjs/prepareIntlayer.cjs +103 -1
  104. package/dist/cjs/prepareIntlayer.cjs.map +1 -1
  105. package/dist/cjs/reduceDictionaryContent/applyMask.cjs +30 -1
  106. package/dist/cjs/reduceDictionaryContent/applyMask.cjs.map +1 -1
  107. package/dist/cjs/reduceDictionaryContent/reduceDictionaryContent.cjs +12 -1
  108. package/dist/cjs/reduceDictionaryContent/reduceDictionaryContent.cjs.map +1 -1
  109. package/dist/cjs/utils/autoDecorateContent.cjs +89 -1
  110. package/dist/cjs/utils/autoDecorateContent.cjs.map +1 -1
  111. package/dist/cjs/utils/buildComponentFilesList.cjs +67 -1
  112. package/dist/cjs/utils/buildComponentFilesList.cjs.map +1 -1
  113. package/dist/cjs/utils/buildFilesList.cjs +83 -1
  114. package/dist/cjs/utils/buildFilesList.cjs.map +1 -1
  115. package/dist/cjs/utils/chunkJSON.cjs +336 -1
  116. package/dist/cjs/utils/chunkJSON.cjs.map +1 -1
  117. package/dist/cjs/utils/formatter.cjs +18 -1
  118. package/dist/cjs/utils/formatter.cjs.map +1 -1
  119. package/dist/cjs/utils/getChunk.cjs +34 -1
  120. package/dist/cjs/utils/getChunk.cjs.map +1 -1
  121. package/dist/cjs/utils/getContentExtension.cjs +29 -1
  122. package/dist/cjs/utils/getContentExtension.cjs.map +1 -1
  123. package/dist/cjs/utils/getFormatFromExtension.cjs +34 -1
  124. package/dist/cjs/utils/getFormatFromExtension.cjs.map +1 -1
  125. package/dist/cjs/utils/getPathHash.cjs +10 -1
  126. package/dist/cjs/utils/getPathHash.cjs.map +1 -1
  127. package/dist/cjs/utils/index.cjs +49 -1
  128. package/dist/cjs/utils/mergeChunks.cjs +28 -1
  129. package/dist/cjs/utils/mergeChunks.cjs.map +1 -1
  130. package/dist/cjs/utils/pLimit.cjs +128 -1
  131. package/dist/cjs/utils/pLimit.cjs.map +1 -1
  132. package/dist/cjs/utils/parallelize.cjs +11 -1
  133. package/dist/cjs/utils/parallelize.cjs.map +1 -1
  134. package/dist/cjs/utils/parallelizeGlobal.cjs +29 -1
  135. package/dist/cjs/utils/parallelizeGlobal.cjs.map +1 -1
  136. package/dist/cjs/utils/reduceObjectFormat.cjs +31 -1
  137. package/dist/cjs/utils/reduceObjectFormat.cjs.map +1 -1
  138. package/dist/cjs/utils/resolveObjectPromises.cjs +21 -1
  139. package/dist/cjs/utils/resolveObjectPromises.cjs.map +1 -1
  140. package/dist/cjs/utils/resolveRelativePath.cjs +21 -1
  141. package/dist/cjs/utils/resolveRelativePath.cjs.map +1 -1
  142. package/dist/cjs/utils/runOnce.cjs +95 -1
  143. package/dist/cjs/utils/runOnce.cjs.map +1 -1
  144. package/dist/cjs/utils/runParallel/bin.cjs +54 -1
  145. package/dist/cjs/utils/runParallel/bin.cjs.map +1 -1
  146. package/dist/cjs/utils/runParallel/bootstrap.cjs +24 -1
  147. package/dist/cjs/utils/runParallel/bootstrap.cjs.map +1 -1
  148. package/dist/cjs/utils/runParallel/index.cjs +115 -1
  149. package/dist/cjs/utils/runParallel/index.cjs.map +1 -1
  150. package/dist/cjs/utils/runParallel/pidTree.cjs +145 -1
  151. package/dist/cjs/utils/runParallel/pidTree.cjs.map +1 -1
  152. package/dist/cjs/utils/runParallel/ps.cjs +49 -1
  153. package/dist/cjs/utils/runParallel/ps.cjs.map +1 -1
  154. package/dist/cjs/utils/runParallel/runTask.cjs +154 -1
  155. package/dist/cjs/utils/runParallel/runTask.cjs.map +1 -1
  156. package/dist/cjs/utils/runParallel/spawnPosix.cjs +59 -1
  157. package/dist/cjs/utils/runParallel/spawnPosix.cjs.map +1 -1
  158. package/dist/cjs/utils/runParallel/spawnWin32.cjs +43 -1
  159. package/dist/cjs/utils/runParallel/spawnWin32.cjs.map +1 -1
  160. package/dist/cjs/utils/runParallel/wmic.cjs +52 -1
  161. package/dist/cjs/utils/runParallel/wmic.cjs.map +1 -1
  162. package/dist/cjs/utils/sortAlphabetically.cjs +7 -1
  163. package/dist/cjs/utils/sortAlphabetically.cjs.map +1 -1
  164. package/dist/cjs/utils/splitTextByLine.cjs +11 -1
  165. package/dist/cjs/utils/splitTextByLine.cjs.map +1 -1
  166. package/dist/cjs/utils/verifyIdenticObjectFormat.cjs +60 -1
  167. package/dist/cjs/utils/verifyIdenticObjectFormat.cjs.map +1 -1
  168. package/dist/cjs/watcher.cjs +120 -1
  169. package/dist/cjs/watcher.cjs.map +1 -1
  170. package/dist/cjs/writeConfiguration/index.cjs +42 -1
  171. package/dist/cjs/writeConfiguration/index.cjs.map +1 -1
  172. package/dist/cjs/writeContentDeclaration/detectExportedComponentName.cjs +28 -1
  173. package/dist/cjs/writeContentDeclaration/detectExportedComponentName.cjs.map +1 -1
  174. package/dist/cjs/writeContentDeclaration/index.cjs +10 -1
  175. package/dist/cjs/writeContentDeclaration/processContentDeclarationContent.cjs +94 -1
  176. package/dist/cjs/writeContentDeclaration/processContentDeclarationContent.cjs.map +1 -1
  177. package/dist/cjs/writeContentDeclaration/transformJSFile.cjs +412 -3
  178. package/dist/cjs/writeContentDeclaration/transformJSFile.cjs.map +1 -1
  179. package/dist/cjs/writeContentDeclaration/transformJSONFile.cjs +127 -2
  180. package/dist/cjs/writeContentDeclaration/transformJSONFile.cjs.map +1 -1
  181. package/dist/cjs/writeContentDeclaration/writeContentDeclaration.cjs +148 -1
  182. package/dist/cjs/writeContentDeclaration/writeContentDeclaration.cjs.map +1 -1
  183. package/dist/cjs/writeContentDeclaration/writeJSFile.cjs +92 -1
  184. package/dist/cjs/writeContentDeclaration/writeJSFile.cjs.map +1 -1
  185. package/dist/cjs/writeFileIfChanged.cjs +50 -1
  186. package/dist/cjs/writeFileIfChanged.cjs.map +1 -1
  187. package/dist/cjs/writeJsonIfChanged.cjs +17 -1
  188. package/dist/cjs/writeJsonIfChanged.cjs.map +1 -1
  189. package/dist/esm/_virtual/_rolldown/runtime.mjs +8 -0
  190. package/dist/esm/_virtual/_utils_asset.mjs +97 -0
  191. package/dist/esm/build.mjs +25 -1
  192. package/dist/esm/buildIntlayerDictionary/buildIntlayerDictionary.mjs +60 -1
  193. package/dist/esm/buildIntlayerDictionary/buildIntlayerDictionary.mjs.map +1 -1
  194. package/dist/esm/buildIntlayerDictionary/index.mjs +4 -1
  195. package/dist/esm/buildIntlayerDictionary/processContentDeclaration.mjs +24 -1
  196. package/dist/esm/buildIntlayerDictionary/processContentDeclaration.mjs.map +1 -1
  197. package/dist/esm/buildIntlayerDictionary/writeDynamicDictionary.mjs +102 -4
  198. package/dist/esm/buildIntlayerDictionary/writeDynamicDictionary.mjs.map +1 -1
  199. package/dist/esm/buildIntlayerDictionary/writeFetchDictionary.mjs +77 -5
  200. package/dist/esm/buildIntlayerDictionary/writeFetchDictionary.mjs.map +1 -1
  201. package/dist/esm/buildIntlayerDictionary/writeMergedDictionary.mjs +44 -1
  202. package/dist/esm/buildIntlayerDictionary/writeMergedDictionary.mjs.map +1 -1
  203. package/dist/esm/buildIntlayerDictionary/writeRemoteDictionary.mjs +48 -1
  204. package/dist/esm/buildIntlayerDictionary/writeRemoteDictionary.mjs.map +1 -1
  205. package/dist/esm/buildIntlayerDictionary/writeUnmergedDictionary.mjs +56 -1
  206. package/dist/esm/buildIntlayerDictionary/writeUnmergedDictionary.mjs.map +1 -1
  207. package/dist/esm/cleanOutputDir.mjs +28 -1
  208. package/dist/esm/cleanOutputDir.mjs.map +1 -1
  209. package/dist/esm/cleanRemovedContentDeclaration.mjs +94 -1
  210. package/dist/esm/cleanRemovedContentDeclaration.mjs.map +1 -1
  211. package/dist/esm/cli.mjs +15 -1
  212. package/dist/esm/createDictionaryEntryPoint/createDictionaryEntryPoint.mjs +68 -1
  213. package/dist/esm/createDictionaryEntryPoint/createDictionaryEntryPoint.mjs.map +1 -1
  214. package/dist/esm/createDictionaryEntryPoint/generateDictionaryListContent.mjs +40 -7
  215. package/dist/esm/createDictionaryEntryPoint/generateDictionaryListContent.mjs.map +1 -1
  216. package/dist/esm/createDictionaryEntryPoint/getBuiltDictionariesPath.mjs +20 -1
  217. package/dist/esm/createDictionaryEntryPoint/getBuiltDictionariesPath.mjs.map +1 -1
  218. package/dist/esm/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.mjs +21 -1
  219. package/dist/esm/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.mjs.map +1 -1
  220. package/dist/esm/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.mjs +21 -1
  221. package/dist/esm/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.mjs.map +1 -1
  222. package/dist/esm/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.mjs +20 -1
  223. package/dist/esm/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.mjs.map +1 -1
  224. package/dist/esm/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.mjs +20 -1
  225. package/dist/esm/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.mjs.map +1 -1
  226. package/dist/esm/createDictionaryEntryPoint/index.mjs +9 -1
  227. package/dist/esm/createType/createModuleAugmentation.mjs +108 -9
  228. package/dist/esm/createType/createModuleAugmentation.mjs.map +1 -1
  229. package/dist/esm/createType/createType.mjs +26 -1
  230. package/dist/esm/createType/createType.mjs.map +1 -1
  231. package/dist/esm/createType/index.mjs +4 -1
  232. package/dist/esm/detectFormatCommand.mjs +30 -1
  233. package/dist/esm/detectFormatCommand.mjs.map +1 -1
  234. package/dist/esm/fetchDistantDictionaries.mjs +49 -1
  235. package/dist/esm/fetchDistantDictionaries.mjs.map +1 -1
  236. package/dist/esm/filterInvalidDictionaries.mjs +48 -1
  237. package/dist/esm/filterInvalidDictionaries.mjs.map +1 -1
  238. package/dist/esm/formatDictionary.mjs +44 -1
  239. package/dist/esm/formatDictionary.mjs.map +1 -1
  240. package/dist/esm/getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.mjs +59 -7
  241. package/dist/esm/getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.mjs.map +1 -1
  242. package/dist/esm/getContentDeclarationFileTemplate/index.mjs +3 -1
  243. package/dist/esm/handleAdditionalContentDeclarationFile.mjs +32 -1
  244. package/dist/esm/handleAdditionalContentDeclarationFile.mjs.map +1 -1
  245. package/dist/esm/handleContentDeclarationFileChange.mjs +47 -1
  246. package/dist/esm/handleContentDeclarationFileChange.mjs.map +1 -1
  247. package/dist/esm/handleContentDeclarationFileMoved.mjs +22 -1
  248. package/dist/esm/handleContentDeclarationFileMoved.mjs.map +1 -1
  249. package/dist/esm/handleUnlinkedContentDeclarationFile.mjs +35 -1
  250. package/dist/esm/handleUnlinkedContentDeclarationFile.mjs.map +1 -1
  251. package/dist/esm/init/index.mjs +281 -1
  252. package/dist/esm/init/index.mjs.map +1 -1
  253. package/dist/esm/init/utils/configManipulation.mjs +108 -1
  254. package/dist/esm/init/utils/configManipulation.mjs.map +1 -1
  255. package/dist/esm/init/utils/fileSystem.mjs +34 -1
  256. package/dist/esm/init/utils/fileSystem.mjs.map +1 -1
  257. package/dist/esm/init/utils/index.mjs +6 -1
  258. package/dist/esm/init/utils/jsonParser.mjs +40 -3
  259. package/dist/esm/init/utils/jsonParser.mjs.map +1 -1
  260. package/dist/esm/init/utils/tsConfig.mjs +16 -1
  261. package/dist/esm/init/utils/tsConfig.mjs.map +1 -1
  262. package/dist/esm/initConfig/index.mjs +37 -1
  263. package/dist/esm/initConfig/index.mjs.map +1 -1
  264. package/dist/esm/installMCP/installMCP.mjs +46 -1
  265. package/dist/esm/installMCP/installMCP.mjs.map +1 -1
  266. package/dist/esm/installSkills/index.mjs +295 -1
  267. package/dist/esm/installSkills/index.mjs.map +1 -1
  268. package/dist/esm/listDictionariesPath.mjs +38 -1
  269. package/dist/esm/listDictionariesPath.mjs.map +1 -1
  270. package/dist/esm/listGitFiles.mjs +100 -5
  271. package/dist/esm/listGitFiles.mjs.map +1 -1
  272. package/dist/esm/listProjects.mjs +43 -1
  273. package/dist/esm/listProjects.mjs.map +1 -1
  274. package/dist/esm/loadDictionaries/getIntlayerBundle.mjs +67 -1
  275. package/dist/esm/loadDictionaries/getIntlayerBundle.mjs.map +1 -1
  276. package/dist/esm/loadDictionaries/index.mjs +6 -1
  277. package/dist/esm/loadDictionaries/loadContentDeclaration.mjs +88 -2
  278. package/dist/esm/loadDictionaries/loadContentDeclaration.mjs.map +1 -1
  279. package/dist/esm/loadDictionaries/loadDictionaries.mjs +124 -1
  280. package/dist/esm/loadDictionaries/loadDictionaries.mjs.map +1 -1
  281. package/dist/esm/loadDictionaries/loadLocalDictionaries.mjs +25 -1
  282. package/dist/esm/loadDictionaries/loadLocalDictionaries.mjs.map +1 -1
  283. package/dist/esm/loadDictionaries/loadRemoteDictionaries.mjs +58 -1
  284. package/dist/esm/loadDictionaries/loadRemoteDictionaries.mjs.map +1 -1
  285. package/dist/esm/loadDictionaries/log.mjs +134 -3
  286. package/dist/esm/loadDictionaries/log.mjs.map +1 -1
  287. package/dist/esm/loadDictionaries/logTypeScriptErrors.mjs +61 -2
  288. package/dist/esm/loadDictionaries/logTypeScriptErrors.mjs.map +1 -1
  289. package/dist/esm/logConfigDetails.mjs +36 -2
  290. package/dist/esm/logConfigDetails.mjs.map +1 -1
  291. package/dist/esm/prepareIntlayer.mjs +99 -1
  292. package/dist/esm/prepareIntlayer.mjs.map +1 -1
  293. package/dist/esm/reduceDictionaryContent/applyMask.mjs +28 -1
  294. package/dist/esm/reduceDictionaryContent/applyMask.mjs.map +1 -1
  295. package/dist/esm/reduceDictionaryContent/reduceDictionaryContent.mjs +10 -1
  296. package/dist/esm/reduceDictionaryContent/reduceDictionaryContent.mjs.map +1 -1
  297. package/dist/esm/utils/autoDecorateContent.mjs +86 -1
  298. package/dist/esm/utils/autoDecorateContent.mjs.map +1 -1
  299. package/dist/esm/utils/buildComponentFilesList.mjs +64 -1
  300. package/dist/esm/utils/buildComponentFilesList.mjs.map +1 -1
  301. package/dist/esm/utils/buildFilesList.mjs +79 -1
  302. package/dist/esm/utils/buildFilesList.mjs.map +1 -1
  303. package/dist/esm/utils/chunkJSON.mjs +333 -1
  304. package/dist/esm/utils/chunkJSON.mjs.map +1 -1
  305. package/dist/esm/utils/formatter.mjs +13 -1
  306. package/dist/esm/utils/formatter.mjs.map +1 -1
  307. package/dist/esm/utils/getChunk.mjs +33 -1
  308. package/dist/esm/utils/getChunk.mjs.map +1 -1
  309. package/dist/esm/utils/getContentExtension.mjs +27 -1
  310. package/dist/esm/utils/getContentExtension.mjs.map +1 -1
  311. package/dist/esm/utils/getFormatFromExtension.mjs +31 -1
  312. package/dist/esm/utils/getFormatFromExtension.mjs.map +1 -1
  313. package/dist/esm/utils/getPathHash.mjs +7 -1
  314. package/dist/esm/utils/getPathHash.mjs.map +1 -1
  315. package/dist/esm/utils/index.mjs +22 -1
  316. package/dist/esm/utils/mergeChunks.mjs +26 -1
  317. package/dist/esm/utils/mergeChunks.mjs.map +1 -1
  318. package/dist/esm/utils/pLimit.mjs +125 -1
  319. package/dist/esm/utils/pLimit.mjs.map +1 -1
  320. package/dist/esm/utils/parallelize.mjs +10 -1
  321. package/dist/esm/utils/parallelize.mjs.map +1 -1
  322. package/dist/esm/utils/parallelizeGlobal.mjs +26 -1
  323. package/dist/esm/utils/parallelizeGlobal.mjs.map +1 -1
  324. package/dist/esm/utils/reduceObjectFormat.mjs +29 -1
  325. package/dist/esm/utils/reduceObjectFormat.mjs.map +1 -1
  326. package/dist/esm/utils/resolveObjectPromises.mjs +19 -1
  327. package/dist/esm/utils/resolveObjectPromises.mjs.map +1 -1
  328. package/dist/esm/utils/resolveRelativePath.mjs +19 -1
  329. package/dist/esm/utils/resolveRelativePath.mjs.map +1 -1
  330. package/dist/esm/utils/runOnce.mjs +92 -1
  331. package/dist/esm/utils/runOnce.mjs.map +1 -1
  332. package/dist/esm/utils/runParallel/bin.mjs +52 -1
  333. package/dist/esm/utils/runParallel/bin.mjs.map +1 -1
  334. package/dist/esm/utils/runParallel/bootstrap.mjs +22 -1
  335. package/dist/esm/utils/runParallel/bootstrap.mjs.map +1 -1
  336. package/dist/esm/utils/runParallel/index.mjs +113 -1
  337. package/dist/esm/utils/runParallel/index.mjs.map +1 -1
  338. package/dist/esm/utils/runParallel/pidTree.mjs +142 -1
  339. package/dist/esm/utils/runParallel/pidTree.mjs.map +1 -1
  340. package/dist/esm/utils/runParallel/ps.mjs +46 -1
  341. package/dist/esm/utils/runParallel/ps.mjs.map +1 -1
  342. package/dist/esm/utils/runParallel/runTask.mjs +152 -1
  343. package/dist/esm/utils/runParallel/runTask.mjs.map +1 -1
  344. package/dist/esm/utils/runParallel/spawnPosix.mjs +57 -1
  345. package/dist/esm/utils/runParallel/spawnPosix.mjs.map +1 -1
  346. package/dist/esm/utils/runParallel/spawnWin32.mjs +41 -1
  347. package/dist/esm/utils/runParallel/spawnWin32.mjs.map +1 -1
  348. package/dist/esm/utils/runParallel/wmic.mjs +49 -1
  349. package/dist/esm/utils/runParallel/wmic.mjs.map +1 -1
  350. package/dist/esm/utils/sortAlphabetically.mjs +5 -1
  351. package/dist/esm/utils/sortAlphabetically.mjs.map +1 -1
  352. package/dist/esm/utils/splitTextByLine.mjs +9 -1
  353. package/dist/esm/utils/splitTextByLine.mjs.map +1 -1
  354. package/dist/esm/utils/verifyIdenticObjectFormat.mjs +58 -1
  355. package/dist/esm/utils/verifyIdenticObjectFormat.mjs.map +1 -1
  356. package/dist/esm/watcher.mjs +117 -1
  357. package/dist/esm/watcher.mjs.map +1 -1
  358. package/dist/esm/writeConfiguration/index.mjs +39 -1
  359. package/dist/esm/writeConfiguration/index.mjs.map +1 -1
  360. package/dist/esm/writeContentDeclaration/detectExportedComponentName.mjs +26 -1
  361. package/dist/esm/writeContentDeclaration/detectExportedComponentName.mjs.map +1 -1
  362. package/dist/esm/writeContentDeclaration/index.mjs +6 -1
  363. package/dist/esm/writeContentDeclaration/processContentDeclarationContent.mjs +91 -1
  364. package/dist/esm/writeContentDeclaration/processContentDeclarationContent.mjs.map +1 -1
  365. package/dist/esm/writeContentDeclaration/transformJSFile.mjs +407 -3
  366. package/dist/esm/writeContentDeclaration/transformJSFile.mjs.map +1 -1
  367. package/dist/esm/writeContentDeclaration/transformJSONFile.mjs +124 -2
  368. package/dist/esm/writeContentDeclaration/transformJSONFile.mjs.map +1 -1
  369. package/dist/esm/writeContentDeclaration/writeContentDeclaration.mjs +146 -1
  370. package/dist/esm/writeContentDeclaration/writeContentDeclaration.mjs.map +1 -1
  371. package/dist/esm/writeContentDeclaration/writeJSFile.mjs +90 -1
  372. package/dist/esm/writeContentDeclaration/writeJSFile.mjs.map +1 -1
  373. package/dist/esm/writeFileIfChanged.mjs +48 -1
  374. package/dist/esm/writeFileIfChanged.mjs.map +1 -1
  375. package/dist/esm/writeJsonIfChanged.mjs +16 -1
  376. package/dist/esm/writeJsonIfChanged.mjs.map +1 -1
  377. package/dist/types/build.d.ts +20 -20
  378. package/dist/types/buildIntlayerDictionary/buildIntlayerDictionary.d.ts +25 -2
  379. package/dist/types/buildIntlayerDictionary/buildIntlayerDictionary.d.ts.map +1 -0
  380. package/dist/types/buildIntlayerDictionary/index.d.ts +2 -2
  381. package/dist/types/buildIntlayerDictionary/processContentDeclaration.d.ts +11 -2
  382. package/dist/types/buildIntlayerDictionary/processContentDeclaration.d.ts.map +1 -0
  383. package/dist/types/buildIntlayerDictionary/writeDynamicDictionary.d.ts +49 -2
  384. package/dist/types/buildIntlayerDictionary/writeDynamicDictionary.d.ts.map +1 -0
  385. package/dist/types/buildIntlayerDictionary/writeFetchDictionary.d.ts +7 -7
  386. package/dist/types/buildIntlayerDictionary/writeFetchDictionary.d.ts.map +1 -1
  387. package/dist/types/buildIntlayerDictionary/writeMergedDictionary.d.ts +30 -2
  388. package/dist/types/buildIntlayerDictionary/writeMergedDictionary.d.ts.map +1 -0
  389. package/dist/types/buildIntlayerDictionary/writeUnmergedDictionary.d.ts +34 -2
  390. package/dist/types/buildIntlayerDictionary/writeUnmergedDictionary.d.ts.map +1 -0
  391. package/dist/types/cli.d.ts +6 -6
  392. package/dist/types/createDictionaryEntryPoint/createDictionaryEntryPoint.d.ts +14 -2
  393. package/dist/types/createDictionaryEntryPoint/createDictionaryEntryPoint.d.ts.map +1 -0
  394. package/dist/types/createDictionaryEntryPoint/generateDictionaryListContent.d.ts +10 -2
  395. package/dist/types/createDictionaryEntryPoint/generateDictionaryListContent.d.ts.map +1 -0
  396. package/dist/types/createDictionaryEntryPoint/getBuiltDictionariesPath.d.ts +10 -2
  397. package/dist/types/createDictionaryEntryPoint/getBuiltDictionariesPath.d.ts.map +1 -0
  398. package/dist/types/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.d.ts +10 -2
  399. package/dist/types/createDictionaryEntryPoint/getBuiltDynamicDictionariesPath.d.ts.map +1 -0
  400. package/dist/types/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.d.ts +10 -2
  401. package/dist/types/createDictionaryEntryPoint/getBuiltFetchDictionariesPath.d.ts.map +1 -0
  402. package/dist/types/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.d.ts +10 -2
  403. package/dist/types/createDictionaryEntryPoint/getBuiltRemoteDictionariesPath.d.ts.map +1 -0
  404. package/dist/types/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.d.ts +10 -2
  405. package/dist/types/createDictionaryEntryPoint/getBuiltUnmergedDictionariesPath.d.ts.map +1 -0
  406. package/dist/types/createDictionaryEntryPoint/index.d.ts +7 -7
  407. package/dist/types/createType/createModuleAugmentation.d.ts +9 -2
  408. package/dist/types/createType/createModuleAugmentation.d.ts.map +1 -0
  409. package/dist/types/createType/createType.d.ts +12 -2
  410. package/dist/types/createType/createType.d.ts.map +1 -0
  411. package/dist/types/createType/index.d.ts +2 -2
  412. package/dist/types/fetchDistantDictionaries.d.ts +1 -1
  413. package/dist/types/fetchDistantDictionaries.d.ts.map +1 -1
  414. package/dist/types/getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.d.ts +7 -2
  415. package/dist/types/getContentDeclarationFileTemplate/getContentDeclarationFileTemplate.d.ts.map +1 -0
  416. package/dist/types/getContentDeclarationFileTemplate/index.d.ts +1 -1
  417. package/dist/types/loadDictionaries/index.d.ts +4 -4
  418. package/dist/types/loadDictionaries/loadContentDeclaration.d.ts +12 -2
  419. package/dist/types/loadDictionaries/loadContentDeclaration.d.ts.map +1 -0
  420. package/dist/types/loadDictionaries/loadDictionaries.d.ts +23 -2
  421. package/dist/types/loadDictionaries/loadDictionaries.d.ts.map +1 -0
  422. package/dist/types/loadDictionaries/loadLocalDictionaries.d.ts +8 -2
  423. package/dist/types/loadDictionaries/loadLocalDictionaries.d.ts.map +1 -0
  424. package/dist/types/loadDictionaries/loadRemoteDictionaries.d.ts +15 -2
  425. package/dist/types/loadDictionaries/loadRemoteDictionaries.d.ts.map +1 -0
  426. package/dist/types/loadDictionaries/log.d.ts +1 -1
  427. package/dist/types/utils/getFormatFromExtension.d.ts +8 -2
  428. package/dist/types/utils/getFormatFromExtension.d.ts.map +1 -0
  429. package/dist/types/utils/index.d.ts +1 -1
  430. package/dist/types/writeConfiguration/index.d.ts.map +1 -1
  431. package/dist/types/writeContentDeclaration/detectExportedComponentName.d.ts +12 -2
  432. package/dist/types/writeContentDeclaration/detectExportedComponentName.d.ts.map +1 -0
  433. package/dist/types/writeContentDeclaration/dictionaryStatus.d.ts +5 -2
  434. package/dist/types/writeContentDeclaration/dictionaryStatus.d.ts.map +1 -0
  435. package/dist/types/writeContentDeclaration/index.d.ts +5 -5
  436. package/dist/types/writeContentDeclaration/processContentDeclarationContent.d.ts.map +1 -1
  437. package/dist/types/writeContentDeclaration/transformJSFile.d.ts +11 -2
  438. package/dist/types/writeContentDeclaration/transformJSFile.d.ts.map +1 -0
  439. package/dist/types/writeContentDeclaration/writeContentDeclaration.d.ts +19 -2
  440. package/dist/types/writeContentDeclaration/writeContentDeclaration.d.ts.map +1 -0
  441. package/dist/types/writeContentDeclaration/writeJSFile.d.ts +14 -2
  442. package/dist/types/writeContentDeclaration/writeJSFile.d.ts.map +1 -0
  443. package/package.json +8 -8
  444. package/dist/cjs/_utils_asset-SJVy1xMD.cjs +0 -2
  445. package/dist/cjs/chunk-Bmb41Sf3.cjs +0 -1
  446. package/dist/esm/_utils_asset-4w8dPH9r.mjs +0 -2
  447. package/dist/esm/chunk-DDgYwkfe.mjs +0 -1
  448. package/dist/types/buildIntlayerDictionary-_xrGjSmw.d.ts +0 -25
  449. package/dist/types/buildIntlayerDictionary-_xrGjSmw.d.ts.map +0 -1
  450. package/dist/types/createDictionaryEntryPoint-Bc5lHSiY.d.ts +0 -14
  451. package/dist/types/createDictionaryEntryPoint-Bc5lHSiY.d.ts.map +0 -1
  452. package/dist/types/createModuleAugmentation-D1eIVnjg.d.ts +0 -9
  453. package/dist/types/createModuleAugmentation-D1eIVnjg.d.ts.map +0 -1
  454. package/dist/types/createType--rDwdg2t.d.ts +0 -12
  455. package/dist/types/createType--rDwdg2t.d.ts.map +0 -1
  456. package/dist/types/detectExportedComponentName-DVXsp_FG.d.ts +0 -12
  457. package/dist/types/detectExportedComponentName-DVXsp_FG.d.ts.map +0 -1
  458. package/dist/types/dictionaryStatus-DPVO37qe.d.ts +0 -5
  459. package/dist/types/dictionaryStatus-DPVO37qe.d.ts.map +0 -1
  460. package/dist/types/generateDictionaryListContent-DAtHG6SR.d.ts +0 -10
  461. package/dist/types/generateDictionaryListContent-DAtHG6SR.d.ts.map +0 -1
  462. package/dist/types/getBuiltDictionariesPath-C4it65a1.d.ts +0 -10
  463. package/dist/types/getBuiltDictionariesPath-C4it65a1.d.ts.map +0 -1
  464. package/dist/types/getBuiltDynamicDictionariesPath-Cj9EWnjT.d.ts +0 -10
  465. package/dist/types/getBuiltDynamicDictionariesPath-Cj9EWnjT.d.ts.map +0 -1
  466. package/dist/types/getBuiltFetchDictionariesPath-1JleRhT3.d.ts +0 -10
  467. package/dist/types/getBuiltFetchDictionariesPath-1JleRhT3.d.ts.map +0 -1
  468. package/dist/types/getBuiltRemoteDictionariesPath-DHOmqNCr.d.ts +0 -10
  469. package/dist/types/getBuiltRemoteDictionariesPath-DHOmqNCr.d.ts.map +0 -1
  470. package/dist/types/getBuiltUnmergedDictionariesPath-GUmmLxTB.d.ts +0 -10
  471. package/dist/types/getBuiltUnmergedDictionariesPath-GUmmLxTB.d.ts.map +0 -1
  472. package/dist/types/getContentDeclarationFileTemplate-Dz3rnFy9.d.ts +0 -7
  473. package/dist/types/getContentDeclarationFileTemplate-Dz3rnFy9.d.ts.map +0 -1
  474. package/dist/types/getFormatFromExtension-SdXYWfPx.d.ts +0 -8
  475. package/dist/types/getFormatFromExtension-SdXYWfPx.d.ts.map +0 -1
  476. package/dist/types/loadContentDeclaration-CBMS4vkA.d.ts +0 -12
  477. package/dist/types/loadContentDeclaration-CBMS4vkA.d.ts.map +0 -1
  478. package/dist/types/loadDictionaries-BIqHwtYE.d.ts +0 -23
  479. package/dist/types/loadDictionaries-BIqHwtYE.d.ts.map +0 -1
  480. package/dist/types/loadLocalDictionaries-CNmVaw0c.d.ts +0 -8
  481. package/dist/types/loadLocalDictionaries-CNmVaw0c.d.ts.map +0 -1
  482. package/dist/types/loadRemoteDictionaries-MoITTb7W.d.ts +0 -15
  483. package/dist/types/loadRemoteDictionaries-MoITTb7W.d.ts.map +0 -1
  484. package/dist/types/processContentDeclaration-CAvrHaIT.d.ts +0 -11
  485. package/dist/types/processContentDeclaration-CAvrHaIT.d.ts.map +0 -1
  486. package/dist/types/transformJSFile-Cg0LkeLb.d.ts +0 -11
  487. package/dist/types/transformJSFile-Cg0LkeLb.d.ts.map +0 -1
  488. package/dist/types/writeContentDeclaration-XdGxj0KP.d.ts +0 -19
  489. package/dist/types/writeContentDeclaration-XdGxj0KP.d.ts.map +0 -1
  490. package/dist/types/writeDynamicDictionary-DO8f3FYl.d.ts +0 -48
  491. package/dist/types/writeDynamicDictionary-DO8f3FYl.d.ts.map +0 -1
  492. package/dist/types/writeJSFile-kK95jzg_.d.ts +0 -14
  493. package/dist/types/writeJSFile-kK95jzg_.d.ts.map +0 -1
  494. package/dist/types/writeMergedDictionary-CMeghcRI.d.ts +0 -30
  495. package/dist/types/writeMergedDictionary-CMeghcRI.d.ts.map +0 -1
  496. package/dist/types/writeUnmergedDictionary-Cxx51isz.d.ts +0 -34
  497. package/dist/types/writeUnmergedDictionary-Cxx51isz.d.ts.map +0 -1
@@ -1,4 +1,408 @@
1
- import{getNodeType as e}from"@intlayer/core/dictionaryManipulator";import{NodeType as t}from"@intlayer/types/nodeType";import*as n from"recast";import*as r from"recast/parsers/babel-ts.js";const i=n.types.builders,a=n.types.namedTypes,o=e=>{for(;e&&(a.TSSatisfiesExpression?.check(e)||a.TSAsExpression?.check(e)||a.TSTypeAssertion?.check(e)||a.TSNonNullExpression?.check(e)||[`TSSatisfiesExpression`,`TSAsExpression`,`TSTypeAssertion`,`TSNonNullExpression`].includes(e.type));)e=e.expression;return e},s=(e,t)=>e.properties.find(e=>!!((a.Property.check(e)||a.ObjectProperty.check(e))&&(a.Identifier.check(e.key)&&e.key.name===t||a.StringLiteral.check(e.key)&&e.key.value===t||a.Literal.check(e.key)&&e.key.value===t))),c=(e,t,n)=>{let r=n.match(/\d+(?!.*\d)/);if(!r)return;let o=r[0];if(a.ObjectExpression.check(e)){for(let n of e.properties)if(a.Property.check(n)||a.ObjectProperty.check(n)){let e=``;if(a.Identifier.check(n.key)?e=n.key.name:(a.Literal.check(n.key)&&typeof n.key.value==`string`||a.StringLiteral.check(n.key))&&(e=n.key.value),e&&e!==t){if(a.Literal.check(n.value)&&typeof n.value.value==`string`){let e=n.value.value;e.match(/\d+(?!.*\d)/)&&(n.value=i.literal(e.replace(/(\d+)(?!.*\d)/,o)))}else if(a.StringLiteral.check(n.value)){let e=n.value.value;e.match(/\d+(?!.*\d)/)&&(n.value=i.stringLiteral(e.replace(/(\d+)(?!.*\d)/,o)))}}}}},l=n=>{if(typeof n!=`object`||!n||Array.isArray(n))return!1;let r=e(n);if(r===t.Translation)return!0;if(r===t.Markdown||r===t.HTML||r===t.Insertion)return l(n[r]);if(r===t.Enumeration||r===t.Condition||r===t.Gender){let e=n[r];if(e&&typeof e==`object`)return Object.values(e).some(e=>l(e))}return!1},u=(n,r,s,f)=>{let p=o(r);if(p&&!(a.Literal.check(p)||a.StringLiteral.check(p)||a.NumericLiteral.check(p)||a.BooleanLiteral.check(p)||a.TemplateLiteral.check(p)||a.ObjectExpression.check(p)||a.ArrayExpression.check(p)||a.CallExpression.check(p)&&a.Identifier.check(p.callee)&&[`t`,`enu`,`cond`,`gender`,`insert`,`md`,`html`,`file`,`nest`].includes(p.callee.name)))return r;if(s&&!r&&!l(n)){if(n===null)return i.literal(null);if(typeof n==`string`||typeof n==`number`||typeof n==`boolean`)return typeof n==`string`&&n.includes(`
2
- `)?i.templateLiteral([i.templateElement({raw:n,cooked:n},!0)],[]):i.literal(n)}if(s&&r&&!l(n)){if(a.CallExpression.check(r)&&a.Identifier.check(r.callee)&&r.callee.name===`t`){let e=o(r.arguments[0]);if(a.ObjectExpression.check(e))return typeof n==`string`&&c(e,s,n),d(e,{[s]:n},s,f),s||f.add(`t`),r}if((!n||typeof n!=`object`)&&a.CallExpression.check(r)&&a.Identifier.check(r.callee)&&r.callee.name===`md`){let e=r.arguments[0];if(a.CallExpression.check(e)&&a.Identifier.check(e.callee)&&e.callee.name===`t`){let t=o(e.arguments[0]);if(a.ObjectExpression.check(t))return typeof n==`string`&&c(t,s,n),d(t,{[s]:n},s,f),f.add(`md`),f.add(`t`),r}}}if(n===null)return i.literal(null);if(typeof n==`string`||typeof n==`number`||typeof n==`boolean`){if(p){if(a.TemplateLiteral.check(p)&&p.expressions.length===0)return p.quasis[0].value.raw=String(n),p.quasis[0].value.cooked=String(n),r;if(a.Literal.check(p)||a.StringLiteral.check(p))return p.value=n,r}return typeof n==`string`&&n.includes(`
3
- `)?i.templateLiteral([i.templateElement({raw:n,cooked:n},!0)],[]):i.literal(n)}if(Array.isArray(n))if(p&&a.ArrayExpression.check(p)){let e=[...p.elements];return n.forEach((t,n)=>{e[n]=u(t,e[n],s,f)}),e.length>n.length&&(e.length=n.length),p.elements=e,r}else return i.arrayExpression(n.map(e=>u(e,null,s,f)));let m=n&&typeof n==`object`&&!Array.isArray(n)?e(n):null;if(m&&Object.values(t).includes(m)&&m!==t.Text){let e=n[m],o=``;m===t.Translation?o=`t`:m===t.Enumeration?o=`enu`:m===t.Condition?o=`cond`:m===t.Gender?o=`gender`:m===t.Insertion?o=`insert`:m===t.Markdown?o=`md`:m===t.HTML?o=`html`:m===t.File?o=`file`:m===t.Nested&&(o=`nest`),o&&f.add(o);let c=r&&a.CallExpression.check(r)&&a.Identifier.check(r.callee)&&r.callee.name===o;if([`t`,`enu`,`cond`,`gender`].includes(o)){let t=null;return t=c&&r.arguments.length>0&&a.ObjectExpression.check(r.arguments[0])?r.arguments[0]:i.objectExpression([]),d(t,e,s,f),c?r:i.callExpression(i.identifier(o),[t])}if([`md`,`html`,`insert`,`file`].includes(o)){let t=u(e,c&&r.arguments.length>0?r.arguments[0]:null,s,f);return c?(r.arguments[0]=t,r):i.callExpression(i.identifier(o),[t])}if(o===`nest`){let t=[i.literal(e.dictionaryKey)];return e.path&&t.push(i.literal(e.path)),c?(r.arguments=t,r):i.callExpression(i.identifier(`nest`),t)}}let h=p&&a.ObjectExpression.check(p)?p:i.objectExpression([]);return d(h,n,s,f),r&&p===r?h:r||h},d=(e,t,n,r)=>{for(let[a,o]of Object.entries(t)){if(o===void 0)continue;let t=s(e,a);if(t)t.value=u(o,t.value,n,r);else{let t=/^[A-Za-z_$][A-Za-z0-9_$]*$/.test(a)?i.identifier(a):i.literal(a),s=u(o,null,n,r);e.properties.push(i.property(`init`,t,s))}}},f=(e,t,r)=>{if(t.size===0)return;let o=new Set,s=null;n.visit(e,{visitImportDeclaration(e){return e.node.source.value===`intlayer`&&(s=e,e.node.specifiers?.forEach(e=>{a.ImportSpecifier.check(e)&&typeof e.imported.name==`string`&&o.add(e.imported.name)})),!1},visitVariableDeclaration(e){return e.node.declarations.forEach(e=>{if(a.VariableDeclarator.check(e)&&a.CallExpression.check(e.init)&&a.Identifier.check(e.init.callee)&&e.init.callee.name===`require`){let t=e.init.arguments[0];a.Literal.check(t)&&t.value===`intlayer`&&(a.ObjectPattern.check(e.id)?e.id.properties.forEach(e=>{if(a.Property.check(e)&&(a.Identifier.check(e.key)||a.Identifier.check(e.value))){let t=a.Identifier.check(e.key)?e.key.name:e.value.name;o.add(t)}}):a.Identifier.check(e.id)&&o.add(e.id.name))}}),!1}});let c=Array.from(t).filter(e=>!o.has(e));if(c.length!==0)if(r)if(s)c.forEach(e=>{s.node.specifiers.push(i.importSpecifier(i.identifier(e)))}),s.node.specifiers.sort((e,t)=>e.imported.name.localeCompare(t.imported.name));else{let t=c.sort().map(e=>i.importSpecifier(i.identifier(e))),n=i.importDeclaration(t,i.literal(`intlayer`));e.program.body.unshift(n)}else{let t=0;e.program.body.length>0&&a.ExpressionStatement.check(e.program.body[0])&&a.Literal.check(e.program.body[0].expression)&&(t=1);let n=[],r=c.sort().map(e=>{let t=i.property(`init`,i.identifier(e),i.identifier(e));return t.shorthand=!0,t});n.push(i.variableDeclaration(`const`,[i.variableDeclarator(i.objectPattern(r),i.callExpression(i.identifier(`require`),[i.literal(`intlayer`)]))])),e.program.body.splice(t,0,...n)}},p=async(e,t,s,c)=>{if(!t||typeof t!=`object`)return e;let l;try{l=n.parse(e,{parser:r})}catch(t){return console.error({error:t}),e}let u=null,p=!1;if(n.visit(l,{visitExportDefaultDeclaration(){return p=!0,!1},visitImportDeclaration(){return p=!0,!1}}),n.visit(l,{visitExportDefaultDeclaration(e){let t=e.node.declaration,r=o(t);if(a.ObjectExpression.check(r))u=r;else if(a.Identifier.check(r)){let e=r.name;n.visit(l,{visitVariableDeclarator(t){let n=o(t.node.init);return a.Identifier.check(t.node.id)&&t.node.id.name===e&&a.ObjectExpression.check(n)&&(u=n),!1}})}return!1},visitAssignmentExpression(e){let t=e.node.left;if(a.MemberExpression.check(t)){if(a.Identifier.check(t.object)&&t.object.name===`module`&&a.Identifier.check(t.property)&&t.property.name===`exports`){let t=o(e.node.right);a.ObjectExpression.check(t)&&(u=t)}if(a.Identifier.check(t.object)&&t.object.name===`exports`&&a.Identifier.check(t.property)&&t.property.name===`default`){let t=o(e.node.right);a.ObjectExpression.check(t)&&(u=t)}}this.traverse(e)}}),u||n.visit(l,{visitVariableDeclarator(e){let t=o(e.node.init);return!u&&a.ObjectExpression.check(t)&&(u=t),!1}}),!u)return e;let m=new Set,h=s??`en`,g=[`id`,`locale`,`filled`,`fill`,`title`,`description`,`tags`,`version`,`priority`,`contentAutoTransformation`];if(c)u.properties=u.properties.filter(e=>{if(a.Property.check(e)||a.ObjectProperty.check(e)){let t=``;return a.Identifier.check(e.key)?t=e.key.name:a.StringLiteral.check(e.key)?t=e.key.value:a.Literal.check(e.key)&&(t=String(e.key.value)),![`key`,`content`,...g].includes(t)}return!0}),n.visit(l,{visitNode(e){let t=e.node;(a.TSSatisfiesExpression?.check(t)||t.type===`TSSatisfiesExpression`)&&t.typeAnnotation&&a.TSTypeReference.check(t.typeAnnotation)&&a.Identifier.check(t.typeAnnotation.typeName)&&t.typeAnnotation.typeName.name===`Dictionary`&&(t.typeAnnotation=i.tsIndexedAccessType(i.tsTypeReference(i.identifier(`Dictionary`)),i.tsLiteralType(i.stringLiteral(`content`)))),this.traverse(e)}});else for(let e of g)t[e]!==void 0&&d(u,{[e]:t[e]},void 0,m);return t.content!==void 0&&d(u,c?t.content:{content:t.content},h,m),f(l,m,p),n.print(l).code};export{p as transformJSFile};
1
+ import { getNodeType } from "@intlayer/core/dictionaryManipulator";
2
+ import * as NodeTypes from "@intlayer/types/nodeType";
3
+ import * as recast from "recast";
4
+ import * as babelTsParser from "recast/parsers/babel-ts.js";
5
+
6
+ //#region src/writeContentDeclaration/transformJSFile.ts
7
+ const b = recast.types.builders;
8
+ const n = recast.types.namedTypes;
9
+ /**
10
+ * Unwraps TypeScript/Babel expression wrappers (satisfies, as, !, <Type>).
11
+ * Uses string fallbacks to bypass outdated ast-types definitions.
12
+ */
13
+ const unwrap = (node) => {
14
+ while (node && (n.TSSatisfiesExpression?.check(node) || n.TSAsExpression?.check(node) || n.TSTypeAssertion?.check(node) || n.TSNonNullExpression?.check(node) || [
15
+ "TSSatisfiesExpression",
16
+ "TSAsExpression",
17
+ "TSTypeAssertion",
18
+ "TSNonNullExpression"
19
+ ].includes(node.type))) node = node.expression;
20
+ return node;
21
+ };
22
+ /**
23
+ * Robustly finds a property in a recast ObjectExpression.
24
+ * Handles quoted ("key") or unquoted (key) properties.
25
+ */
26
+ const getMatchingProperty = (node, key) => {
27
+ return node.properties.find((prop) => {
28
+ if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {
29
+ if (n.Identifier.check(prop.key) && prop.key.name === key) return true;
30
+ if (n.StringLiteral.check(prop.key) && prop.key.value === key) return true;
31
+ if (n.Literal.check(prop.key) && prop.key.value === key) return true;
32
+ }
33
+ return false;
34
+ });
35
+ };
36
+ /**
37
+ * Synchronizes numeric suffixes across locales.
38
+ * E.g. "Hello 1" -> "Hello 3" updates "Bonjour 1" to "Bonjour 3".
39
+ */
40
+ const syncNumericSuffixAcrossLocales = (existingNode, fallbackLocaleCode, newFallbackValue) => {
41
+ const trailingNumberMatch = newFallbackValue.match(/\d+(?!.*\d)/);
42
+ if (!trailingNumberMatch) return;
43
+ const newTrailingNumber = trailingNumberMatch[0];
44
+ if (n.ObjectExpression.check(existingNode)) {
45
+ for (const prop of existingNode.properties) if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {
46
+ let propName = "";
47
+ if (n.Identifier.check(prop.key)) propName = prop.key.name;
48
+ else if (n.Literal.check(prop.key) && typeof prop.key.value === "string") propName = prop.key.value;
49
+ else if (n.StringLiteral.check(prop.key)) propName = prop.key.value;
50
+ if (propName && propName !== fallbackLocaleCode) {
51
+ if (n.Literal.check(prop.value) && typeof prop.value.value === "string") {
52
+ const currentValue = prop.value.value;
53
+ if (currentValue.match(/\d+(?!.*\d)/)) prop.value = b.literal(currentValue.replace(/(\d+)(?!.*\d)/, newTrailingNumber));
54
+ } else if (n.StringLiteral.check(prop.value)) {
55
+ const currentValue = prop.value.value;
56
+ if (currentValue.match(/\d+(?!.*\d)/)) prop.value = b.stringLiteral(currentValue.replace(/(\d+)(?!.*\d)/, newTrailingNumber));
57
+ }
58
+ }
59
+ }
60
+ }
61
+ };
62
+ /**
63
+ * Checks if a value represents a multilingual Intlayer node.
64
+ * A node is multilingual if it is a Translation node, or if it is a specialized node
65
+ * (Markdown, HTML, etc.) that contains a Translation node.
66
+ */
67
+ const isMultilingualNode = (val) => {
68
+ if (typeof val !== "object" || val === null || Array.isArray(val)) return false;
69
+ const nodeType = getNodeType(val);
70
+ if (nodeType === NodeTypes.TRANSLATION) return true;
71
+ if (nodeType === NodeTypes.MARKDOWN || nodeType === NodeTypes.HTML || nodeType === NodeTypes.INSERTION) return isMultilingualNode(val[nodeType]);
72
+ if (nodeType === NodeTypes.ENUMERATION || nodeType === NodeTypes.CONDITION || nodeType === NodeTypes.GENDER) {
73
+ const data = val[nodeType];
74
+ if (data && typeof data === "object") return Object.values(data).some((v) => isMultilingualNode(v));
75
+ }
76
+ return false;
77
+ };
78
+ /**
79
+ * Recursively builds or updates an AST node for a given dictionary value.
80
+ */
81
+ const buildNodeForValue = (val, existingNode, fallbackLocale, requiredImports) => {
82
+ const unwrappedExisting = unwrap(existingNode);
83
+ if (unwrappedExisting) {
84
+ if (!(n.Literal.check(unwrappedExisting) || n.StringLiteral.check(unwrappedExisting) || n.NumericLiteral.check(unwrappedExisting) || n.BooleanLiteral.check(unwrappedExisting) || n.TemplateLiteral.check(unwrappedExisting) || n.ObjectExpression.check(unwrappedExisting) || n.ArrayExpression.check(unwrappedExisting) || n.CallExpression.check(unwrappedExisting) && n.Identifier.check(unwrappedExisting.callee) && [
85
+ "t",
86
+ "enu",
87
+ "cond",
88
+ "gender",
89
+ "insert",
90
+ "md",
91
+ "html",
92
+ "file",
93
+ "nest"
94
+ ].includes(unwrappedExisting.callee.name))) return existingNode;
95
+ }
96
+ if (fallbackLocale && !existingNode && !isMultilingualNode(val)) {
97
+ if (val === null) return b.literal(null);
98
+ if (typeof val === "string" || typeof val === "number" || typeof val === "boolean") {
99
+ if (typeof val === "string" && val.includes("\n")) return b.templateLiteral([b.templateElement({
100
+ raw: val,
101
+ cooked: val
102
+ }, true)], []);
103
+ return b.literal(val);
104
+ }
105
+ }
106
+ if (fallbackLocale && existingNode && !isMultilingualNode(val)) {
107
+ if (n.CallExpression.check(existingNode) && n.Identifier.check(existingNode.callee) && existingNode.callee.name === "t") {
108
+ const arg = unwrap(existingNode.arguments[0]);
109
+ if (n.ObjectExpression.check(arg)) {
110
+ if (typeof val === "string") syncNumericSuffixAcrossLocales(arg, fallbackLocale, val);
111
+ updateObjectLiteral(arg, { [fallbackLocale]: val }, fallbackLocale, requiredImports);
112
+ if (!fallbackLocale) requiredImports.add("t");
113
+ return existingNode;
114
+ }
115
+ }
116
+ if ((!val || typeof val !== "object") && n.CallExpression.check(existingNode) && n.Identifier.check(existingNode.callee) && existingNode.callee.name === "md") {
117
+ const innerArg = existingNode.arguments[0];
118
+ if (n.CallExpression.check(innerArg) && n.Identifier.check(innerArg.callee) && innerArg.callee.name === "t") {
119
+ const tArg = unwrap(innerArg.arguments[0]);
120
+ if (n.ObjectExpression.check(tArg)) {
121
+ if (typeof val === "string") syncNumericSuffixAcrossLocales(tArg, fallbackLocale, val);
122
+ updateObjectLiteral(tArg, { [fallbackLocale]: val }, fallbackLocale, requiredImports);
123
+ requiredImports.add("md");
124
+ requiredImports.add("t");
125
+ return existingNode;
126
+ }
127
+ }
128
+ }
129
+ }
130
+ if (val === null) return b.literal(null);
131
+ if (typeof val === "string" || typeof val === "number" || typeof val === "boolean") {
132
+ if (unwrappedExisting) {
133
+ if (n.TemplateLiteral.check(unwrappedExisting) && unwrappedExisting.expressions.length === 0) {
134
+ unwrappedExisting.quasis[0].value.raw = String(val);
135
+ unwrappedExisting.quasis[0].value.cooked = String(val);
136
+ return existingNode;
137
+ }
138
+ if (n.Literal.check(unwrappedExisting) || n.StringLiteral.check(unwrappedExisting)) {
139
+ unwrappedExisting.value = val;
140
+ return existingNode;
141
+ }
142
+ }
143
+ if (typeof val === "string" && val.includes("\n")) return b.templateLiteral([b.templateElement({
144
+ raw: val,
145
+ cooked: val
146
+ }, true)], []);
147
+ return b.literal(val);
148
+ }
149
+ if (Array.isArray(val)) if (unwrappedExisting && n.ArrayExpression.check(unwrappedExisting)) {
150
+ const elements = [...unwrappedExisting.elements];
151
+ val.forEach((item, i) => {
152
+ elements[i] = buildNodeForValue(item, elements[i], fallbackLocale, requiredImports);
153
+ });
154
+ if (elements.length > val.length) elements.length = val.length;
155
+ unwrappedExisting.elements = elements;
156
+ return existingNode;
157
+ } else return b.arrayExpression(val.map((item) => buildNodeForValue(item, null, fallbackLocale, requiredImports)));
158
+ const nodeType = val && typeof val === "object" && !Array.isArray(val) ? getNodeType(val) : null;
159
+ if (nodeType && [
160
+ NodeTypes.TRANSLATION,
161
+ NodeTypes.ENUMERATION,
162
+ NodeTypes.CONDITION,
163
+ NodeTypes.GENDER,
164
+ NodeTypes.INSERTION,
165
+ NodeTypes.MARKDOWN,
166
+ NodeTypes.HTML,
167
+ NodeTypes.FILE,
168
+ NodeTypes.NESTED,
169
+ NodeTypes.ARRAY,
170
+ NodeTypes.OBJECT,
171
+ NodeTypes.REACT_NODE,
172
+ NodeTypes.NUMBER,
173
+ NodeTypes.BOOLEAN,
174
+ NodeTypes.NULL,
175
+ NodeTypes.UNKNOWN
176
+ ].includes(nodeType) && nodeType !== NodeTypes.TEXT) {
177
+ const nodeData = val[nodeType];
178
+ let calleeName = "";
179
+ if (nodeType === NodeTypes.TRANSLATION) calleeName = "t";
180
+ else if (nodeType === NodeTypes.ENUMERATION) calleeName = "enu";
181
+ else if (nodeType === NodeTypes.CONDITION) calleeName = "cond";
182
+ else if (nodeType === NodeTypes.GENDER) calleeName = "gender";
183
+ else if (nodeType === NodeTypes.INSERTION) calleeName = "insert";
184
+ else if (nodeType === NodeTypes.MARKDOWN) calleeName = "md";
185
+ else if (nodeType === NodeTypes.HTML) calleeName = "html";
186
+ else if (nodeType === NodeTypes.FILE) calleeName = "file";
187
+ else if (nodeType === NodeTypes.NESTED) calleeName = "nest";
188
+ if (calleeName) requiredImports.add(calleeName);
189
+ const isMatchingCall = existingNode && n.CallExpression.check(existingNode) && n.Identifier.check(existingNode.callee) && existingNode.callee.name === calleeName;
190
+ if ([
191
+ "t",
192
+ "enu",
193
+ "cond",
194
+ "gender"
195
+ ].includes(calleeName)) {
196
+ let objArg = null;
197
+ if (isMatchingCall && existingNode.arguments.length > 0 && n.ObjectExpression.check(existingNode.arguments[0])) objArg = existingNode.arguments[0];
198
+ else objArg = b.objectExpression([]);
199
+ updateObjectLiteral(objArg, nodeData, fallbackLocale, requiredImports);
200
+ return isMatchingCall ? existingNode : b.callExpression(b.identifier(calleeName), [objArg]);
201
+ }
202
+ if ([
203
+ "md",
204
+ "html",
205
+ "insert",
206
+ "file"
207
+ ].includes(calleeName)) {
208
+ const argNode = buildNodeForValue(nodeData, isMatchingCall && existingNode.arguments.length > 0 ? existingNode.arguments[0] : null, fallbackLocale, requiredImports);
209
+ if (isMatchingCall) {
210
+ existingNode.arguments[0] = argNode;
211
+ return existingNode;
212
+ }
213
+ return b.callExpression(b.identifier(calleeName), [argNode]);
214
+ }
215
+ if (calleeName === "nest") {
216
+ const args = [b.literal(nodeData.dictionaryKey)];
217
+ if (nodeData.path) args.push(b.literal(nodeData.path));
218
+ if (isMatchingCall) {
219
+ existingNode.arguments = args;
220
+ return existingNode;
221
+ }
222
+ return b.callExpression(b.identifier("nest"), args);
223
+ }
224
+ }
225
+ const objNode = unwrappedExisting && n.ObjectExpression.check(unwrappedExisting) ? unwrappedExisting : b.objectExpression([]);
226
+ updateObjectLiteral(objNode, val, fallbackLocale, requiredImports);
227
+ return existingNode && unwrappedExisting === existingNode ? objNode : existingNode || objNode;
228
+ };
229
+ /**
230
+ * Recursively updates the AST object literal properties.
231
+ */
232
+ const updateObjectLiteral = (node, data, fallbackLocale, requiredImports) => {
233
+ for (const [key, val] of Object.entries(data)) {
234
+ if (val === void 0) continue;
235
+ const existingProp = getMatchingProperty(node, key);
236
+ if (existingProp) existingProp.value = buildNodeForValue(val, existingProp.value, fallbackLocale, requiredImports);
237
+ else {
238
+ const keyNode = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key) ? b.identifier(key) : b.literal(key);
239
+ const valueNode = buildNodeForValue(val, null, fallbackLocale, requiredImports);
240
+ node.properties.push(b.property("init", keyNode, valueNode));
241
+ }
242
+ }
243
+ };
244
+ /**
245
+ * Modifies the AST's top-level imports to inject dynamically needed helper utilities seamlessly.
246
+ */
247
+ const addImports = (ast, requiredImports, isESM) => {
248
+ if (requiredImports.size === 0) return;
249
+ const existingCoreImports = /* @__PURE__ */ new Set();
250
+ let coreImportPath = null;
251
+ recast.visit(ast, {
252
+ visitImportDeclaration(path) {
253
+ if (path.node.source.value === "intlayer") {
254
+ coreImportPath = path;
255
+ path.node.specifiers?.forEach((spec) => {
256
+ if (n.ImportSpecifier.check(spec) && typeof spec.imported.name === "string") existingCoreImports.add(spec.imported.name);
257
+ });
258
+ }
259
+ return false;
260
+ },
261
+ visitVariableDeclaration(path) {
262
+ path.node.declarations.forEach((decl) => {
263
+ if (n.VariableDeclarator.check(decl) && n.CallExpression.check(decl.init) && n.Identifier.check(decl.init.callee) && decl.init.callee.name === "require") {
264
+ const arg = decl.init.arguments[0];
265
+ if (n.Literal.check(arg)) {
266
+ if (arg.value === "intlayer") {
267
+ if (n.ObjectPattern.check(decl.id)) decl.id.properties.forEach((prop) => {
268
+ if (n.Property.check(prop) && (n.Identifier.check(prop.key) || n.Identifier.check(prop.value))) {
269
+ const name = n.Identifier.check(prop.key) ? prop.key.name : prop.value.name;
270
+ existingCoreImports.add(name);
271
+ }
272
+ });
273
+ else if (n.Identifier.check(decl.id)) existingCoreImports.add(decl.id.name);
274
+ }
275
+ }
276
+ }
277
+ });
278
+ return false;
279
+ }
280
+ });
281
+ const missingCore = Array.from(requiredImports).filter((imp) => !existingCoreImports.has(imp));
282
+ if (missingCore.length === 0) return;
283
+ if (isESM) if (coreImportPath) {
284
+ missingCore.forEach((imp) => {
285
+ coreImportPath.node.specifiers.push(b.importSpecifier(b.identifier(imp)));
286
+ });
287
+ coreImportPath.node.specifiers.sort((a, b) => a.imported.name.localeCompare(b.imported.name));
288
+ } else {
289
+ const specifiers = missingCore.sort().map((imp) => b.importSpecifier(b.identifier(imp)));
290
+ const newImport = b.importDeclaration(specifiers, b.literal("intlayer"));
291
+ ast.program.body.unshift(newImport);
292
+ }
293
+ else {
294
+ let insertIndex = 0;
295
+ if (ast.program.body.length > 0 && n.ExpressionStatement.check(ast.program.body[0]) && n.Literal.check(ast.program.body[0].expression)) insertIndex = 1;
296
+ const cjsLines = [];
297
+ const properties = missingCore.sort().map((imp) => {
298
+ const prop = b.property("init", b.identifier(imp), b.identifier(imp));
299
+ prop.shorthand = true;
300
+ return prop;
301
+ });
302
+ cjsLines.push(b.variableDeclaration("const", [b.variableDeclarator(b.objectPattern(properties), b.callExpression(b.identifier("require"), [b.literal("intlayer")]))]));
303
+ ast.program.body.splice(insertIndex, 0, ...cjsLines);
304
+ }
305
+ };
306
+ /**
307
+ * Updates a JS/TS file seamlessly to map new localization keys, arrays, complex nodes and nested dictionaries gracefully using AST updates via Recast parser.
308
+ */
309
+ const transformJSFile = async (fileContent, dictionary, fallbackLocale, noMetadata) => {
310
+ if (!dictionary || typeof dictionary !== "object") return fileContent;
311
+ let ast;
312
+ try {
313
+ ast = recast.parse(fileContent, { parser: babelTsParser });
314
+ } catch (error) {
315
+ console.error({ error });
316
+ return fileContent;
317
+ }
318
+ let rootObject = null;
319
+ let isESM = false;
320
+ recast.visit(ast, {
321
+ visitExportDefaultDeclaration() {
322
+ isESM = true;
323
+ return false;
324
+ },
325
+ visitImportDeclaration() {
326
+ isESM = true;
327
+ return false;
328
+ }
329
+ });
330
+ recast.visit(ast, {
331
+ visitExportDefaultDeclaration(path) {
332
+ const decl = path.node.declaration;
333
+ const unwrappedDecl = unwrap(decl);
334
+ if (n.ObjectExpression.check(unwrappedDecl)) rootObject = unwrappedDecl;
335
+ else if (n.Identifier.check(unwrappedDecl)) {
336
+ const varName = unwrappedDecl.name;
337
+ recast.visit(ast, { visitVariableDeclarator(vp) {
338
+ const unwrappedInit = unwrap(vp.node.init);
339
+ if (n.Identifier.check(vp.node.id) && vp.node.id.name === varName && n.ObjectExpression.check(unwrappedInit)) rootObject = unwrappedInit;
340
+ return false;
341
+ } });
342
+ }
343
+ return false;
344
+ },
345
+ visitAssignmentExpression(path) {
346
+ const left = path.node.left;
347
+ if (n.MemberExpression.check(left)) {
348
+ if (n.Identifier.check(left.object) && left.object.name === "module" && n.Identifier.check(left.property) && left.property.name === "exports") {
349
+ const unwrappedRight = unwrap(path.node.right);
350
+ if (n.ObjectExpression.check(unwrappedRight)) rootObject = unwrappedRight;
351
+ }
352
+ if (n.Identifier.check(left.object) && left.object.name === "exports" && n.Identifier.check(left.property) && left.property.name === "default") {
353
+ const unwrappedRight = unwrap(path.node.right);
354
+ if (n.ObjectExpression.check(unwrappedRight)) rootObject = unwrappedRight;
355
+ }
356
+ }
357
+ this.traverse(path);
358
+ }
359
+ });
360
+ if (!rootObject) recast.visit(ast, { visitVariableDeclarator(path) {
361
+ const unwrappedInit = unwrap(path.node.init);
362
+ if (!rootObject && n.ObjectExpression.check(unwrappedInit)) rootObject = unwrappedInit;
363
+ return false;
364
+ } });
365
+ if (!rootObject) return fileContent;
366
+ const requiredImports = /* @__PURE__ */ new Set();
367
+ const effectiveFallbackLocale = fallbackLocale ?? "en";
368
+ const metadataProperties = [
369
+ "id",
370
+ "locale",
371
+ "filled",
372
+ "fill",
373
+ "title",
374
+ "description",
375
+ "tags",
376
+ "version",
377
+ "priority",
378
+ "contentAutoTransformation"
379
+ ];
380
+ if (noMetadata) {
381
+ rootObject.properties = rootObject.properties.filter((prop) => {
382
+ if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {
383
+ let propName = "";
384
+ if (n.Identifier.check(prop.key)) propName = prop.key.name;
385
+ else if (n.StringLiteral.check(prop.key)) propName = prop.key.value;
386
+ else if (n.Literal.check(prop.key)) propName = String(prop.key.value);
387
+ return ![
388
+ "key",
389
+ "content",
390
+ ...metadataProperties
391
+ ].includes(propName);
392
+ }
393
+ return true;
394
+ });
395
+ recast.visit(ast, { visitNode(path) {
396
+ const node = path.node;
397
+ if ((n.TSSatisfiesExpression?.check(node) || node.type === "TSSatisfiesExpression") && node.typeAnnotation && n.TSTypeReference.check(node.typeAnnotation) && n.Identifier.check(node.typeAnnotation.typeName) && node.typeAnnotation.typeName.name === "Dictionary") node.typeAnnotation = b.tsIndexedAccessType(b.tsTypeReference(b.identifier("Dictionary")), b.tsLiteralType(b.stringLiteral("content")));
398
+ this.traverse(path);
399
+ } });
400
+ } else for (const prop of metadataProperties) if (dictionary[prop] !== void 0) updateObjectLiteral(rootObject, { [prop]: dictionary[prop] }, void 0, requiredImports);
401
+ if (dictionary.content !== void 0) updateObjectLiteral(rootObject, noMetadata ? dictionary.content : { content: dictionary.content }, effectiveFallbackLocale, requiredImports);
402
+ addImports(ast, requiredImports, isESM);
403
+ return recast.print(ast).code;
404
+ };
405
+
406
+ //#endregion
407
+ export { transformJSFile };
4
408
  //# sourceMappingURL=transformJSFile.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformJSFile.mjs","names":[],"sources":["../../../src/writeContentDeclaration/transformJSFile.ts"],"sourcesContent":["import { getNodeType } from '@intlayer/core/dictionaryManipulator';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { ContentNode, Dictionary } from '@intlayer/types/dictionary';\nimport { NodeType } from '@intlayer/types/nodeType';\nimport * as recast from 'recast';\nimport * as babelTsParser from 'recast/parsers/babel-ts.js';\n\nconst b = recast.types.builders;\nconst n = recast.types.namedTypes;\n\n/**\n * Unwraps TypeScript/Babel expression wrappers (satisfies, as, !, <Type>).\n * Uses string fallbacks to bypass outdated ast-types definitions.\n */\nconst unwrap = (node: any) => {\n while (\n node &&\n (n.TSSatisfiesExpression?.check(node) ||\n n.TSAsExpression?.check(node) ||\n n.TSTypeAssertion?.check(node) ||\n n.TSNonNullExpression?.check(node) ||\n [\n 'TSSatisfiesExpression',\n 'TSAsExpression',\n 'TSTypeAssertion',\n 'TSNonNullExpression',\n ].includes(node.type))\n ) {\n node = node.expression;\n }\n return node;\n};\n\n/**\n * Robustly finds a property in a recast ObjectExpression.\n * Handles quoted (\"key\") or unquoted (key) properties.\n */\nconst getMatchingProperty = (node: any, key: string) => {\n return node.properties.find((prop: any) => {\n if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {\n if (n.Identifier.check(prop.key) && prop.key.name === key) return true;\n\n if (n.StringLiteral.check(prop.key) && prop.key.value === key)\n return true;\n\n if (n.Literal.check(prop.key) && prop.key.value === key) return true;\n }\n\n return false;\n });\n};\n\n/**\n * Synchronizes numeric suffixes across locales.\n * E.g. \"Hello 1\" -> \"Hello 3\" updates \"Bonjour 1\" to \"Bonjour 3\".\n */\nconst syncNumericSuffixAcrossLocales = (\n existingNode: any,\n fallbackLocaleCode: string,\n newFallbackValue: string\n) => {\n const trailingNumberMatch = newFallbackValue.match(/\\d+(?!.*\\d)/);\n if (!trailingNumberMatch) return;\n const newTrailingNumber = trailingNumberMatch[0];\n\n if (n.ObjectExpression.check(existingNode)) {\n for (const prop of existingNode.properties) {\n if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {\n let propName = '';\n\n if (n.Identifier.check(prop.key)) propName = prop.key.name;\n else if (\n n.Literal.check(prop.key) &&\n typeof prop.key.value === 'string'\n )\n propName = prop.key.value;\n else if (n.StringLiteral.check(prop.key)) propName = prop.key.value;\n\n if (propName && propName !== fallbackLocaleCode) {\n if (\n n.Literal.check(prop.value) &&\n typeof prop.value.value === 'string'\n ) {\n const currentValue = prop.value.value;\n const currentTrailingNumberMatch =\n currentValue.match(/\\d+(?!.*\\d)/);\n\n if (currentTrailingNumberMatch) {\n prop.value = b.literal(\n currentValue.replace(/(\\d+)(?!.*\\d)/, newTrailingNumber)\n );\n }\n } else if (n.StringLiteral.check(prop.value)) {\n const currentValue = prop.value.value;\n const currentTrailingNumberMatch =\n currentValue.match(/\\d+(?!.*\\d)/);\n\n if (currentTrailingNumberMatch) {\n prop.value = b.stringLiteral(\n currentValue.replace(/(\\d+)(?!.*\\d)/, newTrailingNumber)\n );\n }\n }\n }\n }\n }\n }\n};\n\n/**\n * Checks if a value represents a multilingual Intlayer node.\n * A node is multilingual if it is a Translation node, or if it is a specialized node\n * (Markdown, HTML, etc.) that contains a Translation node.\n */\nconst isMultilingualNode = (val: any): boolean => {\n if (typeof val !== 'object' || val === null || Array.isArray(val)) {\n return false;\n }\n\n const nodeType = getNodeType(val as ContentNode);\n\n if (nodeType === NodeType.Translation) {\n return true;\n }\n\n if (\n nodeType === NodeType.Markdown ||\n nodeType === NodeType.HTML ||\n nodeType === NodeType.Insertion\n ) {\n return isMultilingualNode((val as any)[nodeType]);\n }\n\n if (\n nodeType === NodeType.Enumeration ||\n nodeType === NodeType.Condition ||\n nodeType === NodeType.Gender\n ) {\n const data = (val as any)[nodeType];\n\n if (data && typeof data === 'object') {\n return Object.values(data).some((v) => isMultilingualNode(v));\n }\n }\n\n return false;\n};\n\n/**\n * Recursively builds or updates an AST node for a given dictionary value.\n */\nconst buildNodeForValue = (\n val: any,\n existingNode: any,\n fallbackLocale: string | undefined, // In per-locale mode, this is the locale of the file\n requiredImports: Set<string>\n): any => {\n const unwrappedExisting = unwrap(existingNode);\n\n // --- CRITICAL GUARD: STRICT AST PRESERVATION ---\n // If the existing node is code (JSX, Variables, standard functions), leave it alone.\n // Only allow updates to literals, plain objects, arrays, and Intlayer helpers.\n if (unwrappedExisting) {\n const isUpdatableNode =\n n.Literal.check(unwrappedExisting) ||\n n.StringLiteral.check(unwrappedExisting) ||\n n.NumericLiteral.check(unwrappedExisting) ||\n n.BooleanLiteral.check(unwrappedExisting) ||\n n.TemplateLiteral.check(unwrappedExisting) ||\n n.ObjectExpression.check(unwrappedExisting) ||\n n.ArrayExpression.check(unwrappedExisting) ||\n (n.CallExpression.check(unwrappedExisting) &&\n n.Identifier.check(unwrappedExisting.callee) &&\n [\n 't',\n 'enu',\n 'cond',\n 'gender',\n 'insert',\n 'md',\n 'html',\n 'file',\n 'nest',\n ].includes(unwrappedExisting.callee.name));\n\n if (!isUpdatableNode) {\n return existingNode;\n }\n }\n\n // If we are in per-locale mode (fallbackLocale is set)\n // and the value is not already a complex translation node,\n // we want to store it as a simple literal, NOT wrapped in t().\n if (fallbackLocale && !existingNode && !isMultilingualNode(val)) {\n if (val === null) return b.literal(null);\n if (\n typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean'\n ) {\n if (typeof val === 'string' && val.includes('\\n')) {\n return b.templateLiteral(\n [b.templateElement({ raw: val, cooked: val }, true)],\n []\n );\n }\n return b.literal(val);\n }\n }\n\n if (fallbackLocale && existingNode && !isMultilingualNode(val)) {\n if (\n n.CallExpression.check(existingNode) &&\n n.Identifier.check(existingNode.callee) &&\n existingNode.callee.name === 't'\n ) {\n const arg = unwrap(existingNode.arguments[0]);\n\n if (n.ObjectExpression.check(arg)) {\n if (typeof val === 'string') {\n syncNumericSuffixAcrossLocales(arg, fallbackLocale, val);\n }\n updateObjectLiteral(\n arg,\n { [fallbackLocale]: val },\n fallbackLocale,\n requiredImports\n );\n\n if (!fallbackLocale) {\n requiredImports.add('t');\n }\n\n return existingNode;\n }\n }\n\n if (\n (!val || typeof val !== 'object') &&\n n.CallExpression.check(existingNode) &&\n n.Identifier.check(existingNode.callee) &&\n existingNode.callee.name === 'md'\n ) {\n const innerArg = existingNode.arguments[0];\n\n if (\n n.CallExpression.check(innerArg) &&\n n.Identifier.check(innerArg.callee) &&\n innerArg.callee.name === 't'\n ) {\n const tArg = unwrap(innerArg.arguments[0]);\n\n if (n.ObjectExpression.check(tArg)) {\n if (typeof val === 'string') {\n syncNumericSuffixAcrossLocales(tArg, fallbackLocale, val);\n }\n updateObjectLiteral(\n tArg,\n { [fallbackLocale]: val },\n fallbackLocale,\n requiredImports\n );\n requiredImports.add('md');\n requiredImports.add('t');\n\n return existingNode;\n }\n }\n }\n }\n\n // 1. Primitives\n if (val === null) return b.literal(null);\n if (\n typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean'\n ) {\n if (unwrappedExisting) {\n // Preserve existing template literals (backticks)\n if (\n n.TemplateLiteral.check(unwrappedExisting) &&\n unwrappedExisting.expressions.length === 0\n ) {\n unwrappedExisting.quasis[0].value.raw = String(val);\n unwrappedExisting.quasis[0].value.cooked = String(val);\n return existingNode;\n }\n // Preserve existing standard literals (keeps quote styling)\n if (\n n.Literal.check(unwrappedExisting) ||\n n.StringLiteral.check(unwrappedExisting)\n ) {\n unwrappedExisting.value = val;\n return existingNode;\n }\n }\n\n // Force multiline strings to use Template Literals\n if (typeof val === 'string' && val.includes('\\n')) {\n return b.templateLiteral(\n [b.templateElement({ raw: val, cooked: val }, true)],\n []\n );\n }\n return b.literal(val);\n }\n\n // 2. Arrays\n if (Array.isArray(val)) {\n if (unwrappedExisting && n.ArrayExpression.check(unwrappedExisting)) {\n const elements = [...unwrappedExisting.elements];\n val.forEach((item, i) => {\n elements[i] = buildNodeForValue(\n item,\n elements[i],\n fallbackLocale,\n requiredImports\n );\n });\n\n if (elements.length > val.length) elements.length = val.length;\n unwrappedExisting.elements = elements as any;\n\n return existingNode;\n } else {\n return b.arrayExpression(\n val.map((item) =>\n buildNodeForValue(item, null, fallbackLocale, requiredImports)\n )\n );\n }\n }\n\n // 3. Intlayer Specialized Nodes\n const nodeType =\n val && typeof val === 'object' && !Array.isArray(val)\n ? getNodeType(val as ContentNode)\n : null;\n\n if (\n nodeType &&\n Object.values(NodeType).includes(nodeType as any) &&\n nodeType !== NodeType.Text\n ) {\n const nodeData = (val as any)[nodeType];\n let calleeName = '';\n\n if (nodeType === NodeType.Translation) calleeName = 't';\n else if (nodeType === NodeType.Enumeration) calleeName = 'enu';\n else if (nodeType === NodeType.Condition) calleeName = 'cond';\n else if (nodeType === NodeType.Gender) calleeName = 'gender';\n else if (nodeType === NodeType.Insertion) calleeName = 'insert';\n else if (nodeType === NodeType.Markdown) calleeName = 'md';\n else if (nodeType === NodeType.HTML) calleeName = 'html';\n else if (nodeType === NodeType.File) calleeName = 'file';\n else if (nodeType === NodeType.Nested) calleeName = 'nest';\n\n if (calleeName) requiredImports.add(calleeName);\n\n const isMatchingCall =\n existingNode &&\n n.CallExpression.check(existingNode) &&\n n.Identifier.check(existingNode.callee) &&\n existingNode.callee.name === calleeName;\n\n if (['t', 'enu', 'cond', 'gender'].includes(calleeName)) {\n let objArg: any = null;\n\n if (\n isMatchingCall &&\n existingNode.arguments.length > 0 &&\n n.ObjectExpression.check(existingNode.arguments[0])\n ) {\n objArg = existingNode.arguments[0];\n } else {\n objArg = b.objectExpression([]);\n }\n updateObjectLiteral(objArg, nodeData, fallbackLocale, requiredImports);\n\n return isMatchingCall\n ? existingNode\n : b.callExpression(b.identifier(calleeName), [objArg]);\n }\n\n if (['md', 'html', 'insert', 'file'].includes(calleeName)) {\n const argNode = buildNodeForValue(\n nodeData,\n isMatchingCall && existingNode.arguments.length > 0\n ? existingNode.arguments[0]\n : null,\n fallbackLocale,\n requiredImports\n );\n\n if (isMatchingCall) {\n existingNode.arguments[0] = argNode;\n\n return existingNode;\n }\n\n return b.callExpression(b.identifier(calleeName), [argNode]);\n }\n\n if (calleeName === 'nest') {\n const args = [b.literal(nodeData.dictionaryKey)];\n\n if (nodeData.path) args.push(b.literal(nodeData.path));\n\n if (isMatchingCall) {\n existingNode.arguments = args;\n\n return existingNode;\n }\n\n return b.callExpression(b.identifier('nest'), args);\n }\n }\n\n // 4. Plain Object\n const objNode =\n unwrappedExisting && n.ObjectExpression.check(unwrappedExisting)\n ? unwrappedExisting\n : b.objectExpression([]);\n\n updateObjectLiteral(objNode, val, fallbackLocale, requiredImports);\n\n return existingNode && unwrappedExisting === existingNode\n ? objNode\n : existingNode || objNode;\n};\n\n/**\n * Recursively updates the AST object literal properties.\n */\nconst updateObjectLiteral = (\n node: recast.types.namedTypes.ObjectExpression,\n data: Record<string, any>,\n fallbackLocale: string | undefined,\n requiredImports: Set<string>\n) => {\n for (const [key, val] of Object.entries(data)) {\n if (val === undefined) continue;\n\n const existingProp = getMatchingProperty(node, key);\n\n if (existingProp) {\n existingProp.value = buildNodeForValue(\n val,\n existingProp.value,\n fallbackLocale,\n requiredImports\n );\n } else {\n const isValidId = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key);\n const keyNode = isValidId ? b.identifier(key) : b.literal(key);\n const valueNode = buildNodeForValue(\n val,\n null,\n fallbackLocale,\n requiredImports\n );\n node.properties.push(b.property('init', keyNode, valueNode));\n }\n }\n};\n\n/**\n * Modifies the AST's top-level imports to inject dynamically needed helper utilities seamlessly.\n */\nconst addImports = (ast: any, requiredImports: Set<string>, isESM: boolean) => {\n if (requiredImports.size === 0) return;\n\n const existingCoreImports = new Set<string>();\n let coreImportPath: any = null;\n\n recast.visit(ast, {\n visitImportDeclaration(path) {\n const source = path.node.source.value;\n\n if (source === 'intlayer') {\n coreImportPath = path;\n path.node.specifiers?.forEach((spec) => {\n if (\n n.ImportSpecifier.check(spec) &&\n typeof spec.imported.name === 'string'\n ) {\n existingCoreImports.add(spec.imported.name);\n }\n });\n }\n\n return false;\n },\n visitVariableDeclaration(path) {\n path.node.declarations.forEach((decl) => {\n if (\n n.VariableDeclarator.check(decl) &&\n n.CallExpression.check(decl.init) &&\n n.Identifier.check(decl.init.callee) &&\n decl.init.callee.name === 'require'\n ) {\n const arg = decl.init.arguments[0];\n\n if (n.Literal.check(arg)) {\n if (arg.value === 'intlayer') {\n if (n.ObjectPattern.check(decl.id)) {\n decl.id.properties.forEach((prop) => {\n if (\n n.Property.check(prop) &&\n (n.Identifier.check(prop.key) ||\n n.Identifier.check(prop.value))\n ) {\n const name = n.Identifier.check(prop.key)\n ? prop.key.name\n : (prop.value as any).name;\n existingCoreImports.add(name);\n }\n });\n } else if (n.Identifier.check(decl.id)) {\n // Handle const intlayer = require('intlayer')\n existingCoreImports.add(decl.id.name);\n }\n }\n }\n }\n });\n\n return false;\n },\n });\n\n const missingCore = Array.from(requiredImports).filter(\n (imp) => !existingCoreImports.has(imp)\n );\n\n if (missingCore.length === 0) return;\n\n if (isESM) {\n if (coreImportPath) {\n missingCore.forEach((imp) => {\n coreImportPath.node.specifiers.push(\n b.importSpecifier(b.identifier(imp))\n );\n });\n coreImportPath.node.specifiers.sort((a: any, b: any) =>\n a.imported.name.localeCompare(b.imported.name)\n );\n } else {\n const specifiers = missingCore\n .sort()\n .map((imp) => b.importSpecifier(b.identifier(imp)));\n const newImport = b.importDeclaration(specifiers, b.literal('intlayer'));\n ast.program.body.unshift(newImport);\n }\n } else {\n let insertIndex = 0;\n\n if (\n ast.program.body.length > 0 &&\n n.ExpressionStatement.check(ast.program.body[0]) &&\n n.Literal.check(ast.program.body[0].expression)\n ) {\n insertIndex = 1; // Insert after 'use strict'\n }\n const cjsLines: any[] = [];\n\n const properties = missingCore.sort().map((imp) => {\n const prop = b.property('init', b.identifier(imp), b.identifier(imp));\n prop.shorthand = true;\n\n return prop;\n });\n cjsLines.push(\n b.variableDeclaration('const', [\n b.variableDeclarator(\n b.objectPattern(properties),\n b.callExpression(b.identifier('require'), [b.literal('intlayer')])\n ),\n ])\n );\n\n ast.program.body.splice(insertIndex, 0, ...cjsLines);\n }\n};\n\n/**\n * Updates a JS/TS file seamlessly to map new localization keys, arrays, complex nodes and nested dictionaries gracefully using AST updates via Recast parser.\n */\nexport const transformJSFile = async (\n fileContent: string,\n dictionary: Dictionary,\n fallbackLocale?: Locale,\n noMetadata?: boolean\n): Promise<string> => {\n if (!dictionary || typeof dictionary !== 'object') return fileContent;\n\n let ast: any;\n try {\n ast = recast.parse(fileContent, {\n parser: babelTsParser,\n });\n } catch (error) {\n console.error({ error });\n return fileContent;\n }\n\n let rootObject: any = null;\n let isESM = false;\n\n recast.visit(ast, {\n visitExportDefaultDeclaration() {\n isESM = true;\n\n return false;\n },\n visitImportDeclaration() {\n isESM = true;\n\n return false;\n },\n });\n\n recast.visit(ast, {\n visitExportDefaultDeclaration(path) {\n const decl = path.node.declaration;\n const unwrappedDecl = unwrap(decl);\n\n if (n.ObjectExpression.check(unwrappedDecl)) {\n rootObject = unwrappedDecl;\n } else if (n.Identifier.check(unwrappedDecl)) {\n const varName = unwrappedDecl.name;\n recast.visit(ast, {\n visitVariableDeclarator(vp) {\n const unwrappedInit = unwrap(vp.node.init);\n\n if (\n n.Identifier.check(vp.node.id) &&\n vp.node.id.name === varName &&\n n.ObjectExpression.check(unwrappedInit)\n ) {\n rootObject = unwrappedInit;\n }\n\n return false;\n },\n });\n }\n\n return false;\n },\n visitAssignmentExpression(path) {\n const left = path.node.left;\n\n if (n.MemberExpression.check(left)) {\n if (\n n.Identifier.check(left.object) &&\n left.object.name === 'module' &&\n n.Identifier.check(left.property) &&\n left.property.name === 'exports'\n ) {\n const unwrappedRight = unwrap(path.node.right);\n\n if (n.ObjectExpression.check(unwrappedRight)) {\n rootObject = unwrappedRight;\n }\n }\n\n if (\n n.Identifier.check(left.object) &&\n left.object.name === 'exports' &&\n n.Identifier.check(left.property) &&\n left.property.name === 'default'\n ) {\n const unwrappedRight = unwrap(path.node.right);\n\n if (n.ObjectExpression.check(unwrappedRight)) {\n rootObject = unwrappedRight;\n }\n }\n }\n this.traverse(path);\n },\n });\n\n if (!rootObject) {\n recast.visit(ast, {\n visitVariableDeclarator(path) {\n const unwrappedInit = unwrap(path.node.init);\n\n if (!rootObject && n.ObjectExpression.check(unwrappedInit)) {\n rootObject = unwrappedInit;\n }\n\n return false;\n },\n });\n }\n\n if (!rootObject) return fileContent;\n\n const requiredImports = new Set<string>();\n const effectiveFallbackLocale = (fallbackLocale as string) ?? 'en';\n\n const metadataProperties = [\n 'id',\n 'locale',\n 'filled',\n 'fill',\n 'title',\n 'description',\n 'tags',\n 'version',\n 'priority',\n 'contentAutoTransformation',\n ];\n\n if (noMetadata) {\n // Remove key, content and metadata properties if they exist\n rootObject.properties = rootObject.properties.filter((prop: any) => {\n if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {\n let propName = '';\n if (n.Identifier.check(prop.key)) propName = prop.key.name;\n else if (n.StringLiteral.check(prop.key)) propName = prop.key.value;\n else if (n.Literal.check(prop.key)) propName = String(prop.key.value);\n\n return !['key', 'content', ...metadataProperties].includes(propName);\n }\n return true;\n });\n\n // Update satisfies type if exists\n recast.visit(ast, {\n visitNode(path) {\n const node = path.node;\n if (\n (n.TSSatisfiesExpression?.check(node) ||\n node.type === 'TSSatisfiesExpression') &&\n (node as any).typeAnnotation &&\n n.TSTypeReference.check((node as any).typeAnnotation) &&\n n.Identifier.check((node as any).typeAnnotation.typeName) &&\n (node as any).typeAnnotation.typeName.name === 'Dictionary'\n ) {\n (node as any).typeAnnotation = b.tsIndexedAccessType(\n b.tsTypeReference(b.identifier('Dictionary')),\n b.tsLiteralType(b.stringLiteral('content'))\n );\n }\n this.traverse(path);\n },\n });\n } else {\n for (const prop of metadataProperties) {\n if ((dictionary as any)[prop] !== undefined) {\n updateObjectLiteral(\n rootObject,\n { [prop]: (dictionary as any)[prop] },\n undefined,\n requiredImports\n );\n }\n }\n }\n\n if (dictionary.content !== undefined) {\n updateObjectLiteral(\n rootObject,\n noMetadata\n ? (dictionary.content as Record<string, any>)\n : { content: dictionary.content },\n effectiveFallbackLocale,\n requiredImports\n );\n }\n\n addImports(ast, requiredImports, isESM);\n\n return recast.print(ast).code;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"transformJSFile.mjs","names":[],"sources":["../../../src/writeContentDeclaration/transformJSFile.ts"],"sourcesContent":["import { getNodeType } from '@intlayer/core/dictionaryManipulator';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { ContentNode, Dictionary } from '@intlayer/types/dictionary';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport * as recast from 'recast';\nimport * as babelTsParser from 'recast/parsers/babel-ts.js';\n\nconst b = recast.types.builders;\nconst n = recast.types.namedTypes;\n\n/**\n * Unwraps TypeScript/Babel expression wrappers (satisfies, as, !, <Type>).\n * Uses string fallbacks to bypass outdated ast-types definitions.\n */\nconst unwrap = (node: any) => {\n while (\n node &&\n (n.TSSatisfiesExpression?.check(node) ||\n n.TSAsExpression?.check(node) ||\n n.TSTypeAssertion?.check(node) ||\n n.TSNonNullExpression?.check(node) ||\n [\n 'TSSatisfiesExpression',\n 'TSAsExpression',\n 'TSTypeAssertion',\n 'TSNonNullExpression',\n ].includes(node.type))\n ) {\n node = node.expression;\n }\n return node;\n};\n\n/**\n * Robustly finds a property in a recast ObjectExpression.\n * Handles quoted (\"key\") or unquoted (key) properties.\n */\nconst getMatchingProperty = (node: any, key: string) => {\n return node.properties.find((prop: any) => {\n if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {\n if (n.Identifier.check(prop.key) && prop.key.name === key) return true;\n\n if (n.StringLiteral.check(prop.key) && prop.key.value === key)\n return true;\n\n if (n.Literal.check(prop.key) && prop.key.value === key) return true;\n }\n\n return false;\n });\n};\n\n/**\n * Synchronizes numeric suffixes across locales.\n * E.g. \"Hello 1\" -> \"Hello 3\" updates \"Bonjour 1\" to \"Bonjour 3\".\n */\nconst syncNumericSuffixAcrossLocales = (\n existingNode: any,\n fallbackLocaleCode: string,\n newFallbackValue: string\n) => {\n const trailingNumberMatch = newFallbackValue.match(/\\d+(?!.*\\d)/);\n if (!trailingNumberMatch) return;\n const newTrailingNumber = trailingNumberMatch[0];\n\n if (n.ObjectExpression.check(existingNode)) {\n for (const prop of existingNode.properties) {\n if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {\n let propName = '';\n\n if (n.Identifier.check(prop.key)) propName = prop.key.name;\n else if (\n n.Literal.check(prop.key) &&\n typeof prop.key.value === 'string'\n )\n propName = prop.key.value;\n else if (n.StringLiteral.check(prop.key)) propName = prop.key.value;\n\n if (propName && propName !== fallbackLocaleCode) {\n if (\n n.Literal.check(prop.value) &&\n typeof prop.value.value === 'string'\n ) {\n const currentValue = prop.value.value;\n const currentTrailingNumberMatch =\n currentValue.match(/\\d+(?!.*\\d)/);\n\n if (currentTrailingNumberMatch) {\n prop.value = b.literal(\n currentValue.replace(/(\\d+)(?!.*\\d)/, newTrailingNumber)\n );\n }\n } else if (n.StringLiteral.check(prop.value)) {\n const currentValue = prop.value.value;\n const currentTrailingNumberMatch =\n currentValue.match(/\\d+(?!.*\\d)/);\n\n if (currentTrailingNumberMatch) {\n prop.value = b.stringLiteral(\n currentValue.replace(/(\\d+)(?!.*\\d)/, newTrailingNumber)\n );\n }\n }\n }\n }\n }\n }\n};\n\n/**\n * Checks if a value represents a multilingual Intlayer node.\n * A node is multilingual if it is a Translation node, or if it is a specialized node\n * (Markdown, HTML, etc.) that contains a Translation node.\n */\nconst isMultilingualNode = (val: any): boolean => {\n if (typeof val !== 'object' || val === null || Array.isArray(val)) {\n return false;\n }\n\n const nodeType = getNodeType(val as ContentNode);\n\n if (nodeType === NodeTypes.TRANSLATION) {\n return true;\n }\n\n if (\n nodeType === NodeTypes.MARKDOWN ||\n nodeType === NodeTypes.HTML ||\n nodeType === NodeTypes.INSERTION\n ) {\n return isMultilingualNode((val as any)[nodeType]);\n }\n\n if (\n nodeType === NodeTypes.ENUMERATION ||\n nodeType === NodeTypes.CONDITION ||\n nodeType === NodeTypes.GENDER\n ) {\n const data = (val as any)[nodeType];\n\n if (data && typeof data === 'object') {\n return Object.values(data).some((v) => isMultilingualNode(v));\n }\n }\n\n return false;\n};\n\n/**\n * Recursively builds or updates an AST node for a given dictionary value.\n */\nconst buildNodeForValue = (\n val: any,\n existingNode: any,\n fallbackLocale: string | undefined, // In per-locale mode, this is the locale of the file\n requiredImports: Set<string>\n): any => {\n const unwrappedExisting = unwrap(existingNode);\n\n // --- CRITICAL GUARD: STRICT AST PRESERVATION ---\n // If the existing node is code (JSX, Variables, standard functions), leave it alone.\n // Only allow updates to literals, plain objects, arrays, and Intlayer helpers.\n if (unwrappedExisting) {\n const isUpdatableNode =\n n.Literal.check(unwrappedExisting) ||\n n.StringLiteral.check(unwrappedExisting) ||\n n.NumericLiteral.check(unwrappedExisting) ||\n n.BooleanLiteral.check(unwrappedExisting) ||\n n.TemplateLiteral.check(unwrappedExisting) ||\n n.ObjectExpression.check(unwrappedExisting) ||\n n.ArrayExpression.check(unwrappedExisting) ||\n (n.CallExpression.check(unwrappedExisting) &&\n n.Identifier.check(unwrappedExisting.callee) &&\n [\n 't',\n 'enu',\n 'cond',\n 'gender',\n 'insert',\n 'md',\n 'html',\n 'file',\n 'nest',\n ].includes(unwrappedExisting.callee.name));\n\n if (!isUpdatableNode) {\n return existingNode;\n }\n }\n\n // If we are in per-locale mode (fallbackLocale is set)\n // and the value is not already a complex translation node,\n // we want to store it as a simple literal, NOT wrapped in t().\n if (fallbackLocale && !existingNode && !isMultilingualNode(val)) {\n if (val === null) return b.literal(null);\n if (\n typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean'\n ) {\n if (typeof val === 'string' && val.includes('\\n')) {\n return b.templateLiteral(\n [b.templateElement({ raw: val, cooked: val }, true)],\n []\n );\n }\n return b.literal(val);\n }\n }\n\n if (fallbackLocale && existingNode && !isMultilingualNode(val)) {\n if (\n n.CallExpression.check(existingNode) &&\n n.Identifier.check(existingNode.callee) &&\n existingNode.callee.name === 't'\n ) {\n const arg = unwrap(existingNode.arguments[0]);\n\n if (n.ObjectExpression.check(arg)) {\n if (typeof val === 'string') {\n syncNumericSuffixAcrossLocales(arg, fallbackLocale, val);\n }\n updateObjectLiteral(\n arg,\n { [fallbackLocale]: val },\n fallbackLocale,\n requiredImports\n );\n\n if (!fallbackLocale) {\n requiredImports.add('t');\n }\n\n return existingNode;\n }\n }\n\n if (\n (!val || typeof val !== 'object') &&\n n.CallExpression.check(existingNode) &&\n n.Identifier.check(existingNode.callee) &&\n existingNode.callee.name === 'md'\n ) {\n const innerArg = existingNode.arguments[0];\n\n if (\n n.CallExpression.check(innerArg) &&\n n.Identifier.check(innerArg.callee) &&\n innerArg.callee.name === 't'\n ) {\n const tArg = unwrap(innerArg.arguments[0]);\n\n if (n.ObjectExpression.check(tArg)) {\n if (typeof val === 'string') {\n syncNumericSuffixAcrossLocales(tArg, fallbackLocale, val);\n }\n updateObjectLiteral(\n tArg,\n { [fallbackLocale]: val },\n fallbackLocale,\n requiredImports\n );\n requiredImports.add('md');\n requiredImports.add('t');\n\n return existingNode;\n }\n }\n }\n }\n\n // 1. Primitives\n if (val === null) return b.literal(null);\n if (\n typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean'\n ) {\n if (unwrappedExisting) {\n // Preserve existing template literals (backticks)\n if (\n n.TemplateLiteral.check(unwrappedExisting) &&\n unwrappedExisting.expressions.length === 0\n ) {\n unwrappedExisting.quasis[0].value.raw = String(val);\n unwrappedExisting.quasis[0].value.cooked = String(val);\n return existingNode;\n }\n // Preserve existing standard literals (keeps quote styling)\n if (\n n.Literal.check(unwrappedExisting) ||\n n.StringLiteral.check(unwrappedExisting)\n ) {\n unwrappedExisting.value = val;\n return existingNode;\n }\n }\n\n // Force multiline strings to use Template Literals\n if (typeof val === 'string' && val.includes('\\n')) {\n return b.templateLiteral(\n [b.templateElement({ raw: val, cooked: val }, true)],\n []\n );\n }\n return b.literal(val);\n }\n\n // 2. Arrays\n if (Array.isArray(val)) {\n if (unwrappedExisting && n.ArrayExpression.check(unwrappedExisting)) {\n const elements = [...unwrappedExisting.elements];\n val.forEach((item, i) => {\n elements[i] = buildNodeForValue(\n item,\n elements[i],\n fallbackLocale,\n requiredImports\n );\n });\n\n if (elements.length > val.length) elements.length = val.length;\n unwrappedExisting.elements = elements as any;\n\n return existingNode;\n } else {\n return b.arrayExpression(\n val.map((item) =>\n buildNodeForValue(item, null, fallbackLocale, requiredImports)\n )\n );\n }\n }\n\n // 3. Intlayer Specialized Nodes\n const nodeType =\n val && typeof val === 'object' && !Array.isArray(val)\n ? getNodeType(val as ContentNode)\n : null;\n\n if (\n nodeType &&\n [\n NodeTypes.TRANSLATION,\n NodeTypes.ENUMERATION,\n NodeTypes.CONDITION,\n NodeTypes.GENDER,\n NodeTypes.INSERTION,\n NodeTypes.MARKDOWN,\n NodeTypes.HTML,\n NodeTypes.FILE,\n NodeTypes.NESTED,\n NodeTypes.ARRAY,\n NodeTypes.OBJECT,\n NodeTypes.REACT_NODE,\n NodeTypes.NUMBER,\n NodeTypes.BOOLEAN,\n NodeTypes.NULL,\n NodeTypes.UNKNOWN,\n ].includes(nodeType as any) &&\n nodeType !== NodeTypes.TEXT\n ) {\n const nodeData = (val as any)[nodeType];\n let calleeName = '';\n\n if (nodeType === NodeTypes.TRANSLATION) calleeName = 't';\n else if (nodeType === NodeTypes.ENUMERATION) calleeName = 'enu';\n else if (nodeType === NodeTypes.CONDITION) calleeName = 'cond';\n else if (nodeType === NodeTypes.GENDER) calleeName = 'gender';\n else if (nodeType === NodeTypes.INSERTION) calleeName = 'insert';\n else if (nodeType === NodeTypes.MARKDOWN) calleeName = 'md';\n else if (nodeType === NodeTypes.HTML) calleeName = 'html';\n else if (nodeType === NodeTypes.FILE) calleeName = 'file';\n else if (nodeType === NodeTypes.NESTED) calleeName = 'nest';\n\n if (calleeName) requiredImports.add(calleeName);\n\n const isMatchingCall =\n existingNode &&\n n.CallExpression.check(existingNode) &&\n n.Identifier.check(existingNode.callee) &&\n existingNode.callee.name === calleeName;\n\n if (['t', 'enu', 'cond', 'gender'].includes(calleeName)) {\n let objArg: any = null;\n\n if (\n isMatchingCall &&\n existingNode.arguments.length > 0 &&\n n.ObjectExpression.check(existingNode.arguments[0])\n ) {\n objArg = existingNode.arguments[0];\n } else {\n objArg = b.objectExpression([]);\n }\n updateObjectLiteral(objArg, nodeData, fallbackLocale, requiredImports);\n\n return isMatchingCall\n ? existingNode\n : b.callExpression(b.identifier(calleeName), [objArg]);\n }\n\n if (['md', 'html', 'insert', 'file'].includes(calleeName)) {\n const argNode = buildNodeForValue(\n nodeData,\n isMatchingCall && existingNode.arguments.length > 0\n ? existingNode.arguments[0]\n : null,\n fallbackLocale,\n requiredImports\n );\n\n if (isMatchingCall) {\n existingNode.arguments[0] = argNode;\n\n return existingNode;\n }\n\n return b.callExpression(b.identifier(calleeName), [argNode]);\n }\n\n if (calleeName === 'nest') {\n const args = [b.literal(nodeData.dictionaryKey)];\n\n if (nodeData.path) args.push(b.literal(nodeData.path));\n\n if (isMatchingCall) {\n existingNode.arguments = args;\n\n return existingNode;\n }\n\n return b.callExpression(b.identifier('nest'), args);\n }\n }\n\n // 4. Plain Object\n const objNode =\n unwrappedExisting && n.ObjectExpression.check(unwrappedExisting)\n ? unwrappedExisting\n : b.objectExpression([]);\n\n updateObjectLiteral(objNode, val, fallbackLocale, requiredImports);\n\n return existingNode && unwrappedExisting === existingNode\n ? objNode\n : existingNode || objNode;\n};\n\n/**\n * Recursively updates the AST object literal properties.\n */\nconst updateObjectLiteral = (\n node: recast.types.namedTypes.ObjectExpression,\n data: Record<string, any>,\n fallbackLocale: string | undefined,\n requiredImports: Set<string>\n) => {\n for (const [key, val] of Object.entries(data)) {\n if (val === undefined) continue;\n\n const existingProp = getMatchingProperty(node, key);\n\n if (existingProp) {\n existingProp.value = buildNodeForValue(\n val,\n existingProp.value,\n fallbackLocale,\n requiredImports\n );\n } else {\n const isValidId = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key);\n const keyNode = isValidId ? b.identifier(key) : b.literal(key);\n const valueNode = buildNodeForValue(\n val,\n null,\n fallbackLocale,\n requiredImports\n );\n node.properties.push(b.property('init', keyNode, valueNode));\n }\n }\n};\n\n/**\n * Modifies the AST's top-level imports to inject dynamically needed helper utilities seamlessly.\n */\nconst addImports = (ast: any, requiredImports: Set<string>, isESM: boolean) => {\n if (requiredImports.size === 0) return;\n\n const existingCoreImports = new Set<string>();\n let coreImportPath: any = null;\n\n recast.visit(ast, {\n visitImportDeclaration(path) {\n const source = path.node.source.value;\n\n if (source === 'intlayer') {\n coreImportPath = path;\n path.node.specifiers?.forEach((spec) => {\n if (\n n.ImportSpecifier.check(spec) &&\n typeof spec.imported.name === 'string'\n ) {\n existingCoreImports.add(spec.imported.name);\n }\n });\n }\n\n return false;\n },\n visitVariableDeclaration(path) {\n path.node.declarations.forEach((decl) => {\n if (\n n.VariableDeclarator.check(decl) &&\n n.CallExpression.check(decl.init) &&\n n.Identifier.check(decl.init.callee) &&\n decl.init.callee.name === 'require'\n ) {\n const arg = decl.init.arguments[0];\n\n if (n.Literal.check(arg)) {\n if (arg.value === 'intlayer') {\n if (n.ObjectPattern.check(decl.id)) {\n decl.id.properties.forEach((prop) => {\n if (\n n.Property.check(prop) &&\n (n.Identifier.check(prop.key) ||\n n.Identifier.check(prop.value))\n ) {\n const name = n.Identifier.check(prop.key)\n ? prop.key.name\n : (prop.value as any).name;\n existingCoreImports.add(name);\n }\n });\n } else if (n.Identifier.check(decl.id)) {\n // Handle const intlayer = require('intlayer')\n existingCoreImports.add(decl.id.name);\n }\n }\n }\n }\n });\n\n return false;\n },\n });\n\n const missingCore = Array.from(requiredImports).filter(\n (imp) => !existingCoreImports.has(imp)\n );\n\n if (missingCore.length === 0) return;\n\n if (isESM) {\n if (coreImportPath) {\n missingCore.forEach((imp) => {\n coreImportPath.node.specifiers.push(\n b.importSpecifier(b.identifier(imp))\n );\n });\n coreImportPath.node.specifiers.sort((a: any, b: any) =>\n a.imported.name.localeCompare(b.imported.name)\n );\n } else {\n const specifiers = missingCore\n .sort()\n .map((imp) => b.importSpecifier(b.identifier(imp)));\n const newImport = b.importDeclaration(specifiers, b.literal('intlayer'));\n ast.program.body.unshift(newImport);\n }\n } else {\n let insertIndex = 0;\n\n if (\n ast.program.body.length > 0 &&\n n.ExpressionStatement.check(ast.program.body[0]) &&\n n.Literal.check(ast.program.body[0].expression)\n ) {\n insertIndex = 1; // Insert after 'use strict'\n }\n const cjsLines: any[] = [];\n\n const properties = missingCore.sort().map((imp) => {\n const prop = b.property('init', b.identifier(imp), b.identifier(imp));\n prop.shorthand = true;\n\n return prop;\n });\n cjsLines.push(\n b.variableDeclaration('const', [\n b.variableDeclarator(\n b.objectPattern(properties),\n b.callExpression(b.identifier('require'), [b.literal('intlayer')])\n ),\n ])\n );\n\n ast.program.body.splice(insertIndex, 0, ...cjsLines);\n }\n};\n\n/**\n * Updates a JS/TS file seamlessly to map new localization keys, arrays, complex nodes and nested dictionaries gracefully using AST updates via Recast parser.\n */\nexport const transformJSFile = async (\n fileContent: string,\n dictionary: Dictionary,\n fallbackLocale?: Locale,\n noMetadata?: boolean\n): Promise<string> => {\n if (!dictionary || typeof dictionary !== 'object') return fileContent;\n\n let ast: any;\n try {\n ast = recast.parse(fileContent, {\n parser: babelTsParser,\n });\n } catch (error) {\n console.error({ error });\n return fileContent;\n }\n\n let rootObject: any = null;\n let isESM = false;\n\n recast.visit(ast, {\n visitExportDefaultDeclaration() {\n isESM = true;\n\n return false;\n },\n visitImportDeclaration() {\n isESM = true;\n\n return false;\n },\n });\n\n recast.visit(ast, {\n visitExportDefaultDeclaration(path) {\n const decl = path.node.declaration;\n const unwrappedDecl = unwrap(decl);\n\n if (n.ObjectExpression.check(unwrappedDecl)) {\n rootObject = unwrappedDecl;\n } else if (n.Identifier.check(unwrappedDecl)) {\n const varName = unwrappedDecl.name;\n recast.visit(ast, {\n visitVariableDeclarator(vp) {\n const unwrappedInit = unwrap(vp.node.init);\n\n if (\n n.Identifier.check(vp.node.id) &&\n vp.node.id.name === varName &&\n n.ObjectExpression.check(unwrappedInit)\n ) {\n rootObject = unwrappedInit;\n }\n\n return false;\n },\n });\n }\n\n return false;\n },\n visitAssignmentExpression(path) {\n const left = path.node.left;\n\n if (n.MemberExpression.check(left)) {\n if (\n n.Identifier.check(left.object) &&\n left.object.name === 'module' &&\n n.Identifier.check(left.property) &&\n left.property.name === 'exports'\n ) {\n const unwrappedRight = unwrap(path.node.right);\n\n if (n.ObjectExpression.check(unwrappedRight)) {\n rootObject = unwrappedRight;\n }\n }\n\n if (\n n.Identifier.check(left.object) &&\n left.object.name === 'exports' &&\n n.Identifier.check(left.property) &&\n left.property.name === 'default'\n ) {\n const unwrappedRight = unwrap(path.node.right);\n\n if (n.ObjectExpression.check(unwrappedRight)) {\n rootObject = unwrappedRight;\n }\n }\n }\n this.traverse(path);\n },\n });\n\n if (!rootObject) {\n recast.visit(ast, {\n visitVariableDeclarator(path) {\n const unwrappedInit = unwrap(path.node.init);\n\n if (!rootObject && n.ObjectExpression.check(unwrappedInit)) {\n rootObject = unwrappedInit;\n }\n\n return false;\n },\n });\n }\n\n if (!rootObject) return fileContent;\n\n const requiredImports = new Set<string>();\n const effectiveFallbackLocale = (fallbackLocale as string) ?? 'en';\n\n const metadataProperties = [\n 'id',\n 'locale',\n 'filled',\n 'fill',\n 'title',\n 'description',\n 'tags',\n 'version',\n 'priority',\n 'contentAutoTransformation',\n ];\n\n if (noMetadata) {\n // Remove key, content and metadata properties if they exist\n rootObject.properties = rootObject.properties.filter((prop: any) => {\n if (n.Property.check(prop) || n.ObjectProperty.check(prop)) {\n let propName = '';\n if (n.Identifier.check(prop.key)) propName = prop.key.name;\n else if (n.StringLiteral.check(prop.key)) propName = prop.key.value;\n else if (n.Literal.check(prop.key)) propName = String(prop.key.value);\n\n return !['key', 'content', ...metadataProperties].includes(propName);\n }\n return true;\n });\n\n // Update satisfies type if exists\n recast.visit(ast, {\n visitNode(path) {\n const node = path.node;\n if (\n (n.TSSatisfiesExpression?.check(node) ||\n node.type === 'TSSatisfiesExpression') &&\n (node as any).typeAnnotation &&\n n.TSTypeReference.check((node as any).typeAnnotation) &&\n n.Identifier.check((node as any).typeAnnotation.typeName) &&\n (node as any).typeAnnotation.typeName.name === 'Dictionary'\n ) {\n (node as any).typeAnnotation = b.tsIndexedAccessType(\n b.tsTypeReference(b.identifier('Dictionary')),\n b.tsLiteralType(b.stringLiteral('content'))\n );\n }\n this.traverse(path);\n },\n });\n } else {\n for (const prop of metadataProperties) {\n if ((dictionary as any)[prop] !== undefined) {\n updateObjectLiteral(\n rootObject,\n { [prop]: (dictionary as any)[prop] },\n undefined,\n requiredImports\n );\n }\n }\n }\n\n if (dictionary.content !== undefined) {\n updateObjectLiteral(\n rootObject,\n noMetadata\n ? (dictionary.content as Record<string, any>)\n : { content: dictionary.content },\n effectiveFallbackLocale,\n requiredImports\n );\n }\n\n addImports(ast, requiredImports, isESM);\n\n return recast.print(ast).code;\n};\n"],"mappings":"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"}