gt 0.10.0 → 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 (531) hide show
  1. package/CHANGELOG.md +1275 -0
  2. package/LICENSE.md +105 -0
  3. package/README.md +26 -198
  4. package/dist/api/collectUserEditDiffs.d.ts +9 -0
  5. package/dist/api/collectUserEditDiffs.js +159 -0
  6. package/dist/api/downloadFileBatch.d.ts +23 -0
  7. package/dist/api/downloadFileBatch.js +190 -0
  8. package/dist/api/saveLocalEdits.d.ts +6 -0
  9. package/dist/api/saveLocalEdits.js +38 -0
  10. package/dist/bin/bin-entry.d.ts +1 -0
  11. package/dist/bin/bin-entry.js +9 -0
  12. package/dist/bin/bin-main.d.ts +2 -0
  13. package/dist/bin/bin-main.js +67 -0
  14. package/dist/cli/base.d.ts +59 -0
  15. package/dist/cli/base.js +529 -0
  16. package/dist/cli/commands/download.d.ts +8 -0
  17. package/dist/cli/commands/download.js +51 -0
  18. package/dist/cli/commands/enqueue.d.ts +9 -0
  19. package/dist/cli/commands/enqueue.js +27 -0
  20. package/dist/cli/commands/setupProject.d.ts +7 -0
  21. package/dist/cli/commands/setupProject.js +37 -0
  22. package/dist/cli/commands/stage.d.ts +9 -0
  23. package/dist/cli/commands/stage.js +59 -0
  24. package/dist/cli/commands/translate.d.ts +7 -0
  25. package/dist/cli/commands/translate.js +70 -0
  26. package/dist/cli/commands/upload.d.ts +13 -0
  27. package/dist/cli/commands/upload.js +142 -0
  28. package/dist/cli/commands/utils/validation.d.ts +13 -0
  29. package/dist/cli/commands/utils/validation.js +38 -0
  30. package/dist/cli/flags.d.ts +15 -0
  31. package/dist/cli/flags.js +70 -0
  32. package/dist/cli/inline.d.ts +17 -0
  33. package/dist/cli/inline.js +135 -0
  34. package/dist/cli/next.d.ts +10 -0
  35. package/dist/cli/next.js +12 -0
  36. package/dist/cli/node.d.ts +10 -0
  37. package/dist/cli/node.js +9 -0
  38. package/dist/cli/react.d.ts +12 -0
  39. package/dist/cli/react.js +72 -0
  40. package/dist/config/generateSettings.d.ts +9 -0
  41. package/dist/config/generateSettings.js +214 -0
  42. package/dist/config/optionPresets.d.ts +3 -0
  43. package/dist/config/optionPresets.js +65 -0
  44. package/dist/config/resolveConfig.d.ts +4 -0
  45. package/dist/config/resolveConfig.js +33 -0
  46. package/dist/config/utils.d.ts +2 -0
  47. package/dist/config/utils.js +4 -0
  48. package/dist/config/validateSettings.d.ts +3 -0
  49. package/dist/config/validateSettings.js +32 -0
  50. package/dist/console/colors.d.ts +6 -0
  51. package/dist/console/colors.js +19 -0
  52. package/dist/console/displayTranslateSummary.d.ts +1 -0
  53. package/dist/console/displayTranslateSummary.js +42 -0
  54. package/dist/console/formatting.d.ts +1 -0
  55. package/dist/console/formatting.js +7 -0
  56. package/dist/console/index.d.ts +34 -0
  57. package/dist/console/index.js +46 -0
  58. package/dist/console/logger.d.ts +35 -0
  59. package/dist/console/logger.js +250 -0
  60. package/dist/console/logging.d.ts +52 -0
  61. package/dist/console/logging.js +175 -0
  62. package/dist/formats/files/aggregateFiles.d.ts +4 -0
  63. package/dist/formats/files/aggregateFiles.js +156 -0
  64. package/dist/formats/files/collectFiles.d.ts +6 -0
  65. package/dist/formats/files/collectFiles.js +49 -0
  66. package/dist/formats/files/convertToFileTranslationData.d.ts +15 -0
  67. package/dist/formats/files/convertToFileTranslationData.js +21 -0
  68. package/dist/formats/files/fileMapping.d.ts +11 -0
  69. package/dist/formats/files/fileMapping.js +115 -0
  70. package/dist/formats/files/preprocess/mdx.d.ts +6 -0
  71. package/dist/formats/files/preprocess/mdx.js +14 -0
  72. package/dist/formats/files/preprocess/mintlify.d.ts +5 -0
  73. package/dist/formats/files/preprocess/mintlify.js +15 -0
  74. package/dist/formats/files/preprocessContent.d.ts +8 -0
  75. package/dist/formats/files/preprocessContent.js +23 -0
  76. package/dist/formats/files/save.d.ts +5 -0
  77. package/dist/formats/files/save.js +17 -0
  78. package/dist/formats/files/supportedFiles.d.ts +11 -0
  79. package/dist/formats/files/supportedFiles.js +20 -0
  80. package/dist/formats/json/extractJson.d.ts +15 -0
  81. package/dist/formats/json/extractJson.js +101 -0
  82. package/dist/formats/json/flattenJson.d.ts +14 -0
  83. package/dist/formats/json/flattenJson.js +64 -0
  84. package/dist/formats/json/mergeJson.d.ts +13 -0
  85. package/dist/formats/json/mergeJson.js +367 -0
  86. package/dist/formats/json/parseJson.d.ts +2 -0
  87. package/dist/formats/json/parseJson.js +109 -0
  88. package/dist/formats/json/utils.d.ts +47 -0
  89. package/dist/formats/json/utils.js +150 -0
  90. package/dist/formats/utils.d.ts +2 -0
  91. package/dist/formats/utils.js +24 -0
  92. package/dist/formats/yaml/mergeYaml.d.ts +5 -0
  93. package/dist/formats/yaml/mergeYaml.js +61 -0
  94. package/dist/formats/yaml/parseYaml.d.ts +5 -0
  95. package/dist/formats/yaml/parseYaml.js +24 -0
  96. package/dist/formats/yaml/utils.d.ts +2 -0
  97. package/dist/formats/yaml/utils.js +23 -0
  98. package/dist/fs/clearLocaleDirs.d.ts +8 -0
  99. package/dist/fs/clearLocaleDirs.js +126 -0
  100. package/dist/fs/config/downloadedVersions.d.ts +21 -0
  101. package/dist/fs/config/downloadedVersions.js +50 -0
  102. package/dist/fs/config/loadConfig.d.ts +1 -0
  103. package/dist/fs/config/loadConfig.js +9 -0
  104. package/dist/fs/config/parseFilesConfig.d.ts +27 -0
  105. package/dist/fs/config/parseFilesConfig.js +150 -0
  106. package/dist/fs/config/setupConfig.d.ts +17 -0
  107. package/dist/fs/config/setupConfig.js +50 -0
  108. package/dist/fs/config/updateConfig.d.ts +21 -0
  109. package/dist/fs/config/updateConfig.js +57 -0
  110. package/dist/fs/config/updateVersions.d.ts +11 -0
  111. package/dist/fs/config/updateVersions.js +30 -0
  112. package/dist/fs/copyFile.d.ts +7 -0
  113. package/dist/fs/copyFile.js +39 -0
  114. package/dist/fs/createLoadTranslationsFile.d.ts +1 -0
  115. package/dist/fs/createLoadTranslationsFile.js +49 -0
  116. package/dist/fs/determineFramework.d.ts +5 -0
  117. package/dist/fs/determineFramework.js +53 -0
  118. package/dist/fs/findFilepath.d.ts +36 -0
  119. package/dist/fs/findFilepath.js +90 -0
  120. package/dist/fs/index.d.ts +1 -0
  121. package/dist/fs/index.js +1 -0
  122. package/dist/fs/loadJSON.d.ts +6 -0
  123. package/dist/fs/loadJSON.js +17 -0
  124. package/dist/fs/matchFiles.d.ts +1 -0
  125. package/dist/fs/matchFiles.js +8 -0
  126. package/dist/fs/saveJSON.d.ts +1 -0
  127. package/dist/fs/saveJSON.js +7 -0
  128. package/dist/fs/utils.d.ts +1 -0
  129. package/dist/fs/utils.js +16 -0
  130. package/dist/functions.d.ts +7 -0
  131. package/dist/functions.js +6 -0
  132. package/dist/generated/version.d.ts +1 -0
  133. package/dist/generated/version.js +2 -0
  134. package/dist/git/branches.d.ts +7 -0
  135. package/dist/git/branches.js +88 -0
  136. package/dist/hooks/postProcess.d.ts +4 -0
  137. package/dist/hooks/postProcess.js +110 -0
  138. package/dist/index.d.ts +4 -0
  139. package/dist/index.js +27 -0
  140. package/dist/locadex/setupFlow.d.ts +2 -0
  141. package/dist/locadex/setupFlow.js +9 -0
  142. package/dist/main.d.ts +2 -0
  143. package/dist/main.js +10 -0
  144. package/dist/next/config/parseNextConfig.d.ts +10 -0
  145. package/dist/next/config/parseNextConfig.js +53 -0
  146. package/dist/next/jsx/utils.d.ts +7 -0
  147. package/dist/next/jsx/utils.js +42 -0
  148. package/dist/next/parse/handleInitGT.d.ts +7 -0
  149. package/dist/next/parse/handleInitGT.js +157 -0
  150. package/dist/next/parse/wrapContent.d.ts +12 -0
  151. package/dist/next/parse/wrapContent.js +164 -0
  152. package/dist/react/config/createESBuildConfig.d.ts +2 -0
  153. package/dist/react/config/createESBuildConfig.js +119 -0
  154. package/dist/react/jsx/evaluateJsx.d.ts +24 -0
  155. package/dist/react/jsx/evaluateJsx.js +123 -0
  156. package/dist/react/jsx/utils/buildImportMap.d.ts +9 -0
  157. package/dist/react/jsx/utils/buildImportMap.js +30 -0
  158. package/dist/react/jsx/utils/constants.d.ts +15 -0
  159. package/dist/react/jsx/utils/constants.js +49 -0
  160. package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +9 -0
  161. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +32 -0
  162. package/dist/react/jsx/utils/getPathsAndAliases.d.ts +21 -0
  163. package/dist/react/jsx/utils/getPathsAndAliases.js +91 -0
  164. package/dist/react/jsx/utils/isNumberLiteral.d.ts +7 -0
  165. package/dist/react/jsx/utils/isNumberLiteral.js +13 -0
  166. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +9 -0
  167. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +138 -0
  168. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +6 -0
  169. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +197 -0
  170. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +13 -0
  171. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +42 -0
  172. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +5 -0
  173. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +69 -0
  174. package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +33 -0
  175. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +918 -0
  176. package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +8 -0
  177. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +65 -0
  178. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +2 -0
  179. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +61 -0
  180. package/dist/react/jsx/utils/jsxParsing/types.d.ts +48 -0
  181. package/dist/react/jsx/utils/jsxParsing/types.js +34 -0
  182. package/dist/react/jsx/utils/mapAttributeName.d.ts +11 -0
  183. package/dist/react/jsx/utils/mapAttributeName.js +12 -0
  184. package/dist/react/jsx/utils/parseAst.d.ts +31 -0
  185. package/dist/react/jsx/utils/parseAst.js +278 -0
  186. package/dist/react/jsx/utils/parseDeclareStatic.d.ts +15 -0
  187. package/dist/react/jsx/utils/parseDeclareStatic.js +540 -0
  188. package/dist/react/jsx/utils/parseString.d.ts +25 -0
  189. package/dist/react/jsx/utils/parseString.js +540 -0
  190. package/dist/react/jsx/utils/parseStringFunction.d.ts +30 -0
  191. package/dist/react/jsx/utils/parseStringFunction.js +348 -0
  192. package/dist/react/jsx/utils/resolveImportPath.d.ts +11 -0
  193. package/dist/react/jsx/utils/resolveImportPath.js +111 -0
  194. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +29 -0
  195. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +86 -0
  196. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +14 -0
  197. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +24 -0
  198. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +19 -0
  199. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +31 -0
  200. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +22 -0
  201. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +51 -0
  202. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +18 -0
  203. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +39 -0
  204. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +24 -0
  205. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +68 -0
  206. package/dist/react/jsx/utils/stringParsing/types.d.ts +41 -0
  207. package/dist/react/jsx/utils/stringParsing/types.js +1 -0
  208. package/dist/react/jsx/utils/types.d.ts +14 -0
  209. package/dist/react/jsx/utils/types.js +1 -0
  210. package/dist/react/jsx/utils/validateStringFunction.d.ts +7 -0
  211. package/dist/react/jsx/utils/validateStringFunction.js +31 -0
  212. package/dist/react/jsx/wrapJsx.d.ts +51 -0
  213. package/dist/react/jsx/wrapJsx.js +387 -0
  214. package/dist/react/parse/addVitePlugin/index.d.ts +22 -0
  215. package/dist/react/parse/addVitePlugin/index.js +41 -0
  216. package/dist/react/parse/addVitePlugin/installCompiler.d.ts +8 -0
  217. package/dist/react/parse/addVitePlugin/installCompiler.js +22 -0
  218. package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +19 -0
  219. package/dist/react/parse/addVitePlugin/updateViteConfig.js +120 -0
  220. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +9 -0
  221. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +34 -0
  222. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +11 -0
  223. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +48 -0
  224. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +15 -0
  225. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +113 -0
  226. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +12 -0
  227. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +32 -0
  228. package/dist/react/parse/createDictionaryUpdates.d.ts +3 -0
  229. package/dist/react/parse/createDictionaryUpdates.js +187 -0
  230. package/dist/react/parse/createInlineUpdates.d.ts +13 -0
  231. package/dist/react/parse/createInlineUpdates.js +161 -0
  232. package/dist/react/parse/wrapContent.d.ts +12 -0
  233. package/dist/react/parse/wrapContent.js +162 -0
  234. package/dist/react/utils/flattenDictionary.d.ts +20 -0
  235. package/dist/react/utils/flattenDictionary.js +75 -0
  236. package/dist/react/utils/getEntryAndMetadata.d.ts +5 -0
  237. package/dist/react/utils/getEntryAndMetadata.js +11 -0
  238. package/dist/react/utils/getVariableName.d.ts +25 -0
  239. package/dist/react/utils/getVariableName.js +37 -0
  240. package/dist/setup/agentInstructions.d.ts +24 -0
  241. package/dist/setup/agentInstructions.js +138 -0
  242. package/dist/setup/detectFramework.d.ts +31 -0
  243. package/dist/setup/detectFramework.js +106 -0
  244. package/dist/setup/frameworkUtils.d.ts +3 -0
  245. package/dist/setup/frameworkUtils.js +30 -0
  246. package/dist/setup/instructions/base.md +29 -0
  247. package/dist/setup/instructions/gt-next.md +107 -0
  248. package/dist/setup/instructions/gt-react.md +98 -0
  249. package/dist/setup/userInput.d.ts +4 -0
  250. package/dist/setup/userInput.js +32 -0
  251. package/dist/setup/wizard.d.ts +3 -0
  252. package/dist/setup/wizard.js +147 -0
  253. package/dist/state/recentDownloads.d.ts +12 -0
  254. package/dist/state/recentDownloads.js +18 -0
  255. package/dist/state/translateWarnings.d.ts +10 -0
  256. package/dist/state/translateWarnings.js +13 -0
  257. package/dist/translation/parse.d.ts +17 -0
  258. package/dist/translation/parse.js +77 -0
  259. package/dist/translation/stage.d.ts +3 -0
  260. package/dist/translation/stage.js +44 -0
  261. package/dist/translation/validate.d.ts +14 -0
  262. package/dist/translation/validate.js +100 -0
  263. package/dist/types/branch.d.ts +14 -0
  264. package/dist/types/branch.js +1 -0
  265. package/dist/types/data/json.d.ts +6 -0
  266. package/dist/types/data/json.js +1 -0
  267. package/dist/types/data.d.ts +37 -0
  268. package/dist/types/data.js +1 -0
  269. package/dist/types/files.d.ts +8 -0
  270. package/dist/types/files.js +1 -0
  271. package/dist/types/index.d.ts +243 -0
  272. package/dist/types/index.js +1 -0
  273. package/dist/types/libraries.d.ts +31 -0
  274. package/dist/types/libraries.js +72 -0
  275. package/dist/types/parsing.d.ts +3 -0
  276. package/dist/types/parsing.js +1 -0
  277. package/dist/utils/addExplicitAnchorIds.d.ts +24 -0
  278. package/dist/utils/addExplicitAnchorIds.js +416 -0
  279. package/dist/utils/constants.d.ts +5 -0
  280. package/dist/utils/constants.js +6 -0
  281. package/dist/utils/credentials.d.ts +12 -0
  282. package/dist/utils/credentials.js +120 -0
  283. package/dist/utils/flattenJsonFiles.d.ts +2 -0
  284. package/dist/utils/flattenJsonFiles.js +36 -0
  285. package/dist/utils/gitDiff.d.ts +8 -0
  286. package/dist/utils/gitDiff.js +34 -0
  287. package/dist/utils/gt.d.ts +2 -0
  288. package/dist/utils/gt.js +2 -0
  289. package/dist/utils/hash.d.ts +6 -0
  290. package/dist/utils/hash.js +11 -0
  291. package/dist/utils/headers.d.ts +1 -0
  292. package/dist/utils/headers.js +14 -0
  293. package/dist/utils/installPackage.d.ts +3 -0
  294. package/dist/utils/installPackage.js +77 -0
  295. package/dist/utils/localizeRelativeAssets.d.ts +8 -0
  296. package/dist/utils/localizeRelativeAssets.js +166 -0
  297. package/dist/utils/localizeStaticImports.d.ts +15 -0
  298. package/dist/utils/localizeStaticImports.js +397 -0
  299. package/dist/utils/localizeStaticUrls.d.ts +19 -0
  300. package/dist/utils/localizeStaticUrls.js +450 -0
  301. package/dist/utils/mintlifyTitleFallback.d.ts +6 -0
  302. package/dist/utils/mintlifyTitleFallback.js +80 -0
  303. package/dist/utils/packageInfo.d.ts +3 -0
  304. package/dist/utils/packageInfo.js +17 -0
  305. package/dist/utils/packageJson.d.ts +6 -0
  306. package/dist/utils/packageJson.js +68 -0
  307. package/dist/utils/packageManager.d.ts +28 -0
  308. package/dist/utils/packageManager.js +269 -0
  309. package/dist/utils/parse/needsCJS.d.ts +20 -0
  310. package/dist/utils/parse/needsCJS.js +72 -0
  311. package/dist/utils/persistPostprocessHashes.d.ts +12 -0
  312. package/dist/utils/persistPostprocessHashes.js +39 -0
  313. package/dist/utils/processAnchorIds.d.ts +6 -0
  314. package/dist/utils/processAnchorIds.js +56 -0
  315. package/dist/utils/processOpenApi.d.ts +8 -0
  316. package/dist/utils/processOpenApi.js +651 -0
  317. package/dist/utils/sanitizeFileContent.d.ts +6 -0
  318. package/dist/utils/sanitizeFileContent.js +29 -0
  319. package/dist/utils/sharedStaticAssets.d.ts +9 -0
  320. package/dist/utils/sharedStaticAssets.js +384 -0
  321. package/dist/utils/validateMdx.d.ts +10 -0
  322. package/dist/utils/validateMdx.js +25 -0
  323. package/dist/utils/wrapPlainUrls.d.ts +8 -0
  324. package/dist/utils/wrapPlainUrls.js +72 -0
  325. package/dist/workflows/download.d.ts +32 -0
  326. package/dist/workflows/download.js +131 -0
  327. package/dist/workflows/enqueue.d.ts +17 -0
  328. package/dist/workflows/enqueue.js +59 -0
  329. package/dist/workflows/setupProject.d.ts +13 -0
  330. package/dist/workflows/setupProject.js +48 -0
  331. package/dist/workflows/stage.d.ts +18 -0
  332. package/dist/workflows/stage.js +59 -0
  333. package/dist/workflows/steps/BranchStep.d.ts +13 -0
  334. package/dist/workflows/steps/BranchStep.js +161 -0
  335. package/dist/workflows/steps/DownloadStep.d.ts +19 -0
  336. package/dist/workflows/steps/DownloadStep.js +131 -0
  337. package/dist/workflows/steps/EnqueueStep.d.ts +15 -0
  338. package/dist/workflows/steps/EnqueueStep.js +33 -0
  339. package/dist/workflows/steps/PollJobsStep.d.ts +31 -0
  340. package/dist/workflows/steps/PollJobsStep.js +288 -0
  341. package/dist/workflows/steps/SetupStep.d.ts +16 -0
  342. package/dist/workflows/steps/SetupStep.js +72 -0
  343. package/dist/workflows/steps/UploadSourcesStep.d.ts +27 -0
  344. package/dist/workflows/steps/UploadSourcesStep.js +131 -0
  345. package/dist/workflows/steps/UploadTranslationsStep.d.ts +22 -0
  346. package/dist/workflows/steps/UploadTranslationsStep.js +71 -0
  347. package/dist/workflows/steps/UserEditDiffsStep.d.ts +11 -0
  348. package/dist/workflows/steps/UserEditDiffsStep.js +30 -0
  349. package/dist/workflows/steps/WorkflowStep.d.ts +4 -0
  350. package/dist/workflows/steps/WorkflowStep.js +2 -0
  351. package/dist/workflows/upload.d.ts +15 -0
  352. package/dist/workflows/upload.js +47 -0
  353. package/package.json +149 -112
  354. package/.dont-break +0 -6
  355. package/.jshintrc +0 -76
  356. package/.npmignore +0 -9
  357. package/.travis.yml +0 -21
  358. package/Gruntfile.js +0 -65
  359. package/History.md +0 -90
  360. package/MIT-License.txt +0 -21
  361. package/bin/gt.js +0 -58
  362. package/complexity.json +0 -17
  363. package/doc/RequireJsExample.md +0 -10
  364. package/examples/all.js +0 -72
  365. package/examples/altAsserrionSyntax/tests.js +0 -32
  366. package/examples/amd/bar.js +0 -4
  367. package/examples/amd/foo.js +0 -15
  368. package/examples/amd/fooTests.js +0 -8
  369. package/examples/arrays/test.js +0 -15
  370. package/examples/assert/test-assert-object.js +0 -15
  371. package/examples/assert/test-assert-require.js +0 -17
  372. package/examples/async/asyncAll.js +0 -37
  373. package/examples/async/asyncSetup.js +0 -29
  374. package/examples/async/asyncSetupOnce.js +0 -25
  375. package/examples/async/asyncTeardown.js +0 -27
  376. package/examples/async/stopStart.js +0 -22
  377. package/examples/async/test.js +0 -43
  378. package/examples/async/timeoutTests.js +0 -19
  379. package/examples/basic/code.js +0 -50
  380. package/examples/basic/code2.js +0 -9
  381. package/examples/basic/default.js +0 -26
  382. package/examples/basic/definedUndefined.js +0 -28
  383. package/examples/basic/empty.js +0 -24
  384. package/examples/basic/exceptionTests.js +0 -55
  385. package/examples/basic/fullMessage.js +0 -28
  386. package/examples/basic/functions.js +0 -18
  387. package/examples/basic/incomplete.js +0 -16
  388. package/examples/basic/null.js +0 -17
  389. package/examples/basic/optional.js +0 -45
  390. package/examples/basic/tests.js +0 -147
  391. package/examples/bdd/spec.js +0 -67
  392. package/examples/browser/code_coverage_report.json +0 -1
  393. package/examples/browser/index.html +0 -50
  394. package/examples/browser/packages.js +0 -12
  395. package/examples/browser/packagesDefault.js +0 -12
  396. package/examples/browser/qunit/qunit-1.10.0.css +0 -235
  397. package/examples/browser/qunit/qunit-1.10.0.js +0 -1977
  398. package/examples/browser/runTestsWithCoverage.bat +0 -19
  399. package/examples/browser/runner.js +0 -178
  400. package/examples/browser/src/Foo.js +0 -14
  401. package/examples/browser/srcInstrumented/Foo.js +0 -6
  402. package/examples/browser/test/FooTest.js +0 -31
  403. package/examples/browser/testDojo.js +0 -63
  404. package/examples/browser/testInstrumented/FooTest.js +0 -6
  405. package/examples/coffee/coffeeTestsCoffee/foo.coffee +0 -4
  406. package/examples/coffee/coffeeTestsCoffee/tests.coffee +0 -7
  407. package/examples/coffee/coffeeTestsJs/foo.js +0 -9
  408. package/examples/coffee/coffeeTestsJs/tests.coffee +0 -9
  409. package/examples/coffee/jsTestsCoffee/foo.coffee +0 -4
  410. package/examples/coffee/jsTestsCoffee/tests.js +0 -8
  411. package/examples/coverage.png +0 -0
  412. package/examples/crash/foo.js +0 -8
  413. package/examples/crashOnLoading/foo.js +0 -3
  414. package/examples/crashStackSize/foo.js +0 -8
  415. package/examples/crashStackSize/test.js +0 -7
  416. package/examples/doh/foo.js +0 -15
  417. package/examples/doh/fooTests.js +0 -28
  418. package/examples/dohDefine/foo.js +0 -14
  419. package/examples/dohDefine/fooTests.js +0 -24
  420. package/examples/dojo/src/Foo.js +0 -12
  421. package/examples/dojo/test/FooTest.js +0 -9
  422. package/examples/dojo/testDojo.js +0 -69
  423. package/examples/equiv/equiv.js +0 -22
  424. package/examples/example.png +0 -0
  425. package/examples/exec/foo.js +0 -5
  426. package/examples/exec/tests.js +0 -50
  427. package/examples/expect/test.js +0 -53
  428. package/examples/extend/extend-through-api.js +0 -40
  429. package/examples/extend/test.js +0 -18
  430. package/examples/faster/fibonacci.js +0 -18
  431. package/examples/faster/test.js +0 -89
  432. package/examples/fluent/foo.js +0 -38
  433. package/examples/funcAndArity/test.js +0 -15
  434. package/examples/gtAndQUnit/gtTests.js +0 -6
  435. package/examples/gtAndQUnit/qunitTests.js +0 -5
  436. package/examples/jsUnity/foo.js +0 -10
  437. package/examples/jsUnity/fooTests.js +0 -19
  438. package/examples/lodash/totalLength.js +0 -19
  439. package/examples/longStrings/test.js +0 -27
  440. package/examples/moduleSetupTeardown/test.js +0 -115
  441. package/examples/namedTest/foo.js +0 -9
  442. package/examples/overrideGt/test.js +0 -11
  443. package/examples/quickFail/test.js +0 -22
  444. package/examples/qunit/foo.js +0 -13
  445. package/examples/reporting/tests.coffee +0 -9
  446. package/examples/requirejs/lib/Foo.js +0 -11
  447. package/examples/requirejs/lib/Rectangle.js +0 -13
  448. package/examples/requirejs/runTests.js +0 -5
  449. package/examples/requirejs/test/RectangleTest.js +0 -22
  450. package/examples/silent/foo.js +0 -7
  451. package/examples/silent/fooTest.js +0 -18
  452. package/examples/skipTest/tests.js +0 -15
  453. package/examples/testsFromOtherTests/parentTests.js +0 -7
  454. package/examples/testsFromOtherTests/tests.js +0 -5
  455. package/examples/throws/test.js +0 -17
  456. package/examples/use-gt-as-module/fooTest.js +0 -8
  457. package/examples/use-gt-as-module/test-code.js +0 -7
  458. package/gt.js +0 -11
  459. package/lib/coverage.js +0 -234
  460. package/src/JUnitReporter.js +0 -30
  461. package/src/QUnitBrowserAdapter.js +0 -15
  462. package/src/Reporter.js +0 -127
  463. package/src/TestRunInfo.js +0 -25
  464. package/src/TestRunner.js +0 -223
  465. package/src/UnitTest/CollectionMethods.js +0 -97
  466. package/src/UnitTest/ModuleTests.js +0 -104
  467. package/src/UnitTest/Test.js +0 -85
  468. package/src/UnitTest/TestAsync.js +0 -78
  469. package/src/UnitTest/TestBaseInfo.js +0 -21
  470. package/src/UnitTest/TestCollection.js +0 -206
  471. package/src/UnitTest/TestInfo.js +0 -30
  472. package/src/UnitTest/TestReport.js +0 -27
  473. package/src/assertions/PrimaryAssertions.js +0 -163
  474. package/src/assertions/SecondaryAssertions.js +0 -262
  475. package/src/assertions/TertiaryAssertions.js +0 -99
  476. package/src/bddInterface.js +0 -39
  477. package/src/covered.js +0 -156
  478. package/src/dohAdapter.js +0 -79
  479. package/src/dohInterface.js +0 -20
  480. package/src/equiv.js +0 -11
  481. package/src/jsunityAdapter.js +0 -66
  482. package/src/jsunityInterface.js +0 -13
  483. package/src/options.js +0 -116
  484. package/src/shiv.js +0 -16
  485. package/src/sure.js +0 -226
  486. package/src/test/ConsoleHider.js +0 -26
  487. package/src/test/JUnitReporter.js +0 -12
  488. package/src/test/ModuleTests.js +0 -37
  489. package/src/test/Test.js +0 -18
  490. package/src/test/TestCollection.js +0 -21
  491. package/src/test/TestRunInfo.js +0 -15
  492. package/src/test/TestRunner.js +0 -9
  493. package/src/test/utils.js +0 -43
  494. package/src/utils/ConsoleHider.js +0 -27
  495. package/src/utils/WatchFiles.js +0 -13
  496. package/src/utils/discoverFiles.js +0 -18
  497. package/src/utils/joinArguments.js +0 -13
  498. package/src/utils/not.js +0 -14
  499. package/src/utils/pluckFunction.js +0 -15
  500. package/src/utils/test/joinArgumentsTest.js +0 -24
  501. package/src/utils/test/not.js +0 -70
  502. package/src/utils/test/pluckFunctionLoDashTest.js +0 -51
  503. package/src/utils/test/pluckFunctionTest.js +0 -41
  504. package/src/utils/test/pluckObjects.js +0 -20
  505. package/src/utils/utils.js +0 -146
  506. package/tests/all.js +0 -24
  507. package/tests/large/bddTest.js +0 -9
  508. package/tests/large/expectedCrash.js +0 -3
  509. package/tests/large/expectedCrashTest.js +0 -9
  510. package/tests/large/filterCLI.js +0 -10
  511. package/tests/large/filterCLITest.js +0 -18
  512. package/tests/large/loadingCrash.js +0 -1
  513. package/tests/large/loadingCrashTest.js +0 -9
  514. package/tests/large/skip.js +0 -11
  515. package/tests/large/skipTest.js +0 -9
  516. package/tests/large/twoFailing.js +0 -9
  517. package/tests/large/twoFailingTest.js +0 -9
  518. package/tests/mocha/.npmignore +0 -1
  519. package/tests/mocha/basic.js +0 -12
  520. package/tests/mocha/gt-as-module.js +0 -65
  521. package/tests/mocha/test-collection.js +0 -67
  522. package/tests/small/errorInAsync.js +0 -6
  523. package/tests/small/errorInAsyncTest.js +0 -14
  524. package/tests/small/oneFails.js +0 -7
  525. package/tests/small/oneFailsTest.js +0 -18
  526. package/tests/small/pluckObjects.js +0 -20
  527. package/tests/small/pluckTest.js +0 -51
  528. package/tests/small/setupException.js +0 -8
  529. package/tests/small/setupExceptionTest.js +0 -9
  530. package/tests/small/teardownException.js +0 -8
  531. package/tests/small/teardownExceptionTest.js +0 -9
@@ -0,0 +1,46 @@
1
+ import { BRANCH_COMPONENT } from '../react/jsx/utils/constants.js';
2
+ import { colorizeFilepath, colorizeComponent, colorizeIdString, colorizeContent, colorizeLine, colorizeFunctionName, } from './colors.js';
3
+ import { formatCodeClamp } from './formatting.js';
4
+ const withWillErrorInNextVersion = (message) => `${message} (This will become an error in the next major version of the CLI.)`;
5
+ // Static function related errors
6
+ const withStaticError = (message) => `<Static> rules violation: ${message}`;
7
+ const withDeclareStaticError = (message) => `declareStatic() rules violation: ${message}`;
8
+ // Synchronous wrappers for backward compatibility
9
+ export const warnApiKeyInConfigSync = (optionsFilepath) => `${colorizeFilepath(optionsFilepath)}: Your API key is exposed! Please remove it from the file and include it as an environment variable.`;
10
+ export const warnVariablePropSync = (file, attrName, value, location) => withLocation(file, `${colorizeComponent('<T>')} component has dynamic attribute ${colorizeIdString(attrName)} with value: ${colorizeContent(value)}. Change ${colorizeIdString(attrName)} to ensure this content is translated.`, location);
11
+ export const warnInvalidReturnSync = (file, functionName, expression, location) => withLocation(file, withStaticError(`Function ${colorizeFunctionName(functionName)} does not return a static expression. ${colorizeFunctionName(functionName)} must return either (1) a static string literal, (2) another static function invocation, (3) static JSX content, or (4) a ternary expression. Instead got:\n${colorizeContent(expression)}`), location);
12
+ // TODO: this is temporary until we handle implicit returns
13
+ export const warnMissingReturnSync = (file, functionName, location) => withLocation(file, `Function ${colorizeFunctionName(functionName)} is wrapped in ${colorizeComponent('<Static>')} tags but does have an explicit return statement. Static functions must have an explicit return statment.`, location);
14
+ export const warnHasUnwrappedExpressionSync = (file, unwrappedExpressions, id, location) => withLocation(file, `${colorizeComponent('<T>')} component${id ? ` with id ${colorizeIdString(id)}` : ''} has children that could change at runtime. Use a variable component like ${colorizeComponent('<Var>')} to ensure this content is translated.\n${colorizeContent(unwrappedExpressions.join('\n'))}`, location);
15
+ export const warnFailedToConstructJsxTreeSync = (file, code, location) => withLocation(file, `Failed to construct JsxTree! Call expression is not a valid createElement call: ${colorizeContent(code)}`, location);
16
+ export const warnNestedTComponent = (file, location) => withLocation(file, `Found nested <T> component. <T> components cannot be directly nested.`, location);
17
+ export const warnNonStaticExpressionSync = (file, attrName, value, location) => withLocation(file, `Found non-static expression for attribute ${colorizeIdString(attrName)}: ${colorizeContent(value)}. Change "${colorizeIdString(attrName)}" to ensure this content is translated.`, location);
18
+ export const warnInvalidMaxCharsSync = (file, value, location) => withLocation(file, `Found invalid maxChars value: ${colorizeContent(value)}. Change the value to a valid number to ensure this content is translated.`, location);
19
+ export const warnInvalidIcuSync = (file, value, error, location) => withWillErrorInNextVersion(withLocation(file, `Found invalid ICU string: ${colorizeContent(value)}. Change the value to a valid ICU to ensure this content is translated. Error message: ${error}.`, location));
20
+ export const warnTemplateLiteralSync = (file, value, location) => withLocation(file, `Found template literal with quasis (${colorizeContent(value)}). Change the template literal to a string to ensure this content is translated.`, location);
21
+ export const warnNonStringSync = (file, value, location) => withLocation(file, `Found non-string literal (${colorizeContent(value)}). Change the value to a string literal to ensure this content is translated.`, location);
22
+ export const warnAsyncUseGT = (file, location) => withLocation(file, `Found useGT() in an async function. Use getGT() instead, or make the function synchronous.`, location);
23
+ export const warnSyncGetGT = (file, location) => withLocation(file, `Found getGT() in a synchronous function. Use useGT() instead, or make the function async.`, location);
24
+ export const warnTernarySync = (file, location) => withLocation(file, 'Found ternary expression. A Branch component may be more appropriate here.', location);
25
+ export const withLocation = (file, message, location) => `${colorizeFilepath(file)}${location ? ` (${colorizeLine(location)})` : ''}: ${message}`;
26
+ export const warnFunctionNotFoundSync = (file, functionName, location) => withLocation(file, `Function ${colorizeFunctionName(functionName)} definition could not be resolved. This might affect translation resolution for this ${colorizeComponent('<T>')} component.`, location);
27
+ export const warnInvalidDeclareVarNameSync = (file, value, location) => withLocation(file, `Found invalid declareVar() $name tag. Must be a static expression. Received: ${colorizeContent(value)}.`, location);
28
+ export const warnDuplicateFunctionDefinitionSync = (file, functionName, location) => withLocation(file, `Function ${colorizeFunctionName(functionName)} is defined multiple times. Only the first definition will be used.`, location);
29
+ export const warnInvalidStaticInitSync = (file, functionName, location) => withLocation(file, withStaticError(`The definition for ${colorizeFunctionName(functionName)} could not be resolved. When using arrow syntax to define a static function, the right hand side or the assignment MUST only contain the arrow function itself and no other expressions.
30
+ Example: ${colorizeContent(`const ${colorizeFunctionName(functionName)} = () => { ... }`)}
31
+ Invalid: ${colorizeContent(`const ${colorizeFunctionName(functionName)} = [() => { ... }][0]`)}`), location);
32
+ export const warnDataAttrOnBranch = (file, attrName, location) => withLocation(file, `${colorizeComponent(`<${BRANCH_COMPONENT}>`)} component ignores attributes prefixed with ${colorizeIdString('"data-"')}. Found ${colorizeIdString(attrName)}. Remove it or use a different attribute name.`, location);
33
+ export const warnRecursiveFunctionCallSync = (file, functionName, location) => withLocation(file, withStaticError(`Recursive function call detected: ${colorizeFunctionName(functionName)}. A static function cannot use recursive calls to construct its result.`), location);
34
+ export const warnDeclareStaticNotWrappedSync = (file, functionName, location) => withLocation(file, withDeclareStaticError(`Could not resolve ${colorizeFunctionName(formatCodeClamp(functionName))}. This call is not wrapped in declareStatic(). Ensure the function is properly wrapped with declareStatic() and does not have circular import dependencies.`), location);
35
+ export const warnDeclareStaticNoResultsSync = (file, functionName, location) => withLocation(file, withDeclareStaticError(`Could not resolve ${colorizeFunctionName(formatCodeClamp(functionName))}. DeclareStatic can only receive function invocations and cannot use undefined values or looped calls to construct its result.`), location);
36
+ // Re-export error messages
37
+ export const noLocalesError = `No locales found! Please provide a list of locales for translation, or specify them in your gt.config.json file.`;
38
+ export const noDefaultLocaleError = `No default locale found! Please provide a default locale, or specify it in your gt.config.json file.`;
39
+ export const noFilesError = `Incorrect or missing files configuration! Please make sure your files are configured correctly in your gt.config.json file.`;
40
+ export const noSourceFileError = `No source file found! Please double check your translations directory and default locale.`;
41
+ export const noSupportedFormatError = `Unsupported data format! Please make sure your translationsDir parameter ends with a supported file extension.`;
42
+ export const noApiKeyError = `No API key found! Please provide an API key using the --api-key flag or set the GT_API_KEY environment variable.`;
43
+ export const devApiKeyError = `You are using a development API key. Please use a production API key to use the General Translation API.\nYou can generate a production API key with the command: npx gt auth -t production`;
44
+ export const noProjectIdError = `No project ID found! Please provide a project ID using the --project-id flag, specify it in your gt.config.json file, or set the GT_PROJECT_ID environment variable.`;
45
+ export const noVersionIdError = `No version ID found! Please provide a version ID using the --version-id flag or specify it in your gt.config.json file as the _versionId property.`;
46
+ export const invalidConfigurationError = `Invalid files configuration! Please either provide a valid configuration to download local translations or set the --publish flag to true to upload translations to the CDN.`;
@@ -0,0 +1,35 @@
1
+ import type { SpinnerResult, ProgressResult } from '@clack/prompts';
2
+ export type LogFormat = 'default' | 'json';
3
+ /**
4
+ * GT_LOG_FORMAT: default | json.
5
+ * - If default, logs will be pretty-printed using @clack/prompts.
6
+ * - If json, logs will be written in JSON format to the console.
7
+ * GT_LOG_FILE: If specified, logs will be written to the file.
8
+ * GT_LOG_LEVEL: The level of logs to write. If not specified, defaults to 'info'.
9
+ * - Valid levels: debug, info, warn, error.
10
+ */
11
+ declare class Logger {
12
+ private static instance;
13
+ private pinoLogger;
14
+ private fileLogger;
15
+ private logFormat;
16
+ private constructor();
17
+ static getInstance(): Logger;
18
+ trace(message: string): void;
19
+ debug(message: string): void;
20
+ info(message: string): void;
21
+ warn(message: string): void;
22
+ error(message: string): void;
23
+ fatal(message: string): void;
24
+ silent(message: string): void;
25
+ success(message: string): void;
26
+ step(message: string): void;
27
+ message(message: string, symbol?: string): void;
28
+ createSpinner(indicator?: 'dots' | 'timer'): SpinnerResult;
29
+ createProgressBar(total: number): ProgressResult;
30
+ startCommand(message: string): void;
31
+ endCommand(message: string): void;
32
+ flush(): void;
33
+ }
34
+ export declare const logger: Logger;
35
+ export {};
@@ -0,0 +1,250 @@
1
+ import chalk from 'chalk';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { pino, destination } from 'pino';
4
+ import { log as clackLog, spinner, progress, intro, outro, } from '@clack/prompts';
5
+ // Mock spinner that logs to console instead of updating terminal UI
6
+ class MockSpinner {
7
+ currentMessage = '';
8
+ logger;
9
+ isCancelled = false;
10
+ constructor(logger) {
11
+ this.logger = logger;
12
+ }
13
+ start(message) {
14
+ if (message) {
15
+ this.currentMessage = message;
16
+ this.logger.info(`[Spinner] ${message}`);
17
+ }
18
+ }
19
+ stop(message) {
20
+ const msg = message || this.currentMessage;
21
+ if (msg) {
22
+ this.logger.info(`[Spinner] ${msg}`);
23
+ }
24
+ this.currentMessage = '';
25
+ }
26
+ message(message) {
27
+ if (message) {
28
+ this.currentMessage = message;
29
+ this.logger.info(`[Spinner] ${message}`);
30
+ }
31
+ }
32
+ }
33
+ // Mock progress bar that logs to console instead of updating terminal UI
34
+ class MockProgress {
35
+ max;
36
+ current = 0;
37
+ logger;
38
+ isCancelled = false;
39
+ constructor(max, logger) {
40
+ this.max = max;
41
+ this.logger = logger;
42
+ }
43
+ start(message) {
44
+ const msg = message || 'Starting progress';
45
+ this.logger.info(`[Progress] ${msg} (0/${this.max})`);
46
+ }
47
+ stop(message) {
48
+ const msg = message || 'Complete';
49
+ this.logger.info(`[Progress] ${msg} (${this.current}/${this.max})`);
50
+ }
51
+ message(message) {
52
+ if (message) {
53
+ this.logger.info(`[Progress] ${message} (${this.current}/${this.max})`);
54
+ }
55
+ }
56
+ advance(amount, message) {
57
+ this.current += amount;
58
+ const msg = message || 'Progress';
59
+ this.logger.info(`[Progress] ${msg} (${this.current}/${this.max})`);
60
+ }
61
+ }
62
+ /**
63
+ * GT_LOG_FORMAT: default | json.
64
+ * - If default, logs will be pretty-printed using @clack/prompts.
65
+ * - If json, logs will be written in JSON format to the console.
66
+ * GT_LOG_FILE: If specified, logs will be written to the file.
67
+ * GT_LOG_LEVEL: The level of logs to write. If not specified, defaults to 'info'.
68
+ * - Valid levels: debug, info, warn, error.
69
+ */
70
+ class Logger {
71
+ static instance;
72
+ pinoLogger = null;
73
+ fileLogger = null;
74
+ logFormat;
75
+ constructor() {
76
+ // Read configuration from environment variables
77
+ const format = (process.env.GT_LOG_FORMAT || 'default').toLowerCase();
78
+ const logFile = process.env.GT_LOG_FILE;
79
+ const logLevel = process.env.GT_LOG_LEVEL || 'info';
80
+ if (format !== 'default' && format !== 'json') {
81
+ console.error('Invalid log format');
82
+ process.exit(1);
83
+ }
84
+ if (logLevel !== 'debug' &&
85
+ logLevel !== 'info' &&
86
+ logLevel !== 'warn' &&
87
+ logLevel !== 'error') {
88
+ console.error('Invalid log level');
89
+ process.exit(1);
90
+ }
91
+ this.logFormat = format;
92
+ // Console output (stdout) - only for JSON format
93
+ // For 'default' format, we use @clack/prompts directly
94
+ if (format === 'json') {
95
+ this.pinoLogger = pino({
96
+ level: logLevel,
97
+ mixin: () => ({
98
+ logId: randomUUID(),
99
+ }),
100
+ }, destination(1));
101
+ }
102
+ // File output (if specified) - always JSON format
103
+ if (logFile) {
104
+ this.fileLogger = pino({
105
+ level: logLevel,
106
+ mixin: () => ({
107
+ logId: randomUUID(),
108
+ }),
109
+ }, destination(logFile));
110
+ }
111
+ }
112
+ static getInstance() {
113
+ if (!Logger.instance) {
114
+ Logger.instance = new Logger();
115
+ }
116
+ return Logger.instance;
117
+ }
118
+ // Standard logging methods
119
+ trace(message) {
120
+ if (this.logFormat === 'default') {
121
+ // @clack/prompts doesn't have trace, use message
122
+ clackLog.message(message, { symbol: chalk.dim('•') });
123
+ }
124
+ else {
125
+ this.pinoLogger?.trace(message);
126
+ }
127
+ this.fileLogger?.trace(message);
128
+ }
129
+ debug(message) {
130
+ if (this.logFormat === 'default') {
131
+ // @clack/prompts doesn't have debug, use message
132
+ clackLog.message(message, { symbol: chalk.dim('◆') });
133
+ }
134
+ else {
135
+ this.pinoLogger?.debug(message);
136
+ }
137
+ this.fileLogger?.debug(message);
138
+ }
139
+ info(message) {
140
+ if (this.logFormat === 'default') {
141
+ clackLog.info(message);
142
+ }
143
+ else {
144
+ this.pinoLogger?.info(message);
145
+ }
146
+ this.fileLogger?.info(message);
147
+ }
148
+ warn(message) {
149
+ if (this.logFormat === 'default') {
150
+ clackLog.warn(message);
151
+ }
152
+ else {
153
+ this.pinoLogger?.warn(message);
154
+ }
155
+ this.fileLogger?.warn(message);
156
+ }
157
+ error(message) {
158
+ if (this.logFormat === 'default') {
159
+ clackLog.error(message);
160
+ }
161
+ else {
162
+ this.pinoLogger?.error(message);
163
+ }
164
+ this.fileLogger?.error(message);
165
+ }
166
+ fatal(message) {
167
+ if (this.logFormat === 'default') {
168
+ clackLog.error(message); // @clack/prompts doesn't have fatal, use error
169
+ }
170
+ else {
171
+ this.pinoLogger?.fatal(message);
172
+ }
173
+ this.fileLogger?.fatal(message);
174
+ }
175
+ silent(message) {
176
+ // Silent doesn't log to console, only to file
177
+ this.fileLogger?.silent(message);
178
+ }
179
+ // @clack/prompts specific methods (for 'default' format)
180
+ success(message) {
181
+ if (this.logFormat === 'default') {
182
+ clackLog.success(message);
183
+ }
184
+ else {
185
+ this.pinoLogger?.info(message); // Map to info for non-default formats
186
+ }
187
+ this.fileLogger?.info(message);
188
+ }
189
+ step(message) {
190
+ if (this.logFormat === 'default') {
191
+ clackLog.step(message);
192
+ }
193
+ else {
194
+ this.pinoLogger?.info(message); // Map to info for non-default formats
195
+ }
196
+ this.fileLogger?.info(message);
197
+ }
198
+ message(message, symbol) {
199
+ if (this.logFormat === 'default') {
200
+ clackLog.message(message, symbol ? { symbol } : undefined);
201
+ }
202
+ else {
203
+ this.pinoLogger?.info(message); // Map to info for non-default formats
204
+ }
205
+ this.fileLogger?.info(message);
206
+ }
207
+ // Spinner functionality
208
+ createSpinner(indicator = 'timer') {
209
+ if (this.logFormat === 'default') {
210
+ return spinner({ indicator });
211
+ }
212
+ else {
213
+ return new MockSpinner(this);
214
+ }
215
+ }
216
+ // Progress bar functionality
217
+ createProgressBar(total) {
218
+ if (this.logFormat === 'default') {
219
+ return progress({ max: total });
220
+ }
221
+ else {
222
+ return new MockProgress(total, this);
223
+ }
224
+ }
225
+ // Command start/end markers
226
+ startCommand(message) {
227
+ if (this.logFormat === 'default') {
228
+ intro(chalk.cyan(message));
229
+ }
230
+ else {
231
+ this.info(`╭─ ${message}`);
232
+ }
233
+ this.fileLogger?.info(`[START] ${message}`);
234
+ }
235
+ endCommand(message) {
236
+ if (this.logFormat === 'default') {
237
+ outro(chalk.cyan(message));
238
+ }
239
+ else {
240
+ this.info(`╰─ ${message}`);
241
+ }
242
+ this.fileLogger?.info(`[END] ${message}`);
243
+ }
244
+ // Flush logs to ensure they're written before process exit
245
+ flush() {
246
+ this.pinoLogger?.flush();
247
+ this.fileLogger?.flush();
248
+ }
249
+ }
250
+ export const logger = Logger.getInstance();
@@ -0,0 +1,52 @@
1
+ import { FileToUpload } from 'generaltranslation/types';
2
+ /**
3
+ * Strip ANSI escape codes from a string (e.g., chalk color codes)
4
+ */
5
+ export declare function stripAnsi(str: string): string;
6
+ export declare function logErrorAndExit(message: string): never;
7
+ export declare function exitSync(code: number): never;
8
+ export declare function displayHeader(introString?: string): void;
9
+ export declare function displayProjectId(projectId: string): void;
10
+ export declare function displayResolvedPaths(resolvedPaths: [string, string][]): void;
11
+ export declare function displayCreatedConfigFile(configFilepath: string): void;
12
+ export declare function displayUpdatedConfigFile(configFilepath: string): void;
13
+ export declare function displayUpdatedVersionsFile(versionFilepath: string): void;
14
+ export declare function promptText({ message, defaultValue, validate, }: {
15
+ message: string;
16
+ defaultValue?: string;
17
+ validate?: (value: string) => boolean | string;
18
+ }): Promise<string>;
19
+ export declare function promptSelect<T>({ message, options, defaultValue, }: {
20
+ message: string;
21
+ options: Array<{
22
+ value: T;
23
+ label: string;
24
+ hint?: string;
25
+ }>;
26
+ defaultValue?: T;
27
+ }): Promise<T>;
28
+ export declare function promptMultiSelect<T extends string>({ message, options, required, }: {
29
+ message: string;
30
+ options: Array<{
31
+ value: T;
32
+ label: string;
33
+ hint?: string;
34
+ }>;
35
+ required?: boolean;
36
+ }): Promise<T[]>;
37
+ export declare function promptConfirm({ message, defaultValue, cancelMessage, }: {
38
+ message: string;
39
+ defaultValue?: boolean;
40
+ cancelMessage?: string;
41
+ }): Promise<boolean>;
42
+ export declare function warnApiKeyInConfig(optionsFilepath: string): void;
43
+ export declare function warnVariableProp(file: string, attrName: string, value: string): void;
44
+ export declare function warnNoId(file: string): void;
45
+ export declare function warnHasUnwrappedExpression(file: string, id: string, unwrappedExpressions: string[]): void;
46
+ export declare function warnNonStaticExpression(file: string, attrName: string, value: string): void;
47
+ export declare function warnTemplateLiteral(file: string, value: string): void;
48
+ export declare function warnTernary(file: string): void;
49
+ /**
50
+ * Helper: Log all collected files
51
+ */
52
+ export declare function logCollectedFiles(files: Pick<FileToUpload, 'fileName'>[], reactComponents?: number): void;
@@ -0,0 +1,175 @@
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';
6
+ /**
7
+ * Strip ANSI escape codes from a string (e.g., chalk color codes)
8
+ */
9
+ export function stripAnsi(str) {
10
+ return str.replace(/\x1B\[[0-9;]*m/g, '');
11
+ }
12
+ export function logErrorAndExit(message) {
13
+ logger.error(message);
14
+ return exitSync(1);
15
+ }
16
+ export function exitSync(code) {
17
+ // Flush logs before exit
18
+ logger.flush();
19
+ process.exit(code);
20
+ }
21
+ // GT specific logging
22
+ export function displayHeader(introString) {
23
+ displayAsciiTitle();
24
+ displayInitializingText();
25
+ if (introString) {
26
+ logger.startCommand(introString);
27
+ }
28
+ }
29
+ function displayAsciiTitle() {
30
+ console.log(chalk.cyan(`\n ,ad8888ba, 888888888888
31
+ d8"' \`"8b 88
32
+ d8' 88
33
+ 88 88
34
+ 88 88888 88
35
+ Y8, 88 88
36
+ Y8a. .a88 88
37
+ \`"Y88888P" 88 `));
38
+ }
39
+ function displayInitializingText() {
40
+ const version = getCLIVersion();
41
+ console.log(`\n${chalk.bold.blue('General Translation, Inc.')}
42
+ ${chalk.dim('https://generaltranslation.com/docs')}
43
+ ${chalk.dim(`CLI Version: ${version}\n`)}`);
44
+ }
45
+ export function displayProjectId(projectId) {
46
+ logger.message(chalk.dim(`Project ID: ${chalk.bold(projectId)}`), chalk.cyan('~'));
47
+ }
48
+ export function displayResolvedPaths(resolvedPaths) {
49
+ const paths = resolvedPaths.map(([key, resolvedPath]) => {
50
+ return chalk.dim(`'${chalk.white(key)}' → '${chalk.green(resolvedPath)}'`);
51
+ });
52
+ logger.step(`Resolved path aliases:\n${paths.join('\n')}`);
53
+ }
54
+ export function displayCreatedConfigFile(configFilepath) {
55
+ logger.step(`Created config file ${chalk.cyan(configFilepath)}`);
56
+ }
57
+ export function displayUpdatedConfigFile(configFilepath) {
58
+ logger.success(`Updated config file ${chalk.cyan(configFilepath)}`);
59
+ }
60
+ export function displayUpdatedVersionsFile(versionFilepath) {
61
+ logger.success(`Updated versions file ${chalk.cyan(versionFilepath)}`);
62
+ }
63
+ // Input prompts
64
+ export async function promptText({ message, defaultValue, validate, }) {
65
+ const result = await text({
66
+ message,
67
+ placeholder: defaultValue,
68
+ validate: validate
69
+ ? (value) => {
70
+ const validation = validate(value || '');
71
+ return validation === true ? undefined : validation.toString();
72
+ }
73
+ : undefined,
74
+ });
75
+ if (isCancel(result)) {
76
+ cancel('Operation cancelled');
77
+ return exitSync(0);
78
+ }
79
+ return result;
80
+ }
81
+ export async function promptSelect({ message, options, defaultValue, }) {
82
+ // Convert options to the format expected by clack
83
+ const clackOptions = options.map((opt) => ({
84
+ value: opt.value,
85
+ label: opt.label,
86
+ hint: opt.hint,
87
+ }));
88
+ const result = await select({
89
+ message,
90
+ options: clackOptions,
91
+ initialValue: defaultValue,
92
+ });
93
+ if (isCancel(result)) {
94
+ cancel('Operation cancelled');
95
+ return exitSync(0);
96
+ }
97
+ return result;
98
+ }
99
+ export async function promptMultiSelect({ message, options, required = true, }) {
100
+ // Convert options to the format expected by clack
101
+ const clackOptions = options.map((opt) => ({
102
+ value: opt.value,
103
+ label: opt.label,
104
+ hint: opt.hint,
105
+ }));
106
+ const result = await multiselect({
107
+ message,
108
+ options: clackOptions,
109
+ required,
110
+ });
111
+ if (isCancel(result)) {
112
+ cancel('Operation cancelled');
113
+ return exitSync(0);
114
+ }
115
+ return result;
116
+ }
117
+ export async function promptConfirm({ message, defaultValue = true, cancelMessage = 'Operation cancelled', }) {
118
+ const result = await confirm({
119
+ message,
120
+ initialValue: defaultValue,
121
+ });
122
+ if (isCancel(result)) {
123
+ cancel(cancelMessage);
124
+ return exitSync(0);
125
+ }
126
+ return result;
127
+ }
128
+ // Warning display functions
129
+ export function warnApiKeyInConfig(optionsFilepath) {
130
+ logger.warn(`Found ${chalk.cyan('apiKey')} in "${chalk.green(optionsFilepath)}". ` +
131
+ chalk.white('Your API key is exposed! Please remove it from the file and include it as an environment variable.'));
132
+ }
133
+ export function warnVariableProp(file, attrName, value) {
134
+ logger.warn(`Found ${chalk.green('<T>')} component in ${chalk.cyan(file)} with variable ${attrName}: "${chalk.white(value)}". ` +
135
+ `Change "${attrName}" to ensure this content is translated.`);
136
+ }
137
+ export function warnNoId(file) {
138
+ logger.warn(`Found ${chalk.green('<T>')} component in ${chalk.cyan(file)} with no id. ` +
139
+ chalk.white('Add an id to ensure the content is translated.'));
140
+ }
141
+ export function warnHasUnwrappedExpression(file, id, unwrappedExpressions) {
142
+ logger.warn(`${chalk.green('<T>')} with id "${id}" in ${chalk.cyan(file)} has children: ${unwrappedExpressions.join(', ')} that could change at runtime. ` +
143
+ chalk.white('Use a variable component like ') +
144
+ chalk.green('<Var>') +
145
+ chalk.white(' (') +
146
+ chalk.blue('https://generaltranslation.com/docs') +
147
+ chalk.white(') to translate this properly.'));
148
+ }
149
+ export function warnNonStaticExpression(file, attrName, value) {
150
+ logger.warn(`Found non-static expression in ${chalk.cyan(file)} for attribute ${attrName}: "${chalk.white(value)}". ` +
151
+ `Change "${attrName}" to ensure this content is translated.`);
152
+ }
153
+ export function warnTemplateLiteral(file, value) {
154
+ logger.warn(`Found template literal with quasis (${value}) in ${chalk.cyan(file)}. ` +
155
+ chalk.white('Change the template literal to a string to ensure this content is translated.'));
156
+ }
157
+ export function warnTernary(file) {
158
+ logger.warn(`Found ternary expression in ${chalk.cyan(file)}. ` +
159
+ chalk.white('A Branch component may be more appropriate here.'));
160
+ }
161
+ /**
162
+ * Helper: Log all collected files
163
+ */
164
+ export function logCollectedFiles(files, reactComponents) {
165
+ logger.message(chalk.cyan('Files found in project:') +
166
+ '\n' +
167
+ files
168
+ .map((file) => {
169
+ if (file.fileName === TEMPLATE_FILE_NAME) {
170
+ return `- <React Elements>${reactComponents ? ` (${reactComponents})` : ''}`;
171
+ }
172
+ return `- ${file.fileName}`;
173
+ })
174
+ .join('\n'));
175
+ }
@@ -0,0 +1,4 @@
1
+ import { Settings } from '../../types/index.js';
2
+ import type { FileToUpload } from '../../types/data.js';
3
+ export declare const SUPPORTED_DATA_FORMATS: string[];
4
+ export declare function aggregateFiles(settings: Settings): Promise<FileToUpload[]>;