gt 2.14.35 → 2.14.36

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 (429) hide show
  1. package/CHANGELOG.md +16 -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.js +104 -108
  256. package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
  257. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
  258. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
  259. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
  260. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
  261. package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
  262. package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
  263. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
  264. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
  265. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
  266. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
  267. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
  268. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
  269. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
  270. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
  271. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
  272. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
  273. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
  274. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
  275. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
  276. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
  277. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
  278. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
  279. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
  280. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
  281. package/dist/react/jsx/utils/validateStringFunction.js +21 -29
  282. package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
  283. package/dist/react/jsx/wrapJsx.js +192 -375
  284. package/dist/react/jsx/wrapJsx.js.map +1 -0
  285. package/dist/react/parse/addVitePlugin/index.js +40 -34
  286. package/dist/react/parse/addVitePlugin/index.js.map +1 -0
  287. package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
  288. package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
  289. package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
  290. package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
  291. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
  292. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
  293. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
  294. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
  295. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
  296. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
  297. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
  298. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
  299. package/dist/react/parse/createDictionaryUpdates.js +121 -185
  300. package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
  301. package/dist/react/parse/createInlineUpdates.js +123 -139
  302. package/dist/react/parse/createInlineUpdates.js.map +1 -0
  303. package/dist/react/parse/wrapContent.js +131 -156
  304. package/dist/react/parse/wrapContent.js.map +1 -0
  305. package/dist/react/utils/flattenDictionary.js +55 -70
  306. package/dist/react/utils/flattenDictionary.js.map +1 -0
  307. package/dist/react/utils/getEntryAndMetadata.js +14 -10
  308. package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
  309. package/dist/react/utils/getVariableName.js +36 -33
  310. package/dist/react/utils/getVariableName.js.map +1 -0
  311. package/dist/setup/detectFramework.js +85 -102
  312. package/dist/setup/detectFramework.js.map +1 -0
  313. package/dist/setup/frameworkUtils.js +17 -28
  314. package/dist/setup/frameworkUtils.js.map +1 -0
  315. package/dist/setup/userInput.js +24 -31
  316. package/dist/setup/userInput.js.map +1 -0
  317. package/dist/setup/wizard.js +141 -143
  318. package/dist/setup/wizard.js.map +1 -0
  319. package/dist/state/mintlifyRefMap.js +12 -9
  320. package/dist/state/mintlifyRefMap.js.map +1 -0
  321. package/dist/state/recentDownloads.js +26 -23
  322. package/dist/state/recentDownloads.js.map +1 -0
  323. package/dist/state/translateWarnings.js +17 -8
  324. package/dist/state/translateWarnings.js.map +1 -0
  325. package/dist/translation/parse.js +77 -98
  326. package/dist/translation/parse.js.map +1 -0
  327. package/dist/translation/stage.js +28 -43
  328. package/dist/translation/stage.js.map +1 -0
  329. package/dist/translation/validate.js +68 -91
  330. package/dist/translation/validate.js.map +1 -0
  331. package/dist/types/libraries.js +93 -91
  332. package/dist/types/libraries.js.map +1 -0
  333. package/dist/types/parsing.js +19 -10
  334. package/dist/types/parsing.js.map +1 -0
  335. package/dist/utils/addExplicitAnchorIds.js +270 -389
  336. package/dist/utils/addExplicitAnchorIds.js.map +1 -0
  337. package/dist/utils/calculateTimeoutMs.js +11 -6
  338. package/dist/utils/calculateTimeoutMs.js.map +1 -0
  339. package/dist/utils/constants.js +15 -12
  340. package/dist/utils/constants.js.map +1 -0
  341. package/dist/utils/credentials.js +67 -114
  342. package/dist/utils/credentials.js.map +1 -0
  343. package/dist/utils/fetch.js +22 -20
  344. package/dist/utils/fetch.js.map +1 -0
  345. package/dist/utils/flattenJsonFiles.js +27 -34
  346. package/dist/utils/flattenJsonFiles.js.map +1 -0
  347. package/dist/utils/gitDiff.js +30 -32
  348. package/dist/utils/gitDiff.js.map +1 -0
  349. package/dist/utils/gt.js +7 -2
  350. package/dist/utils/gt.js.map +1 -0
  351. package/dist/utils/hash.js +14 -9
  352. package/dist/utils/hash.js.map +1 -0
  353. package/dist/utils/headers.js +10 -13
  354. package/dist/utils/headers.js.map +1 -0
  355. package/dist/utils/installPackage.js +70 -75
  356. package/dist/utils/installPackage.js.map +1 -0
  357. package/dist/utils/localizeRelativeAssets.js +114 -157
  358. package/dist/utils/localizeRelativeAssets.js.map +1 -0
  359. package/dist/utils/localizeStaticImports.js +229 -371
  360. package/dist/utils/localizeStaticImports.js.map +1 -0
  361. package/dist/utils/localizeStaticUrls.js +241 -424
  362. package/dist/utils/localizeStaticUrls.js.map +1 -0
  363. package/dist/utils/mintlifyTitleFallback.js +64 -72
  364. package/dist/utils/mintlifyTitleFallback.js.map +1 -0
  365. package/dist/utils/monorepoVersionCheck.js +177 -215
  366. package/dist/utils/monorepoVersionCheck.js.map +1 -0
  367. package/dist/utils/packageInfo.js +17 -16
  368. package/dist/utils/packageInfo.js.map +1 -0
  369. package/dist/utils/packageJson.js +51 -66
  370. package/dist/utils/packageJson.js.map +1 -0
  371. package/dist/utils/packageManager.js +237 -260
  372. package/dist/utils/packageManager.js.map +1 -0
  373. package/dist/utils/parse/needsCJS.js +36 -69
  374. package/dist/utils/parse/needsCJS.js.map +1 -0
  375. package/dist/utils/persistPostprocessHashes.js +30 -32
  376. package/dist/utils/persistPostprocessHashes.js.map +1 -0
  377. package/dist/utils/processAnchorIds.js +32 -54
  378. package/dist/utils/processAnchorIds.js.map +1 -0
  379. package/dist/utils/processOpenApi.js +469 -578
  380. package/dist/utils/processOpenApi.js.map +1 -0
  381. package/dist/utils/resolveMintlifyRefs.js +89 -105
  382. package/dist/utils/resolveMintlifyRefs.js.map +1 -0
  383. package/dist/utils/resolvePublish.js +46 -54
  384. package/dist/utils/resolvePublish.js.map +1 -0
  385. package/dist/utils/sanitizeFileContent.js +20 -27
  386. package/dist/utils/sanitizeFileContent.js.map +1 -0
  387. package/dist/utils/sharedStaticAssets.js +248 -366
  388. package/dist/utils/sharedStaticAssets.js.map +1 -0
  389. package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
  390. package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
  391. package/dist/utils/validateMdx.js +26 -23
  392. package/dist/utils/validateMdx.js.map +1 -0
  393. package/dist/utils/wrapPlainUrls.js +58 -70
  394. package/dist/utils/wrapPlainUrls.js.map +1 -0
  395. package/dist/workflows/download.js +92 -126
  396. package/dist/workflows/download.js.map +1 -0
  397. package/dist/workflows/enqueue.js +47 -54
  398. package/dist/workflows/enqueue.js.map +1 -0
  399. package/dist/workflows/publish.js +29 -29
  400. package/dist/workflows/publish.js.map +1 -0
  401. package/dist/workflows/setupProject.js +39 -40
  402. package/dist/workflows/setupProject.js.map +1 -0
  403. package/dist/workflows/stage.js +61 -65
  404. package/dist/workflows/stage.js.map +1 -0
  405. package/dist/workflows/steps/BranchStep.js +118 -163
  406. package/dist/workflows/steps/BranchStep.js.map +1 -0
  407. package/dist/workflows/steps/DownloadStep.js +107 -137
  408. package/dist/workflows/steps/DownloadStep.js.map +1 -0
  409. package/dist/workflows/steps/EnqueueStep.js +32 -32
  410. package/dist/workflows/steps/EnqueueStep.js.map +1 -0
  411. package/dist/workflows/steps/PollJobsStep.js +208 -292
  412. package/dist/workflows/steps/PollJobsStep.js.map +1 -0
  413. package/dist/workflows/steps/PublishStep.js +33 -38
  414. package/dist/workflows/steps/PublishStep.js.map +1 -0
  415. package/dist/workflows/steps/SetupStep.js +71 -72
  416. package/dist/workflows/steps/SetupStep.js.map +1 -0
  417. package/dist/workflows/steps/TagStep.js +39 -44
  418. package/dist/workflows/steps/TagStep.js.map +1 -0
  419. package/dist/workflows/steps/UploadSourcesStep.js +108 -140
  420. package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
  421. package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
  422. package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
  423. package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
  424. package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
  425. package/dist/workflows/steps/WorkflowStep.js +6 -2
  426. package/dist/workflows/steps/WorkflowStep.js.map +1 -0
  427. package/dist/workflows/upload.js +45 -46
  428. package/dist/workflows/upload.js.map +1 -0
  429. package/package.json +14 -7
@@ -1,251 +1,174 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { logger } from '../console/logger.js';
4
- import { gt } from '../utils/gt.js';
5
- import { validateJsonSchema } from '../formats/json/utils.js';
6
- import { validateYamlSchema } from '../formats/yaml/utils.js';
7
- import { mergeJson } from '../formats/json/mergeJson.js';
8
- import { extractJson } from '../formats/json/extractJson.js';
9
- import mergeYaml from '../formats/yaml/mergeYaml.js';
10
- import { extractYaml } from '../formats/yaml/extractYaml.js';
11
- import { resolveMintlifyRefs, shouldResolveRefs, } from '../utils/resolveMintlifyRefs.js';
12
- import { readLockfile, writeLockfile, findOrCreateEntry, } from '../fs/config/downloadedVersions.js';
13
- import { recordDownloaded, recordRemerged } from '../state/recentDownloads.js';
14
- import { recordWarning } from '../state/translateWarnings.js';
15
- import stringify from 'fast-json-stable-stringify';
16
- import { SUPPORTED_FILE_EXTENSIONS } from '../formats/files/supportedFiles.js';
17
- import { hasNonIdentityFileFormatTransformForType } from '../formats/files/transformFormat.js';
18
- import { getRelative } from '../fs/findFilepath.js';
1
+ import { logger } from "../console/logger.js";
2
+ import { gt } from "../utils/gt.js";
3
+ import { getRelative } from "../fs/findFilepath.js";
4
+ import { SUPPORTED_FILE_EXTENSIONS } from "../formats/files/supportedFiles.js";
5
+ import { hasNonIdentityFileFormatTransformForType } from "../formats/files/transformFormat.js";
6
+ import { validateJsonSchema } from "../formats/json/utils.js";
7
+ import { extractJson } from "../formats/json/extractJson.js";
8
+ import { resolveMintlifyRefs, shouldResolveRefs } from "../utils/resolveMintlifyRefs.js";
9
+ import { recordWarning } from "../state/translateWarnings.js";
10
+ import { validateYamlSchema } from "../formats/yaml/utils.js";
11
+ import { findOrCreateEntry, readLockfile, writeLockfile } from "../fs/config/downloadedVersions.js";
12
+ import { extractYaml } from "../formats/yaml/extractYaml.js";
13
+ import { mergeJson } from "../formats/json/mergeJson.js";
14
+ import mergeYaml from "../formats/yaml/mergeYaml.js";
15
+ import { recordDownloaded, recordRemerged } from "../state/recentDownloads.js";
16
+ import * as fs$1 from "fs";
17
+ import * as path$1 from "path";
18
+ import stringify from "fast-json-stable-stringify";
19
+ //#region src/api/downloadFileBatch.ts
19
20
  function sortJsonString(data) {
20
- const sortedData = stringify(JSON.parse(data));
21
- return JSON.stringify(JSON.parse(sortedData), null, 2);
21
+ const sortedData = stringify(JSON.parse(data));
22
+ return JSON.stringify(JSON.parse(sortedData), null, 2);
22
23
  }
23
24
  /**
24
- * Merges translated content with the current source file for schema-based formats.
25
- */
25
+ * Merges translated content with the current source file for schema-based formats.
26
+ */
26
27
  function mergeWithSource(translatedContent, locale, inputPath, options) {
27
- if (shouldSkipSourceFormatMerge(inputPath, options)) {
28
- return translatedContent;
29
- }
30
- if (!options.options)
31
- return translatedContent;
32
- const jsonSchema = options.options.jsonSchema
33
- ? validateJsonSchema(options.options, inputPath)
34
- : null;
35
- const yamlSchema = !jsonSchema && options.options.yamlSchema
36
- ? validateYamlSchema(options.options, inputPath)
37
- : null;
38
- if (!jsonSchema && !yamlSchema)
39
- return translatedContent;
40
- const sourceContent = fs.readFileSync(inputPath, 'utf8');
41
- if (!sourceContent)
42
- return translatedContent;
43
- if (jsonSchema) {
44
- // Resolve $ref before merging if configured
45
- let resolvedSourceContent = sourceContent;
46
- if (shouldResolveRefs(inputPath, options.options)) {
47
- try {
48
- const json = JSON.parse(sourceContent);
49
- const { resolved } = resolveMintlifyRefs(json, inputPath);
50
- resolvedSourceContent = JSON.stringify(resolved, null, 2);
51
- }
52
- catch {
53
- // Fall through with original content
54
- }
55
- }
56
- return mergeJson(resolvedSourceContent, inputPath, options.options, [{ translatedContent, targetLocale: locale }], options.defaultLocale, options.locales)[0];
57
- }
58
- else {
59
- return mergeYaml(sourceContent, inputPath, options.options, [{ translatedContent, targetLocale: locale }], options.defaultLocale)[0];
60
- }
28
+ if (shouldSkipSourceFormatMerge(inputPath, options)) return translatedContent;
29
+ if (!options.options) return translatedContent;
30
+ const jsonSchema = options.options.jsonSchema ? validateJsonSchema(options.options, inputPath) : null;
31
+ const yamlSchema = !jsonSchema && options.options.yamlSchema ? validateYamlSchema(options.options, inputPath) : null;
32
+ if (!jsonSchema && !yamlSchema) return translatedContent;
33
+ const sourceContent = fs$1.readFileSync(inputPath, "utf8");
34
+ if (!sourceContent) return translatedContent;
35
+ if (jsonSchema) {
36
+ let resolvedSourceContent = sourceContent;
37
+ if (shouldResolveRefs(inputPath, options.options)) try {
38
+ const { resolved } = resolveMintlifyRefs(JSON.parse(sourceContent), inputPath);
39
+ resolvedSourceContent = JSON.stringify(resolved, null, 2);
40
+ } catch {}
41
+ return mergeJson(resolvedSourceContent, inputPath, options.options, [{
42
+ translatedContent,
43
+ targetLocale: locale
44
+ }], options.defaultLocale, options.locales)[0];
45
+ } else return mergeYaml(sourceContent, inputPath, options.options, [{
46
+ translatedContent,
47
+ targetLocale: locale
48
+ }], options.defaultLocale)[0];
61
49
  }
62
50
  /**
63
- * Determines whether a source file should be skipped for schema re-merging.
64
- * @param inputPath - The path of the source file
65
- * @param options - The settings for the project
66
- * @returns True if the source file should be skipped for schema re-merging, false otherwise
67
- */
51
+ * Determines whether a source file should be skipped for schema re-merging.
52
+ * @param inputPath - The path of the source file
53
+ * @param options - The settings for the project
54
+ * @returns True if the source file should be skipped for schema re-merging, false otherwise
55
+ */
68
56
  function shouldSkipSourceFormatMerge(inputPath, options) {
69
- for (const fileType of SUPPORTED_FILE_EXTENSIONS) {
70
- if (!hasNonIdentityFileFormatTransformForType(options, fileType))
71
- continue;
72
- const transformedSourcePaths = options.files.resolvedPaths[fileType] || [];
73
- if (transformedSourcePaths.some((sourcePath) => getRelative(sourcePath) === inputPath)) {
74
- return true;
75
- }
76
- }
77
- return false;
57
+ for (const fileType of SUPPORTED_FILE_EXTENSIONS) {
58
+ if (!hasNonIdentityFileFormatTransformForType(options, fileType)) continue;
59
+ if ((options.files.resolvedPaths[fileType] || []).some((sourcePath) => getRelative(sourcePath) === inputPath)) return true;
60
+ }
61
+ return false;
78
62
  }
79
63
  /**
80
- * Downloads multiple translation files in a single batch request
81
- * @param files - Array of files to download with their output paths
82
- * @param maxRetries - Maximum number of retry attempts
83
- * @param retryDelay - Delay between retries in milliseconds
84
- * @returns Object containing successful and failed file IDs
85
- */
86
- export async function downloadFileBatch(fileTracker, files, options, forceDownload = false) {
87
- // Local record of what version was last downloaded for each fileName:locale
88
- const { data: downloadedVersions, entryMap, originalV1, } = readLockfile(options);
89
- let didUpdateDownloadedLock = false;
90
- // Create a map of requested file keys to the file object
91
- const requestedFileMap = new Map(files.map((file) => [
92
- `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,
93
- file,
94
- ]));
95
- const result = {
96
- successful: [],
97
- failed: [],
98
- skipped: [],
99
- };
100
- // Create a map of translationId to outputPath for easier lookup
101
- const outputPathMap = new Map(files.map((file) => [
102
- `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,
103
- file.outputPath,
104
- ]));
105
- try {
106
- // Download the files
107
- const responseData = await gt.downloadFileBatch(files.map((file) => ({
108
- fileId: file.fileId,
109
- branchId: file.branchId,
110
- versionId: file.versionId,
111
- locale: file.locale,
112
- })));
113
- const downloadedFiles = responseData.files || [];
114
- // Process each file in the response
115
- for (const file of downloadedFiles) {
116
- const fileKey = `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`;
117
- const requestedFile = requestedFileMap.get(fileKey);
118
- if (!requestedFile) {
119
- continue;
120
- }
121
- try {
122
- const outputPath = outputPathMap.get(fileKey);
123
- const fileProperties = fileTracker.completed.get(fileKey);
124
- if (!outputPath || !fileProperties) {
125
- logger.warn(`No input/output path found for file: ${fileKey}`);
126
- recordWarning('failed_download', fileKey, 'No input/output path found');
127
- result.failed.push(requestedFile);
128
- continue;
129
- }
130
- const { fileId, versionId, locale, branchId, fileName: inputPath, } = fileProperties;
131
- // Ensure the directory exists
132
- const dir = path.dirname(outputPath);
133
- if (!fs.existsSync(dir)) {
134
- fs.mkdirSync(dir, { recursive: true });
135
- }
136
- // If a local translation already exists for the same source version, skip overwrite
137
- const existingEntry = entryMap.get(fileId);
138
- const downloadedTranslation = existingEntry?.versionId === versionId
139
- ? existingEntry.translations[locale]
140
- : undefined;
141
- const fileExists = fs.existsSync(outputPath);
142
- if (!forceDownload && fileExists && downloadedTranslation) {
143
- // For schema-based files, re-merge with current source in case
144
- // non-translatable fields changed (skip the API download, not the merge)
145
- try {
146
- let existingContent = fs.readFileSync(outputPath, 'utf8');
147
- // Resolve $ref before extraction if configured
148
- if (shouldResolveRefs(outputPath, options.options)) {
149
- try {
150
- const json = JSON.parse(existingContent);
151
- const { resolved } = resolveMintlifyRefs(json, outputPath);
152
- existingContent = JSON.stringify(resolved, null, 2);
153
- }
154
- catch {
155
- // Fall through with original content
156
- }
157
- }
158
- const jsonExtracted = options.options?.jsonSchema
159
- ? extractJson(existingContent, inputPath, options.options, locale, options.defaultLocale)
160
- : null;
161
- const extracted = jsonExtracted ??
162
- (options.options?.yamlSchema
163
- ? extractYaml(existingContent, inputPath, options.options)
164
- : null);
165
- if (extracted) {
166
- const remerged = mergeWithSource(extracted, locale, inputPath, options);
167
- let remergedData = remerged;
168
- if (outputPath.endsWith('.json')) {
169
- try {
170
- remergedData = sortJsonString(remergedData);
171
- }
172
- catch {
173
- // Fall through with unsorted content
174
- }
175
- }
176
- if (remergedData !== existingContent) {
177
- await fs.promises.writeFile(outputPath, remergedData);
178
- }
179
- // Track for postprocessing (e.g. openapi path localization)
180
- // even when the API download was skipped
181
- recordRemerged(outputPath);
182
- }
183
- }
184
- catch {
185
- // If re-merge fails, still count as skipped — not worth failing the download
186
- }
187
- result.skipped.push(requestedFile);
188
- continue;
189
- }
190
- let data = mergeWithSource(file.data, locale, inputPath, options);
191
- // Stable sort JSON keys for deterministic output
192
- if (file.fileFormat === 'GTJSON' || outputPath.endsWith('.json')) {
193
- try {
194
- data = sortJsonString(data);
195
- }
196
- catch (error) {
197
- logger.warn(`Failed to sort JSON file: ${file.id}: ` + error);
198
- }
199
- }
200
- // Write the file to disk
201
- await fs.promises.writeFile(outputPath, data);
202
- // Track as downloaded with metadata for downstream postprocessing
203
- recordDownloaded(outputPath, {
204
- branchId,
205
- fileId,
206
- versionId,
207
- locale,
208
- inputPath,
209
- });
210
- result.successful.push(requestedFile);
211
- if (fileId && versionId && locale) {
212
- const entry = findOrCreateEntry(entryMap, downloadedVersions.entries, fileId, versionId);
213
- entry.fileName = inputPath;
214
- entry.staged = false;
215
- entry.translations[locale] = {
216
- updatedAt: new Date().toISOString(),
217
- fileName: outputPath,
218
- };
219
- didUpdateDownloadedLock = true;
220
- }
221
- }
222
- catch (error) {
223
- logger.error(`Error saving file ${fileKey}: ` + error);
224
- recordWarning('failed_download', fileKey, `Error saving file: ${error}`);
225
- result.failed.push(requestedFile);
226
- }
227
- }
228
- // Add any files that weren't in the response to the failed list
229
- const downloadedFileKeys = new Set(downloadedFiles.map((file) => `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`));
230
- for (const [fileKey, requestedFile] of requestedFileMap.entries()) {
231
- if (!downloadedFileKeys.has(fileKey)) {
232
- result.failed.push(requestedFile);
233
- }
234
- }
235
- // Persist any updates to the downloaded map at the end of a successful cycle
236
- if (didUpdateDownloadedLock) {
237
- writeLockfile(downloadedVersions, originalV1);
238
- didUpdateDownloadedLock = false;
239
- }
240
- return result;
241
- }
242
- catch (error) {
243
- logger.error(`An unexpected error occurred while downloading files: ` + error);
244
- }
245
- // Mark all files as failed if we get here
246
- result.failed = [...requestedFileMap.values()];
247
- if (didUpdateDownloadedLock) {
248
- writeLockfile(downloadedVersions, originalV1);
249
- }
250
- return result;
64
+ * Downloads multiple translation files in a single batch request
65
+ * @param files - Array of files to download with their output paths
66
+ * @param maxRetries - Maximum number of retry attempts
67
+ * @param retryDelay - Delay between retries in milliseconds
68
+ * @returns Object containing successful and failed file IDs
69
+ */
70
+ async function downloadFileBatch(fileTracker, files, options, forceDownload = false) {
71
+ const { data: downloadedVersions, entryMap, originalV1 } = readLockfile(options);
72
+ let didUpdateDownloadedLock = false;
73
+ const requestedFileMap = new Map(files.map((file) => [`${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`, file]));
74
+ const result = {
75
+ successful: [],
76
+ failed: [],
77
+ skipped: []
78
+ };
79
+ const outputPathMap = new Map(files.map((file) => [`${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`, file.outputPath]));
80
+ try {
81
+ const downloadedFiles = (await gt.downloadFileBatch(files.map((file) => ({
82
+ fileId: file.fileId,
83
+ branchId: file.branchId,
84
+ versionId: file.versionId,
85
+ locale: file.locale
86
+ })))).files || [];
87
+ for (const file of downloadedFiles) {
88
+ const fileKey = `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`;
89
+ const requestedFile = requestedFileMap.get(fileKey);
90
+ if (!requestedFile) continue;
91
+ try {
92
+ const outputPath = outputPathMap.get(fileKey);
93
+ const fileProperties = fileTracker.completed.get(fileKey);
94
+ if (!outputPath || !fileProperties) {
95
+ logger.warn(`No input/output path found for file: ${fileKey}`);
96
+ recordWarning("failed_download", fileKey, "No input/output path found");
97
+ result.failed.push(requestedFile);
98
+ continue;
99
+ }
100
+ const { fileId, versionId, locale, branchId, fileName: inputPath } = fileProperties;
101
+ const dir = path$1.dirname(outputPath);
102
+ if (!fs$1.existsSync(dir)) fs$1.mkdirSync(dir, { recursive: true });
103
+ const existingEntry = entryMap.get(fileId);
104
+ const downloadedTranslation = existingEntry?.versionId === versionId ? existingEntry.translations[locale] : void 0;
105
+ const fileExists = fs$1.existsSync(outputPath);
106
+ if (!forceDownload && fileExists && downloadedTranslation) {
107
+ try {
108
+ let existingContent = fs$1.readFileSync(outputPath, "utf8");
109
+ if (shouldResolveRefs(outputPath, options.options)) try {
110
+ const { resolved } = resolveMintlifyRefs(JSON.parse(existingContent), outputPath);
111
+ existingContent = JSON.stringify(resolved, null, 2);
112
+ } catch {}
113
+ const extracted = (options.options?.jsonSchema ? extractJson(existingContent, inputPath, options.options, locale, options.defaultLocale) : null) ?? (options.options?.yamlSchema ? extractYaml(existingContent, inputPath, options.options) : null);
114
+ if (extracted) {
115
+ let remergedData = mergeWithSource(extracted, locale, inputPath, options);
116
+ if (outputPath.endsWith(".json")) try {
117
+ remergedData = sortJsonString(remergedData);
118
+ } catch {}
119
+ if (remergedData !== existingContent) await fs$1.promises.writeFile(outputPath, remergedData);
120
+ recordRemerged(outputPath);
121
+ }
122
+ } catch {}
123
+ result.skipped.push(requestedFile);
124
+ continue;
125
+ }
126
+ let data = mergeWithSource(file.data, locale, inputPath, options);
127
+ if (file.fileFormat === "GTJSON" || outputPath.endsWith(".json")) try {
128
+ data = sortJsonString(data);
129
+ } catch (error) {
130
+ logger.warn(`Failed to sort JSON file: ${file.id}: ` + error);
131
+ }
132
+ await fs$1.promises.writeFile(outputPath, data);
133
+ recordDownloaded(outputPath, {
134
+ branchId,
135
+ fileId,
136
+ versionId,
137
+ locale,
138
+ inputPath
139
+ });
140
+ result.successful.push(requestedFile);
141
+ if (fileId && versionId && locale) {
142
+ const entry = findOrCreateEntry(entryMap, downloadedVersions.entries, fileId, versionId);
143
+ entry.fileName = inputPath;
144
+ entry.staged = false;
145
+ entry.translations[locale] = {
146
+ updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
147
+ fileName: outputPath
148
+ };
149
+ didUpdateDownloadedLock = true;
150
+ }
151
+ } catch (error) {
152
+ logger.error(`Error saving file ${fileKey}: ` + error);
153
+ recordWarning("failed_download", fileKey, `Error saving file: ${error}`);
154
+ result.failed.push(requestedFile);
155
+ }
156
+ }
157
+ const downloadedFileKeys = new Set(downloadedFiles.map((file) => `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`));
158
+ for (const [fileKey, requestedFile] of requestedFileMap.entries()) if (!downloadedFileKeys.has(fileKey)) result.failed.push(requestedFile);
159
+ if (didUpdateDownloadedLock) {
160
+ writeLockfile(downloadedVersions, originalV1);
161
+ didUpdateDownloadedLock = false;
162
+ }
163
+ return result;
164
+ } catch (error) {
165
+ logger.error(`An unexpected error occurred while downloading files: ` + error);
166
+ }
167
+ result.failed = [...requestedFileMap.values()];
168
+ if (didUpdateDownloadedLock) writeLockfile(downloadedVersions, originalV1);
169
+ return result;
251
170
  }
171
+ //#endregion
172
+ export { downloadFileBatch };
173
+
174
+ //# sourceMappingURL=downloadFileBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloadFileBatch.js","names":["fs","path"],"sources":["../../src/api/downloadFileBatch.ts"],"sourcesContent":["import * as fs from 'fs';\nimport * as path from 'path';\nimport { logger } from '../console/logger.js';\nimport { gt } from '../utils/gt.js';\nimport { Settings } from '../types/index.js';\nimport { validateJsonSchema } from '../formats/json/utils.js';\nimport { validateYamlSchema } from '../formats/yaml/utils.js';\nimport { mergeJson } from '../formats/json/mergeJson.js';\nimport { extractJson } from '../formats/json/extractJson.js';\nimport mergeYaml from '../formats/yaml/mergeYaml.js';\nimport { extractYaml } from '../formats/yaml/extractYaml.js';\nimport {\n resolveMintlifyRefs,\n shouldResolveRefs,\n} from '../utils/resolveMintlifyRefs.js';\nimport {\n readLockfile,\n writeLockfile,\n findOrCreateEntry,\n} from '../fs/config/downloadedVersions.js';\nimport { recordDownloaded, recordRemerged } from '../state/recentDownloads.js';\nimport { recordWarning } from '../state/translateWarnings.js';\nimport stringify from 'fast-json-stable-stringify';\nimport type { FileStatusTracker } from '../workflows/steps/PollJobsStep.js';\nimport { SUPPORTED_FILE_EXTENSIONS } from '../formats/files/supportedFiles.js';\nimport { hasNonIdentityFileFormatTransformForType } from '../formats/files/transformFormat.js';\nimport { getRelative } from '../fs/findFilepath.js';\n\nfunction sortJsonString(data: string): string {\n const sortedData = stringify(JSON.parse(data));\n return JSON.stringify(JSON.parse(sortedData), null, 2);\n}\n\n/**\n * Merges translated content with the current source file for schema-based formats.\n */\nfunction mergeWithSource(\n translatedContent: string,\n locale: string,\n inputPath: string,\n options: Settings\n): string {\n if (shouldSkipSourceFormatMerge(inputPath, options)) {\n return translatedContent;\n }\n if (!options.options) return translatedContent;\n\n const jsonSchema = options.options.jsonSchema\n ? validateJsonSchema(options.options, inputPath)\n : null;\n const yamlSchema =\n !jsonSchema && options.options.yamlSchema\n ? validateYamlSchema(options.options, inputPath)\n : null;\n\n if (!jsonSchema && !yamlSchema) return translatedContent;\n\n const sourceContent = fs.readFileSync(inputPath, 'utf8');\n if (!sourceContent) return translatedContent;\n\n if (jsonSchema) {\n // Resolve $ref before merging if configured\n let resolvedSourceContent = sourceContent;\n if (shouldResolveRefs(inputPath, options.options)) {\n try {\n const json = JSON.parse(sourceContent);\n const { resolved } = resolveMintlifyRefs(json, inputPath);\n resolvedSourceContent = JSON.stringify(resolved, null, 2);\n } catch {\n // Fall through with original content\n }\n }\n return mergeJson(\n resolvedSourceContent,\n inputPath,\n options.options,\n [{ translatedContent, targetLocale: locale }],\n options.defaultLocale,\n options.locales\n )[0];\n } else {\n return mergeYaml(\n sourceContent,\n inputPath,\n options.options,\n [{ translatedContent, targetLocale: locale }],\n options.defaultLocale\n )[0];\n }\n}\n\n/**\n * Determines whether a source file should be skipped for schema re-merging.\n * @param inputPath - The path of the source file\n * @param options - The settings for the project\n * @returns True if the source file should be skipped for schema re-merging, false otherwise\n */\nfunction shouldSkipSourceFormatMerge(\n inputPath: string,\n options: Settings\n): boolean {\n for (const fileType of SUPPORTED_FILE_EXTENSIONS) {\n if (!hasNonIdentityFileFormatTransformForType(options, fileType)) continue;\n\n const transformedSourcePaths = options.files.resolvedPaths[fileType] || [];\n if (\n transformedSourcePaths.some(\n (sourcePath) => getRelative(sourcePath) === inputPath\n )\n ) {\n return true;\n }\n }\n\n return false;\n}\n\nexport type BatchedFiles = {\n branchId: string;\n fileId: string;\n versionId: string;\n locale: string;\n outputPath: string;\n inputPath: string;\n}[];\n\nexport type DownloadFileBatchResult = {\n successful: BatchedFiles;\n failed: BatchedFiles;\n skipped: BatchedFiles;\n};\n/**\n * Downloads multiple translation files in a single batch request\n * @param files - Array of files to download with their output paths\n * @param maxRetries - Maximum number of retry attempts\n * @param retryDelay - Delay between retries in milliseconds\n * @returns Object containing successful and failed file IDs\n */\nexport async function downloadFileBatch(\n fileTracker: FileStatusTracker,\n files: BatchedFiles,\n options: Settings,\n forceDownload: boolean = false\n): Promise<DownloadFileBatchResult> {\n // Local record of what version was last downloaded for each fileName:locale\n const {\n data: downloadedVersions,\n entryMap,\n originalV1,\n } = readLockfile(options);\n let didUpdateDownloadedLock = false;\n\n // Create a map of requested file keys to the file object\n const requestedFileMap = new Map(\n files.map((file) => [\n `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,\n file,\n ])\n );\n const result: DownloadFileBatchResult = {\n successful: [],\n failed: [],\n skipped: [],\n };\n\n // Create a map of translationId to outputPath for easier lookup\n const outputPathMap = new Map(\n files.map((file) => [\n `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,\n file.outputPath,\n ])\n );\n\n try {\n // Download the files\n const responseData = await gt.downloadFileBatch(\n files.map((file) => ({\n fileId: file.fileId,\n branchId: file.branchId,\n versionId: file.versionId,\n locale: file.locale,\n }))\n );\n const downloadedFiles = responseData.files || [];\n\n // Process each file in the response\n for (const file of downloadedFiles) {\n const fileKey = `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`;\n const requestedFile = requestedFileMap.get(fileKey);\n if (!requestedFile) {\n continue;\n }\n try {\n const outputPath = outputPathMap.get(fileKey);\n const fileProperties = fileTracker.completed.get(fileKey);\n\n if (!outputPath || !fileProperties) {\n logger.warn(`No input/output path found for file: ${fileKey}`);\n recordWarning(\n 'failed_download',\n fileKey,\n 'No input/output path found'\n );\n result.failed.push(requestedFile);\n continue;\n }\n\n const {\n fileId,\n versionId,\n locale,\n branchId,\n fileName: inputPath,\n } = fileProperties;\n\n // Ensure the directory exists\n const dir = path.dirname(outputPath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n // If a local translation already exists for the same source version, skip overwrite\n const existingEntry = entryMap.get(fileId);\n const downloadedTranslation =\n existingEntry?.versionId === versionId\n ? existingEntry.translations[locale]\n : undefined;\n const fileExists = fs.existsSync(outputPath);\n\n if (!forceDownload && fileExists && downloadedTranslation) {\n // For schema-based files, re-merge with current source in case\n // non-translatable fields changed (skip the API download, not the merge)\n try {\n let existingContent = fs.readFileSync(outputPath, 'utf8');\n // Resolve $ref before extraction if configured\n if (shouldResolveRefs(outputPath, options.options)) {\n try {\n const json = JSON.parse(existingContent);\n const { resolved } = resolveMintlifyRefs(json, outputPath);\n existingContent = JSON.stringify(resolved, null, 2);\n } catch {\n // Fall through with original content\n }\n }\n const jsonExtracted = options.options?.jsonSchema\n ? extractJson(\n existingContent,\n inputPath,\n options.options,\n locale,\n options.defaultLocale\n )\n : null;\n const extracted =\n jsonExtracted ??\n (options.options?.yamlSchema\n ? extractYaml(existingContent, inputPath, options.options)\n : null);\n if (extracted) {\n const remerged = mergeWithSource(\n extracted,\n locale,\n inputPath,\n options\n );\n let remergedData = remerged;\n if (outputPath.endsWith('.json')) {\n try {\n remergedData = sortJsonString(remergedData);\n } catch {\n // Fall through with unsorted content\n }\n }\n if (remergedData !== existingContent) {\n await fs.promises.writeFile(outputPath, remergedData);\n }\n // Track for postprocessing (e.g. openapi path localization)\n // even when the API download was skipped\n recordRemerged(outputPath);\n }\n } catch {\n // If re-merge fails, still count as skipped — not worth failing the download\n }\n result.skipped.push(requestedFile);\n continue;\n }\n let data = mergeWithSource(file.data, locale, inputPath, options);\n\n // Stable sort JSON keys for deterministic output\n if (file.fileFormat === 'GTJSON' || outputPath.endsWith('.json')) {\n try {\n data = sortJsonString(data);\n } catch (error) {\n logger.warn(`Failed to sort JSON file: ${file.id}: ` + error);\n }\n }\n\n // Write the file to disk\n await fs.promises.writeFile(outputPath, data);\n // Track as downloaded with metadata for downstream postprocessing\n recordDownloaded(outputPath, {\n branchId,\n fileId,\n versionId,\n locale,\n inputPath,\n });\n\n result.successful.push(requestedFile);\n if (fileId && versionId && locale) {\n const entry = findOrCreateEntry(\n entryMap,\n downloadedVersions.entries,\n fileId,\n versionId\n );\n entry.fileName = inputPath;\n entry.staged = false;\n entry.translations[locale] = {\n updatedAt: new Date().toISOString(),\n fileName: outputPath,\n };\n didUpdateDownloadedLock = true;\n }\n } catch (error) {\n logger.error(`Error saving file ${fileKey}: ` + error);\n recordWarning(\n 'failed_download',\n fileKey,\n `Error saving file: ${error}`\n );\n result.failed.push(requestedFile);\n }\n }\n\n // Add any files that weren't in the response to the failed list\n const downloadedFileKeys = new Set(\n downloadedFiles.map(\n (file) =>\n `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`\n )\n );\n for (const [fileKey, requestedFile] of requestedFileMap.entries()) {\n if (!downloadedFileKeys.has(fileKey)) {\n result.failed.push(requestedFile);\n }\n }\n\n // Persist any updates to the downloaded map at the end of a successful cycle\n if (didUpdateDownloadedLock) {\n writeLockfile(downloadedVersions, originalV1);\n didUpdateDownloadedLock = false;\n }\n return result;\n } catch (error) {\n logger.error(\n `An unexpected error occurred while downloading files: ` + error\n );\n }\n\n // Mark all files as failed if we get here\n result.failed = [...requestedFileMap.values()];\n if (didUpdateDownloadedLock) {\n writeLockfile(downloadedVersions, originalV1);\n }\n return result;\n}\n"],"mappings":"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"}
@@ -1,43 +1,39 @@
1
- import { aggregateFiles } from '../formats/files/aggregateFiles.js';
2
- import { collectAndSendUserEditDiffs } from './collectUserEditDiffs.js';
3
- import { gt } from '../utils/gt.js';
4
- import { BranchStep } from '../workflows/steps/BranchStep.js';
5
- import { logErrorAndExit } from '../console/logging.js';
6
- import { logger } from '../console/logger.js';
7
- import chalk from 'chalk';
8
- import { runPublishWorkflow } from '../workflows/publish.js';
1
+ import { logger } from "../console/logger.js";
2
+ import { gt } from "../utils/gt.js";
3
+ import { logErrorAndExit } from "../console/logging.js";
4
+ import { branchResolutionError } from "../console/index.js";
5
+ import { BranchStep } from "../workflows/steps/BranchStep.js";
6
+ import { runPublishWorkflow } from "../workflows/publish.js";
7
+ import { collectAndSendUserEditDiffs } from "./collectUserEditDiffs.js";
8
+ import { aggregateFiles } from "../formats/files/aggregateFiles.js";
9
+ import chalk from "chalk";
10
+ //#region src/api/saveLocalEdits.ts
9
11
  /**
10
- * Uploads current source files to obtain file references, then collects and sends
11
- * diffs for all locales based on last downloaded versions. Does not enqueue translations.
12
- */
13
- export async function saveLocalEdits(settings) {
14
- if (!settings.files)
15
- return;
16
- // Collect current files from config
17
- const { files, publishMap } = await aggregateFiles(settings);
18
- if (!files.length)
19
- return;
20
- // run branch query to get branch id
21
- // Run the branch step
22
- const branchStep = new BranchStep(gt, settings);
23
- const branchResult = await branchStep.run();
24
- await branchStep.wait();
25
- if (!branchResult) {
26
- return logErrorAndExit('Failed to resolve git branch information.');
27
- }
28
- const uploads = files.map((file) => ({
29
- fileName: file.fileName,
30
- fileFormat: file.fileFormat,
31
- branchId: branchResult.currentBranch.id,
32
- fileId: file.fileId,
33
- versionId: file.versionId,
34
- }));
35
- const spinner = logger.createSpinner('dots');
36
- spinner.start('Saving local edits...');
37
- const hadDiffs = await collectAndSendUserEditDiffs(uploads, settings);
38
- spinner.stop(chalk.green('Local edits saved successfully'));
39
- // Publish files to CDN if diffs were detected and publish config exists
40
- if (hadDiffs) {
41
- await runPublishWorkflow(files, publishMap, branchResult.currentBranch.id, settings);
42
- }
12
+ * Uploads current source files to obtain file references, then collects and sends
13
+ * diffs for all locales based on last downloaded versions. Does not enqueue translations.
14
+ */
15
+ async function saveLocalEdits(settings) {
16
+ if (!settings.files) return;
17
+ const { files, publishMap } = await aggregateFiles(settings);
18
+ if (!files.length) return;
19
+ const branchStep = new BranchStep(gt, settings);
20
+ const branchResult = await branchStep.run();
21
+ await branchStep.wait();
22
+ if (!branchResult) return logErrorAndExit(branchResolutionError);
23
+ const uploads = files.map((file) => ({
24
+ fileName: file.fileName,
25
+ fileFormat: file.fileFormat,
26
+ branchId: branchResult.currentBranch.id,
27
+ fileId: file.fileId,
28
+ versionId: file.versionId
29
+ }));
30
+ const spinner = logger.createSpinner("dots");
31
+ spinner.start("Saving local edits...");
32
+ const hadDiffs = await collectAndSendUserEditDiffs(uploads, settings);
33
+ spinner.stop(chalk.green("Local edits saved successfully"));
34
+ if (hadDiffs) await runPublishWorkflow(files, publishMap, branchResult.currentBranch.id, settings);
43
35
  }
36
+ //#endregion
37
+ export { saveLocalEdits };
38
+
39
+ //# sourceMappingURL=saveLocalEdits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saveLocalEdits.js","names":[],"sources":["../../src/api/saveLocalEdits.ts"],"sourcesContent":["import { Settings } from '../types/index.js';\nimport { aggregateFiles } from '../formats/files/aggregateFiles.js';\nimport { collectAndSendUserEditDiffs } from './collectUserEditDiffs.js';\nimport { gt } from '../utils/gt.js';\nimport { BranchStep } from '../workflows/steps/BranchStep.js';\nimport { logErrorAndExit } from '../console/logging.js';\nimport { logger } from '../console/logger.js';\nimport { branchResolutionError } from '../console/index.js';\nimport type { FileReference } from 'generaltranslation/types';\nimport chalk from 'chalk';\nimport { runPublishWorkflow } from '../workflows/publish.js';\n\n/**\n * Uploads current source files to obtain file references, then collects and sends\n * diffs for all locales based on last downloaded versions. Does not enqueue translations.\n */\nexport async function saveLocalEdits(settings: Settings): Promise<void> {\n if (!settings.files) return;\n\n // Collect current files from config\n const { files, publishMap } = await aggregateFiles(settings);\n if (!files.length) return;\n\n // run branch query to get branch id\n // Run the branch step\n const branchStep = new BranchStep(gt, settings);\n const branchResult = await branchStep.run();\n await branchStep.wait();\n if (!branchResult) {\n return logErrorAndExit(branchResolutionError);\n }\n\n const uploads = files.map((file) => ({\n fileName: file.fileName,\n fileFormat: file.fileFormat,\n branchId: branchResult.currentBranch.id,\n fileId: file.fileId,\n versionId: file.versionId,\n })) satisfies FileReference[];\n\n const spinner = logger.createSpinner('dots');\n spinner.start('Saving local edits...');\n\n const hadDiffs = await collectAndSendUserEditDiffs(uploads, settings);\n spinner.stop(chalk.green('Local edits saved successfully'));\n\n // Publish files to CDN if diffs were detected and publish config exists\n if (hadDiffs) {\n await runPublishWorkflow(\n files,\n publishMap,\n branchResult.currentBranch.id,\n settings\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAgBA,eAAsB,eAAe,UAAmC;AACtE,KAAI,CAAC,SAAS,MAAO;CAGrB,MAAM,EAAE,OAAO,eAAe,MAAM,eAAe,SAAS;AAC5D,KAAI,CAAC,MAAM,OAAQ;CAInB,MAAM,aAAa,IAAI,WAAW,IAAI,SAAS;CAC/C,MAAM,eAAe,MAAM,WAAW,KAAK;AAC3C,OAAM,WAAW,MAAM;AACvB,KAAI,CAAC,aACH,QAAO,gBAAgB,sBAAsB;CAG/C,MAAM,UAAU,MAAM,KAAK,UAAU;EACnC,UAAU,KAAK;EACf,YAAY,KAAK;EACjB,UAAU,aAAa,cAAc;EACrC,QAAQ,KAAK;EACb,WAAW,KAAK;EACjB,EAAE;CAEH,MAAM,UAAU,OAAO,cAAc,OAAO;AAC5C,SAAQ,MAAM,wBAAwB;CAEtC,MAAM,WAAW,MAAM,4BAA4B,SAAS,SAAS;AACrE,SAAQ,KAAK,MAAM,MAAM,iCAAiC,CAAC;AAG3D,KAAI,SACF,OAAM,mBACJ,OACA,YACA,aAAa,cAAc,IAC3B,SACD"}
@@ -1,9 +1,19 @@
1
- // Entry point for binaries
2
- import { main } from '../index.js';
3
- import dotenv from 'dotenv';
4
- import { program } from 'commander';
5
- dotenv.config({ path: '.env' });
6
- dotenv.config({ path: '.env.local', override: true });
7
- dotenv.config({ path: '.env.production', override: true });
1
+ import { main } from "../index.js";
2
+ import dotenv from "dotenv";
3
+ import { program } from "commander";
4
+ //#region src/bin/bin-entry.ts
5
+ dotenv.config({ path: ".env" });
6
+ dotenv.config({
7
+ path: ".env.local",
8
+ override: true
9
+ });
10
+ dotenv.config({
11
+ path: ".env.production",
12
+ override: true
13
+ });
8
14
  main(program);
9
15
  program.parse();
16
+ //#endregion
17
+ export {};
18
+
19
+ //# sourceMappingURL=bin-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin-entry.js","names":[],"sources":["../../src/bin/bin-entry.ts"],"sourcesContent":["// Entry point for binaries\n\nimport { main } from '../index.js';\nimport dotenv from 'dotenv';\nimport { program } from 'commander';\n\ndotenv.config({ path: '.env' });\ndotenv.config({ path: '.env.local', override: true });\ndotenv.config({ path: '.env.production', override: true });\n\nmain(program);\nprogram.parse();\n"],"mappings":";;;;AAMA,OAAO,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,OAAO;CAAE,MAAM;CAAc,UAAU;CAAM,CAAC;AACrD,OAAO,OAAO;CAAE,MAAM;CAAmB,UAAU;CAAM,CAAC;AAE1D,KAAK,QAAQ;AACb,QAAQ,OAAO"}