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,292 +1,208 @@
1
- import chalk from 'chalk';
2
- import { WorkflowStep } from './WorkflowStep.js';
3
- import { logger } from '../../console/logger.js';
4
- import { TEMPLATE_FILE_NAME } from '../../utils/constants.js';
5
- export class PollTranslationJobsStep extends WorkflowStep {
6
- gt;
7
- spinner = null;
8
- previousProgress = 0;
9
- constructor(gt) {
10
- super();
11
- this.gt = gt;
12
- }
13
- async run({ fileTracker, fileQueryData, jobData, timeoutDuration, forceRetranslation, }) {
14
- const startTime = Date.now();
15
- this.spinner = logger.createProgressBar(fileQueryData.length);
16
- const spinnerMessage = forceRetranslation
17
- ? 'Waiting for retranslation...'
18
- : 'Waiting for translation...';
19
- this.spinner.start(spinnerMessage);
20
- // Build a map of branchId:fileId:versionId:locale -> FileProperties
21
- const filePropertiesMap = new Map();
22
- fileQueryData.forEach((item) => {
23
- filePropertiesMap.set(`${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`, item);
24
- });
25
- // Initial query to check which files already have translations
26
- // Skip when force retranslation is enabled, since the server
27
- // no longer marks force-retranslated files as incomplete
28
- if (!forceRetranslation) {
29
- const initialFileData = await this.gt.queryFileData({
30
- translatedFiles: fileQueryData.map((item) => ({
31
- fileId: item.fileId,
32
- versionId: item.versionId,
33
- branchId: item.branchId,
34
- locale: item.locale,
35
- })),
36
- });
37
- const existingTranslations = initialFileData.translatedFiles || [];
38
- // Mark all existing translations as completed
39
- existingTranslations.forEach((translation) => {
40
- if (!translation.completedAt) {
41
- return;
42
- }
43
- const fileKey = `${translation.branchId}:${translation.fileId}:${translation.versionId}:${translation.locale}`;
44
- const fileProperties = filePropertiesMap.get(fileKey);
45
- if (fileProperties) {
46
- fileTracker.completed.set(fileKey, fileProperties);
47
- }
48
- });
49
- }
50
- // Build a map of jobs for quick lookup:
51
- // branchId:fileId:versionId:locale -> job
52
- const jobMap = new Map();
53
- Object.entries(jobData.jobData).forEach(([jobId, job]) => {
54
- const jobLocale = this.gt.resolveAliasLocale(job.targetLocale);
55
- const key = `${job.branchId}:${job.fileId}:${job.versionId}:${jobLocale}`;
56
- jobMap.set(key, { ...job, jobId, targetLocale: jobLocale });
57
- });
58
- // Build a map of jobs for quick lookup:
59
- // jobId -> file data for the job
60
- const jobFileMap = new Map();
61
- Object.entries(jobData.jobData).forEach(([jobId, job]) => {
62
- const jobLocale = this.gt.resolveAliasLocale(job.targetLocale);
63
- jobFileMap.set(jobId, {
64
- branchId: job.branchId,
65
- fileId: job.fileId,
66
- versionId: job.versionId,
67
- locale: jobLocale,
68
- });
69
- });
70
- // Categorize each file query item
71
- for (const item of fileQueryData) {
72
- const fileKey = `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`;
73
- // Check if translation already exists (completedAt is truthy)
74
- const existingTranslation = fileTracker.completed.get(fileKey);
75
- if (existingTranslation) {
76
- continue;
77
- }
78
- // Check if there's a job for this file
79
- const jobKey = `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`;
80
- const job = jobMap.get(jobKey);
81
- if (job) {
82
- // Job exists - mark as in progress initially
83
- fileTracker.inProgress.set(fileKey, item);
84
- }
85
- else {
86
- // No job and no existing translation - mark as skipped
87
- fileTracker.skipped.set(fileKey, item);
88
- }
89
- }
90
- // Update spinner with initial status
91
- this.updateSpinner(fileTracker, fileQueryData);
92
- // If force retranslation, don't skip the initial check
93
- if (!forceRetranslation) {
94
- // Check if all jobs are already complete
95
- if (fileTracker.inProgress.size === 0) {
96
- this.spinner.stop(chalk.green('All translations ready'));
97
- return { success: true, fileTracker };
98
- }
99
- }
100
- // Calculate time until next 5-second interval since startTime
101
- const msUntilNextInterval = Math.max(0, 5000 - ((Date.now() - startTime) % 5000));
102
- return new Promise((resolve) => {
103
- let intervalCheck;
104
- setTimeout(() => {
105
- intervalCheck = setInterval(async () => {
106
- try {
107
- // Query job status
108
- const jobIds = Array.from(jobFileMap.keys());
109
- const jobStatusResponse = await this.gt.checkJobStatus(jobIds);
110
- // Update status based on job completion
111
- for (const job of jobStatusResponse) {
112
- const jobFileProperties = jobFileMap.get(job.jobId);
113
- if (jobFileProperties) {
114
- const fileKey = `${jobFileProperties.branchId}:${jobFileProperties.fileId}:${jobFileProperties.versionId}:${jobFileProperties.locale}`;
115
- const fileProperties = filePropertiesMap.get(fileKey);
116
- if (!fileProperties) {
117
- continue;
118
- }
119
- if (job.status === 'completed') {
120
- fileTracker.completed.set(fileKey, fileProperties);
121
- fileTracker.inProgress.delete(fileKey);
122
- jobFileMap.delete(job.jobId);
123
- }
124
- else if (job.status === 'failed') {
125
- fileTracker.failed.set(fileKey, fileProperties);
126
- fileTracker.inProgress.delete(fileKey);
127
- jobFileMap.delete(job.jobId);
128
- }
129
- else if (job.status === 'unknown') {
130
- fileTracker.skipped.set(fileKey, fileProperties);
131
- fileTracker.inProgress.delete(fileKey);
132
- jobFileMap.delete(job.jobId);
133
- }
134
- }
135
- }
136
- // Update spinner
137
- this.updateSpinner(fileTracker, fileQueryData);
138
- const elapsed = Date.now() - startTime;
139
- const allJobsProcessed = fileTracker.inProgress.size === 0;
140
- if (allJobsProcessed || elapsed >= timeoutDuration * 1000) {
141
- clearInterval(intervalCheck);
142
- if (fileTracker.inProgress.size === 0) {
143
- this.spinner.stop(chalk.green('Translation jobs finished'));
144
- resolve({ success: true, fileTracker });
145
- }
146
- else {
147
- this.spinner.stop(chalk.red('Timed out waiting for translation jobs'));
148
- resolve({ success: false, fileTracker });
149
- }
150
- }
151
- }
152
- catch (error) {
153
- logger.error(chalk.red('Error checking job status: ') + error);
154
- }
155
- }, 5000);
156
- }, msUntilNextInterval);
157
- });
158
- }
159
- updateSpinner(fileTracker, fileQueryData) {
160
- if (!this.spinner)
161
- return;
162
- const statusText = this.generateStatusSuffixText(fileTracker, fileQueryData);
163
- const currentProgress = fileTracker.completed.size +
164
- fileTracker.failed.size +
165
- fileTracker.skipped.size;
166
- const progressDelta = currentProgress - this.previousProgress;
167
- this.spinner.advance(progressDelta, statusText);
168
- this.previousProgress = currentProgress;
169
- }
170
- generateStatusSuffixText(fileTracker, fileQueryData) {
171
- // Simple progress indicator
172
- const progressText = `${chalk.green(`[${fileTracker.completed.size +
173
- fileTracker.failed.size +
174
- fileTracker.skipped.size}/${fileQueryData.length}]`)} translations completed`;
175
- // Get terminal height to adapt our output
176
- const terminalHeight = process.stdout.rows || 24;
177
- // If terminal is very small, just show the basic progress
178
- if (terminalHeight < 6) {
179
- return progressText;
180
- }
181
- const newSuffixText = [progressText];
182
- // Organize data by filename : locale
183
- const fileStatus = new Map();
184
- // Initialize with all files and locales from fileQueryData
185
- for (const item of fileQueryData) {
186
- if (!fileStatus.has(item.fileName)) {
187
- fileStatus.set(item.fileName, {
188
- completed: new Set(),
189
- pending: new Set([item.locale]),
190
- failed: new Set(),
191
- skipped: new Set(),
192
- });
193
- }
194
- else {
195
- fileStatus.get(item.fileName)?.pending.add(item.locale);
196
- }
197
- }
198
- // Mark which ones are completed, failed, or skipped
199
- for (const [_, fileProperties] of fileTracker.completed) {
200
- const { fileName, locale } = fileProperties;
201
- const status = fileStatus.get(fileName);
202
- if (status) {
203
- status.pending.delete(locale);
204
- status.completed.add(locale);
205
- }
206
- }
207
- for (const [_, fileProperties] of fileTracker.failed) {
208
- const { fileName, locale } = fileProperties;
209
- const status = fileStatus.get(fileName);
210
- if (status) {
211
- status.pending.delete(locale);
212
- status.failed.add(locale);
213
- }
214
- }
215
- for (const [_, fileProperties] of fileTracker.skipped) {
216
- const { fileName, locale } = fileProperties;
217
- const status = fileStatus.get(fileName);
218
- if (status) {
219
- status.pending.delete(locale);
220
- status.skipped.add(locale);
221
- }
222
- }
223
- // Calculate how many files we can show based on terminal height
224
- const filesArray = Array.from(fileStatus.entries());
225
- const maxFilesToShow = Math.min(filesArray.length, terminalHeight - 3 // Header + progress + buffer
226
- );
227
- // Display each file with its status on a single line
228
- for (let i = 0; i < maxFilesToShow; i++) {
229
- const [fileName, status] = filesArray[i];
230
- // Create condensed locale status
231
- const localeStatuses = [];
232
- // Add completed locales (green)
233
- if (status.completed.size > 0) {
234
- localeStatuses.push(...Array.from(status.completed).map((locale) => ({
235
- locale,
236
- status: 'completed',
237
- })));
238
- }
239
- // Add skipped locales (green)
240
- if (status.skipped.size > 0) {
241
- localeStatuses.push(...Array.from(status.skipped).map((locale) => ({
242
- locale,
243
- status: 'skipped',
244
- })));
245
- }
246
- // Add failed locales (red)
247
- if (status.failed.size > 0) {
248
- localeStatuses.push(...Array.from(status.failed).map((locale) => ({
249
- locale,
250
- status: 'failed',
251
- })));
252
- }
253
- // Add pending locales (yellow)
254
- if (status.pending.size > 0) {
255
- localeStatuses.push(...Array.from(status.pending).map((locale) => ({
256
- locale,
257
- status: 'pending',
258
- })));
259
- }
260
- // Sort localeStatuses by locale
261
- localeStatuses.sort((a, b) => a.locale.localeCompare(b.locale));
262
- // Add colors
263
- const localeString = localeStatuses
264
- .map((locale) => {
265
- if (locale.status === 'completed') {
266
- return chalk.green(locale.locale);
267
- }
268
- else if (locale.status === 'skipped') {
269
- return chalk.gray(locale.locale);
270
- }
271
- else if (locale.status === 'failed') {
272
- return chalk.red(locale.locale);
273
- }
274
- else if (locale.status === 'pending') {
275
- return chalk.yellow(locale.locale);
276
- }
277
- })
278
- .join(', ');
279
- // Format the line
280
- const prettyFileName = fileName === TEMPLATE_FILE_NAME ? '<React Elements>' : fileName;
281
- newSuffixText.push(`${chalk.bold(prettyFileName)} [${localeString}]`);
282
- }
283
- // If we couldn't show all files, add an indicator
284
- if (filesArray.length > maxFilesToShow) {
285
- newSuffixText.push(`... and ${filesArray.length - maxFilesToShow} more files`);
286
- }
287
- return newSuffixText.join('\n');
288
- }
289
- async wait() {
290
- return;
291
- }
292
- }
1
+ import { logger } from "../../console/logger.js";
2
+ import "../../utils/constants.js";
3
+ import { WorkflowStep } from "./WorkflowStep.js";
4
+ import chalk from "chalk";
5
+ //#region src/workflows/steps/PollJobsStep.ts
6
+ var PollTranslationJobsStep = class extends WorkflowStep {
7
+ spinner = null;
8
+ previousProgress = 0;
9
+ constructor(gt) {
10
+ super();
11
+ this.gt = gt;
12
+ }
13
+ async run({ fileTracker, fileQueryData, jobData, timeoutDuration, forceRetranslation }) {
14
+ const startTime = Date.now();
15
+ this.spinner = logger.createProgressBar(fileQueryData.length);
16
+ const spinnerMessage = forceRetranslation ? "Waiting for retranslation..." : "Waiting for translation...";
17
+ this.spinner.start(spinnerMessage);
18
+ const filePropertiesMap = /* @__PURE__ */ new Map();
19
+ fileQueryData.forEach((item) => {
20
+ filePropertiesMap.set(`${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`, item);
21
+ });
22
+ if (!forceRetranslation) ((await this.gt.queryFileData({ translatedFiles: fileQueryData.map((item) => ({
23
+ fileId: item.fileId,
24
+ versionId: item.versionId,
25
+ branchId: item.branchId,
26
+ locale: item.locale
27
+ })) })).translatedFiles || []).forEach((translation) => {
28
+ if (!translation.completedAt) return;
29
+ const fileKey = `${translation.branchId}:${translation.fileId}:${translation.versionId}:${translation.locale}`;
30
+ const fileProperties = filePropertiesMap.get(fileKey);
31
+ if (fileProperties) fileTracker.completed.set(fileKey, fileProperties);
32
+ });
33
+ const jobMap = /* @__PURE__ */ new Map();
34
+ Object.entries(jobData.jobData).forEach(([jobId, job]) => {
35
+ const jobLocale = this.gt.resolveAliasLocale(job.targetLocale);
36
+ const key = `${job.branchId}:${job.fileId}:${job.versionId}:${jobLocale}`;
37
+ jobMap.set(key, {
38
+ ...job,
39
+ jobId,
40
+ targetLocale: jobLocale
41
+ });
42
+ });
43
+ const jobFileMap = /* @__PURE__ */ new Map();
44
+ Object.entries(jobData.jobData).forEach(([jobId, job]) => {
45
+ const jobLocale = this.gt.resolveAliasLocale(job.targetLocale);
46
+ jobFileMap.set(jobId, {
47
+ branchId: job.branchId,
48
+ fileId: job.fileId,
49
+ versionId: job.versionId,
50
+ locale: jobLocale
51
+ });
52
+ });
53
+ for (const item of fileQueryData) {
54
+ const fileKey = `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`;
55
+ if (fileTracker.completed.get(fileKey)) continue;
56
+ const jobKey = `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`;
57
+ if (jobMap.get(jobKey)) fileTracker.inProgress.set(fileKey, item);
58
+ else fileTracker.skipped.set(fileKey, item);
59
+ }
60
+ this.updateSpinner(fileTracker, fileQueryData);
61
+ if (!forceRetranslation) {
62
+ if (fileTracker.inProgress.size === 0) {
63
+ this.spinner.stop(chalk.green("All translations ready"));
64
+ return {
65
+ success: true,
66
+ fileTracker
67
+ };
68
+ }
69
+ }
70
+ const msUntilNextInterval = Math.max(0, 5e3 - (Date.now() - startTime) % 5e3);
71
+ return new Promise((resolve) => {
72
+ let intervalCheck;
73
+ setTimeout(() => {
74
+ intervalCheck = setInterval(async () => {
75
+ try {
76
+ const jobIds = Array.from(jobFileMap.keys());
77
+ const jobStatusResponse = await this.gt.checkJobStatus(jobIds);
78
+ for (const job of jobStatusResponse) {
79
+ const jobFileProperties = jobFileMap.get(job.jobId);
80
+ if (jobFileProperties) {
81
+ const fileKey = `${jobFileProperties.branchId}:${jobFileProperties.fileId}:${jobFileProperties.versionId}:${jobFileProperties.locale}`;
82
+ const fileProperties = filePropertiesMap.get(fileKey);
83
+ if (!fileProperties) continue;
84
+ if (job.status === "completed") {
85
+ fileTracker.completed.set(fileKey, fileProperties);
86
+ fileTracker.inProgress.delete(fileKey);
87
+ jobFileMap.delete(job.jobId);
88
+ } else if (job.status === "failed") {
89
+ fileTracker.failed.set(fileKey, fileProperties);
90
+ fileTracker.inProgress.delete(fileKey);
91
+ jobFileMap.delete(job.jobId);
92
+ } else if (job.status === "unknown") {
93
+ fileTracker.skipped.set(fileKey, fileProperties);
94
+ fileTracker.inProgress.delete(fileKey);
95
+ jobFileMap.delete(job.jobId);
96
+ }
97
+ }
98
+ }
99
+ this.updateSpinner(fileTracker, fileQueryData);
100
+ const elapsed = Date.now() - startTime;
101
+ if (fileTracker.inProgress.size === 0 || elapsed >= timeoutDuration * 1e3) {
102
+ clearInterval(intervalCheck);
103
+ if (fileTracker.inProgress.size === 0) {
104
+ this.spinner.stop(chalk.green("Translation jobs finished"));
105
+ resolve({
106
+ success: true,
107
+ fileTracker
108
+ });
109
+ } else {
110
+ this.spinner.stop(chalk.red("Timed out waiting for translation jobs"));
111
+ resolve({
112
+ success: false,
113
+ fileTracker
114
+ });
115
+ }
116
+ }
117
+ } catch (error) {
118
+ logger.error(chalk.red("Error checking job status: ") + error);
119
+ }
120
+ }, 5e3);
121
+ }, msUntilNextInterval);
122
+ });
123
+ }
124
+ updateSpinner(fileTracker, fileQueryData) {
125
+ if (!this.spinner) return;
126
+ const statusText = this.generateStatusSuffixText(fileTracker, fileQueryData);
127
+ const currentProgress = fileTracker.completed.size + fileTracker.failed.size + fileTracker.skipped.size;
128
+ const progressDelta = currentProgress - this.previousProgress;
129
+ this.spinner.advance(progressDelta, statusText);
130
+ this.previousProgress = currentProgress;
131
+ }
132
+ generateStatusSuffixText(fileTracker, fileQueryData) {
133
+ const progressText = `${chalk.green(`[${fileTracker.completed.size + fileTracker.failed.size + fileTracker.skipped.size}/${fileQueryData.length}]`)} translations completed`;
134
+ const terminalHeight = process.stdout.rows || 24;
135
+ if (terminalHeight < 6) return progressText;
136
+ const newSuffixText = [progressText];
137
+ const fileStatus = /* @__PURE__ */ new Map();
138
+ for (const item of fileQueryData) if (!fileStatus.has(item.fileName)) fileStatus.set(item.fileName, {
139
+ completed: /* @__PURE__ */ new Set(),
140
+ pending: new Set([item.locale]),
141
+ failed: /* @__PURE__ */ new Set(),
142
+ skipped: /* @__PURE__ */ new Set()
143
+ });
144
+ else fileStatus.get(item.fileName)?.pending.add(item.locale);
145
+ for (const [_, fileProperties] of fileTracker.completed) {
146
+ const { fileName, locale } = fileProperties;
147
+ const status = fileStatus.get(fileName);
148
+ if (status) {
149
+ status.pending.delete(locale);
150
+ status.completed.add(locale);
151
+ }
152
+ }
153
+ for (const [_, fileProperties] of fileTracker.failed) {
154
+ const { fileName, locale } = fileProperties;
155
+ const status = fileStatus.get(fileName);
156
+ if (status) {
157
+ status.pending.delete(locale);
158
+ status.failed.add(locale);
159
+ }
160
+ }
161
+ for (const [_, fileProperties] of fileTracker.skipped) {
162
+ const { fileName, locale } = fileProperties;
163
+ const status = fileStatus.get(fileName);
164
+ if (status) {
165
+ status.pending.delete(locale);
166
+ status.skipped.add(locale);
167
+ }
168
+ }
169
+ const filesArray = Array.from(fileStatus.entries());
170
+ const maxFilesToShow = Math.min(filesArray.length, terminalHeight - 3);
171
+ for (let i = 0; i < maxFilesToShow; i++) {
172
+ const [fileName, status] = filesArray[i];
173
+ const localeStatuses = [];
174
+ if (status.completed.size > 0) localeStatuses.push(...Array.from(status.completed).map((locale) => ({
175
+ locale,
176
+ status: "completed"
177
+ })));
178
+ if (status.skipped.size > 0) localeStatuses.push(...Array.from(status.skipped).map((locale) => ({
179
+ locale,
180
+ status: "skipped"
181
+ })));
182
+ if (status.failed.size > 0) localeStatuses.push(...Array.from(status.failed).map((locale) => ({
183
+ locale,
184
+ status: "failed"
185
+ })));
186
+ if (status.pending.size > 0) localeStatuses.push(...Array.from(status.pending).map((locale) => ({
187
+ locale,
188
+ status: "pending"
189
+ })));
190
+ localeStatuses.sort((a, b) => a.locale.localeCompare(b.locale));
191
+ const localeString = localeStatuses.map((locale) => {
192
+ if (locale.status === "completed") return chalk.green(locale.locale);
193
+ else if (locale.status === "skipped") return chalk.gray(locale.locale);
194
+ else if (locale.status === "failed") return chalk.red(locale.locale);
195
+ else if (locale.status === "pending") return chalk.yellow(locale.locale);
196
+ }).join(", ");
197
+ const prettyFileName = fileName === "__INTERNAL_GT_TEMPLATE_NAME__" ? "<React Elements>" : fileName;
198
+ newSuffixText.push(`${chalk.bold(prettyFileName)} [${localeString}]`);
199
+ }
200
+ if (filesArray.length > maxFilesToShow) newSuffixText.push(`... and ${filesArray.length - maxFilesToShow} more files`);
201
+ return newSuffixText.join("\n");
202
+ }
203
+ async wait() {}
204
+ };
205
+ //#endregion
206
+ export { PollTranslationJobsStep };
207
+
208
+ //# sourceMappingURL=PollJobsStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PollJobsStep.js","names":[],"sources":["../../../src/workflows/steps/PollJobsStep.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { WorkflowStep } from './WorkflowStep.js';\nimport { logger } from '../../console/logger.js';\nimport { GT } from 'generaltranslation';\nimport { EnqueueFilesResult } from 'generaltranslation/types';\nimport { TEMPLATE_FILE_NAME } from '../../utils/constants.js';\nimport type { FileProperties } from '../../types/files.js';\n\nexport type PollJobsInput = {\n fileTracker: FileStatusTracker;\n fileQueryData: FileProperties[];\n jobData: EnqueueFilesResult;\n timeoutDuration: number;\n forceRetranslation?: boolean;\n};\n\nexport type FileStatusTracker = {\n completed: Map<string, FileProperties>;\n inProgress: Map<string, FileProperties>;\n failed: Map<string, FileProperties>;\n skipped: Map<string, FileProperties>;\n};\n\nexport type PollJobsOutput = {\n success: boolean;\n fileTracker: FileStatusTracker;\n};\n\nexport class PollTranslationJobsStep extends WorkflowStep<\n PollJobsInput,\n PollJobsOutput\n> {\n private spinner: ReturnType<typeof logger.createProgressBar> | null = null;\n private previousProgress = 0;\n\n constructor(private gt: GT) {\n super();\n }\n\n async run({\n fileTracker,\n fileQueryData,\n jobData,\n timeoutDuration,\n forceRetranslation,\n }: PollJobsInput): Promise<PollJobsOutput> {\n const startTime = Date.now();\n this.spinner = logger.createProgressBar(fileQueryData.length);\n const spinnerMessage = forceRetranslation\n ? 'Waiting for retranslation...'\n : 'Waiting for translation...';\n this.spinner.start(spinnerMessage);\n\n // Build a map of branchId:fileId:versionId:locale -> FileProperties\n const filePropertiesMap = new Map<string, FileProperties>();\n fileQueryData.forEach((item) => {\n filePropertiesMap.set(\n `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`,\n item\n );\n });\n\n // Initial query to check which files already have translations\n // Skip when force retranslation is enabled, since the server\n // no longer marks force-retranslated files as incomplete\n if (!forceRetranslation) {\n const initialFileData = await this.gt.queryFileData({\n translatedFiles: fileQueryData.map((item) => ({\n fileId: item.fileId,\n versionId: item.versionId,\n branchId: item.branchId,\n locale: item.locale,\n })),\n });\n const existingTranslations = initialFileData.translatedFiles || [];\n\n // Mark all existing translations as completed\n existingTranslations.forEach((translation) => {\n if (!translation.completedAt) {\n return;\n }\n const fileKey = `${translation.branchId}:${translation.fileId}:${translation.versionId}:${translation.locale}`;\n const fileProperties = filePropertiesMap.get(fileKey);\n if (fileProperties) {\n fileTracker.completed.set(fileKey, fileProperties);\n }\n });\n }\n\n // Build a map of jobs for quick lookup:\n // branchId:fileId:versionId:locale -> job\n const jobMap = new Map<\n string,\n (typeof jobData.jobData)[number] & { jobId: string }\n >();\n Object.entries(jobData.jobData).forEach(([jobId, job]) => {\n const jobLocale = this.gt.resolveAliasLocale(job.targetLocale);\n const key = `${job.branchId}:${job.fileId}:${job.versionId}:${jobLocale}`;\n jobMap.set(key, { ...job, jobId, targetLocale: jobLocale });\n });\n\n // Build a map of jobs for quick lookup:\n // jobId -> file data for the job\n const jobFileMap = new Map<\n string,\n {\n branchId: string;\n fileId: string;\n versionId: string;\n locale: string;\n }\n >();\n Object.entries(jobData.jobData).forEach(([jobId, job]) => {\n const jobLocale = this.gt.resolveAliasLocale(job.targetLocale);\n jobFileMap.set(jobId, {\n branchId: job.branchId,\n fileId: job.fileId,\n versionId: job.versionId,\n locale: jobLocale,\n });\n });\n\n // Categorize each file query item\n for (const item of fileQueryData) {\n const fileKey = `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`;\n\n // Check if translation already exists (completedAt is truthy)\n const existingTranslation = fileTracker.completed.get(fileKey);\n\n if (existingTranslation) {\n continue;\n }\n\n // Check if there's a job for this file\n const jobKey = `${item.branchId}:${item.fileId}:${item.versionId}:${item.locale}`;\n const job = jobMap.get(jobKey);\n\n if (job) {\n // Job exists - mark as in progress initially\n fileTracker.inProgress.set(fileKey, item);\n } else {\n // No job and no existing translation - mark as skipped\n fileTracker.skipped.set(fileKey, item);\n }\n }\n\n // Update spinner with initial status\n this.updateSpinner(fileTracker, fileQueryData);\n\n // If force retranslation, don't skip the initial check\n if (!forceRetranslation) {\n // Check if all jobs are already complete\n if (fileTracker.inProgress.size === 0) {\n this.spinner.stop(chalk.green('All translations ready'));\n return { success: true, fileTracker };\n }\n }\n\n // Calculate time until next 5-second interval since startTime\n const msUntilNextInterval = Math.max(\n 0,\n 5000 - ((Date.now() - startTime) % 5000)\n );\n\n return new Promise<PollJobsOutput>((resolve) => {\n let intervalCheck: NodeJS.Timeout;\n\n setTimeout(() => {\n intervalCheck = setInterval(async () => {\n try {\n // Query job status\n const jobIds = Array.from(jobFileMap.keys());\n const jobStatusResponse = await this.gt.checkJobStatus(jobIds);\n\n // Update status based on job completion\n for (const job of jobStatusResponse) {\n const jobFileProperties = jobFileMap.get(job.jobId);\n if (jobFileProperties) {\n const fileKey = `${jobFileProperties.branchId}:${jobFileProperties.fileId}:${jobFileProperties.versionId}:${jobFileProperties.locale}`;\n const fileProperties = filePropertiesMap.get(fileKey);\n if (!fileProperties) {\n continue;\n }\n if (job.status === 'completed') {\n fileTracker.completed.set(fileKey, fileProperties);\n fileTracker.inProgress.delete(fileKey);\n jobFileMap.delete(job.jobId);\n } else if (job.status === 'failed') {\n fileTracker.failed.set(fileKey, fileProperties);\n fileTracker.inProgress.delete(fileKey);\n jobFileMap.delete(job.jobId);\n } else if (job.status === 'unknown') {\n fileTracker.skipped.set(fileKey, fileProperties);\n fileTracker.inProgress.delete(fileKey);\n jobFileMap.delete(job.jobId);\n }\n }\n }\n\n // Update spinner\n this.updateSpinner(fileTracker, fileQueryData);\n\n const elapsed = Date.now() - startTime;\n const allJobsProcessed = fileTracker.inProgress.size === 0;\n\n if (allJobsProcessed || elapsed >= timeoutDuration * 1000) {\n clearInterval(intervalCheck);\n\n if (fileTracker.inProgress.size === 0) {\n this.spinner!.stop(chalk.green('Translation jobs finished'));\n resolve({ success: true, fileTracker });\n } else {\n this.spinner!.stop(\n chalk.red('Timed out waiting for translation jobs')\n );\n resolve({ success: false, fileTracker });\n }\n }\n } catch (error) {\n logger.error(chalk.red('Error checking job status: ') + error);\n }\n }, 5000);\n }, msUntilNextInterval);\n });\n }\n\n private updateSpinner(\n fileTracker: FileStatusTracker,\n fileQueryData: FileProperties[]\n ): void {\n if (!this.spinner) return;\n\n const statusText = this.generateStatusSuffixText(\n fileTracker,\n fileQueryData\n );\n const currentProgress =\n fileTracker.completed.size +\n fileTracker.failed.size +\n fileTracker.skipped.size;\n const progressDelta = currentProgress - this.previousProgress;\n this.spinner.advance(progressDelta, statusText);\n this.previousProgress = currentProgress;\n }\n\n private generateStatusSuffixText(\n fileTracker: FileStatusTracker,\n fileQueryData: FileProperties[]\n ): string {\n // Simple progress indicator\n const progressText = `${chalk.green(\n `[${\n fileTracker.completed.size +\n fileTracker.failed.size +\n fileTracker.skipped.size\n }/${fileQueryData.length}]`\n )} translations completed`;\n\n // Get terminal height to adapt our output\n const terminalHeight = process.stdout.rows || 24;\n\n // If terminal is very small, just show the basic progress\n if (terminalHeight < 6) {\n return progressText;\n }\n\n const newSuffixText = [progressText];\n\n // Organize data by filename : locale\n const fileStatus = new Map<\n string,\n {\n completed: Set<string>;\n pending: Set<string>;\n failed: Set<string>;\n skipped: Set<string>;\n }\n >();\n\n // Initialize with all files and locales from fileQueryData\n for (const item of fileQueryData) {\n if (!fileStatus.has(item.fileName)) {\n fileStatus.set(item.fileName, {\n completed: new Set(),\n pending: new Set([item.locale]),\n failed: new Set(),\n skipped: new Set(),\n });\n } else {\n fileStatus.get(item.fileName)?.pending.add(item.locale);\n }\n }\n\n // Mark which ones are completed, failed, or skipped\n for (const [_, fileProperties] of fileTracker.completed) {\n const { fileName, locale } = fileProperties;\n const status = fileStatus.get(fileName);\n if (status) {\n status.pending.delete(locale);\n status.completed.add(locale);\n }\n }\n\n for (const [_, fileProperties] of fileTracker.failed) {\n const { fileName, locale } = fileProperties;\n const status = fileStatus.get(fileName);\n if (status) {\n status.pending.delete(locale);\n status.failed.add(locale);\n }\n }\n\n for (const [_, fileProperties] of fileTracker.skipped) {\n const { fileName, locale } = fileProperties;\n const status = fileStatus.get(fileName);\n if (status) {\n status.pending.delete(locale);\n status.skipped.add(locale);\n }\n }\n\n // Calculate how many files we can show based on terminal height\n const filesArray = Array.from(fileStatus.entries());\n const maxFilesToShow = Math.min(\n filesArray.length,\n terminalHeight - 3 // Header + progress + buffer\n );\n\n // Display each file with its status on a single line\n for (let i = 0; i < maxFilesToShow; i++) {\n const [fileName, status] = filesArray[i];\n\n // Create condensed locale status\n const localeStatuses: { locale: string; status: string }[] = [];\n\n // Add completed locales (green)\n if (status.completed.size > 0) {\n localeStatuses.push(\n ...Array.from(status.completed).map((locale) => ({\n locale,\n status: 'completed',\n }))\n );\n }\n\n // Add skipped locales (green)\n if (status.skipped.size > 0) {\n localeStatuses.push(\n ...Array.from(status.skipped).map((locale) => ({\n locale,\n status: 'skipped',\n }))\n );\n }\n\n // Add failed locales (red)\n if (status.failed.size > 0) {\n localeStatuses.push(\n ...Array.from(status.failed).map((locale) => ({\n locale,\n status: 'failed',\n }))\n );\n }\n\n // Add pending locales (yellow)\n if (status.pending.size > 0) {\n localeStatuses.push(\n ...Array.from(status.pending).map((locale) => ({\n locale,\n status: 'pending',\n }))\n );\n }\n\n // Sort localeStatuses by locale\n localeStatuses.sort((a, b) => a.locale.localeCompare(b.locale));\n\n // Add colors\n const localeString = localeStatuses\n .map((locale) => {\n if (locale.status === 'completed') {\n return chalk.green(locale.locale);\n } else if (locale.status === 'skipped') {\n return chalk.gray(locale.locale);\n } else if (locale.status === 'failed') {\n return chalk.red(locale.locale);\n } else if (locale.status === 'pending') {\n return chalk.yellow(locale.locale);\n }\n })\n .join(', ');\n\n // Format the line\n const prettyFileName =\n fileName === TEMPLATE_FILE_NAME ? '<React Elements>' : fileName;\n newSuffixText.push(`${chalk.bold(prettyFileName)} [${localeString}]`);\n }\n\n // If we couldn't show all files, add an indicator\n if (filesArray.length > maxFilesToShow) {\n newSuffixText.push(\n `... and ${filesArray.length - maxFilesToShow} more files`\n );\n }\n\n return newSuffixText.join('\\n');\n }\n\n async wait(): Promise<void> {\n return;\n }\n}\n"],"mappings":"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"}
@@ -1,38 +1,33 @@
1
- import { WorkflowStep } from './WorkflowStep.js';
2
- import { logger } from '../../console/logger.js';
3
- import chalk from 'chalk';
4
- export class PublishStep extends WorkflowStep {
5
- gt;
6
- spinner = logger.createSpinner('dots');
7
- constructor(gt) {
8
- super();
9
- this.gt = gt;
10
- }
11
- async run(files) {
12
- if (files.length === 0)
13
- return;
14
- this.spinner.start('Updating CDN...');
15
- try {
16
- const result = await this.gt.publishFiles(files);
17
- const failed = result.results.filter((r) => !r.success);
18
- if (failed.length > 0) {
19
- this.spinner.stop(chalk.yellow('CDN updated with errors'));
20
- for (const f of failed) {
21
- const file = files.find((p) => p.fileId === f.fileId);
22
- const name = file?.fileName ?? f.fileId;
23
- logger.warn(`Failed to update ${name}: ${f.error ?? 'unknown error'}`);
24
- }
25
- }
26
- else {
27
- this.spinner.stop(chalk.green('CDN updated'));
28
- }
29
- }
30
- catch (err) {
31
- this.spinner.stop(chalk.red('Failed to update CDN'));
32
- logger.warn(`Publish error: ${err instanceof Error ? err.message : String(err)}`);
33
- }
34
- }
35
- async wait() {
36
- return;
37
- }
38
- }
1
+ import { logger } from "../../console/logger.js";
2
+ import { WorkflowStep } from "./WorkflowStep.js";
3
+ import chalk from "chalk";
4
+ //#region src/workflows/steps/PublishStep.ts
5
+ var PublishStep = class extends WorkflowStep {
6
+ spinner = logger.createSpinner("dots");
7
+ constructor(gt) {
8
+ super();
9
+ this.gt = gt;
10
+ }
11
+ async run(files) {
12
+ if (files.length === 0) return;
13
+ this.spinner.start("Updating CDN...");
14
+ try {
15
+ const failed = (await this.gt.publishFiles(files)).results.filter((r) => !r.success);
16
+ if (failed.length > 0) {
17
+ this.spinner.stop(chalk.yellow("CDN updated with errors"));
18
+ for (const f of failed) {
19
+ const name = files.find((p) => p.fileId === f.fileId)?.fileName ?? f.fileId;
20
+ logger.warn(`Failed to update ${name}: ${f.error ?? "unknown error"}`);
21
+ }
22
+ } else this.spinner.stop(chalk.green("CDN updated"));
23
+ } catch (err) {
24
+ this.spinner.stop(chalk.red("Failed to update CDN"));
25
+ logger.warn(`Publish error: ${err instanceof Error ? err.message : String(err)}`);
26
+ }
27
+ }
28
+ async wait() {}
29
+ };
30
+ //#endregion
31
+ export { PublishStep };
32
+
33
+ //# sourceMappingURL=PublishStep.js.map