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,150 @@
1
+ import path from 'node:path';
2
+ import fg from 'fast-glob';
3
+ import { SUPPORTED_FILE_EXTENSIONS } from '../../formats/files/supportedFiles.js';
4
+ import { logger } from '../../console/logger.js';
5
+ import chalk from 'chalk';
6
+ import micromatch from 'micromatch';
7
+ /**
8
+ * Resolves the files from the files object
9
+ * Replaces [locale] with the actual locale in the files
10
+ *
11
+ * @param files - The files object
12
+ * @param locale - The locale to replace [locale] with
13
+ * @returns The resolved files
14
+ */
15
+ export function resolveLocaleFiles(files, locale) {
16
+ const result = {};
17
+ for (const fileType of SUPPORTED_FILE_EXTENSIONS) {
18
+ result[fileType] = files[fileType]?.map((filepath) => filepath.replace(/\[locale\]/g, locale));
19
+ }
20
+ // Replace [locale] with locale in all paths
21
+ result.gt = files.gt?.replace(/\[locale\]/g, locale);
22
+ return result;
23
+ }
24
+ /**
25
+ * Resolves the files from the files object
26
+ * Performs glob pattern expansion on the files
27
+ * Replaces [locale] with the actual locale in the files
28
+ *
29
+ * @param files - The files object
30
+ * @returns The resolved files
31
+ */
32
+ export function resolveFiles(files, locale, locales, cwd, compositePatterns) {
33
+ // Initialize result object with empty arrays for each file type
34
+ const result = {};
35
+ const placeholderResult = {};
36
+ const transformPaths = {};
37
+ // Process GT files
38
+ if (files.gt?.output) {
39
+ placeholderResult.gt = path.resolve(cwd, files.gt.output);
40
+ }
41
+ for (const fileType of SUPPORTED_FILE_EXTENSIONS) {
42
+ // ==== TRANSFORMS ==== //
43
+ const transform = files[fileType]?.transform;
44
+ if (transform &&
45
+ (typeof transform === 'string' ||
46
+ typeof transform === 'object' ||
47
+ Array.isArray(transform))) {
48
+ transformPaths[fileType] = transform;
49
+ }
50
+ // ==== PLACEHOLDERS ==== //
51
+ if (files[fileType]?.include) {
52
+ const filePaths = expandGlobPatterns(cwd, files[fileType].include, files[fileType]?.exclude || [], locale, locales, transformPaths[fileType] || undefined, compositePatterns);
53
+ result[fileType] = filePaths.resolvedPaths;
54
+ placeholderResult[fileType] = filePaths.placeholderPaths;
55
+ }
56
+ }
57
+ return {
58
+ resolvedPaths: result,
59
+ placeholderPaths: placeholderResult,
60
+ transformPaths: transformPaths,
61
+ };
62
+ }
63
+ // Helper function to expand glob patterns
64
+ export function expandGlobPatterns(cwd, includePatterns, excludePatterns, locale, locales, transformPatterns, compositePatterns) {
65
+ // Expand glob patterns to include all matching files
66
+ const resolvedPaths = [];
67
+ const placeholderPaths = [];
68
+ // Process include patterns
69
+ for (const pattern of includePatterns) {
70
+ // Track positions where [locale] appears in the original pattern
71
+ // It must be included in the pattern, otherwise the CLI tool will not be able to find the correct output path
72
+ // Warn if it's not included
73
+ // Ignore if is composite pattern
74
+ if (!pattern.includes('[locale]') &&
75
+ !transformPatterns &&
76
+ !compositePatterns?.includes(pattern)) {
77
+ logger.warn(chalk.yellow(`Pattern "${pattern}" does not include [locale], so the CLI tool may incorrectly save translated files.`));
78
+ }
79
+ const localePositions = [];
80
+ let searchIndex = 0;
81
+ const localeTag = '[locale]';
82
+ while (true) {
83
+ const foundIndex = pattern.indexOf(localeTag, searchIndex);
84
+ if (foundIndex === -1)
85
+ break;
86
+ localePositions.push(foundIndex);
87
+ searchIndex = foundIndex + localeTag.length;
88
+ }
89
+ const expandedPattern = pattern.replace(/\[locale\]/g, locale);
90
+ // Resolve the absolute pattern path
91
+ const absolutePattern = path.resolve(cwd, expandedPattern);
92
+ // Prepare exclude patterns with locale replaced
93
+ const expandedExcludePatterns = Array.from(new Set(excludePatterns.flatMap((p) => locales.map((targetLocale) => path.resolve(cwd, p
94
+ .replace(/\[locale\]/g, locale)
95
+ .replace(/\[locales\]/g, targetLocale))))));
96
+ // Use fast-glob to find all matching files, excluding the patterns
97
+ const matches = fg.sync(absolutePattern, {
98
+ absolute: true,
99
+ ignore: expandedExcludePatterns,
100
+ });
101
+ resolvedPaths.push(...matches);
102
+ // For each match, create a version with [locale] in the correct positions
103
+ matches.forEach((match) => {
104
+ const absolutePath = path.resolve(cwd, match);
105
+ const patternPath = path.resolve(cwd, pattern);
106
+ let originalAbsolutePath = absolutePath;
107
+ if (localePositions.length > 0) {
108
+ const placeholderPath = buildPlaceholderPathFromPattern(patternPath, absolutePath, localeTag);
109
+ originalAbsolutePath = placeholderPath;
110
+ }
111
+ placeholderPaths.push(originalAbsolutePath);
112
+ });
113
+ }
114
+ return { resolvedPaths, placeholderPaths };
115
+ }
116
+ function buildPlaceholderPathFromPattern(patternPath, absolutePath, localeTag) {
117
+ if (!patternPath.includes(localeTag)) {
118
+ return absolutePath;
119
+ }
120
+ const posixPattern = toPosixPath(patternPath);
121
+ const posixPath = toPosixPath(absolutePath);
122
+ const baseRegex = micromatch.makeRe(posixPattern, {
123
+ literalBrackets: true,
124
+ });
125
+ const localeRegexSource = baseRegex.source.replace(/\\\[locale\\\]/g, '([^/]+)');
126
+ const flags = baseRegex.flags.includes('d')
127
+ ? baseRegex.flags
128
+ : `${baseRegex.flags}d`;
129
+ const matcher = new RegExp(localeRegexSource, flags);
130
+ const match = matcher.exec(posixPath);
131
+ const matchWithIndices = match;
132
+ if (!match || !matchWithIndices.indices) {
133
+ return absolutePath;
134
+ }
135
+ let placeholderPosixPath = posixPath;
136
+ const indices = matchWithIndices.indices;
137
+ for (let i = indices.length - 1; i >= 1; i--) {
138
+ const [start, end] = indices[i];
139
+ if (start === -1 || end === -1)
140
+ continue;
141
+ placeholderPosixPath =
142
+ placeholderPosixPath.slice(0, start) +
143
+ localeTag +
144
+ placeholderPosixPath.slice(end);
145
+ }
146
+ return path.normalize(placeholderPosixPath);
147
+ }
148
+ function toPosixPath(value) {
149
+ return value.split(path.sep).join(path.posix.sep);
150
+ }
@@ -0,0 +1,17 @@
1
+ import { FilesOptions, SupportedFrameworks } from '../../types/index.js';
2
+ /**
3
+ * Checks if the config file exists.
4
+ * If yes, make sure make sure projectId is correct
5
+ * If not, creates a new JSON file at the given filepath and writes the provided config object to it.
6
+ * @param {string} configFilepath - The path to the config file.
7
+ * @param {Record<string, any>} configObject - The config object to write if the file does not exist.
8
+ */
9
+ export declare function createOrUpdateConfig(configFilepath: string, options: {
10
+ projectId?: string;
11
+ defaultLocale?: string;
12
+ locales?: string[];
13
+ files?: FilesOptions;
14
+ framework?: SupportedFrameworks;
15
+ baseUrl?: string;
16
+ publish?: boolean;
17
+ }): Promise<string>;
@@ -0,0 +1,50 @@
1
+ import fs from 'node:fs';
2
+ import { displayCreatedConfigFile } from '../../console/logging.js';
3
+ import { logger } from '../../console/logger.js';
4
+ import { GT_CONFIG_SCHEMA_URL } from '../../utils/constants.js';
5
+ /**
6
+ * Checks if the config file exists.
7
+ * If yes, make sure make sure projectId is correct
8
+ * If not, creates a new JSON file at the given filepath and writes the provided config object to it.
9
+ * @param {string} configFilepath - The path to the config file.
10
+ * @param {Record<string, any>} configObject - The config object to write if the file does not exist.
11
+ */
12
+ export async function createOrUpdateConfig(configFilepath, options) {
13
+ // Filter out empty string values from the config object
14
+ const newContent = {
15
+ ...(options.projectId && { projectId: options.projectId }),
16
+ ...(options.defaultLocale && { defaultLocale: options.defaultLocale }),
17
+ ...(options.files && { files: options.files }),
18
+ ...(options.framework && { framework: options.framework }),
19
+ ...(options.baseUrl && { baseUrl: options.baseUrl }),
20
+ ...(options.publish && { publish: options.publish }),
21
+ };
22
+ try {
23
+ // if file exists
24
+ let oldContent = {};
25
+ if (fs.existsSync(configFilepath)) {
26
+ oldContent = JSON.parse(await fs.promises.readFile(configFilepath, 'utf-8'));
27
+ }
28
+ // merge old and new content
29
+ const mergedContent = {
30
+ $schema: GT_CONFIG_SCHEMA_URL,
31
+ ...oldContent,
32
+ ...newContent,
33
+ };
34
+ // Add locales to mergedContent if they exist
35
+ if (options.locales) {
36
+ mergedContent.locales = mergedContent.locales
37
+ ? [...new Set([...mergedContent.locales, ...options.locales])]
38
+ : options.locales;
39
+ }
40
+ // write to file
41
+ const mergedJsonContent = JSON.stringify(mergedContent, null, 2);
42
+ await fs.promises.writeFile(configFilepath, mergedJsonContent, 'utf-8');
43
+ // show update in console
44
+ displayCreatedConfigFile(configFilepath);
45
+ }
46
+ catch (error) {
47
+ logger.error(`An error occurred while updating ${configFilepath}: ${error}`);
48
+ }
49
+ return configFilepath;
50
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Options for updating the config file.
3
+ *
4
+ * Since these are all string values, we can use null to mark them for removal
5
+ */
6
+ type UpdateConfigOptions = {
7
+ projectId?: string | null;
8
+ _versionId?: string | null;
9
+ _branchId?: string | null;
10
+ stageTranslations?: boolean | null;
11
+ };
12
+ /**
13
+ * Update the config file version id, locales, and projectId (if necessary)
14
+ * @param {string} configFilepath - The path to the config file.
15
+ * @param {UpdateConfigOptions} options - The options to update the config file with.
16
+ * @returns {Promise<void>} - A promise that resolves when the config file is updated.
17
+ *
18
+ * Hint: Mark a field as null to remove it from the config file.
19
+ */
20
+ export default function updateConfig(configFilepath: string, options: UpdateConfigOptions): Promise<void>;
21
+ export {};
@@ -0,0 +1,57 @@
1
+ import fs from 'node:fs';
2
+ import { displayUpdatedConfigFile } from '../../console/logging.js';
3
+ import { logger } from '../../console/logger.js';
4
+ /**
5
+ * Update the config file version id, locales, and projectId (if necessary)
6
+ * @param {string} configFilepath - The path to the config file.
7
+ * @param {UpdateConfigOptions} options - The options to update the config file with.
8
+ * @returns {Promise<void>} - A promise that resolves when the config file is updated.
9
+ *
10
+ * Hint: Mark a field as null to remove it from the config file.
11
+ */
12
+ export default async function updateConfig(configFilepath, options) {
13
+ // Filter out empty string values from the config object
14
+ const { projectId, _versionId, _branchId, stageTranslations } = options;
15
+ const newContent = {
16
+ ...(projectId && { projectId }),
17
+ ...(_versionId && { _versionId }),
18
+ ...(_branchId && { _branchId }),
19
+ // Omit when false
20
+ ...(stageTranslations && { stageTranslations }),
21
+ };
22
+ try {
23
+ // if file exists
24
+ let oldContent = {};
25
+ if (fs.existsSync(configFilepath)) {
26
+ oldContent = JSON.parse(await fs.promises.readFile(configFilepath, 'utf-8'));
27
+ }
28
+ // merge old and new content
29
+ const mergedContent = {
30
+ ...oldContent,
31
+ ...newContent,
32
+ };
33
+ // Apply null filter to remove values that were marked for removal
34
+ const filteredContent = applyNullFilter(mergedContent, options);
35
+ // write to file
36
+ const jsonContent = JSON.stringify(filteredContent, null, 2);
37
+ await fs.promises.writeFile(configFilepath, jsonContent, 'utf-8');
38
+ // show update in console
39
+ displayUpdatedConfigFile(configFilepath);
40
+ }
41
+ catch (error) {
42
+ logger.error(`An error occurred while updating ${configFilepath}: ${error}`);
43
+ }
44
+ }
45
+ // --- Helper functions --- //
46
+ /**
47
+ * Remove values from object if they were marked for removal
48
+ */
49
+ function applyNullFilter(obj, filter) {
50
+ const result = { ...obj };
51
+ for (const key of Object.keys(filter)) {
52
+ if (filter[key] === null) {
53
+ delete result[key];
54
+ }
55
+ }
56
+ return result;
57
+ }
@@ -0,0 +1,11 @@
1
+ type StagedVersionData = Record<string, // fileId
2
+ {
3
+ fileName: string;
4
+ versionId: string;
5
+ }>;
6
+ export declare function updateVersions({ configDirectory, versionData, }: {
7
+ configDirectory: string;
8
+ versionData: StagedVersionData;
9
+ }): Promise<void>;
10
+ export declare function getStagedVersions(configDirectory: string): Promise<StagedVersionData>;
11
+ export {};
@@ -0,0 +1,30 @@
1
+ import fs from 'node:fs';
2
+ import { displayUpdatedVersionsFile } from '../../console/logging.js';
3
+ import { logger } from '../../console/logger.js';
4
+ import path from 'node:path';
5
+ const STAGED_VERSIONS_FILE = 'staged-versions.json';
6
+ // Update the versions.json file with the new version ids
7
+ // of the translations that were sent to the API
8
+ export async function updateVersions({ configDirectory, versionData, }) {
9
+ const versionFilepath = path.join(configDirectory, STAGED_VERSIONS_FILE);
10
+ try {
11
+ fs.mkdirSync(configDirectory, { recursive: true });
12
+ fs.writeFileSync(versionFilepath, JSON.stringify(versionData, null, 2));
13
+ // show update in console
14
+ displayUpdatedVersionsFile(versionFilepath);
15
+ }
16
+ catch (error) {
17
+ logger.error(`An error occurred while updating ${versionFilepath}: ${error}`);
18
+ }
19
+ }
20
+ export async function getStagedVersions(configDirectory) {
21
+ try {
22
+ const versionFilepath = path.join(configDirectory, STAGED_VERSIONS_FILE);
23
+ const versionData = JSON.parse(fs.readFileSync(versionFilepath, 'utf8'));
24
+ return versionData;
25
+ }
26
+ catch (error) {
27
+ logger.error(`An error occurred while getting staged versions: ${error}`);
28
+ return {};
29
+ }
30
+ }
@@ -0,0 +1,7 @@
1
+ import { Settings } from '../types/index.js';
2
+ /**
3
+ * Copy a file to target locale without translation
4
+ *
5
+ * This is a naive approach, does not allow for wild cards
6
+ */
7
+ export default function copyFile(settings: Settings): Promise<void>;
@@ -0,0 +1,39 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { logger } from '../console/logger.js';
4
+ /**
5
+ * Copy a file to target locale without translation
6
+ *
7
+ * This is a naive approach, does not allow for wild cards
8
+ */
9
+ export default async function copyFile(settings) {
10
+ if (!settings.options?.copyFiles || settings.options.copyFiles.length === 0) {
11
+ return;
12
+ }
13
+ // Construct a map of source paths to target paths
14
+ const copyFiles = settings.options.copyFiles.reduce((paths, filePathTemplate) => {
15
+ const sourcePath = path.join(process.cwd(), filePathTemplate.replace('[locale]', settings.defaultLocale));
16
+ if (!fs.existsSync(sourcePath)) {
17
+ logger.error(`Failed to copy files: File path does not exist: ${sourcePath}`);
18
+ return paths;
19
+ }
20
+ paths[sourcePath] = [];
21
+ for (const locale of settings.locales) {
22
+ if (locale === settings.defaultLocale)
23
+ continue;
24
+ const targetPath = path.join(process.cwd(), filePathTemplate.replace('[locale]', locale));
25
+ paths[sourcePath].push(targetPath);
26
+ }
27
+ return paths;
28
+ }, {});
29
+ // Copy each file to the target locale
30
+ for (const sourcePath in copyFiles) {
31
+ for (const targetPath of copyFiles[sourcePath]) {
32
+ // Ensure the target directory exists
33
+ const targetDir = path.dirname(targetPath);
34
+ await fs.promises.mkdir(targetDir, { recursive: true });
35
+ // Copy the file
36
+ await fs.promises.copyFile(sourcePath, targetPath);
37
+ }
38
+ }
39
+ }
@@ -0,0 +1 @@
1
+ export declare function createLoadTranslationsFile(appDirectory: string, translationsDir: string | undefined, locales: string[]): Promise<void>;
@@ -0,0 +1,49 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { logger } from '../console/logger.js';
4
+ import chalk from 'chalk';
5
+ export async function createLoadTranslationsFile(appDirectory, translationsDir = './public/_gt', locales) {
6
+ const usingSrcDirectory = fs.existsSync(path.join(appDirectory, 'src'));
7
+ // Calculate the relative path from the loadTranslations.js location to the translations directory
8
+ const loadTranslationsDir = usingSrcDirectory
9
+ ? path.join(appDirectory, 'src')
10
+ : appDirectory;
11
+ const relativePath = path.relative(loadTranslationsDir, path.resolve(appDirectory, translationsDir));
12
+ const publicPath = relativePath ? `${relativePath}/` : './';
13
+ const filePath = usingSrcDirectory
14
+ ? path.join(appDirectory, 'src', 'loadTranslations.js')
15
+ : path.join(appDirectory, 'loadTranslations.js');
16
+ if (!fs.existsSync(filePath)) {
17
+ const loadTranslationsContent = `
18
+ export default async function loadTranslations(locale) {
19
+ try {
20
+ // Load translations from ${translationsDir} directory
21
+ // This matches the GT config files.gt.output path
22
+ const t = await import(\`${publicPath}\${locale}.json\`);
23
+ return t.default;
24
+ } catch (error) {
25
+ console.warn(\`Failed to load translations for locale \${locale}:\`, error);
26
+ return {};
27
+ }
28
+ }
29
+ `;
30
+ await fs.promises.writeFile(filePath, loadTranslationsContent);
31
+ logger.info(`Created ${chalk.cyan('loadTranslations.js')} file at ${chalk.cyan(filePath)}.`);
32
+ try {
33
+ await fs.promises.mkdir(translationsDir, { recursive: true });
34
+ // Create empty JSON files
35
+ for (const locale of locales) {
36
+ if (fs.existsSync(path.join(translationsDir, `${locale}.json`))) {
37
+ continue;
38
+ }
39
+ await fs.promises.writeFile(path.join(translationsDir, `${locale}.json`), '{}');
40
+ }
41
+ }
42
+ catch (error) {
43
+ logger.error(`Failed to create translations directory: ${error}`);
44
+ }
45
+ }
46
+ else {
47
+ logger.info(`Found ${chalk.cyan('loadTranslations.js')} file at ${chalk.cyan(filePath)}. Skipping creation...`);
48
+ }
49
+ }
@@ -0,0 +1,5 @@
1
+ import { SupportedLibraries } from '../types/index.js';
2
+ export declare function determineLibrary(): {
3
+ library: SupportedLibraries;
4
+ additionalModules: SupportedLibraries[];
5
+ };
@@ -0,0 +1,53 @@
1
+ import chalk from 'chalk';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import { logger } from '../console/logger.js';
5
+ import { Libraries } from '../types/libraries.js';
6
+ export function determineLibrary() {
7
+ let library = 'base';
8
+ const additionalModules = [];
9
+ try {
10
+ // Get the current working directory (where the CLI is being run)
11
+ const cwd = process.cwd();
12
+ const packageJsonPath = path.join(cwd, 'package.json');
13
+ // Check if package.json exists
14
+ if (!fs.existsSync(packageJsonPath)) {
15
+ logger.warn(chalk.yellow('No package.json found in the current directory. Please run this command from the root of your project.'));
16
+ return { library: 'base', additionalModules: [] };
17
+ }
18
+ // Read and parse package.json
19
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
20
+ const dependencies = {
21
+ ...packageJson.dependencies,
22
+ ...packageJson.devDependencies,
23
+ };
24
+ // Check for gt-next or gt-react in dependencies
25
+ if (dependencies[Libraries.GT_NEXT]) {
26
+ library = Libraries.GT_NEXT;
27
+ }
28
+ else if (dependencies[Libraries.GT_REACT]) {
29
+ library = Libraries.GT_REACT;
30
+ }
31
+ else if (dependencies[Libraries.GT_REACT_NATIVE]) {
32
+ library = Libraries.GT_REACT_NATIVE;
33
+ }
34
+ else if (dependencies[Libraries.GT_NODE]) {
35
+ library = Libraries.GT_NODE;
36
+ }
37
+ else if (dependencies['next-intl']) {
38
+ library = 'next-intl';
39
+ }
40
+ else if (dependencies['i18next']) {
41
+ library = 'i18next';
42
+ }
43
+ if (dependencies['i18next-icu']) {
44
+ additionalModules.push('i18next-icu');
45
+ }
46
+ // Fallback to base if neither is found
47
+ return { library, additionalModules };
48
+ }
49
+ catch (error) {
50
+ logger.error('Error determining framework: ' + String(error));
51
+ return { library: 'base', additionalModules: [] };
52
+ }
53
+ }
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Resolve the file path from the given file path or default paths.
3
+ * @param {string} filePath - The file path to resolve.
4
+ * @param {string[]} defaultPaths - The default paths to check.
5
+ * @returns {string} - The resolved file path.
6
+ */
7
+ export default function findFilepath(paths: string[], errorMessage?: string): string;
8
+ /**
9
+ * Resolve the file paths from the given file paths or default paths.
10
+ * @param {string[]} paths - The file paths to resolve.
11
+ * @param {string} errorMessage - The error message to throw if no paths are found.
12
+ * @returns {string[]} - The resolved file paths.
13
+ */
14
+ export declare function findFilepaths(paths: string[], errorMessage?: string): string[];
15
+ export declare function getRelativePath(file: string, srcDirectory: string): string;
16
+ /**
17
+ * Find a file in a directory based on a wildcard pattern.
18
+ * @param {string} filePattern - The wildcard pattern to search for.
19
+ * @param {string} file - The file to search for.
20
+ * @returns {string} - The path to the file.
21
+ */
22
+ export declare function findFile(filePattern: string, file: string): string;
23
+ /**
24
+ * Read a file and return the contents.
25
+ * @param {string} filePath - The path to the file to read.
26
+ * @returns {string} - The contents of the file.
27
+ */
28
+ export declare function readFile(filePath: string): string;
29
+ /**
30
+ * Find a file in a directory.
31
+ * @param {string} dir - The directory to search in.
32
+ * @param {string} file - The file to search for.
33
+ * @returns {string} - The path to the file.
34
+ */
35
+ export declare function findFileInDir(dir: string, file: string): string;
36
+ export declare function getRelative(absolutePath: string): string;
@@ -0,0 +1,90 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { logger } from '../console/logger.js';
4
+ import { exitSync } from '../console/logging.js';
5
+ /**
6
+ * Resolve the file path from the given file path or default paths.
7
+ * @param {string} filePath - The file path to resolve.
8
+ * @param {string[]} defaultPaths - The default paths to check.
9
+ * @returns {string} - The resolved file path.
10
+ */
11
+ export default function findFilepath(paths, errorMessage = '') {
12
+ return findFilepaths(paths, errorMessage)?.[0] || '';
13
+ }
14
+ /**
15
+ * Resolve the file paths from the given file paths or default paths.
16
+ * @param {string[]} paths - The file paths to resolve.
17
+ * @param {string} errorMessage - The error message to throw if no paths are found.
18
+ * @returns {string[]} - The resolved file paths.
19
+ */
20
+ export function findFilepaths(paths, errorMessage = '') {
21
+ const resolvedPaths = [];
22
+ for (const possiblePath of paths) {
23
+ if (fs.existsSync(possiblePath)) {
24
+ resolvedPaths.push(possiblePath);
25
+ }
26
+ }
27
+ if (errorMessage) {
28
+ logger.error(errorMessage);
29
+ exitSync(1);
30
+ }
31
+ return resolvedPaths;
32
+ }
33
+ export function getRelativePath(file, srcDirectory) {
34
+ // Create relative path from src directory and remove extension
35
+ return path
36
+ .relative(srcDirectory, file.replace(/\.[^/.]+$/, '') // Remove file extension
37
+ )
38
+ .replace(/\\/g, '.') // Replace Windows backslashes with dots
39
+ .split(/[./]/) // Split on dots or forward slashes
40
+ .filter(Boolean) // Remove empty segments that might cause extra dots
41
+ .map((segment) => segment.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase()) // Convert each segment to snake case
42
+ .join('.'); // Rejoin with dots
43
+ }
44
+ /**
45
+ * Find a file in a directory based on a wildcard pattern.
46
+ * @param {string} filePattern - The wildcard pattern to search for.
47
+ * @param {string} file - The file to search for.
48
+ * @returns {string} - The path to the file.
49
+ */
50
+ export function findFile(filePattern, file) {
51
+ // Handle wildcard pattern by replacing the wildcard with the file parameter
52
+ const resolvedPath = filePattern.replace(/\*/, file);
53
+ if (fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isFile()) {
54
+ return fs.readFileSync(resolvedPath, 'utf8');
55
+ }
56
+ return '';
57
+ }
58
+ /**
59
+ * Read a file and return the contents.
60
+ * @param {string} filePath - The path to the file to read.
61
+ * @returns {string} - The contents of the file.
62
+ */
63
+ export function readFile(filePath) {
64
+ if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
65
+ return fs.readFileSync(filePath, 'utf8');
66
+ }
67
+ return '';
68
+ }
69
+ /**
70
+ * Find a file in a directory.
71
+ * @param {string} dir - The directory to search in.
72
+ * @param {string} file - The file to search for.
73
+ * @returns {string} - The path to the file.
74
+ */
75
+ export function findFileInDir(dir, file) {
76
+ const resolvedPath = path.join(dir, file);
77
+ try {
78
+ if (fs.existsSync(resolvedPath)) {
79
+ return fs.readFileSync(resolvedPath, 'utf8');
80
+ }
81
+ }
82
+ catch (error) {
83
+ logger.error('Error finding file in directory: ' + String(error));
84
+ }
85
+ return '';
86
+ }
87
+ export function getRelative(absolutePath) {
88
+ const path2 = path.resolve(absolutePath);
89
+ return path.relative(process.cwd(), path2);
90
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Loads a JSON file from a given filepath, returning null if the file is not found or the JSON doesn't parse.
3
+ * @param {string} filepath - The path to the JSON file.
4
+ * @returns {Record<string, any> | null} - The parsed JSON object or null if an error occurs.
5
+ */
6
+ export default function loadJSON(filepath: string): Record<string, any> | null;
@@ -0,0 +1,17 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ /**
4
+ * Loads a JSON file from a given filepath, returning null if the file is not found or the JSON doesn't parse.
5
+ * @param {string} filepath - The path to the JSON file.
6
+ * @returns {Record<string, any> | null} - The parsed JSON object or null if an error occurs.
7
+ */
8
+ export default function loadJSON(filepath) {
9
+ try {
10
+ const data = fs.readFileSync(path.resolve(filepath), 'utf-8');
11
+ return JSON.parse(data);
12
+ }
13
+ catch (error) {
14
+ // Return null if the file is not found or JSON parsing fails
15
+ return null;
16
+ }
17
+ }
@@ -0,0 +1 @@
1
+ export declare function matchFiles(cwd: string, patterns: string[]): string[];