gt 2.14.35 → 2.14.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (429) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/dist/api/collectUserEditDiffs.js +112 -155
  3. package/dist/api/collectUserEditDiffs.js.map +1 -0
  4. package/dist/api/downloadFileBatch.js +164 -241
  5. package/dist/api/downloadFileBatch.js.map +1 -0
  6. package/dist/api/saveLocalEdits.js +37 -41
  7. package/dist/api/saveLocalEdits.js.map +1 -0
  8. package/dist/bin/bin-entry.js +17 -7
  9. package/dist/bin/bin-entry.js.map +1 -0
  10. package/dist/bin/bin-main.js +43 -61
  11. package/dist/bin/bin-main.js.map +1 -0
  12. package/dist/cli/base.js +382 -497
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/download.js +41 -49
  15. package/dist/cli/commands/download.js.map +1 -0
  16. package/dist/cli/commands/enqueue.js +26 -25
  17. package/dist/cli/commands/enqueue.js.map +1 -0
  18. package/dist/cli/commands/setupProject.js +33 -36
  19. package/dist/cli/commands/setupProject.js.map +1 -0
  20. package/dist/cli/commands/stage.js +53 -61
  21. package/dist/cli/commands/stage.js.map +1 -0
  22. package/dist/cli/commands/translate.js +75 -112
  23. package/dist/cli/commands/translate.js.map +1 -0
  24. package/dist/cli/commands/upload.js +185 -213
  25. package/dist/cli/commands/upload.js.map +1 -0
  26. package/dist/cli/commands/utils/validation.js +39 -34
  27. package/dist/cli/commands/utils/validation.js.map +1 -0
  28. package/dist/cli/flags.js +35 -62
  29. package/dist/cli/flags.js.map +1 -0
  30. package/dist/cli/inline.js +112 -137
  31. package/dist/cli/inline.js.map +1 -0
  32. package/dist/cli/next.js +17 -12
  33. package/dist/cli/next.js.map +1 -0
  34. package/dist/cli/node.js +19 -15
  35. package/dist/cli/node.js.map +1 -0
  36. package/dist/cli/python.js +13 -8
  37. package/dist/cli/python.js.map +1 -0
  38. package/dist/cli/react.js +61 -78
  39. package/dist/cli/react.js.map +1 -0
  40. package/dist/config/defaults.js +16 -11
  41. package/dist/config/defaults.js.map +1 -0
  42. package/dist/config/generateSettings.js +167 -269
  43. package/dist/config/generateSettings.js.map +1 -0
  44. package/dist/config/optionPresets.js +78 -96
  45. package/dist/config/optionPresets.js.map +1 -0
  46. package/dist/config/resolveConfig.js +27 -32
  47. package/dist/config/resolveConfig.js.map +1 -0
  48. package/dist/config/utils.js +7 -3
  49. package/dist/config/utils.js.map +1 -0
  50. package/dist/config/validateSettings.js +19 -30
  51. package/dist/config/validateSettings.js.map +1 -0
  52. package/dist/console/colors.js +18 -13
  53. package/dist/console/colors.js.map +1 -0
  54. package/dist/console/displayTranslateSummary.js +40 -37
  55. package/dist/console/displayTranslateSummary.js.map +1 -0
  56. package/dist/console/formatting.js +8 -5
  57. package/dist/console/formatting.js.map +1 -0
  58. package/dist/console/index.d.ts +11 -9
  59. package/dist/console/index.js +53 -50
  60. package/dist/console/index.js.map +1 -0
  61. package/dist/console/inkFields.d.ts +23 -0
  62. package/dist/console/inkFields.js +87 -0
  63. package/dist/console/inkFields.js.map +1 -0
  64. package/dist/console/inkLayout.d.ts +7 -0
  65. package/dist/console/inkLayout.js +139 -0
  66. package/dist/console/inkLayout.js.map +1 -0
  67. package/dist/console/inkLocaleData.d.ts +4 -0
  68. package/dist/console/inkLocaleData.js +32 -0
  69. package/dist/console/inkLocaleData.js.map +1 -0
  70. package/dist/console/inkPrompts.d.ts +8 -0
  71. package/dist/console/inkPrompts.js +496 -0
  72. package/dist/console/inkPrompts.js.map +1 -0
  73. package/dist/console/inkSession.d.ts +3 -0
  74. package/dist/console/inkSession.js +42 -0
  75. package/dist/console/inkSession.js.map +1 -0
  76. package/dist/console/inkTerminal.d.ts +4 -0
  77. package/dist/console/inkTerminal.js +15 -0
  78. package/dist/console/inkTerminal.js.map +1 -0
  79. package/dist/console/inkTypes.d.ts +66 -0
  80. package/dist/console/inkTypes.js +1 -0
  81. package/dist/console/inkUtils.d.ts +24 -0
  82. package/dist/console/inkUtils.js +87 -0
  83. package/dist/console/inkUtils.js.map +1 -0
  84. package/dist/console/logger.js +209 -249
  85. package/dist/console/logger.js.map +1 -0
  86. package/dist/console/logging.d.ts +14 -0
  87. package/dist/console/logging.js +203 -162
  88. package/dist/console/logging.js.map +1 -0
  89. package/dist/console/promptParsing.d.ts +5 -0
  90. package/dist/console/promptParsing.js +28 -0
  91. package/dist/console/promptParsing.js.map +1 -0
  92. package/dist/console/terminalSession.d.ts +5 -0
  93. package/dist/console/terminalSession.js +38 -0
  94. package/dist/console/terminalSession.js.map +1 -0
  95. package/dist/extraction/index.js +3 -2
  96. package/dist/extraction/mapToUpdates.js +19 -18
  97. package/dist/extraction/mapToUpdates.js.map +1 -0
  98. package/dist/extraction/postProcess.js +68 -86
  99. package/dist/extraction/postProcess.js.map +1 -0
  100. package/dist/formats/files/aggregateFiles.js +223 -304
  101. package/dist/formats/files/aggregateFiles.js.map +1 -0
  102. package/dist/formats/files/collectFiles.js +53 -54
  103. package/dist/formats/files/collectFiles.js.map +1 -0
  104. package/dist/formats/files/convertToFileTranslationData.js +21 -19
  105. package/dist/formats/files/convertToFileTranslationData.js.map +1 -0
  106. package/dist/formats/files/fileMapping.js +82 -119
  107. package/dist/formats/files/fileMapping.js.map +1 -0
  108. package/dist/formats/files/preprocess/mdx.js +15 -12
  109. package/dist/formats/files/preprocess/mdx.js.map +1 -0
  110. package/dist/formats/files/preprocess/mintlify.js +15 -13
  111. package/dist/formats/files/preprocess/mintlify.js.map +1 -0
  112. package/dist/formats/files/preprocessContent.js +20 -21
  113. package/dist/formats/files/preprocessContent.js.map +1 -0
  114. package/dist/formats/files/save.js +18 -15
  115. package/dist/formats/files/save.js.map +1 -0
  116. package/dist/formats/files/supportedFiles.js +27 -22
  117. package/dist/formats/files/supportedFiles.js.map +1 -0
  118. package/dist/formats/files/transformFormat.js +93 -100
  119. package/dist/formats/files/transformFormat.js.map +1 -0
  120. package/dist/formats/json/extractJson.js +83 -110
  121. package/dist/formats/json/extractJson.js.map +1 -0
  122. package/dist/formats/json/flattenJson.js +41 -48
  123. package/dist/formats/json/flattenJson.js.map +1 -0
  124. package/dist/formats/json/jsonPath.js +20 -15
  125. package/dist/formats/json/jsonPath.js.map +1 -0
  126. package/dist/formats/json/jsonPointer.js +17 -17
  127. package/dist/formats/json/jsonPointer.js.map +1 -0
  128. package/dist/formats/json/mergeJson.js +230 -371
  129. package/dist/formats/json/mergeJson.js.map +1 -0
  130. package/dist/formats/json/parseJson.js +74 -111
  131. package/dist/formats/json/parseJson.js.map +1 -0
  132. package/dist/formats/json/transformJson.js +53 -61
  133. package/dist/formats/json/transformJson.js.map +1 -0
  134. package/dist/formats/json/utils.js +158 -187
  135. package/dist/formats/json/utils.js.map +1 -0
  136. package/dist/formats/parseKeyedMetadata.js +85 -106
  137. package/dist/formats/parseKeyedMetadata.js.map +1 -0
  138. package/dist/formats/utils.js +13 -23
  139. package/dist/formats/utils.js.map +1 -0
  140. package/dist/formats/yaml/extractYaml.js +32 -31
  141. package/dist/formats/yaml/extractYaml.js.map +1 -0
  142. package/dist/formats/yaml/mergeYaml.js +43 -60
  143. package/dist/formats/yaml/mergeYaml.js.map +1 -0
  144. package/dist/formats/yaml/parseYaml.js +34 -23
  145. package/dist/formats/yaml/parseYaml.js.map +1 -0
  146. package/dist/formats/yaml/utils.js +19 -21
  147. package/dist/formats/yaml/utils.js.map +1 -0
  148. package/dist/fs/clearLocaleDirs.js +82 -114
  149. package/dist/fs/clearLocaleDirs.js.map +1 -0
  150. package/dist/fs/config/downloadedVersions.js +174 -188
  151. package/dist/fs/config/downloadedVersions.js.map +1 -0
  152. package/dist/fs/config/loadConfig.js +12 -8
  153. package/dist/fs/config/loadConfig.js.map +1 -0
  154. package/dist/fs/config/parseFilesConfig.js +166 -227
  155. package/dist/fs/config/parseFilesConfig.js.map +1 -0
  156. package/dist/fs/config/setupConfig.js +43 -52
  157. package/dist/fs/config/setupConfig.js.map +1 -0
  158. package/dist/fs/config/updateConfig.js +44 -56
  159. package/dist/fs/config/updateConfig.js.map +1 -0
  160. package/dist/fs/config/updateVersions.js +27 -28
  161. package/dist/fs/config/updateVersions.js.map +1 -0
  162. package/dist/fs/copyFile.js +33 -37
  163. package/dist/fs/copyFile.js.map +1 -0
  164. package/dist/fs/createLoadTranslationsFile.js +32 -48
  165. package/dist/fs/createLoadTranslationsFile.js.map +1 -0
  166. package/dist/fs/determineFramework/detectPythonLibrary.js +30 -34
  167. package/dist/fs/determineFramework/detectPythonLibrary.js.map +1 -0
  168. package/dist/fs/determineFramework/index.js +46 -64
  169. package/dist/fs/determineFramework/index.js.map +1 -0
  170. package/dist/fs/determineFramework/matchPyprojectDependency.js +65 -78
  171. package/dist/fs/determineFramework/matchPyprojectDependency.js.map +1 -0
  172. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js +21 -19
  173. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js.map +1 -0
  174. package/dist/fs/determineFramework/matchSetupPyDependency.js +60 -81
  175. package/dist/fs/determineFramework/matchSetupPyDependency.js.map +1 -0
  176. package/dist/fs/determineFramework/resolveGtDependency.js +15 -15
  177. package/dist/fs/determineFramework/resolveGtDependency.js.map +1 -0
  178. package/dist/fs/findFilepath.js +63 -78
  179. package/dist/fs/findFilepath.js.map +1 -0
  180. package/dist/fs/loadJSON.js +18 -15
  181. package/dist/fs/loadJSON.js.map +1 -0
  182. package/dist/fs/matchFiles.js +12 -7
  183. package/dist/fs/matchFiles.js.map +1 -0
  184. package/dist/fs/saveJSON.js +10 -6
  185. package/dist/fs/saveJSON.js.map +1 -0
  186. package/dist/fs/utils.js +19 -15
  187. package/dist/fs/utils.js.map +1 -0
  188. package/dist/functions.d.ts +2 -1
  189. package/dist/functions.js +3 -6
  190. package/dist/generated/version.d.ts +1 -1
  191. package/dist/generated/version.js +6 -2
  192. package/dist/generated/version.js.map +1 -0
  193. package/dist/git/branches.js +77 -83
  194. package/dist/git/branches.js.map +1 -0
  195. package/dist/hooks/postProcess.js +97 -114
  196. package/dist/hooks/postProcess.js.map +1 -0
  197. package/dist/index.js +23 -31
  198. package/dist/index.js.map +1 -0
  199. package/dist/locadex/setupFlow.js +11 -8
  200. package/dist/locadex/setupFlow.js.map +1 -0
  201. package/dist/main.js +17 -7
  202. package/dist/main.js.map +1 -0
  203. package/dist/next/config/parseNextConfig.js +32 -51
  204. package/dist/next/config/parseNextConfig.js.map +1 -0
  205. package/dist/next/jsx/utils.js +25 -37
  206. package/dist/next/jsx/utils.js.map +1 -0
  207. package/dist/next/parse/handleInitGT.js +87 -154
  208. package/dist/next/parse/handleInitGT.js.map +1 -0
  209. package/dist/next/parse/wrapContent.js +136 -158
  210. package/dist/next/parse/wrapContent.js.map +1 -0
  211. package/dist/python/parse/createPythonInlineUpdates.js +36 -33
  212. package/dist/python/parse/createPythonInlineUpdates.js.map +1 -0
  213. package/dist/react/config/createESBuildConfig.js +115 -115
  214. package/dist/react/config/createESBuildConfig.js.map +1 -0
  215. package/dist/react/jsx/evaluateJsx.js +90 -124
  216. package/dist/react/jsx/evaluateJsx.js.map +1 -0
  217. package/dist/react/jsx/utils/buildImportMap.js +24 -28
  218. package/dist/react/jsx/utils/buildImportMap.js.map +1 -0
  219. package/dist/react/jsx/utils/constants.js +79 -87
  220. package/dist/react/jsx/utils/constants.js.map +1 -0
  221. package/dist/react/jsx/utils/extractSourceCode.js +36 -37
  222. package/dist/react/jsx/utils/extractSourceCode.js.map +1 -0
  223. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +30 -30
  224. package/dist/react/jsx/utils/getCalleeNameFromExpression.js.map +1 -0
  225. package/dist/react/jsx/utils/getPathsAndAliases.js +70 -105
  226. package/dist/react/jsx/utils/getPathsAndAliases.js.map +1 -0
  227. package/dist/react/jsx/utils/isNumberLiteral.js +13 -11
  228. package/dist/react/jsx/utils/isNumberLiteral.js.map +1 -0
  229. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +103 -148
  230. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js.map +1 -0
  231. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js +305 -389
  232. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js.map +1 -0
  233. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +122 -193
  234. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js.map +1 -0
  235. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +50 -64
  236. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js.map +1 -0
  237. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +41 -68
  238. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js.map +1 -0
  239. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +760 -1107
  240. package/dist/react/jsx/utils/jsxParsing/parseJsx.js.map +1 -0
  241. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +35 -71
  242. package/dist/react/jsx/utils/jsxParsing/parseTProps.js.map +1 -0
  243. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +39 -58
  244. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js.map +1 -0
  245. package/dist/react/jsx/utils/jsxParsing/types.js +10 -24
  246. package/dist/react/jsx/utils/jsxParsing/types.js.map +1 -0
  247. package/dist/react/jsx/utils/mapAttributeName.js +13 -13
  248. package/dist/react/jsx/utils/mapAttributeName.js.map +1 -0
  249. package/dist/react/jsx/utils/parseAst.js +142 -272
  250. package/dist/react/jsx/utils/parseAst.js.map +1 -0
  251. package/dist/react/jsx/utils/parseString.js +726 -1090
  252. package/dist/react/jsx/utils/parseString.js.map +1 -0
  253. package/dist/react/jsx/utils/parseStringFunction.js +274 -401
  254. package/dist/react/jsx/utils/parseStringFunction.js.map +1 -0
  255. package/dist/react/jsx/utils/resolveImportPath.js +104 -108
  256. package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
  257. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
  258. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
  259. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
  260. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
  261. package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
  262. package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
  263. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
  264. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
  265. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
  266. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
  267. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
  268. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
  269. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
  270. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
  271. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
  272. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
  273. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
  274. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
  275. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
  276. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
  277. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
  278. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
  279. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
  280. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
  281. package/dist/react/jsx/utils/validateStringFunction.js +21 -29
  282. package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
  283. package/dist/react/jsx/wrapJsx.js +192 -375
  284. package/dist/react/jsx/wrapJsx.js.map +1 -0
  285. package/dist/react/parse/addVitePlugin/index.js +40 -34
  286. package/dist/react/parse/addVitePlugin/index.js.map +1 -0
  287. package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
  288. package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
  289. package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
  290. package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
  291. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
  292. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
  293. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
  294. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
  295. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
  296. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
  297. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
  298. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
  299. package/dist/react/parse/createDictionaryUpdates.js +121 -185
  300. package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
  301. package/dist/react/parse/createInlineUpdates.js +123 -139
  302. package/dist/react/parse/createInlineUpdates.js.map +1 -0
  303. package/dist/react/parse/wrapContent.js +131 -156
  304. package/dist/react/parse/wrapContent.js.map +1 -0
  305. package/dist/react/utils/flattenDictionary.js +55 -70
  306. package/dist/react/utils/flattenDictionary.js.map +1 -0
  307. package/dist/react/utils/getEntryAndMetadata.js +14 -10
  308. package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
  309. package/dist/react/utils/getVariableName.js +36 -33
  310. package/dist/react/utils/getVariableName.js.map +1 -0
  311. package/dist/setup/detectFramework.js +85 -102
  312. package/dist/setup/detectFramework.js.map +1 -0
  313. package/dist/setup/frameworkUtils.js +17 -28
  314. package/dist/setup/frameworkUtils.js.map +1 -0
  315. package/dist/setup/userInput.js +24 -31
  316. package/dist/setup/userInput.js.map +1 -0
  317. package/dist/setup/wizard.js +141 -143
  318. package/dist/setup/wizard.js.map +1 -0
  319. package/dist/state/mintlifyRefMap.js +12 -9
  320. package/dist/state/mintlifyRefMap.js.map +1 -0
  321. package/dist/state/recentDownloads.js +26 -23
  322. package/dist/state/recentDownloads.js.map +1 -0
  323. package/dist/state/translateWarnings.js +17 -8
  324. package/dist/state/translateWarnings.js.map +1 -0
  325. package/dist/translation/parse.js +77 -98
  326. package/dist/translation/parse.js.map +1 -0
  327. package/dist/translation/stage.js +28 -43
  328. package/dist/translation/stage.js.map +1 -0
  329. package/dist/translation/validate.js +68 -91
  330. package/dist/translation/validate.js.map +1 -0
  331. package/dist/types/libraries.js +93 -91
  332. package/dist/types/libraries.js.map +1 -0
  333. package/dist/types/parsing.js +19 -10
  334. package/dist/types/parsing.js.map +1 -0
  335. package/dist/utils/addExplicitAnchorIds.js +270 -389
  336. package/dist/utils/addExplicitAnchorIds.js.map +1 -0
  337. package/dist/utils/calculateTimeoutMs.js +11 -6
  338. package/dist/utils/calculateTimeoutMs.js.map +1 -0
  339. package/dist/utils/constants.js +15 -12
  340. package/dist/utils/constants.js.map +1 -0
  341. package/dist/utils/credentials.js +67 -114
  342. package/dist/utils/credentials.js.map +1 -0
  343. package/dist/utils/fetch.js +22 -20
  344. package/dist/utils/fetch.js.map +1 -0
  345. package/dist/utils/flattenJsonFiles.js +27 -34
  346. package/dist/utils/flattenJsonFiles.js.map +1 -0
  347. package/dist/utils/gitDiff.js +30 -32
  348. package/dist/utils/gitDiff.js.map +1 -0
  349. package/dist/utils/gt.js +7 -2
  350. package/dist/utils/gt.js.map +1 -0
  351. package/dist/utils/hash.js +14 -9
  352. package/dist/utils/hash.js.map +1 -0
  353. package/dist/utils/headers.js +10 -13
  354. package/dist/utils/headers.js.map +1 -0
  355. package/dist/utils/installPackage.js +70 -75
  356. package/dist/utils/installPackage.js.map +1 -0
  357. package/dist/utils/localizeRelativeAssets.js +114 -157
  358. package/dist/utils/localizeRelativeAssets.js.map +1 -0
  359. package/dist/utils/localizeStaticImports.js +229 -371
  360. package/dist/utils/localizeStaticImports.js.map +1 -0
  361. package/dist/utils/localizeStaticUrls.js +241 -424
  362. package/dist/utils/localizeStaticUrls.js.map +1 -0
  363. package/dist/utils/mintlifyTitleFallback.js +64 -72
  364. package/dist/utils/mintlifyTitleFallback.js.map +1 -0
  365. package/dist/utils/monorepoVersionCheck.js +177 -215
  366. package/dist/utils/monorepoVersionCheck.js.map +1 -0
  367. package/dist/utils/packageInfo.js +17 -16
  368. package/dist/utils/packageInfo.js.map +1 -0
  369. package/dist/utils/packageJson.js +51 -66
  370. package/dist/utils/packageJson.js.map +1 -0
  371. package/dist/utils/packageManager.js +237 -260
  372. package/dist/utils/packageManager.js.map +1 -0
  373. package/dist/utils/parse/needsCJS.js +36 -69
  374. package/dist/utils/parse/needsCJS.js.map +1 -0
  375. package/dist/utils/persistPostprocessHashes.js +30 -32
  376. package/dist/utils/persistPostprocessHashes.js.map +1 -0
  377. package/dist/utils/processAnchorIds.js +32 -54
  378. package/dist/utils/processAnchorIds.js.map +1 -0
  379. package/dist/utils/processOpenApi.js +469 -578
  380. package/dist/utils/processOpenApi.js.map +1 -0
  381. package/dist/utils/resolveMintlifyRefs.js +89 -105
  382. package/dist/utils/resolveMintlifyRefs.js.map +1 -0
  383. package/dist/utils/resolvePublish.js +46 -54
  384. package/dist/utils/resolvePublish.js.map +1 -0
  385. package/dist/utils/sanitizeFileContent.js +20 -27
  386. package/dist/utils/sanitizeFileContent.js.map +1 -0
  387. package/dist/utils/sharedStaticAssets.js +248 -366
  388. package/dist/utils/sharedStaticAssets.js.map +1 -0
  389. package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
  390. package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
  391. package/dist/utils/validateMdx.js +26 -23
  392. package/dist/utils/validateMdx.js.map +1 -0
  393. package/dist/utils/wrapPlainUrls.js +58 -70
  394. package/dist/utils/wrapPlainUrls.js.map +1 -0
  395. package/dist/workflows/download.js +92 -126
  396. package/dist/workflows/download.js.map +1 -0
  397. package/dist/workflows/enqueue.js +47 -54
  398. package/dist/workflows/enqueue.js.map +1 -0
  399. package/dist/workflows/publish.js +29 -29
  400. package/dist/workflows/publish.js.map +1 -0
  401. package/dist/workflows/setupProject.js +39 -40
  402. package/dist/workflows/setupProject.js.map +1 -0
  403. package/dist/workflows/stage.js +61 -65
  404. package/dist/workflows/stage.js.map +1 -0
  405. package/dist/workflows/steps/BranchStep.js +118 -163
  406. package/dist/workflows/steps/BranchStep.js.map +1 -0
  407. package/dist/workflows/steps/DownloadStep.js +107 -137
  408. package/dist/workflows/steps/DownloadStep.js.map +1 -0
  409. package/dist/workflows/steps/EnqueueStep.js +32 -32
  410. package/dist/workflows/steps/EnqueueStep.js.map +1 -0
  411. package/dist/workflows/steps/PollJobsStep.js +208 -292
  412. package/dist/workflows/steps/PollJobsStep.js.map +1 -0
  413. package/dist/workflows/steps/PublishStep.js +33 -38
  414. package/dist/workflows/steps/PublishStep.js.map +1 -0
  415. package/dist/workflows/steps/SetupStep.js +71 -72
  416. package/dist/workflows/steps/SetupStep.js.map +1 -0
  417. package/dist/workflows/steps/TagStep.js +39 -44
  418. package/dist/workflows/steps/TagStep.js.map +1 -0
  419. package/dist/workflows/steps/UploadSourcesStep.js +108 -140
  420. package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
  421. package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
  422. package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
  423. package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
  424. package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
  425. package/dist/workflows/steps/WorkflowStep.js +6 -2
  426. package/dist/workflows/steps/WorkflowStep.js.map +1 -0
  427. package/dist/workflows/upload.js +45 -46
  428. package/dist/workflows/upload.js.map +1 -0
  429. package/package.json +14 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","names":[],"sources":["../../src/console/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { randomUUID } from 'node:crypto';\nimport { pino, destination } from 'pino';\nimport {\n log as clackLog,\n spinner,\n progress,\n intro,\n outro,\n} from '@clack/prompts';\nimport { endTerminalSession } from './terminalSession.js';\n\nimport type { Logger as PinoLogger } from 'pino';\nimport type { SpinnerResult, ProgressResult } from '@clack/prompts';\n\nfunction wrapTerminalSessionAware<T extends SpinnerResult | ProgressResult>(\n target: T\n): T {\n const start = target.start.bind(target);\n const stop = target.stop.bind(target);\n const message = target.message.bind(target);\n target.start = (msg?: string) => {\n endTerminalSession();\n return start(msg);\n };\n target.stop = (msg?: string, code?: number) => {\n endTerminalSession();\n return (stop as (m?: string, c?: number) => void)(msg, code);\n };\n target.message = (msg?: string) => {\n endTerminalSession();\n return message(msg);\n };\n if ('advance' in target) {\n const advance = target.advance.bind(target);\n target.advance = (amount: number, msg?: string) => {\n endTerminalSession();\n return advance(amount, msg);\n };\n }\n return target;\n}\n\nexport type LogFormat = 'default' | 'json';\n\n// Mock spinner that logs to console instead of updating terminal UI\nclass MockSpinner implements SpinnerResult {\n private currentMessage: string = '';\n private logger: Logger;\n isCancelled: boolean = false;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n start(message?: string): void {\n if (message) {\n this.currentMessage = message;\n this.logger.info(`[Spinner] ${message}`);\n }\n }\n\n stop(message?: string): void {\n const msg = message || this.currentMessage;\n if (msg) {\n this.logger.info(`[Spinner] ${msg}`);\n }\n this.currentMessage = '';\n }\n\n message(message?: string): void {\n if (message) {\n this.currentMessage = message;\n this.logger.info(`[Spinner] ${message}`);\n }\n }\n}\n\n// Mock progress bar that logs to console instead of updating terminal UI\nclass MockProgress implements ProgressResult {\n private max: number;\n private current: number = 0;\n private logger: Logger;\n isCancelled: boolean = false;\n\n constructor(max: number, logger: Logger) {\n this.max = max;\n this.logger = logger;\n }\n\n start(message?: string): void {\n const msg = message || 'Starting progress';\n this.logger.info(`[Progress] ${msg} (0/${this.max})`);\n }\n\n stop(message?: string): void {\n const msg = message || 'Complete';\n this.logger.info(`[Progress] ${msg} (${this.current}/${this.max})`);\n }\n\n message(message?: string): void {\n if (message) {\n this.logger.info(`[Progress] ${message} (${this.current}/${this.max})`);\n }\n }\n\n advance(amount: number, message?: string): void {\n this.current += amount;\n const msg = message || 'Progress';\n this.logger.info(`[Progress] ${msg} (${this.current}/${this.max})`);\n }\n}\n\n/**\n * GT_LOG_FORMAT: default | json.\n * - If default, logs will be pretty-printed using @clack/prompts.\n * - If json, logs will be written in JSON format to the console.\n * GT_LOG_FILE: If specified, logs will be written to the file.\n * GT_LOG_LEVEL: The level of logs to write. If not specified, defaults to 'info'.\n * - Valid levels: debug, info, warn, error.\n */\nclass Logger {\n private static instance: Logger;\n private pinoLogger: PinoLogger | null = null;\n private fileLogger: PinoLogger | null = null;\n private logFormat: LogFormat;\n\n private constructor() {\n // Read configuration from environment variables\n const format = (\n process.env.GT_LOG_FORMAT || 'default'\n ).toLowerCase() as LogFormat;\n const logFile = process.env.GT_LOG_FILE;\n const logLevel = process.env.GT_LOG_LEVEL || 'info';\n\n if (format !== 'default' && format !== 'json') {\n console.error('Invalid log format');\n process.exit(1);\n }\n if (\n logLevel !== 'debug' &&\n logLevel !== 'info' &&\n logLevel !== 'warn' &&\n logLevel !== 'error'\n ) {\n console.error('Invalid log level');\n process.exit(1);\n }\n\n this.logFormat = format;\n\n // Console output (stdout) - only for JSON format\n // For 'default' format, we use @clack/prompts directly\n if (format === 'json') {\n this.pinoLogger = pino(\n {\n level: logLevel,\n mixin: () => ({\n logId: randomUUID(),\n }),\n },\n destination(1)\n );\n }\n\n // File output (if specified) - always JSON format\n if (logFile) {\n this.fileLogger = pino(\n {\n level: logLevel,\n mixin: () => ({\n logId: randomUUID(),\n }),\n },\n destination(logFile)\n );\n }\n }\n\n static getInstance(): Logger {\n if (!Logger.instance) {\n Logger.instance = new Logger();\n }\n return Logger.instance;\n }\n\n // Standard logging methods\n trace(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n // @clack/prompts doesn't have trace, use message\n clackLog.message(message, { symbol: chalk.dim('•') });\n } else {\n this.pinoLogger?.trace(message);\n }\n this.fileLogger?.trace(message);\n }\n\n debug(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n // @clack/prompts doesn't have debug, use message\n clackLog.message(message, { symbol: chalk.dim('◆') });\n } else {\n this.pinoLogger?.debug(message);\n }\n this.fileLogger?.debug(message);\n }\n\n info(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.info(message);\n } else {\n this.pinoLogger?.info(message);\n }\n this.fileLogger?.info(message);\n }\n\n warn(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.warn(message);\n } else {\n this.pinoLogger?.warn(message);\n }\n this.fileLogger?.warn(message);\n }\n\n error(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.error(message);\n } else {\n this.pinoLogger?.error(message);\n }\n this.fileLogger?.error(message);\n }\n\n fatal(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.error(message); // @clack/prompts doesn't have fatal, use error\n } else {\n this.pinoLogger?.fatal(message);\n }\n this.fileLogger?.fatal(message);\n }\n\n silent(message: string): void {\n // Silent doesn't log to console, only to file\n this.fileLogger?.silent(message);\n }\n\n // @clack/prompts specific methods (for 'default' format)\n success(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.success(message);\n } else {\n this.pinoLogger?.info(message); // Map to info for non-default formats\n }\n this.fileLogger?.info(message);\n }\n\n step(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.step(message);\n } else {\n this.pinoLogger?.info(message); // Map to info for non-default formats\n }\n this.fileLogger?.info(message);\n }\n\n message(message: string, symbol?: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n clackLog.message(message, symbol ? { symbol } : undefined);\n } else {\n this.pinoLogger?.info(message); // Map to info for non-default formats\n }\n this.fileLogger?.info(message);\n }\n\n // Spinner functionality\n createSpinner(indicator: 'dots' | 'timer' = 'timer'): SpinnerResult {\n if (this.logFormat === 'default') {\n return wrapTerminalSessionAware(spinner({ indicator }));\n } else {\n return new MockSpinner(this);\n }\n }\n\n // Progress bar functionality\n createProgressBar(total: number): ProgressResult {\n if (this.logFormat === 'default') {\n return wrapTerminalSessionAware(progress({ max: total }));\n } else {\n return new MockProgress(total, this);\n }\n }\n\n // Command start/end markers\n startCommand(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n intro(chalk.cyan(message));\n } else {\n this.info(`╭─ ${message}`);\n }\n this.fileLogger?.info(`[START] ${message}`);\n }\n\n endCommand(message: string): void {\n if (this.logFormat === 'default') {\n endTerminalSession();\n outro(chalk.cyan(message));\n } else {\n this.info(`╰─ ${message}`);\n }\n this.fileLogger?.info(`[END] ${message}`);\n }\n\n // Flush logs to ensure they're written before process exit\n flush(): void {\n this.pinoLogger?.flush();\n this.fileLogger?.flush();\n }\n}\n\nexport const logger = Logger.getInstance();\n"],"mappings":"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"}
@@ -16,6 +16,20 @@ export declare function promptText({ message, defaultValue, validate, }: {
16
16
  defaultValue?: string;
17
17
  validate?: (value: string) => boolean | string;
18
18
  }): Promise<string>;
19
+ export declare function promptLocale({ message, defaultValue, }: {
20
+ message: string;
21
+ defaultValue?: string;
22
+ }): Promise<string>;
23
+ export declare function promptLocaleList({ message, defaultValue, required, }: {
24
+ message: string;
25
+ defaultValue?: string[];
26
+ required?: boolean;
27
+ }): Promise<string[]>;
28
+ export declare function promptGlobPatterns({ label, message, defaultValue, }: {
29
+ label: string;
30
+ message: string;
31
+ defaultValue?: string;
32
+ }): Promise<string>;
19
33
  export declare function promptSelect<T>({ message, options, defaultValue, }: {
20
34
  message: string;
21
35
  options: Array<{
@@ -1,35 +1,45 @@
1
- import { text, select, confirm, isCancel, cancel, multiselect, } from '@clack/prompts';
2
- import chalk from 'chalk';
3
- import { getCLIVersion } from '../utils/packageJson.js';
4
- import { logger } from './logger.js';
5
- import { TEMPLATE_FILE_NAME } from '../utils/constants.js';
1
+ import { endTerminalSession, shouldUseInkPrompts } from "./terminalSession.js";
2
+ import { logger } from "./logger.js";
3
+ import { getCLIVersion } from "../utils/packageJson.js";
4
+ import "../utils/constants.js";
5
+ import { parseLocaleList, validateLocale, validateLocaleList } from "./promptParsing.js";
6
+ import { cancel, confirm, isCancel, multiselect, select, text } from "@clack/prompts";
7
+ import chalk from "chalk";
8
+ //#region src/console/logging.ts
9
+ function cancelPromptAndExit(message) {
10
+ endTerminalSession();
11
+ cancel(message);
12
+ return exitSync(0);
13
+ }
14
+ async function loadInkPrompts() {
15
+ return import("./inkPrompts.js");
16
+ }
17
+ async function runInkPrompt(prompt, cancelMessage = "Operation cancelled") {
18
+ const result = await prompt(await loadInkPrompts());
19
+ if (result.cancelled) return cancelPromptAndExit(cancelMessage);
20
+ return result.value;
21
+ }
6
22
  /**
7
- * Strip ANSI escape codes from a string (e.g., chalk color codes)
8
- */
9
- export function stripAnsi(str) {
10
- // eslint-disable-next-line no-control-regex, no-useless-escape
11
- return str.replace(/\x1B\[[0-9;]*m/g, '');
12
- }
13
- export function logErrorAndExit(message) {
14
- logger.error(message);
15
- return exitSync(1);
16
- }
17
- export function exitSync(code) {
18
- // Flush logs before exit
19
- logger.flush();
20
- process.exit(code);
21
- }
22
- // GT specific logging
23
- export function displayHeader(introString) {
24
- displayAsciiTitle();
25
- displayInitializingText();
26
- if (introString) {
27
- logger.startCommand(introString);
28
- }
23
+ * Strip ANSI escape codes from a string (e.g., chalk color codes)
24
+ */
25
+ function stripAnsi(str) {
26
+ return str.replace(/\x1B\[[0-9;]*m/g, "");
27
+ }
28
+ function logErrorAndExit(message) {
29
+ logger.error(message);
30
+ return exitSync(1);
31
+ }
32
+ function exitSync(code) {
33
+ logger.flush();
34
+ process.exit(code);
35
+ }
36
+ function displayHeader(introString) {
37
+ displayAsciiTitle();
38
+ displayInitializingText();
39
+ if (introString) logger.startCommand(introString);
29
40
  }
30
41
  function displayAsciiTitle() {
31
- // eslint-disable-next-line no-console
32
- console.log(chalk.cyan(`\n ,ad8888ba, 888888888888
42
+ console.log(chalk.cyan(`\n ,ad8888ba, 888888888888
33
43
  d8"' \`"8b 88
34
44
  d8' 88
35
45
  88 88
@@ -39,140 +49,171 @@ Y8, 88 88
39
49
  \`"Y88888P" 88 `));
40
50
  }
41
51
  function displayInitializingText() {
42
- const version = getCLIVersion();
43
- // eslint-disable-next-line no-console
44
- console.log(`\n${chalk.bold.blue('General Translation, Inc.')}
45
- ${chalk.dim('https://generaltranslation.com/docs')}
52
+ const version = getCLIVersion();
53
+ console.log(`\n${chalk.bold.blue("General Translation, Inc.")}
54
+ ${chalk.dim("https://generaltranslation.com/docs")}
46
55
  ${chalk.dim(`CLI Version: ${version}\n`)}`);
47
56
  }
48
- export function displayProjectId(projectId) {
49
- logger.message(chalk.dim(`Project ID: ${chalk.bold(projectId)}`), chalk.cyan('~'));
50
- }
51
- export function displayResolvedPaths(resolvedPaths) {
52
- const paths = resolvedPaths.map(([key, resolvedPath]) => {
53
- return chalk.dim(`'${chalk.white(key)}' → '${chalk.green(resolvedPath)}'`);
54
- });
55
- logger.step(`Resolved path aliases:\n${paths.join('\n')}`);
56
- }
57
- export function displayCreatedConfigFile(configFilepath) {
58
- logger.step(`Created config file ${chalk.cyan(configFilepath)}`);
59
- }
60
- export function displayUpdatedConfigFile(configFilepath) {
61
- logger.success(`Updated config file ${chalk.cyan(configFilepath)}`);
62
- }
63
- export function displayUpdatedVersionsFile(versionFilepath) {
64
- logger.success(`Updated versions file ${chalk.cyan(versionFilepath)}`);
65
- }
66
- // Input prompts
67
- export async function promptText({ message, defaultValue, validate, }) {
68
- const result = await text({
69
- message,
70
- placeholder: defaultValue,
71
- validate: validate
72
- ? (value) => {
73
- const validation = validate(value || '');
74
- return validation === true ? undefined : validation.toString();
75
- }
76
- : undefined,
77
- });
78
- if (isCancel(result)) {
79
- cancel('Operation cancelled');
80
- return exitSync(0);
81
- }
82
- return result;
83
- }
84
- export async function promptSelect({ message, options, defaultValue, }) {
85
- // Convert options to the format expected by clack
86
- const clackOptions = options.map((opt) => ({
87
- value: opt.value,
88
- label: opt.label,
89
- hint: opt.hint,
90
- }));
91
- const result = await select({
92
- message,
93
- options: clackOptions,
94
- initialValue: defaultValue,
95
- });
96
- if (isCancel(result)) {
97
- cancel('Operation cancelled');
98
- return exitSync(0);
99
- }
100
- return result;
101
- }
102
- export async function promptMultiSelect({ message, options, required = true, }) {
103
- // Convert options to the format expected by clack
104
- const clackOptions = options.map((opt) => ({
105
- value: opt.value,
106
- label: opt.label,
107
- hint: opt.hint,
108
- }));
109
- const result = await multiselect({
110
- message,
111
- options: clackOptions,
112
- required,
113
- });
114
- if (isCancel(result)) {
115
- cancel('Operation cancelled');
116
- return exitSync(0);
117
- }
118
- return result;
119
- }
120
- export async function promptConfirm({ message, defaultValue = true, cancelMessage = 'Operation cancelled', }) {
121
- const result = await confirm({
122
- message,
123
- initialValue: defaultValue,
124
- });
125
- if (isCancel(result)) {
126
- cancel(cancelMessage);
127
- return exitSync(0);
128
- }
129
- return result;
130
- }
131
- // Warning display functions
132
- export function warnApiKeyInConfig(optionsFilepath) {
133
- logger.warn(`Found ${chalk.cyan('apiKey')} in "${chalk.green(optionsFilepath)}". ` +
134
- chalk.white('Your API key is exposed! Remove it from the file and include it as an environment variable.'));
135
- }
136
- export function warnVariableProp(file, attrName, value) {
137
- logger.warn(`Found ${chalk.green('<T>')} component in ${chalk.cyan(file)} with variable ${attrName}: "${chalk.white(value)}". ` +
138
- `Change "${attrName}" to ensure this content is translated.`);
139
- }
140
- export function warnNoId(file) {
141
- logger.warn(`Found ${chalk.green('<T>')} component in ${chalk.cyan(file)} with no id. ` +
142
- chalk.white('Add an id to ensure the content is translated.'));
143
- }
144
- export function warnHasUnwrappedExpression(file, id, unwrappedExpressions) {
145
- logger.warn(`${chalk.green('<T>')} with id "${id}" in ${chalk.cyan(file)} has children: ${unwrappedExpressions.join(', ')} that could change at runtime. ` +
146
- chalk.white('Use a variable component like ') +
147
- chalk.green('<Var>') +
148
- chalk.white(' (') +
149
- chalk.blue('https://generaltranslation.com/docs') +
150
- chalk.white(') to translate this properly.'));
151
- }
152
- export function warnTemplateLiteral(file, value) {
153
- logger.warn(`Found template literal with quasis (${value}) in ${chalk.cyan(file)}. ` +
154
- chalk.white('Change the template literal to a string to ensure this content is translated.'));
155
- }
156
- export function warnTernary(file) {
157
- logger.warn(`Found ternary expression in ${chalk.cyan(file)}. ` +
158
- chalk.white('A Branch component may be more appropriate here.'));
159
- }
160
- export function warnDeprecatedField(deprecatedField, replacement) {
161
- logger.warn(`${chalk.green(deprecatedField)} is deprecated. ` +
162
- chalk.white(`Use ${chalk.green(replacement)} instead.`));
57
+ function displayProjectId(projectId) {
58
+ logger.message(chalk.dim(`Project ID: ${chalk.bold(projectId)}`), chalk.cyan("~"));
59
+ }
60
+ function displayResolvedPaths(resolvedPaths) {
61
+ const paths = resolvedPaths.map(([key, resolvedPath]) => {
62
+ return chalk.dim(`'${chalk.white(key)}' → '${chalk.green(resolvedPath)}'`);
63
+ });
64
+ logger.step(`Resolved path aliases:\n${paths.join("\n")}`);
65
+ }
66
+ function displayCreatedConfigFile(configFilepath) {
67
+ logger.step(`Created config file ${chalk.cyan(configFilepath)}`);
68
+ }
69
+ function displayUpdatedConfigFile(configFilepath) {
70
+ logger.success(`Updated config file ${chalk.cyan(configFilepath)}`);
71
+ }
72
+ function displayUpdatedVersionsFile(versionFilepath) {
73
+ logger.success(`Updated versions file ${chalk.cyan(versionFilepath)}`);
74
+ }
75
+ async function promptText({ message, defaultValue, validate }) {
76
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptText({
77
+ message,
78
+ defaultValue,
79
+ validate
80
+ })) ?? "";
81
+ const result = await text({
82
+ message,
83
+ placeholder: defaultValue,
84
+ validate: validate ? (value) => {
85
+ const validation = validate(value || "");
86
+ return validation === true ? void 0 : validation.toString();
87
+ } : void 0
88
+ });
89
+ if (isCancel(result)) {
90
+ cancel("Operation cancelled");
91
+ return exitSync(0);
92
+ }
93
+ return result;
94
+ }
95
+ async function promptLocale({ message, defaultValue }) {
96
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptLocale({
97
+ message,
98
+ defaultValue
99
+ })) ?? "";
100
+ return promptText({
101
+ message,
102
+ defaultValue,
103
+ validate: validateLocale
104
+ });
105
+ }
106
+ async function promptLocaleList({ message, defaultValue, required = true }) {
107
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptLocaleMulti({
108
+ message,
109
+ defaultValue,
110
+ required
111
+ })) ?? [];
112
+ return promptText({
113
+ message,
114
+ defaultValue: defaultValue?.join(" "),
115
+ validate: validateLocaleList
116
+ }).then(parseLocaleList);
117
+ }
118
+ async function promptGlobPatterns({ label, message, defaultValue }) {
119
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptGlob({
120
+ label,
121
+ message,
122
+ defaultValue
123
+ })) ?? "";
124
+ return promptText({
125
+ message,
126
+ defaultValue
127
+ });
128
+ }
129
+ async function promptSelect({ message, options, defaultValue }) {
130
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptSelect({
131
+ message,
132
+ options,
133
+ defaultValue
134
+ }));
135
+ const result = await select({
136
+ message,
137
+ options: options.map((opt) => ({
138
+ value: opt.value,
139
+ label: opt.label,
140
+ hint: opt.hint
141
+ })),
142
+ initialValue: defaultValue
143
+ });
144
+ if (isCancel(result)) {
145
+ cancel("Operation cancelled");
146
+ return exitSync(0);
147
+ }
148
+ return result;
149
+ }
150
+ async function promptMultiSelect({ message, options, required = true }) {
151
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptMultiSelect({
152
+ message,
153
+ options,
154
+ required
155
+ })) ?? [];
156
+ const result = await multiselect({
157
+ message,
158
+ options: options.map((opt) => ({
159
+ value: opt.value,
160
+ label: opt.label,
161
+ hint: opt.hint
162
+ })),
163
+ required
164
+ });
165
+ if (isCancel(result)) {
166
+ cancel("Operation cancelled");
167
+ return exitSync(0);
168
+ }
169
+ return result;
170
+ }
171
+ async function promptConfirm({ message, defaultValue = true, cancelMessage = "Operation cancelled" }) {
172
+ if (shouldUseInkPrompts()) return await runInkPrompt((prompts) => prompts.inkPromptConfirm({
173
+ message,
174
+ defaultValue
175
+ }), cancelMessage) ?? defaultValue;
176
+ const result = await confirm({
177
+ message,
178
+ initialValue: defaultValue
179
+ });
180
+ if (isCancel(result)) {
181
+ cancel(cancelMessage);
182
+ return exitSync(0);
183
+ }
184
+ return result;
185
+ }
186
+ function warnApiKeyInConfig(optionsFilepath) {
187
+ logger.warn(`Found ${chalk.cyan("apiKey")} in "${chalk.green(optionsFilepath)}". ` + chalk.white("Your API key is exposed! Remove it from the file and include it as an environment variable."));
188
+ }
189
+ function warnVariableProp(file, attrName, value) {
190
+ logger.warn(`Found ${chalk.green("<T>")} component in ${chalk.cyan(file)} with variable ${attrName}: "${chalk.white(value)}". Change "${attrName}" to ensure this content is translated.`);
191
+ }
192
+ function warnNoId(file) {
193
+ logger.warn(`Found ${chalk.green("<T>")} component in ${chalk.cyan(file)} with no id. ` + chalk.white("Add an id to ensure the content is translated."));
194
+ }
195
+ function warnHasUnwrappedExpression(file, id, unwrappedExpressions) {
196
+ logger.warn(`${chalk.green("<T>")} with id "${id}" in ${chalk.cyan(file)} has children: ${unwrappedExpressions.join(", ")} that could change at runtime. ` + chalk.white("Use a variable component like ") + chalk.green("<Var>") + chalk.white(" (") + chalk.blue("https://generaltranslation.com/docs") + chalk.white(") to translate this properly."));
197
+ }
198
+ function warnTemplateLiteral(file, value) {
199
+ logger.warn(`Found template literal with quasis (${value}) in ${chalk.cyan(file)}. ` + chalk.white("Change the template literal to a string to ensure this content is translated."));
200
+ }
201
+ function warnTernary(file) {
202
+ logger.warn(`Found ternary expression in ${chalk.cyan(file)}. ` + chalk.white("A Branch component may be more appropriate here."));
203
+ }
204
+ function warnDeprecatedField(deprecatedField, replacement) {
205
+ logger.warn(`${chalk.green(deprecatedField)} is deprecated. ` + chalk.white(`Use ${chalk.green(replacement)} instead.`));
163
206
  }
164
207
  /**
165
- * Helper: Log all collected files
166
- */
167
- export function logCollectedFiles(files, reactComponents) {
168
- logger.message(chalk.cyan('Files found in project:') +
169
- '\n' +
170
- files
171
- .map((file) => {
172
- if (file.fileName === TEMPLATE_FILE_NAME) {
173
- return `- <React Elements>${reactComponents ? ` (${reactComponents})` : ''}`;
174
- }
175
- return `- ${file.fileName}`;
176
- })
177
- .join('\n'));
178
- }
208
+ * Helper: Log all collected files
209
+ */
210
+ function logCollectedFiles(files, reactComponents) {
211
+ logger.message(chalk.cyan("Files found in project:") + "\n" + files.map((file) => {
212
+ if (file.fileName === "__INTERNAL_GT_TEMPLATE_NAME__") return `- <React Elements>${reactComponents ? ` (${reactComponents})` : ""}`;
213
+ return `- ${file.fileName}`;
214
+ }).join("\n"));
215
+ }
216
+ //#endregion
217
+ export { displayCreatedConfigFile, displayHeader, displayProjectId, displayResolvedPaths, displayUpdatedConfigFile, displayUpdatedVersionsFile, exitSync, logCollectedFiles, logErrorAndExit, promptConfirm, promptGlobPatterns, promptLocale, promptLocaleList, promptMultiSelect, promptSelect, promptText, stripAnsi, warnApiKeyInConfig, warnDeprecatedField, warnHasUnwrappedExpression, warnNoId, warnTemplateLiteral, warnTernary, warnVariableProp };
218
+
219
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","names":[],"sources":["../../src/console/logging.ts"],"sourcesContent":["import {\n text,\n select,\n confirm,\n isCancel,\n cancel,\n multiselect,\n} from '@clack/prompts';\nimport type { Option } from '@clack/prompts';\nimport chalk from 'chalk';\nimport { getCLIVersion } from '../utils/packageJson.js';\nimport { logger } from './logger.js';\nimport { TEMPLATE_FILE_NAME } from '../utils/constants.js';\nimport { FileToUpload } from 'generaltranslation/types';\nimport { endTerminalSession, shouldUseInkPrompts } from './terminalSession.js';\nimport {\n parseLocaleList,\n validateLocale,\n validateLocaleList,\n} from './promptParsing.js';\n\nfunction cancelPromptAndExit(message: string): never {\n endTerminalSession();\n cancel(message);\n return exitSync(0);\n}\n\nasync function loadInkPrompts() {\n return import('./inkPrompts.js');\n}\n\nasync function runInkPrompt<T>(\n prompt: (prompts: Awaited<ReturnType<typeof loadInkPrompts>>) => Promise<{\n value?: T;\n cancelled: boolean;\n }>,\n cancelMessage = 'Operation cancelled'\n) {\n const result = await prompt(await loadInkPrompts());\n if (result.cancelled) {\n return cancelPromptAndExit(cancelMessage);\n }\n return result.value;\n}\n\n/**\n * Strip ANSI escape codes from a string (e.g., chalk color codes)\n */\nexport function stripAnsi(str: string): string {\n // eslint-disable-next-line no-control-regex, no-useless-escape\n return str.replace(/\\x1B\\[[0-9;]*m/g, '');\n}\n\nexport function logErrorAndExit(message: string): never {\n logger.error(message);\n return exitSync(1);\n}\n\nexport function exitSync(code: number): never {\n // Flush logs before exit\n logger.flush();\n process.exit(code);\n}\n\n// GT specific logging\nexport function displayHeader(introString?: string) {\n displayAsciiTitle();\n displayInitializingText();\n\n if (introString) {\n logger.startCommand(introString);\n }\n}\n\nfunction displayAsciiTitle() {\n // eslint-disable-next-line no-console\n console.log(\n chalk.cyan(\n `\\n ,ad8888ba, 888888888888 \n d8\"' \\`\"8b 88 \nd8' 88 \n88 88 \n88 88888 88 \nY8, 88 88 \n Y8a. .a88 88 \n \\`\"Y88888P\" 88 `\n )\n );\n}\n\nfunction displayInitializingText() {\n const version = getCLIVersion();\n // eslint-disable-next-line no-console\n console.log(\n `\\n${chalk.bold.blue('General Translation, Inc.')}\n${chalk.dim('https://generaltranslation.com/docs')}\n${chalk.dim(`CLI Version: ${version}\\n`)}`\n );\n}\n\nexport function displayProjectId(projectId: string) {\n logger.message(\n chalk.dim(`Project ID: ${chalk.bold(projectId)}`),\n chalk.cyan('~')\n );\n}\n\nexport function displayResolvedPaths(resolvedPaths: [string, string][]) {\n const paths = resolvedPaths.map(([key, resolvedPath]) => {\n return chalk.dim(`'${chalk.white(key)}' → '${chalk.green(resolvedPath)}'`);\n });\n logger.step(`Resolved path aliases:\\n${paths.join('\\n')}`);\n}\n\nexport function displayCreatedConfigFile(configFilepath: string) {\n logger.step(`Created config file ${chalk.cyan(configFilepath)}`);\n}\n\nexport function displayUpdatedConfigFile(configFilepath: string) {\n logger.success(`Updated config file ${chalk.cyan(configFilepath)}`);\n}\n\nexport function displayUpdatedVersionsFile(versionFilepath: string) {\n logger.success(`Updated versions file ${chalk.cyan(versionFilepath)}`);\n}\n\n// Input prompts\nexport async function promptText({\n message,\n defaultValue,\n validate,\n}: {\n message: string;\n defaultValue?: string;\n validate?: (value: string) => boolean | string;\n}) {\n if (shouldUseInkPrompts()) {\n return (\n (await runInkPrompt<string>((prompts) =>\n prompts.inkPromptText({ message, defaultValue, validate })\n )) ?? ''\n );\n }\n\n const result = await text({\n message,\n placeholder: defaultValue,\n validate: validate\n ? (value) => {\n const validation = validate(value || '');\n return validation === true ? undefined : validation.toString();\n }\n : undefined,\n });\n\n if (isCancel(result)) {\n cancel('Operation cancelled');\n return exitSync(0);\n }\n\n return result;\n}\n\nexport async function promptLocale({\n message,\n defaultValue,\n}: {\n message: string;\n defaultValue?: string;\n}) {\n if (shouldUseInkPrompts()) {\n return (\n (await runInkPrompt<string>((prompts) =>\n prompts.inkPromptLocale({ message, defaultValue })\n )) ?? ''\n );\n }\n\n return promptText({\n message,\n defaultValue,\n validate: validateLocale,\n });\n}\n\nexport async function promptLocaleList({\n message,\n defaultValue,\n required = true,\n}: {\n message: string;\n defaultValue?: string[];\n required?: boolean;\n}) {\n if (shouldUseInkPrompts()) {\n return (\n (await runInkPrompt<string[]>((prompts) =>\n prompts.inkPromptLocaleMulti({\n message,\n defaultValue,\n required,\n })\n )) ?? []\n );\n }\n\n return promptText({\n message,\n defaultValue: defaultValue?.join(' '),\n validate: validateLocaleList,\n }).then(parseLocaleList);\n}\n\nexport async function promptGlobPatterns({\n label,\n message,\n defaultValue,\n}: {\n label: string;\n message: string;\n defaultValue?: string;\n}) {\n if (shouldUseInkPrompts()) {\n return (\n (await runInkPrompt<string>((prompts) =>\n prompts.inkPromptGlob({ label, message, defaultValue })\n )) ?? ''\n );\n }\n\n return promptText({\n message,\n defaultValue,\n });\n}\n\nexport async function promptSelect<T>({\n message,\n options,\n defaultValue,\n}: {\n message: string;\n options: Array<{ value: T; label: string; hint?: string }>;\n defaultValue?: T;\n}) {\n if (shouldUseInkPrompts()) {\n return (await runInkPrompt<T>((prompts) =>\n prompts.inkPromptSelect({ message, options, defaultValue })\n )) as T;\n }\n\n // Convert options to the format expected by clack\n const clackOptions = options.map((opt) => ({\n value: opt.value,\n label: opt.label,\n hint: opt.hint,\n })) as Option<T>[];\n\n const result = await select({\n message,\n options: clackOptions,\n initialValue: defaultValue,\n });\n\n if (isCancel(result)) {\n cancel('Operation cancelled');\n return exitSync(0);\n }\n\n return result as T;\n}\n\nexport async function promptMultiSelect<T extends string>({\n message,\n options,\n required = true,\n}: {\n message: string;\n options: Array<{ value: T; label: string; hint?: string }>;\n required?: boolean;\n}) {\n if (shouldUseInkPrompts()) {\n return (\n (await runInkPrompt<Array<T>>((prompts) =>\n prompts.inkPromptMultiSelect({\n message,\n options,\n required,\n })\n )) ?? []\n );\n }\n\n // Convert options to the format expected by clack\n const clackOptions = options.map((opt) => ({\n value: opt.value,\n label: opt.label,\n hint: opt.hint,\n })) as Option<T>[];\n\n const result = await multiselect({\n message,\n options: clackOptions,\n required,\n });\n\n if (isCancel(result)) {\n cancel('Operation cancelled');\n return exitSync(0);\n }\n\n return result as Array<T>;\n}\n\nexport async function promptConfirm({\n message,\n defaultValue = true,\n cancelMessage = 'Operation cancelled',\n}: {\n message: string;\n defaultValue?: boolean;\n cancelMessage?: string;\n}) {\n if (shouldUseInkPrompts()) {\n return (\n (await runInkPrompt<boolean>(\n (prompts) => prompts.inkPromptConfirm({ message, defaultValue }),\n cancelMessage\n )) ?? defaultValue\n );\n }\n\n const result = await confirm({\n message,\n initialValue: defaultValue,\n });\n\n if (isCancel(result)) {\n cancel(cancelMessage);\n return exitSync(0);\n }\n\n return result;\n}\n\n// Warning display functions\nexport function warnApiKeyInConfig(optionsFilepath: string) {\n logger.warn(\n `Found ${chalk.cyan('apiKey')} in \"${chalk.green(optionsFilepath)}\". ` +\n chalk.white(\n 'Your API key is exposed! Remove it from the file and include it as an environment variable.'\n )\n );\n}\n\nexport function warnVariableProp(\n file: string,\n attrName: string,\n value: string\n) {\n logger.warn(\n `Found ${chalk.green('<T>')} component in ${chalk.cyan(file)} with variable ${attrName}: \"${chalk.white(value)}\". ` +\n `Change \"${attrName}\" to ensure this content is translated.`\n );\n}\n\nexport function warnNoId(file: string) {\n logger.warn(\n `Found ${chalk.green('<T>')} component in ${chalk.cyan(file)} with no id. ` +\n chalk.white('Add an id to ensure the content is translated.')\n );\n}\n\nexport function warnHasUnwrappedExpression(\n file: string,\n id: string,\n unwrappedExpressions: string[]\n) {\n logger.warn(\n `${chalk.green('<T>')} with id \"${id}\" in ${chalk.cyan(file)} has children: ${unwrappedExpressions.join(', ')} that could change at runtime. ` +\n chalk.white('Use a variable component like ') +\n chalk.green('<Var>') +\n chalk.white(' (') +\n chalk.blue('https://generaltranslation.com/docs') +\n chalk.white(') to translate this properly.')\n );\n}\n\nexport function warnTemplateLiteral(file: string, value: string) {\n logger.warn(\n `Found template literal with quasis (${value}) in ${chalk.cyan(file)}. ` +\n chalk.white(\n 'Change the template literal to a string to ensure this content is translated.'\n )\n );\n}\n\nexport function warnTernary(file: string) {\n logger.warn(\n `Found ternary expression in ${chalk.cyan(file)}. ` +\n chalk.white('A Branch component may be more appropriate here.')\n );\n}\n\nexport function warnDeprecatedField(\n deprecatedField: string,\n replacement: string\n) {\n logger.warn(\n `${chalk.green(deprecatedField)} is deprecated. ` +\n chalk.white(`Use ${chalk.green(replacement)} instead.`)\n );\n}\n\n/**\n * Helper: Log all collected files\n */\nexport function logCollectedFiles(\n files: Pick<FileToUpload, 'fileName'>[],\n reactComponents?: number\n): void {\n logger.message(\n chalk.cyan('Files found in project:') +\n '\\n' +\n files\n .map((file) => {\n if (file.fileName === TEMPLATE_FILE_NAME) {\n return `- <React Elements>${reactComponents ? ` (${reactComponents})` : ''}`;\n }\n return `- ${file.fileName}`;\n })\n .join('\\n')\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function validateLocale(value: string): true | "Enter a valid locale (e.g., en)";
2
+ export declare function parseTypedLocale(value: string): string | null;
3
+ export declare function parseLocaleList(value: string): string[];
4
+ export declare function validateLocaleList(value: string): true | "Enter at least one locale" | "Enter a valid locale (e.g., es fr de)";
5
+ export declare function parseGlobPatterns(value: string): string[];
@@ -0,0 +1,28 @@
1
+ import { gt } from "../utils/gt.js";
2
+ //#region src/console/promptParsing.ts
3
+ function validateLocale(value) {
4
+ const locale = value.trim();
5
+ if (!locale) return "Enter a valid locale (e.g., en)";
6
+ return gt.isValidLocale(locale) || "Enter a valid locale (e.g., en)";
7
+ }
8
+ function parseTypedLocale(value) {
9
+ const locale = value.trim();
10
+ if (!locale) return null;
11
+ return validateLocale(locale) === true ? locale : null;
12
+ }
13
+ function parseLocaleList(value) {
14
+ return value.trim().split(/\s+/).filter(Boolean);
15
+ }
16
+ function validateLocaleList(value) {
17
+ const locales = parseLocaleList(value);
18
+ if (locales.length === 0) return "Enter at least one locale";
19
+ for (const locale of locales) if (!gt.isValidLocale(locale)) return "Enter a valid locale (e.g., es fr de)";
20
+ return true;
21
+ }
22
+ function parseGlobPatterns(value) {
23
+ return value.split(/\s+/).map((path) => path.trim()).filter(Boolean);
24
+ }
25
+ //#endregion
26
+ export { parseGlobPatterns, parseLocaleList, parseTypedLocale, validateLocale, validateLocaleList };
27
+
28
+ //# sourceMappingURL=promptParsing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promptParsing.js","names":[],"sources":["../../src/console/promptParsing.ts"],"sourcesContent":["import { gt } from '../utils/gt.js';\n\nexport function validateLocale(value: string) {\n const locale = value.trim();\n if (!locale) return 'Enter a valid locale (e.g., en)';\n return gt.isValidLocale(locale) || 'Enter a valid locale (e.g., en)';\n}\n\nexport function parseTypedLocale(value: string) {\n const locale = value.trim();\n if (!locale) return null;\n return validateLocale(locale) === true ? locale : null;\n}\n\nexport function parseLocaleList(value: string) {\n return value.trim().split(/\\s+/).filter(Boolean);\n}\n\nexport function validateLocaleList(value: string) {\n const locales = parseLocaleList(value);\n if (locales.length === 0) {\n return 'Enter at least one locale';\n }\n for (const locale of locales) {\n if (!gt.isValidLocale(locale)) {\n return 'Enter a valid locale (e.g., es fr de)';\n }\n }\n return true;\n}\n\nexport function parseGlobPatterns(value: string) {\n return value\n .split(/\\s+/)\n .map((path) => path.trim())\n .filter(Boolean);\n}\n"],"mappings":";;AAEA,SAAgB,eAAe,OAAe;CAC5C,MAAM,SAAS,MAAM,MAAM;AAC3B,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO,GAAG,cAAc,OAAO,IAAI;;AAGrC,SAAgB,iBAAiB,OAAe;CAC9C,MAAM,SAAS,MAAM,MAAM;AAC3B,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO,eAAe,OAAO,KAAK,OAAO,SAAS;;AAGpD,SAAgB,gBAAgB,OAAe;AAC7C,QAAO,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,OAAO,QAAQ;;AAGlD,SAAgB,mBAAmB,OAAe;CAChD,MAAM,UAAU,gBAAgB,MAAM;AACtC,KAAI,QAAQ,WAAW,EACrB,QAAO;AAET,MAAK,MAAM,UAAU,QACnB,KAAI,CAAC,GAAG,cAAc,OAAO,CAC3B,QAAO;AAGX,QAAO;;AAGT,SAAgB,kBAAkB,OAAe;AAC/C,QAAO,MACJ,MAAM,MAAM,CACZ,KAAK,SAAS,KAAK,MAAM,CAAC,CAC1B,OAAO,QAAQ"}
@@ -0,0 +1,5 @@
1
+ type Cleanup = () => void;
2
+ export declare function registerTerminalSessionCleanup(cleanup: Cleanup): () => void;
3
+ export declare function endTerminalSession(): void;
4
+ export declare function shouldUseInkPrompts(): boolean;
5
+ export {};
@@ -0,0 +1,38 @@
1
+ //#region src/console/terminalSession.ts
2
+ let activeCleanup;
3
+ let processCleanupRegistered = false;
4
+ function registerProcessCleanup() {
5
+ if (processCleanupRegistered) return;
6
+ processCleanupRegistered = true;
7
+ process.on("exit", () => {
8
+ endTerminalSession();
9
+ });
10
+ process.on("SIGINT", () => {
11
+ endTerminalSession();
12
+ process.exit(130);
13
+ });
14
+ process.on("SIGTERM", () => {
15
+ endTerminalSession();
16
+ process.exit(143);
17
+ });
18
+ }
19
+ function registerTerminalSessionCleanup(cleanup) {
20
+ registerProcessCleanup();
21
+ activeCleanup = cleanup;
22
+ return () => {
23
+ if (activeCleanup === cleanup) activeCleanup = void 0;
24
+ };
25
+ }
26
+ function endTerminalSession() {
27
+ const cleanup = activeCleanup;
28
+ if (!cleanup) return;
29
+ activeCleanup = void 0;
30
+ cleanup();
31
+ }
32
+ function shouldUseInkPrompts() {
33
+ return process.env.GT_INK !== "0" && process.stdin.isTTY === true && process.stdout.isTTY === true;
34
+ }
35
+ //#endregion
36
+ export { endTerminalSession, registerTerminalSessionCleanup, shouldUseInkPrompts };
37
+
38
+ //# sourceMappingURL=terminalSession.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminalSession.js","names":[],"sources":["../../src/console/terminalSession.ts"],"sourcesContent":["type Cleanup = () => void;\n\nlet activeCleanup: Cleanup | undefined;\nlet processCleanupRegistered = false;\n\nfunction registerProcessCleanup() {\n if (processCleanupRegistered) return;\n processCleanupRegistered = true;\n\n process.on('exit', () => {\n endTerminalSession();\n });\n process.on('SIGINT', () => {\n endTerminalSession();\n process.exit(130);\n });\n process.on('SIGTERM', () => {\n endTerminalSession();\n process.exit(143);\n });\n}\n\nexport function registerTerminalSessionCleanup(cleanup: Cleanup) {\n registerProcessCleanup();\n activeCleanup = cleanup;\n\n return () => {\n if (activeCleanup === cleanup) {\n activeCleanup = undefined;\n }\n };\n}\n\nexport function endTerminalSession() {\n const cleanup = activeCleanup;\n if (!cleanup) return;\n activeCleanup = undefined;\n cleanup();\n}\n\nexport function shouldUseInkPrompts() {\n return (\n process.env.GT_INK !== '0' &&\n process.stdin.isTTY === true &&\n process.stdout.isTTY === true\n );\n}\n"],"mappings":";AAEA,IAAI;AACJ,IAAI,2BAA2B;AAE/B,SAAS,yBAAyB;AAChC,KAAI,yBAA0B;AAC9B,4BAA2B;AAE3B,SAAQ,GAAG,cAAc;AACvB,sBAAoB;GACpB;AACF,SAAQ,GAAG,gBAAgB;AACzB,sBAAoB;AACpB,UAAQ,KAAK,IAAI;GACjB;AACF,SAAQ,GAAG,iBAAiB;AAC1B,sBAAoB;AACpB,UAAQ,KAAK,IAAI;GACjB;;AAGJ,SAAgB,+BAA+B,SAAkB;AAC/D,yBAAwB;AACxB,iBAAgB;AAEhB,cAAa;AACX,MAAI,kBAAkB,QACpB,iBAAgB,KAAA;;;AAKtB,SAAgB,qBAAqB;CACnC,MAAM,UAAU;AAChB,KAAI,CAAC,QAAS;AACd,iBAAgB,KAAA;AAChB,UAAS;;AAGX,SAAgB,sBAAsB;AACpC,QACE,QAAQ,IAAI,WAAW,OACvB,QAAQ,MAAM,UAAU,QACxB,QAAQ,OAAO,UAAU"}
@@ -1,2 +1,3 @@
1
- export { mapExtractionResultsToUpdates } from './mapToUpdates.js';
2
- export { calculateHashes, dedupeUpdates, linkDeriveUpdates, } from './postProcess.js';
1
+ import { calculateHashes, dedupeUpdates, linkDeriveUpdates } from "./postProcess.js";
2
+ import { mapExtractionResultsToUpdates } from "./mapToUpdates.js";
3
+ export { calculateHashes, dedupeUpdates, linkDeriveUpdates, mapExtractionResultsToUpdates };
@@ -1,20 +1,21 @@
1
+ //#region src/extraction/mapToUpdates.ts
1
2
  /**
2
- * Maps ExtractionResult[] to Updates[] format used by the CLI pipeline
3
- */
4
- export function mapExtractionResultsToUpdates(results) {
5
- return results.map((result) => ({
6
- dataFormat: result.dataFormat,
7
- source: result.source,
8
- metadata: {
9
- ...(result.metadata.id && { id: result.metadata.id }),
10
- ...(result.metadata.context && { context: result.metadata.context }),
11
- ...(result.metadata.maxChars != null && {
12
- maxChars: result.metadata.maxChars,
13
- }),
14
- ...(result.metadata.filePaths && {
15
- filePaths: result.metadata.filePaths,
16
- }),
17
- ...(result.metadata.staticId && { staticId: result.metadata.staticId }),
18
- },
19
- }));
3
+ * Maps ExtractionResult[] to Updates[] format used by the CLI pipeline
4
+ */
5
+ function mapExtractionResultsToUpdates(results) {
6
+ return results.map((result) => ({
7
+ dataFormat: result.dataFormat,
8
+ source: result.source,
9
+ metadata: {
10
+ ...result.metadata.id && { id: result.metadata.id },
11
+ ...result.metadata.context && { context: result.metadata.context },
12
+ ...result.metadata.maxChars != null && { maxChars: result.metadata.maxChars },
13
+ ...result.metadata.filePaths && { filePaths: result.metadata.filePaths },
14
+ ...result.metadata.staticId && { staticId: result.metadata.staticId }
15
+ }
16
+ }));
20
17
  }
18
+ //#endregion
19
+ export { mapExtractionResultsToUpdates };
20
+
21
+ //# sourceMappingURL=mapToUpdates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapToUpdates.js","names":[],"sources":["../../src/extraction/mapToUpdates.ts"],"sourcesContent":["import type { ExtractionResult } from '@generaltranslation/python-extractor';\nimport type { Updates } from '../types/index.js';\n\n/**\n * Maps ExtractionResult[] to Updates[] format used by the CLI pipeline\n */\nexport function mapExtractionResultsToUpdates(\n results: ExtractionResult[]\n): Updates {\n return results.map((result) => ({\n dataFormat: result.dataFormat,\n source: result.source,\n metadata: {\n ...(result.metadata.id && { id: result.metadata.id }),\n ...(result.metadata.context && { context: result.metadata.context }),\n ...(result.metadata.maxChars != null && {\n maxChars: result.metadata.maxChars,\n }),\n ...(result.metadata.filePaths && {\n filePaths: result.metadata.filePaths,\n }),\n ...(result.metadata.staticId && { staticId: result.metadata.staticId }),\n },\n }));\n}\n"],"mappings":";;;;AAMA,SAAgB,8BACd,SACS;AACT,QAAO,QAAQ,KAAK,YAAY;EAC9B,YAAY,OAAO;EACnB,QAAQ,OAAO;EACf,UAAU;GACR,GAAI,OAAO,SAAS,MAAM,EAAE,IAAI,OAAO,SAAS,IAAI;GACpD,GAAI,OAAO,SAAS,WAAW,EAAE,SAAS,OAAO,SAAS,SAAS;GACnE,GAAI,OAAO,SAAS,YAAY,QAAQ,EACtC,UAAU,OAAO,SAAS,UAC3B;GACD,GAAI,OAAO,SAAS,aAAa,EAC/B,WAAW,OAAO,SAAS,WAC5B;GACD,GAAI,OAAO,SAAS,YAAY,EAAE,UAAU,OAAO,SAAS,UAAU;GACvE;EACF,EAAE"}