gtx-cli 2.6.31 → 2.7.0

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 (348) hide show
  1. package/CHANGELOG.md +4 -1261
  2. package/README.md +12 -3
  3. package/dist/bin/bin-entry.js +2 -1
  4. package/dist/config/generateSettings.d.ts +1 -9
  5. package/dist/config/generateSettings.js +1 -214
  6. package/dist/config/resolveConfig.d.ts +1 -4
  7. package/dist/config/resolveConfig.js +1 -33
  8. package/dist/fs/config/setupConfig.d.ts +1 -17
  9. package/dist/fs/config/setupConfig.js +1 -50
  10. package/dist/fs/matchFiles.d.ts +1 -1
  11. package/dist/fs/matchFiles.js +1 -8
  12. package/dist/functions.d.ts +1 -7
  13. package/dist/functions.js +1 -6
  14. package/dist/index.d.ts +1 -4
  15. package/dist/index.js +1 -27
  16. package/dist/main.js +2 -2
  17. package/dist/next/parse/handleInitGT.d.ts +1 -7
  18. package/dist/next/parse/handleInitGT.js +1 -157
  19. package/dist/next/parse/wrapContent.d.ts +1 -12
  20. package/dist/next/parse/wrapContent.js +1 -164
  21. package/dist/react/parse/wrapContent.d.ts +1 -12
  22. package/dist/react/parse/wrapContent.js +1 -162
  23. package/dist/types/index.d.ts +1 -243
  24. package/dist/types/index.js +1 -1
  25. package/dist/utils/installPackage.d.ts +1 -3
  26. package/dist/utils/installPackage.js +1 -77
  27. package/dist/utils/packageInfo.d.ts +1 -3
  28. package/dist/utils/packageInfo.js +1 -17
  29. package/dist/utils/packageJson.d.ts +1 -6
  30. package/dist/utils/packageJson.js +1 -68
  31. package/dist/utils/packageManager.d.ts +1 -28
  32. package/dist/utils/packageManager.js +1 -269
  33. package/package.json +11 -97
  34. package/dist/api/collectUserEditDiffs.d.ts +0 -9
  35. package/dist/api/collectUserEditDiffs.js +0 -159
  36. package/dist/api/downloadFileBatch.d.ts +0 -23
  37. package/dist/api/downloadFileBatch.js +0 -190
  38. package/dist/api/saveLocalEdits.d.ts +0 -6
  39. package/dist/api/saveLocalEdits.js +0 -38
  40. package/dist/cli/base.d.ts +0 -59
  41. package/dist/cli/base.js +0 -529
  42. package/dist/cli/commands/download.d.ts +0 -8
  43. package/dist/cli/commands/download.js +0 -51
  44. package/dist/cli/commands/enqueue.d.ts +0 -9
  45. package/dist/cli/commands/enqueue.js +0 -27
  46. package/dist/cli/commands/setupProject.d.ts +0 -7
  47. package/dist/cli/commands/setupProject.js +0 -37
  48. package/dist/cli/commands/stage.d.ts +0 -9
  49. package/dist/cli/commands/stage.js +0 -59
  50. package/dist/cli/commands/translate.d.ts +0 -7
  51. package/dist/cli/commands/translate.js +0 -70
  52. package/dist/cli/commands/upload.d.ts +0 -13
  53. package/dist/cli/commands/upload.js +0 -142
  54. package/dist/cli/commands/utils/validation.d.ts +0 -13
  55. package/dist/cli/commands/utils/validation.js +0 -38
  56. package/dist/cli/flags.d.ts +0 -15
  57. package/dist/cli/flags.js +0 -70
  58. package/dist/cli/inline.d.ts +0 -17
  59. package/dist/cli/inline.js +0 -135
  60. package/dist/cli/next.d.ts +0 -10
  61. package/dist/cli/next.js +0 -12
  62. package/dist/cli/node.d.ts +0 -10
  63. package/dist/cli/node.js +0 -9
  64. package/dist/cli/react.d.ts +0 -12
  65. package/dist/cli/react.js +0 -72
  66. package/dist/config/optionPresets.d.ts +0 -3
  67. package/dist/config/optionPresets.js +0 -65
  68. package/dist/config/utils.d.ts +0 -2
  69. package/dist/config/utils.js +0 -4
  70. package/dist/config/validateSettings.d.ts +0 -3
  71. package/dist/config/validateSettings.js +0 -32
  72. package/dist/console/colors.d.ts +0 -6
  73. package/dist/console/colors.js +0 -19
  74. package/dist/console/displayTranslateSummary.d.ts +0 -1
  75. package/dist/console/displayTranslateSummary.js +0 -42
  76. package/dist/console/formatting.d.ts +0 -1
  77. package/dist/console/formatting.js +0 -7
  78. package/dist/console/index.d.ts +0 -34
  79. package/dist/console/index.js +0 -46
  80. package/dist/console/logger.d.ts +0 -35
  81. package/dist/console/logger.js +0 -250
  82. package/dist/console/logging.d.ts +0 -52
  83. package/dist/console/logging.js +0 -175
  84. package/dist/formats/files/aggregateFiles.d.ts +0 -4
  85. package/dist/formats/files/aggregateFiles.js +0 -156
  86. package/dist/formats/files/collectFiles.d.ts +0 -6
  87. package/dist/formats/files/collectFiles.js +0 -49
  88. package/dist/formats/files/convertToFileTranslationData.d.ts +0 -15
  89. package/dist/formats/files/convertToFileTranslationData.js +0 -21
  90. package/dist/formats/files/fileMapping.d.ts +0 -11
  91. package/dist/formats/files/fileMapping.js +0 -115
  92. package/dist/formats/files/preprocess/mdx.d.ts +0 -6
  93. package/dist/formats/files/preprocess/mdx.js +0 -14
  94. package/dist/formats/files/preprocess/mintlify.d.ts +0 -5
  95. package/dist/formats/files/preprocess/mintlify.js +0 -15
  96. package/dist/formats/files/preprocessContent.d.ts +0 -8
  97. package/dist/formats/files/preprocessContent.js +0 -23
  98. package/dist/formats/files/save.d.ts +0 -5
  99. package/dist/formats/files/save.js +0 -17
  100. package/dist/formats/files/supportedFiles.d.ts +0 -11
  101. package/dist/formats/files/supportedFiles.js +0 -20
  102. package/dist/formats/json/extractJson.d.ts +0 -15
  103. package/dist/formats/json/extractJson.js +0 -101
  104. package/dist/formats/json/flattenJson.d.ts +0 -14
  105. package/dist/formats/json/flattenJson.js +0 -64
  106. package/dist/formats/json/mergeJson.d.ts +0 -13
  107. package/dist/formats/json/mergeJson.js +0 -367
  108. package/dist/formats/json/parseJson.d.ts +0 -2
  109. package/dist/formats/json/parseJson.js +0 -109
  110. package/dist/formats/json/utils.d.ts +0 -47
  111. package/dist/formats/json/utils.js +0 -150
  112. package/dist/formats/utils.d.ts +0 -2
  113. package/dist/formats/utils.js +0 -24
  114. package/dist/formats/yaml/mergeYaml.d.ts +0 -5
  115. package/dist/formats/yaml/mergeYaml.js +0 -61
  116. package/dist/formats/yaml/parseYaml.d.ts +0 -5
  117. package/dist/formats/yaml/parseYaml.js +0 -24
  118. package/dist/formats/yaml/utils.d.ts +0 -2
  119. package/dist/formats/yaml/utils.js +0 -23
  120. package/dist/fs/clearLocaleDirs.d.ts +0 -8
  121. package/dist/fs/clearLocaleDirs.js +0 -126
  122. package/dist/fs/config/downloadedVersions.d.ts +0 -21
  123. package/dist/fs/config/downloadedVersions.js +0 -50
  124. package/dist/fs/config/loadConfig.d.ts +0 -1
  125. package/dist/fs/config/loadConfig.js +0 -9
  126. package/dist/fs/config/parseFilesConfig.d.ts +0 -27
  127. package/dist/fs/config/parseFilesConfig.js +0 -150
  128. package/dist/fs/config/updateConfig.d.ts +0 -21
  129. package/dist/fs/config/updateConfig.js +0 -57
  130. package/dist/fs/config/updateVersions.d.ts +0 -11
  131. package/dist/fs/config/updateVersions.js +0 -30
  132. package/dist/fs/copyFile.d.ts +0 -7
  133. package/dist/fs/copyFile.js +0 -39
  134. package/dist/fs/createLoadTranslationsFile.d.ts +0 -1
  135. package/dist/fs/createLoadTranslationsFile.js +0 -49
  136. package/dist/fs/determineFramework.d.ts +0 -5
  137. package/dist/fs/determineFramework.js +0 -53
  138. package/dist/fs/findFilepath.d.ts +0 -36
  139. package/dist/fs/findFilepath.js +0 -90
  140. package/dist/fs/index.d.ts +0 -1
  141. package/dist/fs/index.js +0 -1
  142. package/dist/fs/loadJSON.d.ts +0 -6
  143. package/dist/fs/loadJSON.js +0 -17
  144. package/dist/fs/saveJSON.d.ts +0 -1
  145. package/dist/fs/saveJSON.js +0 -7
  146. package/dist/fs/utils.d.ts +0 -1
  147. package/dist/fs/utils.js +0 -16
  148. package/dist/generated/version.d.ts +0 -1
  149. package/dist/generated/version.js +0 -2
  150. package/dist/git/branches.d.ts +0 -7
  151. package/dist/git/branches.js +0 -88
  152. package/dist/hooks/postProcess.d.ts +0 -4
  153. package/dist/hooks/postProcess.js +0 -110
  154. package/dist/locadex/setupFlow.d.ts +0 -2
  155. package/dist/locadex/setupFlow.js +0 -9
  156. package/dist/next/config/parseNextConfig.d.ts +0 -10
  157. package/dist/next/config/parseNextConfig.js +0 -53
  158. package/dist/next/jsx/utils.d.ts +0 -7
  159. package/dist/next/jsx/utils.js +0 -42
  160. package/dist/react/config/createESBuildConfig.d.ts +0 -2
  161. package/dist/react/config/createESBuildConfig.js +0 -119
  162. package/dist/react/jsx/evaluateJsx.d.ts +0 -24
  163. package/dist/react/jsx/evaluateJsx.js +0 -123
  164. package/dist/react/jsx/utils/buildImportMap.d.ts +0 -9
  165. package/dist/react/jsx/utils/buildImportMap.js +0 -30
  166. package/dist/react/jsx/utils/constants.d.ts +0 -15
  167. package/dist/react/jsx/utils/constants.js +0 -49
  168. package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +0 -9
  169. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +0 -32
  170. package/dist/react/jsx/utils/getPathsAndAliases.d.ts +0 -21
  171. package/dist/react/jsx/utils/getPathsAndAliases.js +0 -91
  172. package/dist/react/jsx/utils/isNumberLiteral.d.ts +0 -7
  173. package/dist/react/jsx/utils/isNumberLiteral.js +0 -13
  174. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +0 -9
  175. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +0 -138
  176. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +0 -6
  177. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +0 -197
  178. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +0 -13
  179. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +0 -42
  180. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +0 -5
  181. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +0 -69
  182. package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +0 -33
  183. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +0 -918
  184. package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +0 -8
  185. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +0 -65
  186. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +0 -2
  187. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +0 -61
  188. package/dist/react/jsx/utils/jsxParsing/types.d.ts +0 -48
  189. package/dist/react/jsx/utils/jsxParsing/types.js +0 -34
  190. package/dist/react/jsx/utils/mapAttributeName.d.ts +0 -11
  191. package/dist/react/jsx/utils/mapAttributeName.js +0 -12
  192. package/dist/react/jsx/utils/parseAst.d.ts +0 -31
  193. package/dist/react/jsx/utils/parseAst.js +0 -278
  194. package/dist/react/jsx/utils/parseDeclareStatic.d.ts +0 -15
  195. package/dist/react/jsx/utils/parseDeclareStatic.js +0 -540
  196. package/dist/react/jsx/utils/parseString.d.ts +0 -25
  197. package/dist/react/jsx/utils/parseString.js +0 -540
  198. package/dist/react/jsx/utils/parseStringFunction.d.ts +0 -30
  199. package/dist/react/jsx/utils/parseStringFunction.js +0 -348
  200. package/dist/react/jsx/utils/resolveImportPath.d.ts +0 -11
  201. package/dist/react/jsx/utils/resolveImportPath.js +0 -111
  202. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +0 -29
  203. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +0 -86
  204. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +0 -14
  205. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +0 -24
  206. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +0 -19
  207. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +0 -31
  208. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +0 -22
  209. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +0 -51
  210. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +0 -18
  211. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +0 -39
  212. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +0 -24
  213. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +0 -68
  214. package/dist/react/jsx/utils/stringParsing/types.d.ts +0 -41
  215. package/dist/react/jsx/utils/stringParsing/types.js +0 -1
  216. package/dist/react/jsx/utils/types.d.ts +0 -14
  217. package/dist/react/jsx/utils/types.js +0 -1
  218. package/dist/react/jsx/utils/validateStringFunction.d.ts +0 -7
  219. package/dist/react/jsx/utils/validateStringFunction.js +0 -31
  220. package/dist/react/jsx/wrapJsx.d.ts +0 -51
  221. package/dist/react/jsx/wrapJsx.js +0 -387
  222. package/dist/react/parse/addVitePlugin/index.d.ts +0 -22
  223. package/dist/react/parse/addVitePlugin/index.js +0 -41
  224. package/dist/react/parse/addVitePlugin/installCompiler.d.ts +0 -8
  225. package/dist/react/parse/addVitePlugin/installCompiler.js +0 -22
  226. package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +0 -19
  227. package/dist/react/parse/addVitePlugin/updateViteConfig.js +0 -120
  228. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +0 -9
  229. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +0 -34
  230. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +0 -11
  231. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +0 -48
  232. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +0 -15
  233. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +0 -113
  234. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +0 -12
  235. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +0 -32
  236. package/dist/react/parse/createDictionaryUpdates.d.ts +0 -3
  237. package/dist/react/parse/createDictionaryUpdates.js +0 -187
  238. package/dist/react/parse/createInlineUpdates.d.ts +0 -13
  239. package/dist/react/parse/createInlineUpdates.js +0 -161
  240. package/dist/react/utils/flattenDictionary.d.ts +0 -20
  241. package/dist/react/utils/flattenDictionary.js +0 -75
  242. package/dist/react/utils/getEntryAndMetadata.d.ts +0 -5
  243. package/dist/react/utils/getEntryAndMetadata.js +0 -11
  244. package/dist/react/utils/getVariableName.d.ts +0 -25
  245. package/dist/react/utils/getVariableName.js +0 -37
  246. package/dist/setup/agentInstructions.d.ts +0 -24
  247. package/dist/setup/agentInstructions.js +0 -138
  248. package/dist/setup/detectFramework.d.ts +0 -31
  249. package/dist/setup/detectFramework.js +0 -106
  250. package/dist/setup/frameworkUtils.d.ts +0 -3
  251. package/dist/setup/frameworkUtils.js +0 -30
  252. package/dist/setup/instructions/base.md +0 -29
  253. package/dist/setup/instructions/gt-next.md +0 -107
  254. package/dist/setup/instructions/gt-react.md +0 -98
  255. package/dist/setup/userInput.d.ts +0 -4
  256. package/dist/setup/userInput.js +0 -32
  257. package/dist/setup/wizard.d.ts +0 -3
  258. package/dist/setup/wizard.js +0 -147
  259. package/dist/state/recentDownloads.d.ts +0 -12
  260. package/dist/state/recentDownloads.js +0 -18
  261. package/dist/state/translateWarnings.d.ts +0 -10
  262. package/dist/state/translateWarnings.js +0 -13
  263. package/dist/translation/parse.d.ts +0 -17
  264. package/dist/translation/parse.js +0 -77
  265. package/dist/translation/stage.d.ts +0 -3
  266. package/dist/translation/stage.js +0 -44
  267. package/dist/translation/validate.d.ts +0 -14
  268. package/dist/translation/validate.js +0 -100
  269. package/dist/types/branch.d.ts +0 -14
  270. package/dist/types/branch.js +0 -1
  271. package/dist/types/data/json.d.ts +0 -6
  272. package/dist/types/data/json.js +0 -1
  273. package/dist/types/data.d.ts +0 -37
  274. package/dist/types/data.js +0 -1
  275. package/dist/types/files.d.ts +0 -8
  276. package/dist/types/files.js +0 -1
  277. package/dist/types/libraries.d.ts +0 -31
  278. package/dist/types/libraries.js +0 -72
  279. package/dist/types/parsing.d.ts +0 -3
  280. package/dist/types/parsing.js +0 -1
  281. package/dist/utils/addExplicitAnchorIds.d.ts +0 -24
  282. package/dist/utils/addExplicitAnchorIds.js +0 -416
  283. package/dist/utils/constants.d.ts +0 -5
  284. package/dist/utils/constants.js +0 -6
  285. package/dist/utils/credentials.d.ts +0 -12
  286. package/dist/utils/credentials.js +0 -120
  287. package/dist/utils/flattenJsonFiles.d.ts +0 -2
  288. package/dist/utils/flattenJsonFiles.js +0 -36
  289. package/dist/utils/gitDiff.d.ts +0 -8
  290. package/dist/utils/gitDiff.js +0 -34
  291. package/dist/utils/gt.d.ts +0 -2
  292. package/dist/utils/gt.js +0 -2
  293. package/dist/utils/hash.d.ts +0 -6
  294. package/dist/utils/hash.js +0 -11
  295. package/dist/utils/headers.d.ts +0 -1
  296. package/dist/utils/headers.js +0 -14
  297. package/dist/utils/localizeRelativeAssets.d.ts +0 -8
  298. package/dist/utils/localizeRelativeAssets.js +0 -166
  299. package/dist/utils/localizeStaticImports.d.ts +0 -15
  300. package/dist/utils/localizeStaticImports.js +0 -397
  301. package/dist/utils/localizeStaticUrls.d.ts +0 -19
  302. package/dist/utils/localizeStaticUrls.js +0 -450
  303. package/dist/utils/mintlifyTitleFallback.d.ts +0 -6
  304. package/dist/utils/mintlifyTitleFallback.js +0 -80
  305. package/dist/utils/parse/needsCJS.d.ts +0 -20
  306. package/dist/utils/parse/needsCJS.js +0 -72
  307. package/dist/utils/persistPostprocessHashes.d.ts +0 -12
  308. package/dist/utils/persistPostprocessHashes.js +0 -39
  309. package/dist/utils/processAnchorIds.d.ts +0 -6
  310. package/dist/utils/processAnchorIds.js +0 -56
  311. package/dist/utils/processOpenApi.d.ts +0 -8
  312. package/dist/utils/processOpenApi.js +0 -651
  313. package/dist/utils/sanitizeFileContent.d.ts +0 -6
  314. package/dist/utils/sanitizeFileContent.js +0 -29
  315. package/dist/utils/sharedStaticAssets.d.ts +0 -9
  316. package/dist/utils/sharedStaticAssets.js +0 -384
  317. package/dist/utils/validateMdx.d.ts +0 -10
  318. package/dist/utils/validateMdx.js +0 -25
  319. package/dist/utils/wrapPlainUrls.d.ts +0 -8
  320. package/dist/utils/wrapPlainUrls.js +0 -72
  321. package/dist/workflows/download.d.ts +0 -32
  322. package/dist/workflows/download.js +0 -131
  323. package/dist/workflows/enqueue.d.ts +0 -17
  324. package/dist/workflows/enqueue.js +0 -59
  325. package/dist/workflows/setupProject.d.ts +0 -13
  326. package/dist/workflows/setupProject.js +0 -48
  327. package/dist/workflows/stage.d.ts +0 -18
  328. package/dist/workflows/stage.js +0 -59
  329. package/dist/workflows/steps/BranchStep.d.ts +0 -13
  330. package/dist/workflows/steps/BranchStep.js +0 -161
  331. package/dist/workflows/steps/DownloadStep.d.ts +0 -19
  332. package/dist/workflows/steps/DownloadStep.js +0 -131
  333. package/dist/workflows/steps/EnqueueStep.d.ts +0 -15
  334. package/dist/workflows/steps/EnqueueStep.js +0 -33
  335. package/dist/workflows/steps/PollJobsStep.d.ts +0 -31
  336. package/dist/workflows/steps/PollJobsStep.js +0 -288
  337. package/dist/workflows/steps/SetupStep.d.ts +0 -16
  338. package/dist/workflows/steps/SetupStep.js +0 -72
  339. package/dist/workflows/steps/UploadSourcesStep.d.ts +0 -27
  340. package/dist/workflows/steps/UploadSourcesStep.js +0 -131
  341. package/dist/workflows/steps/UploadTranslationsStep.d.ts +0 -22
  342. package/dist/workflows/steps/UploadTranslationsStep.js +0 -71
  343. package/dist/workflows/steps/UserEditDiffsStep.d.ts +0 -11
  344. package/dist/workflows/steps/UserEditDiffsStep.js +0 -30
  345. package/dist/workflows/steps/WorkflowStep.d.ts +0 -4
  346. package/dist/workflows/steps/WorkflowStep.js +0 -2
  347. package/dist/workflows/upload.d.ts +0 -15
  348. package/dist/workflows/upload.js +0 -47
@@ -1,9 +0,0 @@
1
- import type { Settings } from '../types/index.js';
2
- export declare function mirrorAssetsToLocales(settings: Settings): Promise<void>;
3
- /**
4
- * If you specify in config you have blob patterns pointing to assets (jpg, png, etc.)
5
- * Moves static assets into a specified directory and goes thru src files and updates refrence to static assets
6
- * @param settings
7
- * @returns
8
- */
9
- export default function processSharedStaticAssets(settings: Settings): Promise<void>;
@@ -1,384 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- import fg from 'fast-glob';
4
- import { unified } from 'unified';
5
- import remarkParse from 'remark-parse';
6
- import remarkMdx from 'remark-mdx';
7
- import remarkFrontmatter from 'remark-frontmatter';
8
- import remarkStringify from 'remark-stringify';
9
- import { visit } from 'unist-util-visit';
10
- import { escapeHtmlInTextNodes, normalizeCJKCharacters } from 'gt-remark';
11
- import { createFileMapping } from '../formats/files/fileMapping.js';
12
- import { TEMPLATE_FILE_NAME } from './constants.js';
13
- function derivePublicPath(outDir, provided) {
14
- if (provided)
15
- return provided;
16
- const norm = outDir.replace(/\\/g, '/');
17
- if (norm.startsWith('public/'))
18
- return '/' + norm.slice('public/'.length);
19
- if (norm.startsWith('static/'))
20
- return '/' + norm.slice('static/'.length);
21
- if (norm.startsWith('/'))
22
- return norm; // already absolute URL path
23
- return '/' + path.basename(norm);
24
- }
25
- function toArray(val) {
26
- if (!val)
27
- return [];
28
- return Array.isArray(val) ? val : [val];
29
- }
30
- async function ensureDir(dir) {
31
- await fs.promises.mkdir(dir, { recursive: true });
32
- }
33
- async function moveFile(src, dest) {
34
- if (src === dest)
35
- return;
36
- try {
37
- await ensureDir(path.dirname(dest));
38
- await fs.promises.rename(src, dest);
39
- }
40
- catch (err) {
41
- // Fallback to copy+unlink for cross-device or existing files
42
- if (err &&
43
- (err.code === 'EXDEV' ||
44
- err.code === 'EEXIST' ||
45
- err.code === 'ENOTEMPTY')) {
46
- const data = await fs.promises.readFile(src);
47
- await ensureDir(path.dirname(dest));
48
- await fs.promises.writeFile(dest, data);
49
- try {
50
- await fs.promises.unlink(src);
51
- }
52
- catch { }
53
- }
54
- else if (err && err.code === 'ENOENT') {
55
- // already moved or missing; ignore
56
- return;
57
- }
58
- else {
59
- throw err;
60
- }
61
- }
62
- }
63
- async function pathExists(p) {
64
- try {
65
- await fs.promises.stat(p);
66
- return true;
67
- }
68
- catch {
69
- return false;
70
- }
71
- }
72
- async function isDirEmpty(dir) {
73
- try {
74
- const entries = await fs.promises.readdir(dir);
75
- return entries.length === 0;
76
- }
77
- catch {
78
- return false;
79
- }
80
- }
81
- async function removeEmptyDirsUpwards(startDir, stopDir) {
82
- let current = path.resolve(startDir);
83
- const stop = path.resolve(stopDir);
84
- while (current.startsWith(stop)) {
85
- if (current === stop)
86
- break;
87
- const exists = await pathExists(current);
88
- if (!exists)
89
- break;
90
- const empty = await isDirEmpty(current);
91
- if (!empty)
92
- break;
93
- try {
94
- await fs.promises.rmdir(current);
95
- }
96
- catch {
97
- break;
98
- }
99
- const parent = path.dirname(current);
100
- if (parent === current)
101
- break;
102
- current = parent;
103
- }
104
- }
105
- function stripQueryAndHash(url) {
106
- const match = url.match(/^[^?#]+/);
107
- const base = match ? match[0] : url;
108
- const suffix = url.slice(base.length);
109
- return { base, suffix };
110
- }
111
- function rewriteMdxContent(content, filePath, pathMap) {
112
- let changed = false;
113
- let ast;
114
- try {
115
- const processor = unified()
116
- .use(remarkParse)
117
- .use(remarkFrontmatter, ['yaml', 'toml'])
118
- .use(remarkMdx);
119
- ast = processor.runSync(processor.parse(content));
120
- }
121
- catch (e) {
122
- return { content, changed: false };
123
- }
124
- const fileDir = path.dirname(filePath);
125
- // Helper to resolve and possibly rewrite a URL
126
- const maybeRewrite = (url) => {
127
- if (!url ||
128
- /^(https?:)?\/\//i.test(url) ||
129
- url.startsWith('data:') ||
130
- url.startsWith('#') ||
131
- url.startsWith('mailto:') ||
132
- url.startsWith('tel:')) {
133
- return null;
134
- }
135
- const { base, suffix } = stripQueryAndHash(url);
136
- // Only handle relative paths
137
- if (base.startsWith('/'))
138
- return null;
139
- const abs = path.resolve(fileDir, base);
140
- const normAbs = path.normalize(abs);
141
- const mapped = pathMap.get(normAbs);
142
- if (mapped) {
143
- changed = true;
144
- return mapped + suffix;
145
- }
146
- return null;
147
- };
148
- visit(ast, (node) => {
149
- // Markdown image: ![alt](url)
150
- if (node.type === 'image' && typeof node.url === 'string') {
151
- const newUrl = maybeRewrite(node.url);
152
- if (newUrl)
153
- node.url = newUrl;
154
- return;
155
- }
156
- // Markdown link: [text](url) — useful for PDFs and other downloadable assets
157
- if (node.type === 'link' && typeof node.url === 'string') {
158
- const newUrl = maybeRewrite(node.url);
159
- if (newUrl)
160
- node.url = newUrl;
161
- return;
162
- }
163
- // MDX <img src="..." />
164
- if ((node.type === 'mdxJsxFlowElement' ||
165
- node.type === 'mdxJsxTextElement') &&
166
- Array.isArray(node.attributes)) {
167
- for (const attr of node.attributes) {
168
- if (attr &&
169
- attr.type === 'mdxJsxAttribute' &&
170
- (attr.name === 'src' || attr.name === 'href') &&
171
- typeof attr.value === 'string') {
172
- const newUrl = maybeRewrite(attr.value);
173
- if (newUrl)
174
- attr.value = newUrl;
175
- }
176
- }
177
- }
178
- });
179
- try {
180
- const s = unified()
181
- .use(remarkFrontmatter, ['yaml', 'toml'])
182
- .use(remarkMdx)
183
- .use(normalizeCJKCharacters)
184
- .use(escapeHtmlInTextNodes)
185
- .use(remarkStringify, {
186
- handlers: {
187
- text(node) {
188
- return node.value;
189
- },
190
- },
191
- });
192
- const outTree = s.runSync(ast);
193
- let out = s.stringify(outTree);
194
- // Preserve trailing/leading newlines similar to localizeStaticUrls
195
- if (out.endsWith('\n') && !content.endsWith('\n'))
196
- out = out.slice(0, -1);
197
- if (content.startsWith('\n') && !out.startsWith('\n'))
198
- out = '\n' + out;
199
- return { content: out, changed };
200
- }
201
- catch (e) {
202
- return { content, changed: false };
203
- }
204
- }
205
- function resolveAssetPaths(include, cwd) {
206
- const assetPaths = new Set();
207
- for (let pattern of include) {
208
- if (pattern.startsWith('/'))
209
- pattern = pattern.slice(1);
210
- const matches = fg.sync(path.resolve(cwd, pattern), { absolute: true });
211
- for (const m of matches)
212
- assetPaths.add(path.normalize(m));
213
- }
214
- return assetPaths;
215
- }
216
- export async function mirrorAssetsToLocales(settings) {
217
- const cfg = settings.sharedStaticAssets;
218
- if (!cfg?.mirrorToLocales)
219
- return;
220
- if (!settings.files)
221
- return;
222
- const cwd = process.cwd();
223
- const include = toArray(cfg.include);
224
- if (include.length === 0)
225
- return;
226
- const assetPaths = resolveAssetPaths(include, cwd);
227
- if (assetPaths.size === 0)
228
- return;
229
- const { resolvedPaths, placeholderPaths, transformPaths } = settings.files;
230
- const targetLocales = settings.locales.filter((l) => l !== settings.defaultLocale);
231
- if (targetLocales.length === 0)
232
- return;
233
- const fileMapping = createFileMapping(resolvedPaths, placeholderPaths, transformPaths, targetLocales, settings.defaultLocale);
234
- for (const locale of targetLocales) {
235
- const filesMap = fileMapping[locale];
236
- if (!filesMap)
237
- continue;
238
- // Extract unique (sourceDir, targetDir) pairs from the file mapping
239
- const dirPairs = new Map();
240
- for (const [sourcePath, targetPath] of Object.entries(filesMap)) {
241
- if (sourcePath === TEMPLATE_FILE_NAME)
242
- continue;
243
- const sourceDir = path.dirname(path.resolve(cwd, sourcePath));
244
- const targetDir = path.dirname(path.resolve(cwd, targetPath));
245
- if (sourceDir !== targetDir) {
246
- dirPairs.set(sourceDir, targetDir);
247
- }
248
- }
249
- if (dirPairs.size === 0)
250
- continue;
251
- // Derive ancestor directory pairs by walking up from each known pair.
252
- // e.g. if docs/guide → ja/docs/guide, infer docs → ja/docs.
253
- // Stop at cwd or when an existing pair conflicts.
254
- const ancestorPairs = new Map();
255
- for (const [sourceDir, targetDir] of dirPairs) {
256
- let s = path.dirname(sourceDir);
257
- let t = path.dirname(targetDir);
258
- while (s.startsWith(cwd) && s !== cwd) {
259
- const existing = dirPairs.get(s) ?? ancestorPairs.get(s);
260
- if (existing !== undefined) {
261
- if (existing !== t)
262
- break; // conflict — different transforms
263
- }
264
- else {
265
- ancestorPairs.set(s, t);
266
- }
267
- s = path.dirname(s);
268
- t = path.dirname(t);
269
- }
270
- }
271
- for (const [s, t] of ancestorPairs) {
272
- dirPairs.set(s, t);
273
- }
274
- // Sort source dirs by length descending so longest prefix matches first
275
- const sortedPairs = [...dirPairs.entries()].sort((a, b) => b[0].length - a[0].length);
276
- for (const assetAbs of assetPaths) {
277
- // Find the directory pair whose sourceDir is the longest prefix of the asset
278
- let bestSource;
279
- let bestTarget;
280
- for (const [sourceDir, targetDir] of sortedPairs) {
281
- if (assetAbs.startsWith(sourceDir + path.sep) ||
282
- assetAbs.startsWith(sourceDir + '/')) {
283
- bestSource = sourceDir;
284
- bestTarget = targetDir;
285
- break;
286
- }
287
- }
288
- if (!bestSource || !bestTarget)
289
- continue;
290
- const relFromSource = path.relative(bestSource, assetAbs);
291
- const targetAsset = path.resolve(bestTarget, relFromSource);
292
- // Skip if target already exists with same size
293
- try {
294
- const [srcStat, dstStat] = await Promise.all([
295
- fs.promises.stat(assetAbs),
296
- fs.promises.stat(targetAsset),
297
- ]);
298
- if (dstStat.isFile() && srcStat.size === dstStat.size)
299
- continue;
300
- }
301
- catch {
302
- // target doesn't exist, proceed with copy
303
- }
304
- await ensureDir(path.dirname(targetAsset));
305
- await fs.promises.copyFile(assetAbs, targetAsset);
306
- }
307
- }
308
- }
309
- /**
310
- * If you specify in config you have blob patterns pointing to assets (jpg, png, etc.)
311
- * Moves static assets into a specified directory and goes thru src files and updates refrence to static assets
312
- * @param settings
313
- * @returns
314
- */
315
- export default async function processSharedStaticAssets(settings) {
316
- const cfg = settings.sharedStaticAssets;
317
- if (!cfg)
318
- return;
319
- // mirrorToLocales is handled separately after translations are downloaded
320
- if (cfg.mirrorToLocales)
321
- return;
322
- const cwd = process.cwd();
323
- const include = toArray(cfg.include);
324
- if (include.length === 0)
325
- return;
326
- // Resolve assets
327
- const assetPaths = resolveAssetPaths(include, cwd);
328
- if (assetPaths.size === 0)
329
- return;
330
- if (!cfg.outDir)
331
- return;
332
- const outDirInput = cfg.outDir.startsWith('/')
333
- ? cfg.outDir.slice(1)
334
- : cfg.outDir;
335
- const outDirAbs = path.resolve(cwd, outDirInput);
336
- const publicPath = derivePublicPath(outDirInput, cfg.publicPath);
337
- // Map original absolute path -> public URL
338
- const originalToPublic = new Map();
339
- for (const abs of assetPaths) {
340
- const relFromRoot = path.relative(cwd, abs).replace(/\\/g, '/');
341
- const publicUrl = (publicPath.endsWith('/') ? publicPath.slice(0, -1) : publicPath) +
342
- '/' +
343
- relFromRoot;
344
- originalToPublic.set(path.normalize(abs), publicUrl);
345
- }
346
- // Move assets to outDir, preserving relative structure
347
- for (const abs of assetPaths) {
348
- const relFromRoot = path.relative(cwd, abs);
349
- const destAbs = path.resolve(outDirAbs, relFromRoot);
350
- // Skip if already in destination
351
- if (path.normalize(abs) === path.normalize(destAbs))
352
- continue;
353
- // If destination exists, assume already moved
354
- try {
355
- const st = await fs.promises.stat(destAbs).catch(() => null);
356
- if (st && st.isFile()) {
357
- // Remove source if it still exists
358
- await fs.promises.unlink(abs).catch(() => { });
359
- await removeEmptyDirsUpwards(path.dirname(abs), cwd);
360
- continue;
361
- }
362
- }
363
- catch { }
364
- await moveFile(abs, destAbs);
365
- await removeEmptyDirsUpwards(path.dirname(abs), cwd);
366
- }
367
- // Rewrite references in default-locale files we send for translation
368
- const resolved = settings.files?.resolvedPaths || {};
369
- const mdFiles = [...(resolved.mdx || []), ...(resolved.md || [])];
370
- await Promise.all(mdFiles.map(async (filePath) => {
371
- // only rewrite existing files
372
- const exists = await fs.promises
373
- .stat(filePath)
374
- .then(() => true)
375
- .catch(() => false);
376
- if (!exists)
377
- return;
378
- const orig = await fs.promises.readFile(filePath, 'utf8');
379
- const { content: out, changed } = rewriteMdxContent(orig, filePath, originalToPublic);
380
- if (changed) {
381
- await fs.promises.writeFile(filePath, out, 'utf8');
382
- }
383
- }));
384
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Validates if an MDX file content can be parsed as a valid AST
3
- * @param content - The MDX file content to validate
4
- * @param filePath - The file path for error reporting
5
- * @returns object with isValid boolean and optional error message
6
- */
7
- export declare function isValidMdx(content: string, filePath: string): {
8
- isValid: boolean;
9
- error?: string;
10
- };
@@ -1,25 +0,0 @@
1
- import { unified } from 'unified';
2
- import remarkParse from 'remark-parse';
3
- import remarkMdx from 'remark-mdx';
4
- import remarkFrontmatter from 'remark-frontmatter';
5
- /**
6
- * Validates if an MDX file content can be parsed as a valid AST
7
- * @param content - The MDX file content to validate
8
- * @param filePath - The file path for error reporting
9
- * @returns object with isValid boolean and optional error message
10
- */
11
- export function isValidMdx(content, filePath) {
12
- try {
13
- const parseProcessor = unified()
14
- .use(remarkParse)
15
- .use(remarkFrontmatter, ['yaml', 'toml'])
16
- .use(remarkMdx);
17
- const ast = parseProcessor.parse(content);
18
- parseProcessor.runSync(ast);
19
- return { isValid: true };
20
- }
21
- catch (error) {
22
- const errorMessage = error instanceof Error ? error.message : String(error);
23
- return { isValid: false, error: errorMessage };
24
- }
25
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Wraps plain URLs in markdown link syntax [url](url) so that
3
- * translation pipelines preserve the URL separately from surrounding text.
4
- *
5
- * Uses remark AST parsing to identify URLs that appear in text nodes only.
6
- *
7
- */
8
- export default function wrapPlainUrls(content: string): string;
@@ -1,72 +0,0 @@
1
- import { unified } from 'unified';
2
- import remarkParse from 'remark-parse';
3
- import remarkMdx from 'remark-mdx';
4
- import remarkFrontmatter from 'remark-frontmatter';
5
- import { visit } from 'unist-util-visit';
6
- /**
7
- * Wraps plain URLs in markdown link syntax [url](url) so that
8
- * translation pipelines preserve the URL separately from surrounding text.
9
- *
10
- * Uses remark AST parsing to identify URLs that appear in text nodes only.
11
- *
12
- */
13
- export default function wrapPlainUrls(content) {
14
- const URL_REGEX = /https?:\/\/[^\s<>\[\]]*[^\s<>\[\].,;:!?'"\]}>]/g;
15
- let ast;
16
- try {
17
- const processor = unified()
18
- .use(remarkParse)
19
- .use(remarkFrontmatter, ['yaml', 'toml'])
20
- .use(remarkMdx);
21
- ast = processor.parse(content);
22
- ast = processor.runSync(ast);
23
- }
24
- catch {
25
- // If parsing fails, return content unchanged
26
- return content;
27
- }
28
- // Collect all URL replacements from text nodes with their positions
29
- const replacements = [];
30
- visit(ast, 'text', (node, _index, parent) => {
31
- // Skip text nodes inside links — those are already display text for a link
32
- if (parent && parent.type === 'link')
33
- return;
34
- const pos = node.position;
35
- if (!pos)
36
- return;
37
- const value = node.value;
38
- let match;
39
- while ((match = URL_REGEX.exec(value)) !== null) {
40
- let url = match[0];
41
- const nodeStartOffset = pos.start.offset;
42
- if (nodeStartOffset === undefined)
43
- continue;
44
- // Trim unbalanced trailing ')' so that prose like "(see https://example.com)"
45
- // doesn't absorb the surrounding paren, while Wikipedia-style URLs with
46
- // balanced parens (e.g. /wiki/Unix_(operating_system)) are kept intact.
47
- while (url.endsWith(')')) {
48
- const open = url.split('(').length - 1;
49
- const close = url.split(')').length - 1;
50
- if (close > open) {
51
- url = url.slice(0, -1);
52
- }
53
- else {
54
- break;
55
- }
56
- }
57
- // Calculate the absolute offset in the original content
58
- const urlStart = nodeStartOffset + match.index;
59
- const urlEnd = urlStart + url.length;
60
- replacements.push({ start: urlStart, end: urlEnd, url });
61
- }
62
- });
63
- if (replacements.length === 0)
64
- return content;
65
- // Apply replacements in reverse order to preserve positions
66
- let result = content;
67
- for (let i = replacements.length - 1; i >= 0; i--) {
68
- const { start, end, url } = replacements[i];
69
- result = result.slice(0, start) + `[${url}](${url})` + result.slice(end);
70
- }
71
- return result;
72
- }
@@ -1,32 +0,0 @@
1
- import { Settings } from '../types/index.js';
2
- import { EnqueueFilesResult } from 'generaltranslation/types';
3
- import { BranchData } from '../types/branch.js';
4
- export type FileTranslationData = {
5
- [fileId: string]: {
6
- versionId: string;
7
- fileName: string;
8
- };
9
- };
10
- /**
11
- * Checks the status of translations and downloads them using a workflow pattern
12
- * @param fileVersionData - Mapping of file IDs to their version and name information
13
- * @param jobData - Optional job data from enqueue operation
14
- * @param locales - The locales to wait for
15
- * @param timeoutDuration - The timeout duration for the wait in seconds
16
- * @param resolveOutputPath - Function to resolve the output path for a given source path and locale
17
- * @param options - Settings configuration
18
- * @param forceRetranslation - Whether to force retranslation
19
- * @param forceDownload - Whether to force download even if file exists
20
- * @returns True if all translations are downloaded successfully, false otherwise
21
- */
22
- export declare function runDownloadWorkflow({ fileVersionData, jobData, branchData, locales, timeoutDuration, resolveOutputPath, options, forceRetranslation, forceDownload, }: {
23
- fileVersionData: FileTranslationData;
24
- jobData: EnqueueFilesResult | undefined;
25
- branchData: BranchData | undefined;
26
- locales: string[];
27
- timeoutDuration: number;
28
- resolveOutputPath: (sourcePath: string, locale: string) => string | null;
29
- options: Settings;
30
- forceRetranslation?: boolean;
31
- forceDownload?: boolean;
32
- }): Promise<boolean>;
@@ -1,131 +0,0 @@
1
- import path from 'node:path';
2
- import { gt } from '../utils/gt.js';
3
- import { clearLocaleDirs } from '../fs/clearLocaleDirs.js';
4
- import { PollTranslationJobsStep, } from './steps/PollJobsStep.js';
5
- import { DownloadTranslationsStep } from './steps/DownloadStep.js';
6
- import { logErrorAndExit } from '../console/logging.js';
7
- import { logger } from '../console/logger.js';
8
- import { recordWarning } from '../state/translateWarnings.js';
9
- import { BranchStep } from './steps/BranchStep.js';
10
- import chalk from 'chalk';
11
- /**
12
- * Checks the status of translations and downloads them using a workflow pattern
13
- * @param fileVersionData - Mapping of file IDs to their version and name information
14
- * @param jobData - Optional job data from enqueue operation
15
- * @param locales - The locales to wait for
16
- * @param timeoutDuration - The timeout duration for the wait in seconds
17
- * @param resolveOutputPath - Function to resolve the output path for a given source path and locale
18
- * @param options - Settings configuration
19
- * @param forceRetranslation - Whether to force retranslation
20
- * @param forceDownload - Whether to force download even if file exists
21
- * @returns True if all translations are downloaded successfully, false otherwise
22
- */
23
- export async function runDownloadWorkflow({ fileVersionData, jobData, branchData, locales, timeoutDuration, resolveOutputPath, options, forceRetranslation, forceDownload, }) {
24
- if (!branchData) {
25
- // Run the branch step
26
- const branchStep = new BranchStep(gt, options);
27
- const branchResult = await branchStep.run();
28
- await branchStep.wait();
29
- if (!branchResult) {
30
- return logErrorAndExit('Failed to resolve git branch information.');
31
- }
32
- branchData = branchResult;
33
- }
34
- // Prepare the query data
35
- const fileQueryData = prepareFileQueryData(fileVersionData, locales, branchData);
36
- // Clear translated files before any downloads (if enabled)
37
- if (options.options?.experimentalClearLocaleDirs === true &&
38
- fileQueryData.length > 0) {
39
- const translatedFiles = new Set(fileQueryData
40
- .map((file) => {
41
- const outputPath = resolveOutputPath(file.fileName, file.locale);
42
- // Only clear if the output path is different from the source (i.e., there's a transform)
43
- return outputPath !== null && outputPath !== file.fileName
44
- ? outputPath
45
- : null;
46
- })
47
- .filter((path) => path !== null));
48
- // Derive cwd from config path
49
- const cwd = path.dirname(options.config);
50
- await clearLocaleDirs(translatedFiles, locales, options.options?.clearLocaleDirsExclude, cwd);
51
- }
52
- // Initialize download status
53
- const fileTracker = {
54
- completed: new Map(),
55
- inProgress: new Map(),
56
- failed: new Map(),
57
- skipped: new Map(),
58
- };
59
- // Step 1: Poll translation jobs if jobData exists
60
- let pollTimedOut = false;
61
- if (jobData) {
62
- const pollStep = new PollTranslationJobsStep(gt);
63
- const pollResult = await pollStep.run({
64
- fileTracker,
65
- fileQueryData,
66
- jobData,
67
- timeoutDuration,
68
- forceRetranslation,
69
- });
70
- await pollStep.wait();
71
- if (pollResult.fileTracker.failed.size > 0) {
72
- logger.error(`${chalk.red(`${pollResult.fileTracker.failed.size} file(s) failed to translate:`)}\n${Array.from(pollResult.fileTracker.failed.entries())
73
- .map(([, value]) => `- ${value.fileName}`)
74
- .join('\n')}`);
75
- for (const [, value] of pollResult.fileTracker.failed) {
76
- recordWarning('failed_translation', value.fileName, `Failed to translate for locale ${value.locale}`);
77
- }
78
- // If all files failed translation, exit early
79
- if (pollResult.fileTracker.completed.size === 0) {
80
- return false;
81
- }
82
- }
83
- // Even if polling timed out, still download whatever completed successfully
84
- if (!pollResult.success) {
85
- pollTimedOut = true;
86
- if (pollResult.fileTracker.completed.size > 0) {
87
- logger.warn(chalk.yellow(`Timed out, but ${pollResult.fileTracker.completed.size} translation(s) completed successfully. Downloading completed files...`));
88
- }
89
- else {
90
- return false;
91
- }
92
- }
93
- }
94
- else {
95
- for (const file of fileQueryData) {
96
- // Staging - assume all files are completed
97
- fileTracker.completed.set(`${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`, file);
98
- }
99
- }
100
- // Step 2: Download translations
101
- const downloadStep = new DownloadTranslationsStep(gt, options);
102
- const downloadResult = await downloadStep.run({
103
- fileTracker,
104
- resolveOutputPath,
105
- forceDownload,
106
- });
107
- await downloadStep.wait();
108
- // If polling timed out, report failure even though we downloaded what we could
109
- if (pollTimedOut) {
110
- return false;
111
- }
112
- return downloadResult;
113
- }
114
- /**
115
- * Prepares the file query data from input data and locales
116
- */
117
- function prepareFileQueryData(fileVersionData, locales, branchData) {
118
- const fileQueryData = [];
119
- for (const fileId in fileVersionData) {
120
- for (const locale of locales) {
121
- fileQueryData.push({
122
- versionId: fileVersionData[fileId].versionId,
123
- fileName: fileVersionData[fileId].fileName,
124
- fileId,
125
- locale,
126
- branchId: branchData.currentBranch.id,
127
- });
128
- }
129
- }
130
- return fileQueryData;
131
- }