gt 2.14.35 → 2.14.37

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 (430) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/dist/api/collectUserEditDiffs.js +112 -155
  3. package/dist/api/collectUserEditDiffs.js.map +1 -0
  4. package/dist/api/downloadFileBatch.js +164 -241
  5. package/dist/api/downloadFileBatch.js.map +1 -0
  6. package/dist/api/saveLocalEdits.js +37 -41
  7. package/dist/api/saveLocalEdits.js.map +1 -0
  8. package/dist/bin/bin-entry.js +17 -7
  9. package/dist/bin/bin-entry.js.map +1 -0
  10. package/dist/bin/bin-main.js +43 -61
  11. package/dist/bin/bin-main.js.map +1 -0
  12. package/dist/cli/base.js +382 -497
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/download.js +41 -49
  15. package/dist/cli/commands/download.js.map +1 -0
  16. package/dist/cli/commands/enqueue.js +26 -25
  17. package/dist/cli/commands/enqueue.js.map +1 -0
  18. package/dist/cli/commands/setupProject.js +33 -36
  19. package/dist/cli/commands/setupProject.js.map +1 -0
  20. package/dist/cli/commands/stage.js +53 -61
  21. package/dist/cli/commands/stage.js.map +1 -0
  22. package/dist/cli/commands/translate.js +75 -112
  23. package/dist/cli/commands/translate.js.map +1 -0
  24. package/dist/cli/commands/upload.js +185 -213
  25. package/dist/cli/commands/upload.js.map +1 -0
  26. package/dist/cli/commands/utils/validation.js +39 -34
  27. package/dist/cli/commands/utils/validation.js.map +1 -0
  28. package/dist/cli/flags.js +35 -62
  29. package/dist/cli/flags.js.map +1 -0
  30. package/dist/cli/inline.js +112 -137
  31. package/dist/cli/inline.js.map +1 -0
  32. package/dist/cli/next.js +17 -12
  33. package/dist/cli/next.js.map +1 -0
  34. package/dist/cli/node.js +19 -15
  35. package/dist/cli/node.js.map +1 -0
  36. package/dist/cli/python.js +13 -8
  37. package/dist/cli/python.js.map +1 -0
  38. package/dist/cli/react.js +61 -78
  39. package/dist/cli/react.js.map +1 -0
  40. package/dist/config/defaults.js +16 -11
  41. package/dist/config/defaults.js.map +1 -0
  42. package/dist/config/generateSettings.js +167 -269
  43. package/dist/config/generateSettings.js.map +1 -0
  44. package/dist/config/optionPresets.js +78 -96
  45. package/dist/config/optionPresets.js.map +1 -0
  46. package/dist/config/resolveConfig.js +27 -32
  47. package/dist/config/resolveConfig.js.map +1 -0
  48. package/dist/config/utils.js +7 -3
  49. package/dist/config/utils.js.map +1 -0
  50. package/dist/config/validateSettings.js +19 -30
  51. package/dist/config/validateSettings.js.map +1 -0
  52. package/dist/console/colors.js +18 -13
  53. package/dist/console/colors.js.map +1 -0
  54. package/dist/console/displayTranslateSummary.js +40 -37
  55. package/dist/console/displayTranslateSummary.js.map +1 -0
  56. package/dist/console/formatting.js +8 -5
  57. package/dist/console/formatting.js.map +1 -0
  58. package/dist/console/index.d.ts +11 -9
  59. package/dist/console/index.js +53 -50
  60. package/dist/console/index.js.map +1 -0
  61. package/dist/console/inkFields.d.ts +23 -0
  62. package/dist/console/inkFields.js +87 -0
  63. package/dist/console/inkFields.js.map +1 -0
  64. package/dist/console/inkLayout.d.ts +7 -0
  65. package/dist/console/inkLayout.js +139 -0
  66. package/dist/console/inkLayout.js.map +1 -0
  67. package/dist/console/inkLocaleData.d.ts +4 -0
  68. package/dist/console/inkLocaleData.js +32 -0
  69. package/dist/console/inkLocaleData.js.map +1 -0
  70. package/dist/console/inkPrompts.d.ts +8 -0
  71. package/dist/console/inkPrompts.js +496 -0
  72. package/dist/console/inkPrompts.js.map +1 -0
  73. package/dist/console/inkSession.d.ts +3 -0
  74. package/dist/console/inkSession.js +42 -0
  75. package/dist/console/inkSession.js.map +1 -0
  76. package/dist/console/inkTerminal.d.ts +4 -0
  77. package/dist/console/inkTerminal.js +15 -0
  78. package/dist/console/inkTerminal.js.map +1 -0
  79. package/dist/console/inkTypes.d.ts +66 -0
  80. package/dist/console/inkTypes.js +1 -0
  81. package/dist/console/inkUtils.d.ts +24 -0
  82. package/dist/console/inkUtils.js +87 -0
  83. package/dist/console/inkUtils.js.map +1 -0
  84. package/dist/console/logger.js +209 -249
  85. package/dist/console/logger.js.map +1 -0
  86. package/dist/console/logging.d.ts +14 -0
  87. package/dist/console/logging.js +203 -162
  88. package/dist/console/logging.js.map +1 -0
  89. package/dist/console/promptParsing.d.ts +5 -0
  90. package/dist/console/promptParsing.js +28 -0
  91. package/dist/console/promptParsing.js.map +1 -0
  92. package/dist/console/terminalSession.d.ts +5 -0
  93. package/dist/console/terminalSession.js +38 -0
  94. package/dist/console/terminalSession.js.map +1 -0
  95. package/dist/extraction/index.js +3 -2
  96. package/dist/extraction/mapToUpdates.js +19 -18
  97. package/dist/extraction/mapToUpdates.js.map +1 -0
  98. package/dist/extraction/postProcess.js +68 -86
  99. package/dist/extraction/postProcess.js.map +1 -0
  100. package/dist/formats/files/aggregateFiles.js +223 -304
  101. package/dist/formats/files/aggregateFiles.js.map +1 -0
  102. package/dist/formats/files/collectFiles.js +53 -54
  103. package/dist/formats/files/collectFiles.js.map +1 -0
  104. package/dist/formats/files/convertToFileTranslationData.js +21 -19
  105. package/dist/formats/files/convertToFileTranslationData.js.map +1 -0
  106. package/dist/formats/files/fileMapping.js +82 -119
  107. package/dist/formats/files/fileMapping.js.map +1 -0
  108. package/dist/formats/files/preprocess/mdx.js +15 -12
  109. package/dist/formats/files/preprocess/mdx.js.map +1 -0
  110. package/dist/formats/files/preprocess/mintlify.js +15 -13
  111. package/dist/formats/files/preprocess/mintlify.js.map +1 -0
  112. package/dist/formats/files/preprocessContent.js +20 -21
  113. package/dist/formats/files/preprocessContent.js.map +1 -0
  114. package/dist/formats/files/save.js +18 -15
  115. package/dist/formats/files/save.js.map +1 -0
  116. package/dist/formats/files/supportedFiles.js +27 -22
  117. package/dist/formats/files/supportedFiles.js.map +1 -0
  118. package/dist/formats/files/transformFormat.js +93 -100
  119. package/dist/formats/files/transformFormat.js.map +1 -0
  120. package/dist/formats/json/extractJson.js +83 -110
  121. package/dist/formats/json/extractJson.js.map +1 -0
  122. package/dist/formats/json/flattenJson.js +41 -48
  123. package/dist/formats/json/flattenJson.js.map +1 -0
  124. package/dist/formats/json/jsonPath.js +20 -15
  125. package/dist/formats/json/jsonPath.js.map +1 -0
  126. package/dist/formats/json/jsonPointer.js +17 -17
  127. package/dist/formats/json/jsonPointer.js.map +1 -0
  128. package/dist/formats/json/mergeJson.js +230 -371
  129. package/dist/formats/json/mergeJson.js.map +1 -0
  130. package/dist/formats/json/parseJson.js +74 -111
  131. package/dist/formats/json/parseJson.js.map +1 -0
  132. package/dist/formats/json/transformJson.js +53 -61
  133. package/dist/formats/json/transformJson.js.map +1 -0
  134. package/dist/formats/json/utils.js +158 -187
  135. package/dist/formats/json/utils.js.map +1 -0
  136. package/dist/formats/parseKeyedMetadata.js +85 -106
  137. package/dist/formats/parseKeyedMetadata.js.map +1 -0
  138. package/dist/formats/utils.js +13 -23
  139. package/dist/formats/utils.js.map +1 -0
  140. package/dist/formats/yaml/extractYaml.js +32 -31
  141. package/dist/formats/yaml/extractYaml.js.map +1 -0
  142. package/dist/formats/yaml/mergeYaml.js +43 -60
  143. package/dist/formats/yaml/mergeYaml.js.map +1 -0
  144. package/dist/formats/yaml/parseYaml.js +34 -23
  145. package/dist/formats/yaml/parseYaml.js.map +1 -0
  146. package/dist/formats/yaml/utils.js +19 -21
  147. package/dist/formats/yaml/utils.js.map +1 -0
  148. package/dist/fs/clearLocaleDirs.js +82 -114
  149. package/dist/fs/clearLocaleDirs.js.map +1 -0
  150. package/dist/fs/config/downloadedVersions.js +174 -188
  151. package/dist/fs/config/downloadedVersions.js.map +1 -0
  152. package/dist/fs/config/loadConfig.js +12 -8
  153. package/dist/fs/config/loadConfig.js.map +1 -0
  154. package/dist/fs/config/parseFilesConfig.js +166 -227
  155. package/dist/fs/config/parseFilesConfig.js.map +1 -0
  156. package/dist/fs/config/setupConfig.js +43 -52
  157. package/dist/fs/config/setupConfig.js.map +1 -0
  158. package/dist/fs/config/updateConfig.js +44 -56
  159. package/dist/fs/config/updateConfig.js.map +1 -0
  160. package/dist/fs/config/updateVersions.js +27 -28
  161. package/dist/fs/config/updateVersions.js.map +1 -0
  162. package/dist/fs/copyFile.js +33 -37
  163. package/dist/fs/copyFile.js.map +1 -0
  164. package/dist/fs/createLoadTranslationsFile.js +32 -48
  165. package/dist/fs/createLoadTranslationsFile.js.map +1 -0
  166. package/dist/fs/determineFramework/detectPythonLibrary.js +30 -34
  167. package/dist/fs/determineFramework/detectPythonLibrary.js.map +1 -0
  168. package/dist/fs/determineFramework/index.js +46 -64
  169. package/dist/fs/determineFramework/index.js.map +1 -0
  170. package/dist/fs/determineFramework/matchPyprojectDependency.js +65 -78
  171. package/dist/fs/determineFramework/matchPyprojectDependency.js.map +1 -0
  172. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js +21 -19
  173. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js.map +1 -0
  174. package/dist/fs/determineFramework/matchSetupPyDependency.js +60 -81
  175. package/dist/fs/determineFramework/matchSetupPyDependency.js.map +1 -0
  176. package/dist/fs/determineFramework/resolveGtDependency.js +15 -15
  177. package/dist/fs/determineFramework/resolveGtDependency.js.map +1 -0
  178. package/dist/fs/findFilepath.js +63 -78
  179. package/dist/fs/findFilepath.js.map +1 -0
  180. package/dist/fs/loadJSON.js +18 -15
  181. package/dist/fs/loadJSON.js.map +1 -0
  182. package/dist/fs/matchFiles.js +12 -7
  183. package/dist/fs/matchFiles.js.map +1 -0
  184. package/dist/fs/saveJSON.js +10 -6
  185. package/dist/fs/saveJSON.js.map +1 -0
  186. package/dist/fs/utils.js +19 -15
  187. package/dist/fs/utils.js.map +1 -0
  188. package/dist/functions.d.ts +2 -1
  189. package/dist/functions.js +3 -6
  190. package/dist/generated/version.d.ts +1 -1
  191. package/dist/generated/version.js +6 -2
  192. package/dist/generated/version.js.map +1 -0
  193. package/dist/git/branches.js +77 -83
  194. package/dist/git/branches.js.map +1 -0
  195. package/dist/hooks/postProcess.js +97 -114
  196. package/dist/hooks/postProcess.js.map +1 -0
  197. package/dist/index.js +23 -31
  198. package/dist/index.js.map +1 -0
  199. package/dist/locadex/setupFlow.js +11 -8
  200. package/dist/locadex/setupFlow.js.map +1 -0
  201. package/dist/main.js +17 -7
  202. package/dist/main.js.map +1 -0
  203. package/dist/next/config/parseNextConfig.js +32 -51
  204. package/dist/next/config/parseNextConfig.js.map +1 -0
  205. package/dist/next/jsx/utils.js +25 -37
  206. package/dist/next/jsx/utils.js.map +1 -0
  207. package/dist/next/parse/handleInitGT.js +87 -154
  208. package/dist/next/parse/handleInitGT.js.map +1 -0
  209. package/dist/next/parse/wrapContent.js +136 -158
  210. package/dist/next/parse/wrapContent.js.map +1 -0
  211. package/dist/python/parse/createPythonInlineUpdates.js +36 -33
  212. package/dist/python/parse/createPythonInlineUpdates.js.map +1 -0
  213. package/dist/react/config/createESBuildConfig.js +115 -115
  214. package/dist/react/config/createESBuildConfig.js.map +1 -0
  215. package/dist/react/jsx/evaluateJsx.js +90 -124
  216. package/dist/react/jsx/evaluateJsx.js.map +1 -0
  217. package/dist/react/jsx/utils/buildImportMap.js +24 -28
  218. package/dist/react/jsx/utils/buildImportMap.js.map +1 -0
  219. package/dist/react/jsx/utils/constants.js +79 -87
  220. package/dist/react/jsx/utils/constants.js.map +1 -0
  221. package/dist/react/jsx/utils/extractSourceCode.js +36 -37
  222. package/dist/react/jsx/utils/extractSourceCode.js.map +1 -0
  223. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +30 -30
  224. package/dist/react/jsx/utils/getCalleeNameFromExpression.js.map +1 -0
  225. package/dist/react/jsx/utils/getPathsAndAliases.js +70 -105
  226. package/dist/react/jsx/utils/getPathsAndAliases.js.map +1 -0
  227. package/dist/react/jsx/utils/isNumberLiteral.js +13 -11
  228. package/dist/react/jsx/utils/isNumberLiteral.js.map +1 -0
  229. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +103 -148
  230. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js.map +1 -0
  231. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js +305 -389
  232. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js.map +1 -0
  233. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +122 -193
  234. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js.map +1 -0
  235. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +50 -64
  236. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js.map +1 -0
  237. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +41 -68
  238. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js.map +1 -0
  239. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +760 -1107
  240. package/dist/react/jsx/utils/jsxParsing/parseJsx.js.map +1 -0
  241. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +35 -71
  242. package/dist/react/jsx/utils/jsxParsing/parseTProps.js.map +1 -0
  243. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +39 -58
  244. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js.map +1 -0
  245. package/dist/react/jsx/utils/jsxParsing/types.js +10 -24
  246. package/dist/react/jsx/utils/jsxParsing/types.js.map +1 -0
  247. package/dist/react/jsx/utils/mapAttributeName.js +13 -13
  248. package/dist/react/jsx/utils/mapAttributeName.js.map +1 -0
  249. package/dist/react/jsx/utils/parseAst.js +142 -272
  250. package/dist/react/jsx/utils/parseAst.js.map +1 -0
  251. package/dist/react/jsx/utils/parseString.js +726 -1090
  252. package/dist/react/jsx/utils/parseString.js.map +1 -0
  253. package/dist/react/jsx/utils/parseStringFunction.js +274 -401
  254. package/dist/react/jsx/utils/parseStringFunction.js.map +1 -0
  255. package/dist/react/jsx/utils/resolveImportPath.d.ts +1 -1
  256. package/dist/react/jsx/utils/resolveImportPath.js +125 -108
  257. package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
  258. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
  259. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
  260. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
  261. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
  262. package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
  263. package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
  264. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
  265. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
  266. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
  267. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
  268. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
  269. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
  270. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
  271. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
  272. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
  273. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
  274. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
  275. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
  276. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
  277. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
  278. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
  279. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
  280. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
  281. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
  282. package/dist/react/jsx/utils/validateStringFunction.js +21 -29
  283. package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
  284. package/dist/react/jsx/wrapJsx.js +192 -375
  285. package/dist/react/jsx/wrapJsx.js.map +1 -0
  286. package/dist/react/parse/addVitePlugin/index.js +40 -34
  287. package/dist/react/parse/addVitePlugin/index.js.map +1 -0
  288. package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
  289. package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
  290. package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
  291. package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
  292. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
  293. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
  294. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
  295. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
  296. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
  297. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
  298. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
  299. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
  300. package/dist/react/parse/createDictionaryUpdates.js +121 -185
  301. package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
  302. package/dist/react/parse/createInlineUpdates.js +123 -139
  303. package/dist/react/parse/createInlineUpdates.js.map +1 -0
  304. package/dist/react/parse/wrapContent.js +131 -156
  305. package/dist/react/parse/wrapContent.js.map +1 -0
  306. package/dist/react/utils/flattenDictionary.js +55 -70
  307. package/dist/react/utils/flattenDictionary.js.map +1 -0
  308. package/dist/react/utils/getEntryAndMetadata.js +14 -10
  309. package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
  310. package/dist/react/utils/getVariableName.js +36 -33
  311. package/dist/react/utils/getVariableName.js.map +1 -0
  312. package/dist/setup/detectFramework.js +85 -102
  313. package/dist/setup/detectFramework.js.map +1 -0
  314. package/dist/setup/frameworkUtils.js +17 -28
  315. package/dist/setup/frameworkUtils.js.map +1 -0
  316. package/dist/setup/userInput.js +24 -31
  317. package/dist/setup/userInput.js.map +1 -0
  318. package/dist/setup/wizard.js +141 -143
  319. package/dist/setup/wizard.js.map +1 -0
  320. package/dist/state/mintlifyRefMap.js +12 -9
  321. package/dist/state/mintlifyRefMap.js.map +1 -0
  322. package/dist/state/recentDownloads.js +26 -23
  323. package/dist/state/recentDownloads.js.map +1 -0
  324. package/dist/state/translateWarnings.js +17 -8
  325. package/dist/state/translateWarnings.js.map +1 -0
  326. package/dist/translation/parse.js +77 -98
  327. package/dist/translation/parse.js.map +1 -0
  328. package/dist/translation/stage.js +28 -43
  329. package/dist/translation/stage.js.map +1 -0
  330. package/dist/translation/validate.js +68 -91
  331. package/dist/translation/validate.js.map +1 -0
  332. package/dist/types/libraries.js +93 -91
  333. package/dist/types/libraries.js.map +1 -0
  334. package/dist/types/parsing.js +19 -10
  335. package/dist/types/parsing.js.map +1 -0
  336. package/dist/utils/addExplicitAnchorIds.js +270 -389
  337. package/dist/utils/addExplicitAnchorIds.js.map +1 -0
  338. package/dist/utils/calculateTimeoutMs.js +11 -6
  339. package/dist/utils/calculateTimeoutMs.js.map +1 -0
  340. package/dist/utils/constants.js +15 -12
  341. package/dist/utils/constants.js.map +1 -0
  342. package/dist/utils/credentials.js +67 -114
  343. package/dist/utils/credentials.js.map +1 -0
  344. package/dist/utils/fetch.js +22 -20
  345. package/dist/utils/fetch.js.map +1 -0
  346. package/dist/utils/flattenJsonFiles.js +27 -34
  347. package/dist/utils/flattenJsonFiles.js.map +1 -0
  348. package/dist/utils/gitDiff.js +30 -32
  349. package/dist/utils/gitDiff.js.map +1 -0
  350. package/dist/utils/gt.js +7 -2
  351. package/dist/utils/gt.js.map +1 -0
  352. package/dist/utils/hash.js +14 -9
  353. package/dist/utils/hash.js.map +1 -0
  354. package/dist/utils/headers.js +10 -13
  355. package/dist/utils/headers.js.map +1 -0
  356. package/dist/utils/installPackage.js +70 -75
  357. package/dist/utils/installPackage.js.map +1 -0
  358. package/dist/utils/localizeRelativeAssets.js +114 -157
  359. package/dist/utils/localizeRelativeAssets.js.map +1 -0
  360. package/dist/utils/localizeStaticImports.js +229 -371
  361. package/dist/utils/localizeStaticImports.js.map +1 -0
  362. package/dist/utils/localizeStaticUrls.js +241 -424
  363. package/dist/utils/localizeStaticUrls.js.map +1 -0
  364. package/dist/utils/mintlifyTitleFallback.js +64 -72
  365. package/dist/utils/mintlifyTitleFallback.js.map +1 -0
  366. package/dist/utils/monorepoVersionCheck.js +177 -215
  367. package/dist/utils/monorepoVersionCheck.js.map +1 -0
  368. package/dist/utils/packageInfo.js +17 -16
  369. package/dist/utils/packageInfo.js.map +1 -0
  370. package/dist/utils/packageJson.js +51 -66
  371. package/dist/utils/packageJson.js.map +1 -0
  372. package/dist/utils/packageManager.js +237 -260
  373. package/dist/utils/packageManager.js.map +1 -0
  374. package/dist/utils/parse/needsCJS.js +36 -69
  375. package/dist/utils/parse/needsCJS.js.map +1 -0
  376. package/dist/utils/persistPostprocessHashes.js +30 -32
  377. package/dist/utils/persistPostprocessHashes.js.map +1 -0
  378. package/dist/utils/processAnchorIds.js +32 -54
  379. package/dist/utils/processAnchorIds.js.map +1 -0
  380. package/dist/utils/processOpenApi.js +469 -578
  381. package/dist/utils/processOpenApi.js.map +1 -0
  382. package/dist/utils/resolveMintlifyRefs.js +89 -105
  383. package/dist/utils/resolveMintlifyRefs.js.map +1 -0
  384. package/dist/utils/resolvePublish.js +46 -54
  385. package/dist/utils/resolvePublish.js.map +1 -0
  386. package/dist/utils/sanitizeFileContent.js +20 -27
  387. package/dist/utils/sanitizeFileContent.js.map +1 -0
  388. package/dist/utils/sharedStaticAssets.js +248 -366
  389. package/dist/utils/sharedStaticAssets.js.map +1 -0
  390. package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
  391. package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
  392. package/dist/utils/validateMdx.js +26 -23
  393. package/dist/utils/validateMdx.js.map +1 -0
  394. package/dist/utils/wrapPlainUrls.js +58 -70
  395. package/dist/utils/wrapPlainUrls.js.map +1 -0
  396. package/dist/workflows/download.js +92 -126
  397. package/dist/workflows/download.js.map +1 -0
  398. package/dist/workflows/enqueue.js +47 -54
  399. package/dist/workflows/enqueue.js.map +1 -0
  400. package/dist/workflows/publish.js +29 -29
  401. package/dist/workflows/publish.js.map +1 -0
  402. package/dist/workflows/setupProject.js +39 -40
  403. package/dist/workflows/setupProject.js.map +1 -0
  404. package/dist/workflows/stage.js +61 -65
  405. package/dist/workflows/stage.js.map +1 -0
  406. package/dist/workflows/steps/BranchStep.js +118 -163
  407. package/dist/workflows/steps/BranchStep.js.map +1 -0
  408. package/dist/workflows/steps/DownloadStep.js +107 -137
  409. package/dist/workflows/steps/DownloadStep.js.map +1 -0
  410. package/dist/workflows/steps/EnqueueStep.js +32 -32
  411. package/dist/workflows/steps/EnqueueStep.js.map +1 -0
  412. package/dist/workflows/steps/PollJobsStep.js +208 -292
  413. package/dist/workflows/steps/PollJobsStep.js.map +1 -0
  414. package/dist/workflows/steps/PublishStep.js +33 -38
  415. package/dist/workflows/steps/PublishStep.js.map +1 -0
  416. package/dist/workflows/steps/SetupStep.js +71 -72
  417. package/dist/workflows/steps/SetupStep.js.map +1 -0
  418. package/dist/workflows/steps/TagStep.js +39 -44
  419. package/dist/workflows/steps/TagStep.js.map +1 -0
  420. package/dist/workflows/steps/UploadSourcesStep.js +108 -140
  421. package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
  422. package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
  423. package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
  424. package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
  425. package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
  426. package/dist/workflows/steps/WorkflowStep.js +6 -2
  427. package/dist/workflows/steps/WorkflowStep.js.map +1 -0
  428. package/dist/workflows/upload.js +45 -46
  429. package/dist/workflows/upload.js.map +1 -0
  430. package/package.json +14 -7
@@ -1,376 +1,235 @@
1
- import { exitSync } from '../../console/logging.js';
2
- import { logger } from '../../console/logger.js';
3
- import { findMatchingItemArray, findMatchingItemObject, generateSourceObjectPointers, getIdentifyingLocaleProperty, getSourceObjectOptionsArray, validateJsonSchema, } from './utils.js';
4
- import { getLocaleProperties } from '@generaltranslation/format';
5
- import { replaceLocalePlaceholders } from '../utils.js';
6
- import { gt } from '../../utils/gt.js';
7
- import { applyStructuralTransforms, unapplyStructuralTransforms, } from './transformJson.js';
8
- import { getJSONPathMatches, getJSONPathValues } from './jsonPath.js';
9
- import { getJSONPointerValue, setJSONPointerValue } from './jsonPointer.js';
10
- export function mergeJson(originalContent, inputPath, options, targets, defaultLocale, localeOrder = []) {
11
- const jsonSchema = validateJsonSchema(options, inputPath);
12
- if (!jsonSchema) {
13
- return targets.map((target) => target.translatedContent);
14
- }
15
- let originalJson;
16
- try {
17
- originalJson = JSON.parse(originalContent);
18
- }
19
- catch {
20
- logger.error(`Invalid JSON file: ${inputPath}`);
21
- return exitSync(1);
22
- }
23
- const useCanonicalLocaleKeys = options?.experimentalCanonicalLocaleKeys ?? false;
24
- const canonicalDefaultLocale = useCanonicalLocaleKeys
25
- ? gt.resolveCanonicalLocale(defaultLocale)
26
- : defaultLocale;
27
- const canonicalLocaleOrder = useCanonicalLocaleKeys
28
- ? localeOrder.map((locale) => gt.resolveCanonicalLocale(locale))
29
- : localeOrder;
30
- if (jsonSchema.structuralTransform && jsonSchema.composite) {
31
- applyStructuralTransforms(originalJson, jsonSchema.structuralTransform, jsonSchema.composite);
32
- }
33
- // Handle include
34
- if (jsonSchema.include) {
35
- const output = [];
36
- for (const target of targets) {
37
- // Must clone the original JSON to avoid mutations
38
- const mergedJson = structuredClone(originalJson);
39
- const translatedJson = JSON.parse(target.translatedContent);
40
- for (const [jsonPointer, translatedValue] of Object.entries(translatedJson)) {
41
- try {
42
- const value = getJSONPointerValue(mergedJson, jsonPointer);
43
- if (!value)
44
- continue;
45
- setJSONPointerValue(mergedJson, jsonPointer, translatedValue);
46
- }
47
- catch {
48
- /* empty */
49
- }
50
- }
51
- output.push(JSON.stringify(mergedJson, null, 2));
52
- }
53
- return output;
54
- }
55
- if (!jsonSchema.composite) {
56
- logger.error('No composite property found in JSON schema');
57
- return exitSync(1);
58
- }
59
- // Handle composite
60
- // Create a deep copy of the original JSON to avoid mutations
61
- const mergedJson = structuredClone(originalJson);
62
- // Pre-parse all target contents ONCE (avoid re-parsing per pointer)
63
- const parsedTargets = targets.map((target) => ({
64
- ...target,
65
- parsedContent: JSON.parse(target.translatedContent),
66
- }));
67
- // Create mapping of sourceObjectPointer to SourceObjectOptions
68
- const sourceObjectPointers = generateSourceObjectPointers(jsonSchema.composite, originalJson);
69
- // Find the source object
70
- for (const [sourceObjectPointer, { sourceObjectValue, sourceObjectOptions },] of Object.entries(sourceObjectPointers)) {
71
- // Find the source item
72
- if (sourceObjectOptions.type === 'array') {
73
- // Validate type
74
- if (!Array.isArray(sourceObjectValue)) {
75
- logger.error(`Source object value is not an array at path: ${sourceObjectPointer}`);
76
- return exitSync(1);
77
- }
78
- // Get source item for default locale
79
- const matchingDefaultLocaleItems = findMatchingItemArray(canonicalDefaultLocale, sourceObjectOptions, sourceObjectPointer, sourceObjectValue);
80
- if (!Object.keys(matchingDefaultLocaleItems).length) {
81
- logger.warn(`Matching sourceItems not found at path: ${sourceObjectPointer}. Check that your JSON file includes the key field. Skipping this target`);
82
- continue;
83
- }
84
- const matchingDefaultLocaleItemKeys = new Set(Object.keys(matchingDefaultLocaleItems));
85
- // For each target:
86
- // 1. Get the target items
87
- // 2. Track all array indecies to remove (will be overwritten)
88
- // 3. Merge matchingDefaultLocaleItems and targetItems
89
- // 4. Validate that the mergedItems is not empty
90
- // For each target item:
91
- // 5. Validate that all the array indecies are still present in the source json
92
- // 6. Override the source item with the translated values
93
- // 7. Apply additional mutations to the sourceItem
94
- // 8. Track all items to add
95
- // 9. Check that items to add is >= items to remove
96
- // 10. Remove all items for the target locale (they can be identified by the key)
97
- const indiciesToRemove = new Set();
98
- const itemsToAdd = [];
99
- for (const target of parsedTargets) {
100
- let targetItems = target.parsedContent[sourceObjectPointer];
101
- // 1. Get the target items
102
- if (!targetItems) {
103
- // If no translation can be found, a transformation may need to happen still
104
- targetItems = {};
105
- }
106
- // 2. Track all array indecies to remove (will be overwritten)
107
- const targetItemsToRemove = findMatchingItemArray(useCanonicalLocaleKeys
108
- ? gt.resolveCanonicalLocale(target.targetLocale)
109
- : target.targetLocale, sourceObjectOptions, sourceObjectPointer, sourceObjectValue);
110
- Object.values(targetItemsToRemove).forEach(({ index }) => indiciesToRemove.add(index));
111
- // Remap mismatched positional keys to current source positions
112
- const sourceKeys = [...matchingDefaultLocaleItemKeys];
113
- const remappedTargetItems = {};
114
- for (const [key, value] of Object.entries(targetItems)) {
115
- if (matchingDefaultLocaleItemKeys.has(key)) {
116
- remappedTargetItems[key] = value;
117
- }
118
- else if (sourceKeys.length === 1 &&
119
- !(sourceKeys[0] in remappedTargetItems)) {
120
- remappedTargetItems[sourceKeys[0]] = value;
121
- }
122
- else {
123
- logger.warn(`Skipping translated item at ${key}: cannot map to source item at path ${sourceObjectPointer}`);
124
- }
125
- }
126
- // Merge matchingDefaultLocaleItems and remapped targetItems
127
- const mergedItems = {
128
- ...(sourceObjectOptions.transform ? matchingDefaultLocaleItems : {}),
129
- ...remappedTargetItems,
130
- };
131
- // 4. Validate that the mergedItems is not empty
132
- if (Object.keys(mergedItems).length === 0) {
133
- logger.warn(`Translated JSON for locale: ${target.targetLocale} does not have a valid sourceObjectPointer: ${sourceObjectPointer}. Skipping this target`);
134
- continue;
135
- }
136
- for (const [sourceItemPointer, targetItem] of Object.entries(mergedItems)) {
137
- // 5. Validate that all the array indecies are still present in the source json
138
- if (!matchingDefaultLocaleItemKeys.has(sourceItemPointer)) {
139
- logger.warn(`Skipping translated item at ${sourceItemPointer}: not present in source json at path ${sourceObjectPointer}`);
140
- continue;
141
- }
142
- // 6. Override the source item with the translated values
143
- const defaultLocaleSourceItem = matchingDefaultLocaleItems[sourceItemPointer].sourceItem;
144
- const defaultLocaleKeyPointer = matchingDefaultLocaleItems[sourceItemPointer].keyPointer;
145
- const mutatedSourceItem = structuredClone(defaultLocaleSourceItem);
146
- const { identifyingLocaleProperty: targetLocaleKeyProperty } = getSourceObjectOptionsArray(useCanonicalLocaleKeys
147
- ? gt.resolveCanonicalLocale(target.targetLocale)
148
- : target.targetLocale, sourceObjectPointer, sourceObjectOptions);
149
- setJSONPointerValue(mutatedSourceItem, defaultLocaleKeyPointer, targetLocaleKeyProperty);
150
- for (const [translatedKeyJsonPointer, translatedValue,] of Object.entries((targetItem || {}))) {
151
- const valueToSet = useCanonicalLocaleKeys &&
152
- defaultLocaleKeyPointer &&
153
- translatedKeyJsonPointer === defaultLocaleKeyPointer
154
- ? targetLocaleKeyProperty
155
- : translatedValue;
156
- try {
157
- const value = getJSONPointerValue(mutatedSourceItem, translatedKeyJsonPointer);
158
- if (!value)
159
- continue;
160
- setJSONPointerValue(mutatedSourceItem, translatedKeyJsonPointer, valueToSet);
161
- }
162
- catch {
163
- /* empty */
164
- }
165
- }
166
- // 7. Apply additional mutations to the sourceItem
167
- applyTransformations(mutatedSourceItem, sourceObjectOptions.transform, target.targetLocale, defaultLocale);
168
- itemsToAdd.push(mutatedSourceItem);
169
- }
170
- }
171
- // 8. Check that items to add is >= items to remove
172
- if (itemsToAdd.length < indiciesToRemove.size) {
173
- logger.warn(`Items to add (${itemsToAdd.length}) is less than items to remove (${indiciesToRemove.size}) at path: ${sourceObjectPointer}. Some translated items may have been skipped.`);
174
- }
175
- // 9. Remove all items for the target locale (they can be identified by the key)
176
- const filteredSourceObjectValue = sourceObjectValue.filter((_, index) => !indiciesToRemove.has(index));
177
- // 10. Add all items to the original JSON
178
- filteredSourceObjectValue.push(...itemsToAdd);
179
- setJSONPointerValue(mergedJson, sourceObjectPointer, sortByLocaleOrder(filteredSourceObjectValue, sourceObjectOptions, canonicalLocaleOrder, sourceObjectPointer, canonicalDefaultLocale));
180
- }
181
- else {
182
- // Validate type
183
- if (typeof sourceObjectValue !== 'object' || sourceObjectValue === null) {
184
- logger.error(`Source object value is not an object at path: ${sourceObjectPointer}`);
185
- return exitSync(1);
186
- }
187
- const sourceObjectRecord = sourceObjectValue;
188
- // Validate localeProperty
189
- const matchingDefaultLocaleItem = findMatchingItemObject(canonicalDefaultLocale, sourceObjectPointer, sourceObjectOptions, sourceObjectRecord);
190
- // Validate source item exists
191
- if (!matchingDefaultLocaleItem.sourceItem) {
192
- logger.error(`Source item not found at path: ${sourceObjectPointer}. You must specify a source item where its key matches the default locale`);
193
- return exitSync(1);
194
- }
195
- const { sourceItem: defaultLocaleSourceItem } = matchingDefaultLocaleItem;
196
- // For each target:
197
- // 1. Get the target items
198
- // 2. Find the source item for the target locale
199
- // 3. Merge the target items with the source item
200
- // 4. Validate that the mergedItems is not empty
201
- // 5. Override the source item with the translated values
202
- // 6. Apply additional mutations to the sourceItem
203
- // 7. Merge the source item with the original JSON (if the source item is not a new item)
204
- for (const target of parsedTargets) {
205
- // 1. Get the target items
206
- let targetItems = target.parsedContent[sourceObjectPointer];
207
- if (targetItems == null) {
208
- targetItems = {};
209
- }
210
- // 2. Find the source item for the target locale
211
- const matchingTargetItem = findMatchingItemObject(useCanonicalLocaleKeys
212
- ? gt.resolveCanonicalLocale(target.targetLocale)
213
- : target.targetLocale, sourceObjectPointer, sourceObjectOptions, sourceObjectRecord);
214
- const mutateSourceItemKey = matchingTargetItem.keyParentProperty;
215
- // If the source item is a string, use the translated string directly
216
- if (typeof defaultLocaleSourceItem === 'string') {
217
- if (typeof targetItems === 'string') {
218
- sourceObjectRecord[mutateSourceItemKey] = targetItems;
219
- }
220
- // If no translation found, leave the locale slot unchanged
221
- continue;
222
- }
223
- // If the target locale has a matching source item, use it to mutate the source item
224
- // Otherwise, fallback to the default locale source item
225
- const mutateSourceItem = structuredClone(defaultLocaleSourceItem);
226
- // 3. Merge the target items with the source item (if there are transformations to perform)
227
- const mergedItems = {
228
- ...(sourceObjectOptions.transform
229
- ? defaultLocaleSourceItem
230
- : {}),
231
- ...targetItems,
232
- };
233
- // 4. Validate that the mergedItems is not empty
234
- if (Object.keys(mergedItems).length === 0) {
235
- logger.warn(`Translated JSON for locale: ${target.targetLocale} does not have a valid sourceObjectPointer: ${sourceObjectPointer}. Skipping this target`);
236
- continue;
237
- }
238
- // 5. Override the source item with the translated values
239
- for (const [translatedKeyJsonPointer, translatedValue,] of Object.entries(mergedItems || {})) {
240
- try {
241
- const value = getJSONPointerValue(mutateSourceItem, translatedKeyJsonPointer);
242
- if (!value)
243
- continue;
244
- setJSONPointerValue(mutateSourceItem, translatedKeyJsonPointer, translatedValue);
245
- }
246
- catch {
247
- /* empty */
248
- }
249
- }
250
- // 6. Apply additional mutations to the sourceItem
251
- applyTransformations(mutateSourceItem, sourceObjectOptions.transform, target.targetLocale, defaultLocale);
252
- // 7. Merge the source item with the original JSON
253
- sourceObjectRecord[mutateSourceItemKey] = mutateSourceItem;
254
- }
255
- setJSONPointerValue(mergedJson, sourceObjectPointer, sourceObjectValue);
256
- }
257
- }
258
- if (jsonSchema.structuralTransform && jsonSchema.composite) {
259
- unapplyStructuralTransforms(mergedJson, jsonSchema.structuralTransform, jsonSchema.composite);
260
- }
261
- return [JSON.stringify(mergedJson, null, 2)];
1
+ import { logger } from "../../console/logger.js";
2
+ import { gt } from "../../utils/gt.js";
3
+ import { exitSync } from "../../console/logging.js";
4
+ import { getJSONPathMatches, getJSONPathValues } from "./jsonPath.js";
5
+ import { findMatchingItemArray, findMatchingItemObject, generateSourceObjectPointers, getIdentifyingLocaleProperty, getSourceObjectOptionsArray, validateJsonSchema } from "./utils.js";
6
+ import { getJSONPointerValue, setJSONPointerValue } from "./jsonPointer.js";
7
+ import { applyStructuralTransforms, unapplyStructuralTransforms } from "./transformJson.js";
8
+ import { replaceLocalePlaceholders } from "../utils.js";
9
+ import { getLocaleProperties } from "@generaltranslation/format";
10
+ //#region src/formats/json/mergeJson.ts
11
+ function mergeJson(originalContent, inputPath, options, targets, defaultLocale, localeOrder = []) {
12
+ const jsonSchema = validateJsonSchema(options, inputPath);
13
+ if (!jsonSchema) return targets.map((target) => target.translatedContent);
14
+ let originalJson;
15
+ try {
16
+ originalJson = JSON.parse(originalContent);
17
+ } catch {
18
+ logger.error(`Invalid JSON file: ${inputPath}`);
19
+ return exitSync(1);
20
+ }
21
+ const useCanonicalLocaleKeys = options?.experimentalCanonicalLocaleKeys ?? false;
22
+ const canonicalDefaultLocale = useCanonicalLocaleKeys ? gt.resolveCanonicalLocale(defaultLocale) : defaultLocale;
23
+ const canonicalLocaleOrder = useCanonicalLocaleKeys ? localeOrder.map((locale) => gt.resolveCanonicalLocale(locale)) : localeOrder;
24
+ if (jsonSchema.structuralTransform && jsonSchema.composite) applyStructuralTransforms(originalJson, jsonSchema.structuralTransform, jsonSchema.composite);
25
+ if (jsonSchema.include) {
26
+ const output = [];
27
+ for (const target of targets) {
28
+ const mergedJson = structuredClone(originalJson);
29
+ const translatedJson = JSON.parse(target.translatedContent);
30
+ for (const [jsonPointer, translatedValue] of Object.entries(translatedJson)) try {
31
+ if (!getJSONPointerValue(mergedJson, jsonPointer)) continue;
32
+ setJSONPointerValue(mergedJson, jsonPointer, translatedValue);
33
+ } catch {}
34
+ output.push(JSON.stringify(mergedJson, null, 2));
35
+ }
36
+ return output;
37
+ }
38
+ if (!jsonSchema.composite) {
39
+ logger.error("No composite property found in JSON schema");
40
+ return exitSync(1);
41
+ }
42
+ const mergedJson = structuredClone(originalJson);
43
+ const parsedTargets = targets.map((target) => ({
44
+ ...target,
45
+ parsedContent: JSON.parse(target.translatedContent)
46
+ }));
47
+ const sourceObjectPointers = generateSourceObjectPointers(jsonSchema.composite, originalJson);
48
+ for (const [sourceObjectPointer, { sourceObjectValue, sourceObjectOptions }] of Object.entries(sourceObjectPointers)) if (sourceObjectOptions.type === "array") {
49
+ if (!Array.isArray(sourceObjectValue)) {
50
+ logger.error(`Source object value is not an array at path: ${sourceObjectPointer}`);
51
+ return exitSync(1);
52
+ }
53
+ const matchingDefaultLocaleItems = findMatchingItemArray(canonicalDefaultLocale, sourceObjectOptions, sourceObjectPointer, sourceObjectValue);
54
+ if (!Object.keys(matchingDefaultLocaleItems).length) {
55
+ logger.warn(`Matching sourceItems not found at path: ${sourceObjectPointer}. Check that your JSON file includes the key field. Skipping this target`);
56
+ continue;
57
+ }
58
+ const matchingDefaultLocaleItemKeys = new Set(Object.keys(matchingDefaultLocaleItems));
59
+ const indiciesToRemove = /* @__PURE__ */ new Set();
60
+ const itemsToAdd = [];
61
+ for (const target of parsedTargets) {
62
+ let targetItems = target.parsedContent[sourceObjectPointer];
63
+ if (!targetItems) targetItems = {};
64
+ const targetItemsToRemove = findMatchingItemArray(useCanonicalLocaleKeys ? gt.resolveCanonicalLocale(target.targetLocale) : target.targetLocale, sourceObjectOptions, sourceObjectPointer, sourceObjectValue);
65
+ Object.values(targetItemsToRemove).forEach(({ index }) => indiciesToRemove.add(index));
66
+ const sourceKeys = [...matchingDefaultLocaleItemKeys];
67
+ const remappedTargetItems = {};
68
+ for (const [key, value] of Object.entries(targetItems)) if (matchingDefaultLocaleItemKeys.has(key)) remappedTargetItems[key] = value;
69
+ else if (sourceKeys.length === 1 && !(sourceKeys[0] in remappedTargetItems)) remappedTargetItems[sourceKeys[0]] = value;
70
+ else logger.warn(`Skipping translated item at ${key}: cannot map to source item at path ${sourceObjectPointer}`);
71
+ const mergedItems = {
72
+ ...sourceObjectOptions.transform ? matchingDefaultLocaleItems : {},
73
+ ...remappedTargetItems
74
+ };
75
+ if (Object.keys(mergedItems).length === 0) {
76
+ logger.warn(`Translated JSON for locale: ${target.targetLocale} does not have a valid sourceObjectPointer: ${sourceObjectPointer}. Skipping this target`);
77
+ continue;
78
+ }
79
+ for (const [sourceItemPointer, targetItem] of Object.entries(mergedItems)) {
80
+ if (!matchingDefaultLocaleItemKeys.has(sourceItemPointer)) {
81
+ logger.warn(`Skipping translated item at ${sourceItemPointer}: not present in source json at path ${sourceObjectPointer}`);
82
+ continue;
83
+ }
84
+ const defaultLocaleSourceItem = matchingDefaultLocaleItems[sourceItemPointer].sourceItem;
85
+ const defaultLocaleKeyPointer = matchingDefaultLocaleItems[sourceItemPointer].keyPointer;
86
+ const mutatedSourceItem = structuredClone(defaultLocaleSourceItem);
87
+ const { identifyingLocaleProperty: targetLocaleKeyProperty } = getSourceObjectOptionsArray(useCanonicalLocaleKeys ? gt.resolveCanonicalLocale(target.targetLocale) : target.targetLocale, sourceObjectPointer, sourceObjectOptions);
88
+ setJSONPointerValue(mutatedSourceItem, defaultLocaleKeyPointer, targetLocaleKeyProperty);
89
+ for (const [translatedKeyJsonPointer, translatedValue] of Object.entries(targetItem || {})) {
90
+ const valueToSet = useCanonicalLocaleKeys && defaultLocaleKeyPointer && translatedKeyJsonPointer === defaultLocaleKeyPointer ? targetLocaleKeyProperty : translatedValue;
91
+ try {
92
+ if (!getJSONPointerValue(mutatedSourceItem, translatedKeyJsonPointer)) continue;
93
+ setJSONPointerValue(mutatedSourceItem, translatedKeyJsonPointer, valueToSet);
94
+ } catch {}
95
+ }
96
+ applyTransformations(mutatedSourceItem, sourceObjectOptions.transform, target.targetLocale, defaultLocale);
97
+ itemsToAdd.push(mutatedSourceItem);
98
+ }
99
+ }
100
+ if (itemsToAdd.length < indiciesToRemove.size) logger.warn(`Items to add (${itemsToAdd.length}) is less than items to remove (${indiciesToRemove.size}) at path: ${sourceObjectPointer}. Some translated items may have been skipped.`);
101
+ const filteredSourceObjectValue = sourceObjectValue.filter((_, index) => !indiciesToRemove.has(index));
102
+ filteredSourceObjectValue.push(...itemsToAdd);
103
+ setJSONPointerValue(mergedJson, sourceObjectPointer, sortByLocaleOrder(filteredSourceObjectValue, sourceObjectOptions, canonicalLocaleOrder, sourceObjectPointer, canonicalDefaultLocale));
104
+ } else {
105
+ if (typeof sourceObjectValue !== "object" || sourceObjectValue === null) {
106
+ logger.error(`Source object value is not an object at path: ${sourceObjectPointer}`);
107
+ return exitSync(1);
108
+ }
109
+ const sourceObjectRecord = sourceObjectValue;
110
+ const matchingDefaultLocaleItem = findMatchingItemObject(canonicalDefaultLocale, sourceObjectPointer, sourceObjectOptions, sourceObjectRecord);
111
+ if (!matchingDefaultLocaleItem.sourceItem) {
112
+ logger.error(`Source item not found at path: ${sourceObjectPointer}. You must specify a source item where its key matches the default locale`);
113
+ return exitSync(1);
114
+ }
115
+ const { sourceItem: defaultLocaleSourceItem } = matchingDefaultLocaleItem;
116
+ for (const target of parsedTargets) {
117
+ let targetItems = target.parsedContent[sourceObjectPointer];
118
+ if (targetItems == null) targetItems = {};
119
+ const mutateSourceItemKey = findMatchingItemObject(useCanonicalLocaleKeys ? gt.resolveCanonicalLocale(target.targetLocale) : target.targetLocale, sourceObjectPointer, sourceObjectOptions, sourceObjectRecord).keyParentProperty;
120
+ if (typeof defaultLocaleSourceItem === "string") {
121
+ if (typeof targetItems === "string") sourceObjectRecord[mutateSourceItemKey] = targetItems;
122
+ continue;
123
+ }
124
+ const mutateSourceItem = structuredClone(defaultLocaleSourceItem);
125
+ const mergedItems = {
126
+ ...sourceObjectOptions.transform ? defaultLocaleSourceItem : {},
127
+ ...targetItems
128
+ };
129
+ if (Object.keys(mergedItems).length === 0) {
130
+ logger.warn(`Translated JSON for locale: ${target.targetLocale} does not have a valid sourceObjectPointer: ${sourceObjectPointer}. Skipping this target`);
131
+ continue;
132
+ }
133
+ for (const [translatedKeyJsonPointer, translatedValue] of Object.entries(mergedItems || {})) try {
134
+ if (!getJSONPointerValue(mutateSourceItem, translatedKeyJsonPointer)) continue;
135
+ setJSONPointerValue(mutateSourceItem, translatedKeyJsonPointer, translatedValue);
136
+ } catch {}
137
+ applyTransformations(mutateSourceItem, sourceObjectOptions.transform, target.targetLocale, defaultLocale);
138
+ sourceObjectRecord[mutateSourceItemKey] = mutateSourceItem;
139
+ }
140
+ setJSONPointerValue(mergedJson, sourceObjectPointer, sourceObjectValue);
141
+ }
142
+ if (jsonSchema.structuralTransform && jsonSchema.composite) unapplyStructuralTransforms(mergedJson, jsonSchema.structuralTransform, jsonSchema.composite);
143
+ return [JSON.stringify(mergedJson, null, 2)];
262
144
  }
263
145
  function sortByLocaleOrder(items, sourceObjectOptions, localeOrder, sourceObjectPointer, defaultLocale) {
264
- const sortMode = sourceObjectOptions.experimentalSort;
265
- if (!sortMode || !sourceObjectOptions.key) {
266
- return items;
267
- }
268
- const itemsWithLocale = items.map((item) => {
269
- let localeValue;
270
- try {
271
- const values = getJSONPathValues(item, sourceObjectOptions.key);
272
- const value = values?.[0];
273
- if (typeof value === 'string') {
274
- localeValue = value;
275
- }
276
- }
277
- catch {
278
- /* empty */
279
- }
280
- return { item, localeValue };
281
- });
282
- if (sortMode === 'locales') {
283
- if (!localeOrder.length) {
284
- return items;
285
- }
286
- const orderedLocaleList = [
287
- defaultLocale,
288
- ...localeOrder.filter((locale) => locale !== defaultLocale),
289
- ];
290
- const localeOrderValues = orderedLocaleList.map((locale) => getIdentifyingLocaleProperty(locale, sourceObjectPointer, sourceObjectOptions));
291
- const orderedItems = [];
292
- const remainingItems = [...itemsWithLocale];
293
- for (const localeValue of localeOrderValues) {
294
- for (let i = 0; i < remainingItems.length;) {
295
- const entry = remainingItems[i];
296
- if (entry.localeValue === localeValue) {
297
- orderedItems.push(entry.item);
298
- remainingItems.splice(i, 1);
299
- continue;
300
- }
301
- i += 1;
302
- }
303
- }
304
- remainingItems.forEach((entry) => orderedItems.push(entry.item));
305
- return orderedItems;
306
- }
307
- if (sortMode === 'localesAlphabetical') {
308
- const defaultLocaleValue = getIdentifyingLocaleProperty(defaultLocale, sourceObjectPointer, sourceObjectOptions);
309
- const defaultItems = [];
310
- const sortableItems = [];
311
- const remainingItems = [];
312
- for (const entry of itemsWithLocale) {
313
- if (entry.localeValue === defaultLocaleValue) {
314
- defaultItems.push(entry);
315
- continue;
316
- }
317
- if (entry.localeValue) {
318
- sortableItems.push(entry);
319
- continue;
320
- }
321
- remainingItems.push(entry);
322
- }
323
- sortableItems.sort((a, b) => {
324
- if (!a.localeValue || !b.localeValue) {
325
- return 0;
326
- }
327
- return a.localeValue.localeCompare(b.localeValue);
328
- });
329
- return [...defaultItems, ...sortableItems, ...remainingItems].map((entry) => entry.item);
330
- }
331
- return items;
146
+ const sortMode = sourceObjectOptions.experimentalSort;
147
+ if (!sortMode || !sourceObjectOptions.key) return items;
148
+ const itemsWithLocale = items.map((item) => {
149
+ let localeValue;
150
+ try {
151
+ const value = getJSONPathValues(item, sourceObjectOptions.key)?.[0];
152
+ if (typeof value === "string") localeValue = value;
153
+ } catch {}
154
+ return {
155
+ item,
156
+ localeValue
157
+ };
158
+ });
159
+ if (sortMode === "locales") {
160
+ if (!localeOrder.length) return items;
161
+ const localeOrderValues = [defaultLocale, ...localeOrder.filter((locale) => locale !== defaultLocale)].map((locale) => getIdentifyingLocaleProperty(locale, sourceObjectPointer, sourceObjectOptions));
162
+ const orderedItems = [];
163
+ const remainingItems = [...itemsWithLocale];
164
+ for (const localeValue of localeOrderValues) for (let i = 0; i < remainingItems.length;) {
165
+ const entry = remainingItems[i];
166
+ if (entry.localeValue === localeValue) {
167
+ orderedItems.push(entry.item);
168
+ remainingItems.splice(i, 1);
169
+ continue;
170
+ }
171
+ i += 1;
172
+ }
173
+ remainingItems.forEach((entry) => orderedItems.push(entry.item));
174
+ return orderedItems;
175
+ }
176
+ if (sortMode === "localesAlphabetical") {
177
+ const defaultLocaleValue = getIdentifyingLocaleProperty(defaultLocale, sourceObjectPointer, sourceObjectOptions);
178
+ const defaultItems = [];
179
+ const sortableItems = [];
180
+ const remainingItems = [];
181
+ for (const entry of itemsWithLocale) {
182
+ if (entry.localeValue === defaultLocaleValue) {
183
+ defaultItems.push(entry);
184
+ continue;
185
+ }
186
+ if (entry.localeValue) {
187
+ sortableItems.push(entry);
188
+ continue;
189
+ }
190
+ remainingItems.push(entry);
191
+ }
192
+ sortableItems.sort((a, b) => {
193
+ if (!a.localeValue || !b.localeValue) return 0;
194
+ return a.localeValue.localeCompare(b.localeValue);
195
+ });
196
+ return [
197
+ ...defaultItems,
198
+ ...sortableItems,
199
+ ...remainingItems
200
+ ].map((entry) => entry.item);
201
+ }
202
+ return items;
332
203
  }
333
204
  /**
334
- * Apply transformations to the sourceItem in-place
335
- * @param sourceItem - The source item to apply transformations to
336
- * @param transform - The transformations to apply
337
- * @param targetLocale - The target locale
338
- * @param defaultLocale - The default locale
339
- */
340
- export function applyTransformations(sourceItem, transform, targetLocale, defaultLocale) {
341
- if (!transform)
342
- return;
343
- const targetLocaleProperties = getLocaleProperties(targetLocale);
344
- const defaultLocaleProperties = getLocaleProperties(defaultLocale);
345
- for (const [transformPath, transformOptions] of Object.entries(transform)) {
346
- if (!transformOptions.replace ||
347
- typeof transformOptions.replace !== 'string') {
348
- continue;
349
- }
350
- const results = getJSONPathMatches(sourceItem, transformPath);
351
- if (!results || results.length === 0) {
352
- continue;
353
- }
354
- results.forEach((result) => {
355
- if (typeof result.value !== 'string') {
356
- return;
357
- }
358
- // Replace locale placeholders in the replace string
359
- let replaceString = transformOptions.replace;
360
- // Replace all locale property placeholders
361
- replaceString = replaceLocalePlaceholders(replaceString, targetLocaleProperties);
362
- if (transformOptions.match &&
363
- typeof transformOptions.match === 'string') {
364
- // Replace locale placeholders in the match string using defaultLocale properties
365
- let matchString = transformOptions.match;
366
- matchString = replaceLocalePlaceholders(matchString, defaultLocaleProperties);
367
- result.value = result.value.replace(new RegExp(matchString, 'g'), replaceString);
368
- }
369
- else {
370
- result.value = replaceString;
371
- }
372
- // Update the actual sourceItem using JSONPointer
373
- setJSONPointerValue(sourceItem, result.pointer, result.value);
374
- });
375
- }
205
+ * Apply transformations to the sourceItem in-place
206
+ * @param sourceItem - The source item to apply transformations to
207
+ * @param transform - The transformations to apply
208
+ * @param targetLocale - The target locale
209
+ * @param defaultLocale - The default locale
210
+ */
211
+ function applyTransformations(sourceItem, transform, targetLocale, defaultLocale) {
212
+ if (!transform) return;
213
+ const targetLocaleProperties = getLocaleProperties(targetLocale);
214
+ const defaultLocaleProperties = getLocaleProperties(defaultLocale);
215
+ for (const [transformPath, transformOptions] of Object.entries(transform)) {
216
+ if (!transformOptions.replace || typeof transformOptions.replace !== "string") continue;
217
+ const results = getJSONPathMatches(sourceItem, transformPath);
218
+ if (!results || results.length === 0) continue;
219
+ results.forEach((result) => {
220
+ if (typeof result.value !== "string") return;
221
+ let replaceString = transformOptions.replace;
222
+ replaceString = replaceLocalePlaceholders(replaceString, targetLocaleProperties);
223
+ if (transformOptions.match && typeof transformOptions.match === "string") {
224
+ let matchString = transformOptions.match;
225
+ matchString = replaceLocalePlaceholders(matchString, defaultLocaleProperties);
226
+ result.value = result.value.replace(new RegExp(matchString, "g"), replaceString);
227
+ } else result.value = replaceString;
228
+ setJSONPointerValue(sourceItem, result.pointer, result.value);
229
+ });
230
+ }
376
231
  }
232
+ //#endregion
233
+ export { applyTransformations, mergeJson };
234
+
235
+ //# sourceMappingURL=mergeJson.js.map