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,159 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as path from 'node:path';
3
- import { getDownloadedVersions } from '../fs/config/downloadedVersions.js';
4
- import { createFileMapping } from '../formats/files/fileMapping.js';
5
- import { getGitUnifiedDiff } from '../utils/gitDiff.js';
6
- import { gt } from '../utils/gt.js';
7
- import os from 'node:os';
8
- import { randomUUID } from 'node:crypto';
9
- import { hashStringSync } from '../utils/hash.js';
10
- import { extractJson } from '../formats/json/extractJson.js';
11
- const findLatestDownloadedVersion = (downloadedVersions, branchId, fileId, locale) => {
12
- const versionsForFile = downloadedVersions.entries?.[branchId]?.[fileId] ?? undefined;
13
- if (!versionsForFile)
14
- return null;
15
- let latest = null;
16
- for (const [versionId, locales] of Object.entries(versionsForFile)) {
17
- const entry = locales?.[locale];
18
- if (!entry)
19
- continue;
20
- const updatedAt = entry.updatedAt
21
- ? Date.parse(entry.updatedAt)
22
- : Number.NEGATIVE_INFINITY;
23
- const latestUpdatedAt = latest?.entry.updatedAt
24
- ? Date.parse(latest.entry.updatedAt)
25
- : Number.NEGATIVE_INFINITY;
26
- if (!latest || updatedAt > latestUpdatedAt) {
27
- latest = { versionId, entry };
28
- }
29
- }
30
- return latest;
31
- };
32
- /**
33
- * Collects local user edits by diffing the latest downloaded server translation version
34
- * against the current local translation file, and submits the diffs upstream.
35
- *
36
- * Must run before enqueueing new translations so rules are available to the generator.
37
- */
38
- export async function collectAndSendUserEditDiffs(files, settings) {
39
- if (!settings.files)
40
- return;
41
- const { resolvedPaths, placeholderPaths, transformPaths } = settings.files;
42
- const fileMapping = createFileMapping(resolvedPaths, placeholderPaths, transformPaths, settings.locales, settings.defaultLocale);
43
- const downloadedVersions = getDownloadedVersions(settings.configDirectory);
44
- const tempDir = path.join(os.tmpdir(), randomUUID());
45
- if (!fs.existsSync(tempDir))
46
- fs.mkdirSync(tempDir, { recursive: true });
47
- const candidates = [];
48
- for (const uploadedFile of files) {
49
- for (const locale of settings.locales) {
50
- const outputPath = fileMapping[locale]?.[uploadedFile.fileName] ?? null;
51
- if (!outputPath)
52
- continue;
53
- if (!fs.existsSync(outputPath))
54
- continue;
55
- const latestDownloaded = findLatestDownloadedVersion(downloadedVersions, uploadedFile.branchId, uploadedFile.fileId, locale);
56
- if (!latestDownloaded)
57
- continue;
58
- const downloadedVersion = latestDownloaded.entry;
59
- // Skip if local file matches the last postprocessed content hash
60
- if (downloadedVersion.postProcessHash) {
61
- try {
62
- const localContent = await fs.promises.readFile(outputPath, 'utf8');
63
- const localHash = hashStringSync(localContent);
64
- if (localHash === downloadedVersion.postProcessHash) {
65
- continue;
66
- }
67
- }
68
- catch {
69
- // If hash check fails, fall through to diff
70
- }
71
- }
72
- candidates.push({
73
- branchId: uploadedFile.branchId,
74
- fileName: uploadedFile.fileName,
75
- fileId: uploadedFile.fileId,
76
- versionId: latestDownloaded.versionId,
77
- locale: locale,
78
- outputPath,
79
- });
80
- }
81
- }
82
- const collectedDiffs = [];
83
- if (candidates.length > 0) {
84
- const fileQueryData = candidates.map((c) => ({
85
- versionId: c.versionId,
86
- locale: c.locale,
87
- fileId: c.fileId,
88
- branchId: c.branchId,
89
- }));
90
- // Single batched check to obtain translation IDs
91
- const checkResponse = await gt.queryFileData({
92
- translatedFiles: fileQueryData,
93
- });
94
- const translatedFiles = checkResponse.translatedFiles?.filter((t) => t.completedAt) ?? [];
95
- const serverContentByKey = new Map();
96
- try {
97
- const resp = await gt.downloadFileBatch(translatedFiles.map((file) => ({
98
- branchId: file.branchId,
99
- fileId: file.fileId,
100
- locale: file.locale,
101
- versionId: file.versionId,
102
- })));
103
- const files = resp?.files || [];
104
- for (const f of files) {
105
- serverContentByKey.set(`${f.branchId}:${f.fileId}:${f.versionId}:${f.locale}`, f.data);
106
- }
107
- }
108
- catch {
109
- // Ignore chunk failures; proceed with what we have
110
- }
111
- // Compute diffs using fetched server contents
112
- for (const c of candidates) {
113
- const key = `${c.branchId}:${c.fileId}:${c.versionId}:${c.locale}`;
114
- const serverContent = serverContentByKey.get(key);
115
- if (!serverContent)
116
- continue;
117
- try {
118
- const safeName = Buffer.from(`${c.branchId}:${c.fileId}:${c.versionId}:${c.locale}`)
119
- .toString('base64')
120
- .replace(/=+$/g, '');
121
- const tempServerFile = path.join(tempDir, `${safeName}.server`);
122
- await fs.promises.writeFile(tempServerFile, serverContent, 'utf8');
123
- const diff = await getGitUnifiedDiff(tempServerFile, c.outputPath);
124
- try {
125
- await fs.promises.unlink(tempServerFile);
126
- }
127
- catch { }
128
- if (diff && diff.trim().length > 0) {
129
- const rawLocalContent = await fs.promises.readFile(c.outputPath, 'utf8');
130
- // For JSON files with jsonSchema config, extract to composite format
131
- let localContent = rawLocalContent;
132
- if (c.fileName.endsWith('.json') &&
133
- settings.options?.jsonSchema &&
134
- c.locale !== settings.defaultLocale) {
135
- const extractedContent = extractJson(rawLocalContent, c.fileName, settings.options, c.locale, settings.defaultLocale);
136
- if (extractedContent) {
137
- localContent = extractedContent;
138
- }
139
- }
140
- collectedDiffs.push({
141
- fileName: c.fileName,
142
- locale: c.locale,
143
- diff,
144
- branchId: c.branchId,
145
- versionId: c.versionId,
146
- fileId: c.fileId,
147
- localContent,
148
- });
149
- }
150
- }
151
- catch {
152
- // Ignore failures for this file
153
- }
154
- }
155
- }
156
- if (collectedDiffs.length > 0) {
157
- await gt.submitUserEditDiffs({ diffs: collectedDiffs });
158
- }
159
- }
@@ -1,23 +0,0 @@
1
- import { Settings } from '../types/index.js';
2
- import type { FileStatusTracker } from '../workflows/steps/PollJobsStep.js';
3
- export type BatchedFiles = {
4
- branchId: string;
5
- fileId: string;
6
- versionId: string;
7
- locale: string;
8
- outputPath: string;
9
- inputPath: string;
10
- }[];
11
- export type DownloadFileBatchResult = {
12
- successful: BatchedFiles;
13
- failed: BatchedFiles;
14
- skipped: BatchedFiles;
15
- };
16
- /**
17
- * Downloads multiple translation files in a single batch request
18
- * @param files - Array of files to download with their output paths
19
- * @param maxRetries - Maximum number of retry attempts
20
- * @param retryDelay - Delay between retries in milliseconds
21
- * @returns Object containing successful and failed file IDs
22
- */
23
- export declare function downloadFileBatch(fileTracker: FileStatusTracker, files: BatchedFiles, options: Settings, forceDownload?: boolean): Promise<DownloadFileBatchResult>;
@@ -1,190 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { logger } from '../console/logger.js';
4
- import { gt } from '../utils/gt.js';
5
- import { validateJsonSchema } from '../formats/json/utils.js';
6
- import { validateYamlSchema } from '../formats/yaml/utils.js';
7
- import { mergeJson } from '../formats/json/mergeJson.js';
8
- import mergeYaml from '../formats/yaml/mergeYaml.js';
9
- import { getDownloadedVersions, saveDownloadedVersions, ensureNestedObject, } from '../fs/config/downloadedVersions.js';
10
- import { recordDownloaded } from '../state/recentDownloads.js';
11
- import { recordWarning } from '../state/translateWarnings.js';
12
- import { hashStringSync } from '../utils/hash.js';
13
- import stringify from 'fast-json-stable-stringify';
14
- /**
15
- * Downloads multiple translation files in a single batch request
16
- * @param files - Array of files to download with their output paths
17
- * @param maxRetries - Maximum number of retry attempts
18
- * @param retryDelay - Delay between retries in milliseconds
19
- * @returns Object containing successful and failed file IDs
20
- */
21
- export async function downloadFileBatch(fileTracker, files, options, forceDownload = false) {
22
- // Local record of what version was last downloaded for each fileName:locale
23
- const downloadedVersions = getDownloadedVersions(options.configDirectory);
24
- let didUpdateDownloadedLock = false;
25
- // Create a map of requested file keys to the file object
26
- const requestedFileMap = new Map(files.map((file) => [
27
- `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,
28
- file,
29
- ]));
30
- const result = {
31
- successful: [],
32
- failed: [],
33
- skipped: [],
34
- };
35
- // Create a map of translationId to outputPath for easier lookup
36
- const outputPathMap = new Map(files.map((file) => [
37
- `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`,
38
- file.outputPath,
39
- ]));
40
- try {
41
- // Download the files
42
- const responseData = await gt.downloadFileBatch(files.map((file) => ({
43
- fileId: file.fileId,
44
- branchId: file.branchId,
45
- versionId: file.versionId,
46
- locale: file.locale,
47
- })));
48
- const downloadedFiles = responseData.files || [];
49
- // Process each file in the response
50
- for (const file of downloadedFiles) {
51
- const fileKey = `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`;
52
- const requestedFile = requestedFileMap.get(fileKey);
53
- if (!requestedFile) {
54
- continue;
55
- }
56
- try {
57
- const outputPath = outputPathMap.get(fileKey);
58
- const fileProperties = fileTracker.completed.get(fileKey);
59
- if (!outputPath || !fileProperties) {
60
- logger.warn(`No input/output path found for file: ${fileKey}`);
61
- recordWarning('failed_download', fileKey, 'No input/output path found');
62
- result.failed.push(requestedFile);
63
- continue;
64
- }
65
- const { fileId, versionId, locale, branchId, fileName: inputPath, } = fileProperties;
66
- // Ensure the directory exists
67
- const dir = path.dirname(outputPath);
68
- if (!fs.existsSync(dir)) {
69
- fs.mkdirSync(dir, { recursive: true });
70
- }
71
- // If a local translation already exists for the same source version, skip overwrite
72
- const downloadedVersion = downloadedVersions.entries[branchId]?.[fileId]?.[versionId]?.[locale];
73
- const fileExists = fs.existsSync(outputPath);
74
- let sourceChanged = false;
75
- if (downloadedVersion?.sourceHash) {
76
- try {
77
- const currentSourceContent = fs.readFileSync(inputPath, 'utf8');
78
- const currentSourceHash = hashStringSync(currentSourceContent);
79
- sourceChanged = currentSourceHash !== downloadedVersion.sourceHash;
80
- }
81
- catch {
82
- sourceChanged = true;
83
- }
84
- }
85
- if (!forceDownload &&
86
- !sourceChanged &&
87
- fileExists &&
88
- downloadedVersion) {
89
- result.skipped.push(requestedFile);
90
- continue;
91
- }
92
- let data = file.data;
93
- let sourceContentHash;
94
- if (options.options?.jsonSchema && locale) {
95
- const jsonSchema = validateJsonSchema(options.options, inputPath);
96
- if (jsonSchema) {
97
- const originalContent = fs.readFileSync(inputPath, 'utf8');
98
- if (originalContent) {
99
- sourceContentHash = hashStringSync(originalContent);
100
- data = mergeJson(originalContent, inputPath, options.options, [
101
- {
102
- translatedContent: file.data,
103
- targetLocale: locale,
104
- },
105
- ], options.defaultLocale, options.locales)[0];
106
- }
107
- }
108
- }
109
- if (options.options?.yamlSchema && locale) {
110
- const yamlSchema = validateYamlSchema(options.options, inputPath);
111
- if (yamlSchema) {
112
- const originalContent = fs.readFileSync(inputPath, 'utf8');
113
- if (originalContent) {
114
- sourceContentHash = hashStringSync(originalContent);
115
- data = mergeYaml(originalContent, inputPath, options.options, [
116
- {
117
- translatedContent: file.data,
118
- targetLocale: locale,
119
- },
120
- ], options.defaultLocale)[0];
121
- }
122
- }
123
- }
124
- // If the file is a GTJSON file, stable sort the order and format the data
125
- if (file.fileFormat === 'GTJSON') {
126
- try {
127
- const jsonData = JSON.parse(data);
128
- const sortedData = stringify(jsonData); // stably sort with fast-json-stable-stringify
129
- const sortedJsonData = JSON.parse(sortedData);
130
- data = JSON.stringify(sortedJsonData, null, 2); // format the data
131
- }
132
- catch (error) {
133
- logger.warn(`Failed to sort GTJson file: ${file.id}: ` + error);
134
- }
135
- }
136
- // Write the file to disk
137
- await fs.promises.writeFile(outputPath, data);
138
- // Track as downloaded with metadata for downstream postprocessing
139
- recordDownloaded(outputPath, {
140
- branchId,
141
- fileId,
142
- versionId,
143
- locale,
144
- inputPath,
145
- });
146
- result.successful.push(requestedFile);
147
- if (branchId && fileId && versionId && locale) {
148
- ensureNestedObject(downloadedVersions.entries, [
149
- branchId,
150
- fileId,
151
- versionId,
152
- locale,
153
- ]);
154
- downloadedVersions.entries[branchId][fileId][versionId][locale] = {
155
- updatedAt: new Date().toISOString(),
156
- ...(sourceContentHash ? { sourceHash: sourceContentHash } : {}),
157
- };
158
- didUpdateDownloadedLock = true;
159
- }
160
- }
161
- catch (error) {
162
- logger.error(`Error saving file ${fileKey}: ` + error);
163
- recordWarning('failed_download', fileKey, `Error saving file: ${error}`);
164
- result.failed.push(requestedFile);
165
- }
166
- }
167
- // Add any files that weren't in the response to the failed list
168
- const downloadedFileKeys = new Set(downloadedFiles.map((file) => `${file.branchId}:${file.fileId}:${file.versionId}:${file.locale}`));
169
- for (const [fileKey, requestedFile] of requestedFileMap.entries()) {
170
- if (!downloadedFileKeys.has(fileKey)) {
171
- result.failed.push(requestedFile);
172
- }
173
- }
174
- // Persist any updates to the downloaded map at the end of a successful cycle
175
- if (didUpdateDownloadedLock) {
176
- saveDownloadedVersions(options.configDirectory, downloadedVersions);
177
- didUpdateDownloadedLock = false;
178
- }
179
- return result;
180
- }
181
- catch (error) {
182
- logger.error(`An unexpected error occurred while downloading files: ` + error);
183
- }
184
- // Mark all files as failed if we get here
185
- result.failed = [...requestedFileMap.values()];
186
- if (didUpdateDownloadedLock) {
187
- saveDownloadedVersions(options.configDirectory, downloadedVersions);
188
- }
189
- return result;
190
- }
@@ -1,6 +0,0 @@
1
- import { Settings } from '../types/index.js';
2
- /**
3
- * Uploads current source files to obtain file references, then collects and sends
4
- * diffs for all locales based on last downloaded versions. Does not enqueue translations.
5
- */
6
- export declare function saveLocalEdits(settings: Settings): Promise<void>;
@@ -1,38 +0,0 @@
1
- import { aggregateFiles } from '../formats/files/aggregateFiles.js';
2
- import { collectAndSendUserEditDiffs } from './collectUserEditDiffs.js';
3
- import { gt } from '../utils/gt.js';
4
- import { BranchStep } from '../workflows/steps/BranchStep.js';
5
- import { logErrorAndExit } from '../console/logging.js';
6
- import { logger } from '../console/logger.js';
7
- import chalk from 'chalk';
8
- /**
9
- * Uploads current source files to obtain file references, then collects and sends
10
- * diffs for all locales based on last downloaded versions. Does not enqueue translations.
11
- */
12
- export async function saveLocalEdits(settings) {
13
- if (!settings.files)
14
- return;
15
- // Collect current files from config
16
- const files = await aggregateFiles(settings);
17
- if (!files.length)
18
- return;
19
- // run branch query to get branch id
20
- // Run the branch step
21
- const branchStep = new BranchStep(gt, settings);
22
- const branchResult = await branchStep.run();
23
- await branchStep.wait();
24
- if (!branchResult) {
25
- return logErrorAndExit('Failed to resolve git branch information.');
26
- }
27
- const uploads = files.map((file) => ({
28
- fileName: file.fileName,
29
- fileFormat: file.fileFormat,
30
- branchId: branchResult.currentBranch.id,
31
- fileId: file.fileId,
32
- versionId: file.versionId,
33
- }));
34
- const spinner = logger.createSpinner('dots');
35
- spinner.start('Saving local edits...');
36
- await collectAndSendUserEditDiffs(uploads, settings);
37
- spinner.stop(chalk.green('Local edits saved successfully'));
38
- }
@@ -1,59 +0,0 @@
1
- import { Command } from 'commander';
2
- import { Settings, SupportedLibraries, TranslateFlags } from '../types/index.js';
3
- export type UploadOptions = {
4
- config?: string;
5
- apiKey?: string;
6
- projectId?: string;
7
- defaultLocale?: string;
8
- };
9
- export type LoginOptions = {
10
- keyType?: 'development' | 'production';
11
- };
12
- export declare class BaseCLI {
13
- protected library: SupportedLibraries;
14
- protected additionalModules: SupportedLibraries[];
15
- protected program: Command;
16
- constructor(program: Command, library: SupportedLibraries, additionalModules?: SupportedLibraries[]);
17
- init(): void;
18
- execute(): void;
19
- protected setupSetupProjectCommand(): void;
20
- protected setupStageCommand(): void;
21
- /**
22
- * Enqueues translations for a given set of files
23
- * @param initOptions - The options for the command
24
- * @returns The results of the command
25
- */
26
- protected setupEnqueueCommand(): void;
27
- /**
28
- * Downloads translations that were originally staged
29
- * @param initOptions - The options for the command
30
- * @returns The results of the command
31
- */
32
- protected setupDownloadCommand(): void;
33
- protected setupTranslateCommand(): void;
34
- protected setupSendDiffsCommand(): void;
35
- protected handleSetupProject(initOptions: TranslateFlags): Promise<void>;
36
- protected handleStage(initOptions: TranslateFlags): Promise<void>;
37
- /**
38
- * Enqueues translations for a given set of files
39
- * @param initOptions - The options for the command
40
- * @returns The results of the command
41
- */
42
- protected handleEnqueue(initOptions: TranslateFlags): Promise<void>;
43
- /**
44
- * Downloads translations that were originally staged
45
- * @param initOptions - The options for the command
46
- * @returns The results of the command
47
- */
48
- protected handleDownload(initOptions: TranslateFlags): Promise<void>;
49
- protected handleTranslate(initOptions: TranslateFlags): Promise<void>;
50
- protected setupUploadCommand(): void;
51
- protected setupLoginCommand(): void;
52
- protected setupInitCommand(): void;
53
- protected setupConfigureCommand(): void;
54
- protected handleUploadCommand(settings: Settings & UploadOptions): Promise<void>;
55
- protected handleInitCommand(ranReactSetup: boolean, useDefaults?: boolean): Promise<void>;
56
- protected handleLoginCommand(options: LoginOptions): Promise<void>;
57
- protected setupUpdateInstructionsCommand(): void;
58
- protected promptAgentInstructions(useDefaults?: boolean): Promise<void>;
59
- }