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,48 @@
1
+ import * as t from '@babel/types';
2
+ import traverseModule from '@babel/traverse';
3
+ // Handle CommonJS/ESM interop
4
+ const traverse = traverseModule.default || traverseModule;
5
+ /**
6
+ * Adds the plugin invocation to the vite config file
7
+ * Naive solution: look for an object with a plugins property only inside of a defineConfig call
8
+ */
9
+ export function addPluginInvocation({ ast, alias, namespaces, }) {
10
+ let addedPlugin = false;
11
+ if (namespaces.length === 0 && !alias) {
12
+ return false;
13
+ }
14
+ const pluginInvocation = alias
15
+ ? t.callExpression(t.identifier(alias), [])
16
+ : t.callExpression(t.memberExpression(t.identifier(namespaces[0]), t.identifier('vite')), []);
17
+ traverse(ast, {
18
+ CallExpression(path) {
19
+ if (!t.isIdentifier(path.node.callee, { name: 'defineConfig' }) ||
20
+ !path.node.arguments.length ||
21
+ !t.isObjectExpression(path.node.arguments[0])) {
22
+ return;
23
+ }
24
+ for (const property of path.node.arguments[0].properties) {
25
+ if (!t.isObjectProperty(property) || !isPluginsProperty(property))
26
+ continue;
27
+ if (t.isArrayExpression(property.value)) {
28
+ // Add to array: [react()] -> [react(), gtCompiler()]
29
+ property.value.elements.push(pluginInvocation);
30
+ addedPlugin = true;
31
+ }
32
+ else {
33
+ // Spread the array: someList -> [...someList, gtCompiler()]
34
+ property.value = t.arrayExpression([
35
+ t.spreadElement(property.value),
36
+ pluginInvocation,
37
+ ]);
38
+ addedPlugin = true;
39
+ }
40
+ }
41
+ },
42
+ });
43
+ return addedPlugin;
44
+ }
45
+ function isPluginsProperty(node) {
46
+ return (t.isIdentifier(node.key, { name: 'plugins' }) ||
47
+ t.isStringLiteral(node.key, { value: 'plugins' }));
48
+ }
@@ -0,0 +1,15 @@
1
+ import { ParseResult } from '@babel/parser';
2
+ import * as t from '@babel/types';
3
+ export interface CheckCompilerImportResult {
4
+ hasCompilerImport: boolean;
5
+ alias: string | null;
6
+ namespaces: string[];
7
+ }
8
+ /**
9
+ * Given the vite config file ast, checks if the @generaltranslation/compiler package is imported.
10
+ * If it is imported, capture any aliases or namespace.
11
+ *
12
+ * Does not handle:
13
+ * - Nested expressions
14
+ */
15
+ export declare function checkCompilerImport(ast: ParseResult<t.File>): CheckCompilerImportResult;
@@ -0,0 +1,113 @@
1
+ import * as t from '@babel/types';
2
+ import traverseModule from '@babel/traverse';
3
+ // Handle CommonJS/ESM interop
4
+ const traverse = traverseModule.default || traverseModule;
5
+ /**
6
+ * Given the vite config file ast, checks if the @generaltranslation/compiler package is imported.
7
+ * If it is imported, capture any aliases or namespace.
8
+ *
9
+ * Does not handle:
10
+ * - Nested expressions
11
+ */
12
+ export function checkCompilerImport(ast) {
13
+ const result = {
14
+ hasCompilerImport: false,
15
+ alias: null,
16
+ namespaces: [],
17
+ };
18
+ traverse(ast, {
19
+ ImportDeclaration(path) {
20
+ handleImportDeclaration(path, result);
21
+ },
22
+ VariableDeclaration(path) {
23
+ handleVariableDeclaration(path, result);
24
+ },
25
+ });
26
+ return result;
27
+ }
28
+ /* =============================== */
29
+ /* Parsing Functions */
30
+ /* =============================== */
31
+ /**
32
+ * Checks an import declaration for a compiler import
33
+ * @param path - The import declaration path
34
+ * @param result - The result object
35
+ */
36
+ function handleImportDeclaration(path, result) {
37
+ if (path.node.source.value !== '@generaltranslation/compiler')
38
+ return;
39
+ for (const spec of path.node.specifiers) {
40
+ if (t.isImportSpecifier(spec)) {
41
+ // Handle named import: import { vite as gtCompiler } from '@generaltranslation/compiler'
42
+ if (t.isIdentifier(spec.imported) && spec.imported.name === 'vite') {
43
+ result.hasCompilerImport = true;
44
+ result.alias = spec.local.name;
45
+ }
46
+ }
47
+ else {
48
+ // Handle default import: import gtCompiler from '@generaltranslation/compiler'
49
+ // Handle namespace import: import * as gtCompiler from '@generaltranslation/compiler'
50
+ result.hasCompilerImport = true;
51
+ result.namespaces.push(spec.local.name);
52
+ }
53
+ }
54
+ }
55
+ /**
56
+ * Handles a variable declaration for a compiler import
57
+ * @param path - The variable declaration path
58
+ * @param result - The result object
59
+ */
60
+ function handleVariableDeclaration(path, result) {
61
+ path.node.declarations.forEach((dec) => {
62
+ // Handle destructuring: const { withGTConfig } = require('@generaltranslation/compiler')
63
+ if (t.isCallExpression(dec.init) &&
64
+ t.isIdentifier(dec.init.callee, { name: 'require' }) &&
65
+ t.isStringLiteral(dec.init.arguments[0], {
66
+ value: '@generaltranslation/compiler',
67
+ })) {
68
+ if (t.isIdentifier(dec.id)) {
69
+ // Handle namespace assignment: const gtCompiler = require('@generaltranslation/compiler')
70
+ result.hasCompilerImport = true;
71
+ result.namespaces.push(dec.id.name);
72
+ }
73
+ else if (t.isObjectPattern(dec.id)) {
74
+ // Handle destructuring: const { vite: gtCompiler } = require('@generaltranslation/compiler')
75
+ let foundVite = false;
76
+ const restElements = [];
77
+ for (const prop of dec.id.properties) {
78
+ if (t.isObjectProperty(prop) &&
79
+ t.isIdentifier(prop.key) &&
80
+ t.isIdentifier(prop.value) &&
81
+ prop.key.name === 'vite') {
82
+ // Handle destructing alias assignment: const { vite: gtCompiler } = require('@generaltranslation/compiler')
83
+ result.hasCompilerImport = true;
84
+ result.alias = prop.value.name;
85
+ foundVite = true;
86
+ break;
87
+ }
88
+ else if (t.isRestElement(prop) && t.isIdentifier(prop.argument)) {
89
+ // Track list of rest elements
90
+ restElements.push(prop.argument.name);
91
+ }
92
+ }
93
+ // Handle destructuring rest elements: const { ...some, b, ...others, d } = require('@generaltranslation/compiler')
94
+ if (!foundVite && restElements.length > 0) {
95
+ result.hasCompilerImport = true;
96
+ result.namespaces.push(...restElements);
97
+ }
98
+ }
99
+ }
100
+ else if (t.isMemberExpression(dec.init) &&
101
+ t.isCallExpression(dec.init.object) &&
102
+ t.isIdentifier(dec.init.object.callee, { name: 'require' }) &&
103
+ t.isStringLiteral(dec.init.object.arguments[0], {
104
+ value: '@generaltranslation/compiler',
105
+ }) &&
106
+ t.isIdentifier(dec.init.property, { name: 'vite' }) &&
107
+ t.isIdentifier(dec.id)) {
108
+ // Handle member access: const gtCompiler = require('@generaltranslation/compiler').vite
109
+ result.hasCompilerImport = true;
110
+ result.alias = dec.id.name;
111
+ }
112
+ });
113
+ }
@@ -0,0 +1,12 @@
1
+ import { ParseResult } from '@babel/parser';
2
+ import * as t from '@babel/types';
3
+ /**
4
+ * Checks if the given AST is exporting the gtCompiler plugin
5
+ *
6
+ * Naive check: see if the plugin has been invoked anywhere in the file
7
+ */
8
+ export declare function checkPluginInvocation({ ast, alias, namespaces, }: {
9
+ ast: ParseResult<t.File>;
10
+ alias: string | null;
11
+ namespaces: string[];
12
+ }): boolean;
@@ -0,0 +1,32 @@
1
+ import * as t from '@babel/types';
2
+ import traverseModule from '@babel/traverse';
3
+ // Handle CommonJS/ESM interop
4
+ const traverse = traverseModule.default || traverseModule;
5
+ /**
6
+ * Checks if the given AST is exporting the gtCompiler plugin
7
+ *
8
+ * Naive check: see if the plugin has been invoked anywhere in the file
9
+ */
10
+ export function checkPluginInvocation({ ast, alias, namespaces, }) {
11
+ let result = false;
12
+ traverse(ast, {
13
+ CallExpression(path) {
14
+ // Handle: gtCompiler()
15
+ if (!alias)
16
+ return;
17
+ if (t.isIdentifier(path.node.callee, { name: alias })) {
18
+ result = true;
19
+ }
20
+ },
21
+ MemberExpression(path) {
22
+ // Handle: gtCompiler.vite()
23
+ if (t.isIdentifier(path.node.object) &&
24
+ namespaces.includes(path.node.object.name) &&
25
+ t.isCallExpression(path.parent) &&
26
+ t.isIdentifier(path.node.property, { name: 'vite' })) {
27
+ result = true;
28
+ }
29
+ },
30
+ });
31
+ return result;
32
+ }
@@ -0,0 +1,3 @@
1
+ import { BuildOptions } from 'esbuild';
2
+ import { Updates } from '../../types/index.js';
3
+ export declare function createDictionaryUpdates(dictionaryPath: string, errors: string[], warnings: string[], esbuildConfig?: BuildOptions): Promise<Updates>;
@@ -0,0 +1,187 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import os from 'os';
4
+ import { build } from 'esbuild';
5
+ import flattenDictionary from '../utils/flattenDictionary.js';
6
+ import loadJSON from '../../fs/loadJSON.js';
7
+ import { hashSource } from 'generaltranslation/id';
8
+ import getEntryAndMetadata from '../utils/getEntryAndMetadata.js';
9
+ import { logger } from '../../console/logger.js';
10
+ import { randomUUID } from 'node:crypto';
11
+ import { isValidIcu } from '../jsx/evaluateJsx.js';
12
+ import { warnInvalidIcuSync, warnInvalidMaxCharsSync, } from '../../console/index.js';
13
+ import { exitSync } from '../../console/logging.js';
14
+ export async function createDictionaryUpdates(dictionaryPath, errors, warnings, esbuildConfig) {
15
+ let dictionary;
16
+ // ---- HANDLE JSON STRING DICTIONARY ----- //
17
+ if (dictionaryPath.endsWith('.json')) {
18
+ dictionary = flattenDictionary(loadJSON(dictionaryPath) || {});
19
+ }
20
+ // ----- HANDLE REACT DICTIONARY ---- //
21
+ else {
22
+ const result = await build({
23
+ ...esbuildConfig,
24
+ entryPoints: [dictionaryPath],
25
+ write: false,
26
+ });
27
+ const bundledCode = result.outputFiles[0].text;
28
+ const tempFilePath = path.join(os.tmpdir(), `bundled-dictionary-${randomUUID()}.js`);
29
+ await fs.promises.writeFile(tempFilePath, bundledCode);
30
+ // Load the module using dynamic import
31
+ let dictionaryModule;
32
+ try {
33
+ dictionaryModule = await import(tempFilePath);
34
+ }
35
+ catch (error) {
36
+ logger.error(`Failed to load the bundled dictionary code: ${error}`);
37
+ exitSync(1);
38
+ }
39
+ finally {
40
+ // Clean up the temporary file
41
+ await fs.promises.unlink(tempFilePath);
42
+ }
43
+ const unwrappedDictionary = unwrapDictionaryModule(dictionaryModule);
44
+ dictionary = flattenDictionary(unwrappedDictionary);
45
+ }
46
+ // ----- CREATE PARTIAL UPDATES ----- //
47
+ const updates = [];
48
+ for (const id of Object.keys(dictionary)) {
49
+ const { entry, metadata: props, // context, etc.
50
+ } = getEntryAndMetadata(dictionary[id]);
51
+ // Validate ICU
52
+ const { isValid, error } = isValidIcu(entry);
53
+ if (!isValid) {
54
+ warnings.push(warnInvalidIcuSync(dictionaryPath, entry, error ?? 'Unknown error'));
55
+ continue;
56
+ }
57
+ // Validate maxChars
58
+ if (props?.$maxChars &&
59
+ (isNaN(props.$maxChars) || !Number.isInteger(props.$maxChars))) {
60
+ errors.push(warnInvalidMaxCharsSync(dictionaryPath, String(props.$maxChars), id));
61
+ continue;
62
+ }
63
+ // Map $context to context
64
+ const context = props?.$context;
65
+ const maxChars = props?.$maxChars;
66
+ const metadata = {
67
+ id,
68
+ ...(context && { context }),
69
+ ...(maxChars != null && { maxChars: Math.abs(maxChars) }),
70
+ // This hash isn't actually used by the GT API, just for consistency sake
71
+ hash: hashSource({
72
+ source: entry,
73
+ ...(context && { context }),
74
+ ...(id && { id }),
75
+ ...(maxChars != null && { maxChars: Math.abs(maxChars) }),
76
+ dataFormat: 'ICU',
77
+ }),
78
+ };
79
+ updates.push({
80
+ dataFormat: 'ICU',
81
+ source: entry,
82
+ metadata,
83
+ });
84
+ }
85
+ return updates;
86
+ }
87
+ function unwrapDictionaryModule(mod) {
88
+ let current = mod;
89
+ // Keep unwrapping until we get to the actual dictionary
90
+ while (current && typeof current === 'object') {
91
+ const keys = Object.keys(current);
92
+ // Check if this looks like a module namespace object (has only module-related keys)
93
+ const isModuleNamespace = keys.every((key) => key === 'default' || key === 'module.exports' || key === '__esModule');
94
+ // Check if this is a module with named exports (has 'dictionary' export)
95
+ // Only check for named exports if it's NOT a pure module namespace
96
+ const hasNamedDictionary = !isModuleNamespace &&
97
+ 'dictionary' in current &&
98
+ current.dictionary &&
99
+ typeof current.dictionary === 'object' &&
100
+ !Array.isArray(current.dictionary);
101
+ if (hasNamedDictionary) {
102
+ // If there's a named 'dictionary' export, use that
103
+ return current.dictionary;
104
+ }
105
+ else if (isModuleNamespace) {
106
+ // Try to get the default export
107
+ if ('default' in current) {
108
+ let result = current.default;
109
+ // If the default export is a function (getter), call it
110
+ if (typeof result === 'function') {
111
+ try {
112
+ result = result();
113
+ }
114
+ catch {
115
+ // If calling fails, break the loop
116
+ break;
117
+ }
118
+ }
119
+ // If we have a valid object, check if we should continue unwrapping
120
+ if (result && typeof result === 'object' && !Array.isArray(result)) {
121
+ const resultKeys = Object.keys(result);
122
+ // Only continue unwrapping if this looks like a getter-based module layer
123
+ // We should NOT continue if this is just a user dictionary with a 'default' property
124
+ const hasGetterProperties = resultKeys.some((key) => {
125
+ try {
126
+ const descriptor = Object.getOwnPropertyDescriptor(result, key);
127
+ return descriptor && typeof descriptor.get === 'function';
128
+ }
129
+ catch {
130
+ return false;
131
+ }
132
+ });
133
+ if (hasGetterProperties) {
134
+ current = result;
135
+ continue;
136
+ }
137
+ else {
138
+ // This is the actual dictionary, return it
139
+ return result;
140
+ }
141
+ }
142
+ }
143
+ // Try module.exports as fallback
144
+ if ('module.exports' in current) {
145
+ let result = current['module.exports'];
146
+ if (typeof result === 'function') {
147
+ try {
148
+ result = result();
149
+ }
150
+ catch {
151
+ // If calling fails, break the loop
152
+ break;
153
+ }
154
+ }
155
+ if (result && typeof result === 'object' && !Array.isArray(result)) {
156
+ const resultKeys = Object.keys(result);
157
+ // Only continue unwrapping if this looks like a getter-based module layer
158
+ // We should NOT continue if this is just a user dictionary with a 'default' property
159
+ const hasGetterProperties = resultKeys.some((key) => {
160
+ try {
161
+ const descriptor = Object.getOwnPropertyDescriptor(result, key);
162
+ return descriptor && typeof descriptor.get === 'function';
163
+ }
164
+ catch {
165
+ return false;
166
+ }
167
+ });
168
+ if (hasGetterProperties) {
169
+ current = result;
170
+ continue;
171
+ }
172
+ else {
173
+ // This is the actual dictionary, return it
174
+ return result;
175
+ }
176
+ }
177
+ }
178
+ // If we can't unwrap further, break
179
+ break;
180
+ }
181
+ else {
182
+ // This appears to be the actual dictionary object, not a module wrapper
183
+ break;
184
+ }
185
+ }
186
+ return current || {};
187
+ }
@@ -0,0 +1,13 @@
1
+ import { Updates } from '../../types/index.js';
2
+ import type { ParsingConfigOptions } from '../../types/parsing.js';
3
+ import { GTLibrary } from '../../types/libraries.js';
4
+ export declare function createInlineUpdates(pkg: GTLibrary, validate: boolean, filePatterns: string[] | undefined, parsingOptions: ParsingConfigOptions): Promise<{
5
+ updates: Updates;
6
+ errors: string[];
7
+ warnings: string[];
8
+ }>;
9
+ /**
10
+ * Dedupe entries
11
+ */
12
+ declare function dedupeUpdates(updates: Updates): void;
13
+ export { dedupeUpdates as _test_dedupeUpdates };
@@ -0,0 +1,161 @@
1
+ import fs from 'node:fs';
2
+ import { parse } from '@babel/parser';
3
+ import { hashSource, hashString } from 'generaltranslation/id';
4
+ import { parseTranslationComponent } from '../jsx/utils/jsxParsing/parseJsx.js';
5
+ import { parseStrings } from '../jsx/utils/parseStringFunction.js';
6
+ import { logger } from '../../console/logger.js';
7
+ import { matchFiles } from '../../fs/matchFiles.js';
8
+ import { DEFAULT_SRC_PATTERNS } from '../../config/generateSettings.js';
9
+ import { getPathsAndAliases } from '../jsx/utils/getPathsAndAliases.js';
10
+ import { GT_LIBRARIES_UPSTREAM, REACT_LIBRARIES, } from '../../types/libraries.js';
11
+ export async function createInlineUpdates(pkg, validate, filePatterns, parsingOptions) {
12
+ const updates = [];
13
+ const errors = [];
14
+ const warnings = new Set();
15
+ const pkgs = getUpstreamPackages(pkg);
16
+ // Use the provided app directory or default to the current directory
17
+ const files = matchFiles(process.cwd(), filePatterns || DEFAULT_SRC_PATTERNS);
18
+ for (const file of files) {
19
+ const code = await fs.promises.readFile(file, 'utf8');
20
+ let ast;
21
+ try {
22
+ ast = parse(code, {
23
+ sourceType: 'module',
24
+ plugins: ['jsx', 'typescript'],
25
+ });
26
+ }
27
+ catch (error) {
28
+ logger.error(`Error parsing file ${file}: ${error}`);
29
+ continue;
30
+ }
31
+ // First pass: collect imports and process translation functions
32
+ const { importAliases, inlineTranslationPaths, translationComponentPaths } = getPathsAndAliases(ast, pkgs);
33
+ // Process translation functions asynchronously
34
+ for (const { localName: name, originalName, path, } of inlineTranslationPaths) {
35
+ parseStrings(name, originalName, path, {
36
+ parsingOptions,
37
+ file,
38
+ ignoreInlineMetadata: false,
39
+ ignoreDynamicContent: false,
40
+ ignoreInvalidIcu: false,
41
+ ignoreInlineListContent: false,
42
+ }, { updates, errors, warnings });
43
+ }
44
+ // Parse <T> components
45
+ if (REACT_LIBRARIES.includes(pkg)) {
46
+ for (const { localName, path } of translationComponentPaths) {
47
+ parseTranslationComponent({
48
+ originalName: localName,
49
+ localName,
50
+ path,
51
+ updates,
52
+ config: {
53
+ importAliases,
54
+ parsingOptions,
55
+ pkgs,
56
+ file,
57
+ },
58
+ output: {
59
+ errors,
60
+ warnings,
61
+ unwrappedExpressions: [],
62
+ },
63
+ });
64
+ }
65
+ }
66
+ }
67
+ // Post processing steps:
68
+ await calculateHashes(updates);
69
+ dedupeUpdates(updates);
70
+ linkStaticUpdates(updates);
71
+ return { updates, errors, warnings: [...warnings] };
72
+ }
73
+ /**
74
+ * Given a package name, return the upstream packages that it depends on
75
+ * @param pkg - The package name
76
+ * @returns The upstream packages that the package depends on
77
+ */
78
+ function getUpstreamPackages(pkg) {
79
+ return GT_LIBRARIES_UPSTREAM[pkg];
80
+ }
81
+ /**
82
+ * Calculate hashes
83
+ */
84
+ async function calculateHashes(updates) {
85
+ // parallel calculation of hashes
86
+ await Promise.all(updates.map(async (update) => {
87
+ const hash = hashSource({
88
+ source: update.source,
89
+ ...(update.metadata.context && { context: update.metadata.context }),
90
+ ...(update.metadata.id && { id: update.metadata.id }),
91
+ ...(update.metadata.maxChars != null && {
92
+ maxChars: update.metadata.maxChars,
93
+ }),
94
+ dataFormat: update.dataFormat,
95
+ });
96
+ update.metadata.hash = hash;
97
+ }));
98
+ }
99
+ /**
100
+ * Dedupe entries
101
+ */
102
+ function dedupeUpdates(updates) {
103
+ const mergedByHash = new Map();
104
+ const noHashUpdates = [];
105
+ for (const update of updates) {
106
+ const hash = update.metadata.hash;
107
+ if (!hash) {
108
+ noHashUpdates.push(update);
109
+ continue;
110
+ }
111
+ const existing = mergedByHash.get(hash);
112
+ if (!existing) {
113
+ mergedByHash.set(hash, update);
114
+ continue;
115
+ }
116
+ const existingPaths = Array.isArray(existing.metadata.filePaths)
117
+ ? existing.metadata.filePaths.slice()
118
+ : [];
119
+ const newPaths = Array.isArray(update.metadata.filePaths)
120
+ ? update.metadata.filePaths
121
+ : [];
122
+ for (const p of newPaths) {
123
+ if (!existingPaths.includes(p)) {
124
+ existingPaths.push(p);
125
+ }
126
+ }
127
+ if (existingPaths.length) {
128
+ existing.metadata.filePaths = existingPaths;
129
+ }
130
+ }
131
+ const mergedUpdates = [...mergedByHash.values(), ...noHashUpdates];
132
+ updates.splice(0, updates.length, ...mergedUpdates);
133
+ }
134
+ /**
135
+ * Mark static updates as the related by attaching a shared id to static content
136
+ * Id is calculated as the hash of the static children's combined hashes
137
+ */
138
+ function linkStaticUpdates(updates) {
139
+ // construct map of temporary static ids to updates
140
+ const temporaryStaticIdToUpdates = updates.reduce((acc, update) => {
141
+ if (update.metadata.staticId) {
142
+ if (!acc[update.metadata.staticId]) {
143
+ acc[update.metadata.staticId] = [];
144
+ }
145
+ acc[update.metadata.staticId].push(update);
146
+ }
147
+ return acc;
148
+ }, {});
149
+ // Calculate shared static ids
150
+ Object.values(temporaryStaticIdToUpdates).forEach((staticUpdates) => {
151
+ const hashes = staticUpdates
152
+ .map((update) => update.metadata.hash)
153
+ .sort()
154
+ .join('-');
155
+ const sharedStaticId = hashString(hashes);
156
+ staticUpdates.forEach((update) => {
157
+ update.metadata.staticId = sharedStaticId;
158
+ });
159
+ });
160
+ }
161
+ export { dedupeUpdates as _test_dedupeUpdates };
@@ -0,0 +1,12 @@
1
+ import { SupportedFrameworks, WrapOptions } from '../../types/index.js';
2
+ import { Libraries } from '../../types/libraries.js';
3
+ /**
4
+ * Wraps all JSX elements in the src directory with a <T> tag, with unique ids.
5
+ * - Ignores pure strings
6
+ *
7
+ * @param options - The options object
8
+ * @returns An object containing the updates and errors
9
+ */
10
+ export declare function wrapContentReact(options: WrapOptions, pkg: `${typeof Libraries.GT_REACT}`, framework: SupportedFrameworks, errors: string[], warnings: string[]): Promise<{
11
+ filesUpdated: string[];
12
+ }>;