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,91 @@
1
+ import traverseModule from '@babel/traverse';
2
+ import { GT_TRANSLATION_FUNCS, INLINE_TRANSLATION_HOOK, INLINE_TRANSLATION_HOOK_ASYNC, INLINE_MESSAGE_HOOK, INLINE_MESSAGE_HOOK_ASYNC, MSG_REGISTRATION_FUNCTION, TRANSLATION_COMPONENT, } from '../../jsx/utils/constants.js';
3
+ import { extractImportName } from './parseAst.js';
4
+ // Handle CommonJS/ESM interop
5
+ const traverse = traverseModule.default || traverseModule;
6
+ /**
7
+ * Constructs tracking for gt related variables of interest
8
+ * inlineTranslationPaths: these are string-related translation functions
9
+ * translationComponentPaths: these are just <T> components
10
+ * importAliases: any other GT related imports
11
+ */
12
+ export function getPathsAndAliases(ast, pkgs) {
13
+ // First pass: collect imports and process translation functions
14
+ const importAliases = {};
15
+ const inlineTranslationPaths = [];
16
+ const translationComponentPaths = [];
17
+ traverse(ast, {
18
+ ImportDeclaration(path) {
19
+ if (pkgs.some((pkg) => path.node.source.value.startsWith(pkg))) {
20
+ const importName = extractImportName(path.node, pkgs, GT_TRANSLATION_FUNCS);
21
+ for (const name of importName) {
22
+ if (name.original === INLINE_TRANSLATION_HOOK ||
23
+ name.original === INLINE_TRANSLATION_HOOK_ASYNC ||
24
+ name.original === INLINE_MESSAGE_HOOK ||
25
+ name.original === INLINE_MESSAGE_HOOK_ASYNC ||
26
+ name.original === MSG_REGISTRATION_FUNCTION) {
27
+ inlineTranslationPaths.push({
28
+ localName: name.local,
29
+ path,
30
+ originalName: name.original,
31
+ });
32
+ }
33
+ else if (name.original === TRANSLATION_COMPONENT) {
34
+ translationComponentPaths.push({
35
+ localName: name.local,
36
+ path,
37
+ originalName: name.original,
38
+ });
39
+ }
40
+ else {
41
+ importAliases[name.local] = name.original;
42
+ }
43
+ }
44
+ }
45
+ },
46
+ VariableDeclarator(path) {
47
+ // Check if the init is a require call
48
+ if (path.node.init?.type === 'CallExpression' &&
49
+ path.node.init.callee.type === 'Identifier' &&
50
+ path.node.init.callee.name === 'require') {
51
+ // Check if it's requiring our package
52
+ const args = path.node.init.arguments;
53
+ if (args.length === 1 &&
54
+ args[0].type === 'StringLiteral' &&
55
+ pkgs.some((pkg) => args[0].value.startsWith(pkg))) {
56
+ const parentPath = path.parentPath;
57
+ if (parentPath.isVariableDeclaration()) {
58
+ const importName = extractImportName(parentPath.node, pkgs, GT_TRANSLATION_FUNCS);
59
+ for (const name of importName) {
60
+ if (name.original === INLINE_TRANSLATION_HOOK ||
61
+ name.original === INLINE_TRANSLATION_HOOK_ASYNC ||
62
+ name.original === INLINE_MESSAGE_HOOK ||
63
+ name.original === INLINE_MESSAGE_HOOK_ASYNC) {
64
+ inlineTranslationPaths.push({
65
+ localName: name.local,
66
+ path: parentPath,
67
+ originalName: name.original,
68
+ });
69
+ }
70
+ else if (name.original === TRANSLATION_COMPONENT) {
71
+ translationComponentPaths.push({
72
+ localName: name.local,
73
+ path: parentPath,
74
+ originalName: name.original,
75
+ });
76
+ }
77
+ else {
78
+ importAliases[name.local] = name.original;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ },
85
+ });
86
+ return {
87
+ importAliases,
88
+ inlineTranslationPaths,
89
+ translationComponentPaths,
90
+ };
91
+ }
@@ -0,0 +1,7 @@
1
+ import * as t from '@babel/types';
2
+ /**
3
+ * Given an expression, return true if it is a number literal
4
+ * @param expr - The expression to check
5
+ * @returns True if the expression is a number literal, false otherwise
6
+ */
7
+ export declare function isNumberLiteral(expr: t.Expression): boolean;
@@ -0,0 +1,13 @@
1
+ import * as t from '@babel/types';
2
+ /**
3
+ * Given an expression, return true if it is a number literal
4
+ * @param expr - The expression to check
5
+ * @returns True if the expression is a number literal, false otherwise
6
+ */
7
+ export function isNumberLiteral(expr) {
8
+ if (t.isUnaryExpression(expr)) {
9
+ return (isNumberLiteral(expr.argument) &&
10
+ (expr.operator === '-' || expr.operator === '+'));
11
+ }
12
+ return t.isNumericLiteral(expr);
13
+ }
@@ -0,0 +1,9 @@
1
+ import { JsxChildren } from 'generaltranslation/types';
2
+ import { MultipliedTreeNode } from './types.js';
3
+ /**
4
+ * Add GT Identifier and minify the tree (recreates addGTIdentifier and writeChildrenAsObjects)
5
+ * @param tree - The tree to add GT identifiers to
6
+ * @param startingIndex - The starting index for GT IDs
7
+ * @returns The tree with GT identifiers added
8
+ */
9
+ export default function addGTIdentifierToSyntaxTree(tree: MultipliedTreeNode, startingIndex?: number): JsxChildren;
@@ -0,0 +1,138 @@
1
+ import { HTML_CONTENT_PROPS, } from 'generaltranslation/types';
2
+ import { defaultVariableNames, getVariableName, minifyVariableType, } from '../../../utils/getVariableName.js';
3
+ import { isAcceptedPluralForm } from 'generaltranslation/internal';
4
+ import { DATA_ATTR_PREFIX } from '../constants.js';
5
+ /**
6
+ * Construct the data-_gt prop
7
+ * @param type - The type of the element
8
+ * @param props - The props of the element
9
+ * @param id - The id of the element
10
+ * @returns The data-_gt prop
11
+ */
12
+ function constructGTProp(type, props, id) {
13
+ // Add translatable HTML content props
14
+ const generaltranslation = Object.entries(HTML_CONTENT_PROPS).reduce((acc, [minifiedName, fullName]) => {
15
+ if (props[fullName]) {
16
+ acc[minifiedName] = props[fullName];
17
+ }
18
+ return acc;
19
+ }, {});
20
+ // Plural
21
+ if (type === 'Plural') {
22
+ const pluralBranches = Object.entries(props).reduce((acc, [branchName, branch]) => {
23
+ if (isAcceptedPluralForm(branchName)) {
24
+ acc[branchName] = addGTIdentifierToSyntaxTree(branch, id);
25
+ }
26
+ return acc;
27
+ }, {});
28
+ // Add plural branches to the generaltranslation
29
+ if (Object.keys(pluralBranches).length) {
30
+ generaltranslation.t = 'p';
31
+ generaltranslation.b = pluralBranches;
32
+ }
33
+ // Branch
34
+ }
35
+ else if (type === 'Branch') {
36
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars
37
+ const { children, branch, ...allBranches } = props;
38
+ // Filter out data-* attributes injected by build tools
39
+ const branches = Object.fromEntries(Object.entries(allBranches).filter(([key]) => !key.startsWith(DATA_ATTR_PREFIX)));
40
+ const resultBranches = Object.entries(branches).reduce((acc, [branchName, branch]) => {
41
+ acc[branchName] = addGTIdentifierToSyntaxTree(branch, id);
42
+ return acc;
43
+ }, {});
44
+ // Add branches to the generaltranslation
45
+ if (Object.keys(resultBranches).length) {
46
+ generaltranslation.t = 'b';
47
+ generaltranslation.b = resultBranches;
48
+ }
49
+ }
50
+ return Object.keys(generaltranslation).length
51
+ ? generaltranslation
52
+ : undefined;
53
+ }
54
+ /**
55
+ * Add GT Identifier and minify the tree (recreates addGTIdentifier and writeChildrenAsObjects)
56
+ * @param tree - The tree to add GT identifiers to
57
+ * @param startingIndex - The starting index for GT IDs
58
+ * @returns The tree with GT identifiers added
59
+ */
60
+ export default function addGTIdentifierToSyntaxTree(tree, startingIndex = 0) {
61
+ // Edge case: boolean or null, just return the tree
62
+ if (typeof tree === 'boolean' || tree === null) {
63
+ return tree;
64
+ }
65
+ // Object to keep track of the current index for GT IDs
66
+ const indexObject = { index: startingIndex };
67
+ /**
68
+ * Handle a single child
69
+ * @param child - The child to handle
70
+ * @returns The handled child
71
+ */
72
+ const handleSingleChild = (child) => {
73
+ // Handle JSX elements
74
+ if (child && typeof child === 'object') {
75
+ let { type } = child;
76
+ const { props } = child;
77
+ indexObject.index += 1;
78
+ // Handle fragments
79
+ if (type === 'React.Fragment') {
80
+ type = '';
81
+ }
82
+ // Variables
83
+ if (Object.keys(defaultVariableNames).includes(type)) {
84
+ const variableType = minifyVariableType(type);
85
+ const variableName = getVariableName(props, type, indexObject.index);
86
+ return {
87
+ i: indexObject.index,
88
+ k: variableName,
89
+ v: variableType,
90
+ };
91
+ }
92
+ // Construct the data-_gt prop
93
+ const generaltranslation = constructGTProp(type, (props || {}), indexObject.index);
94
+ // Save current index and recurse
95
+ const currentIndex = indexObject.index;
96
+ const children = handleChildren(props?.children === undefined ? null : props?.children);
97
+ // Enforce boolean rendering behavior
98
+ // <T>{true}</T> -> true <- this is a boolean value, not a string
99
+ // <T>{false}</T> -> nothing
100
+ let includeChildren = true;
101
+ if (typeof children === 'boolean') {
102
+ // So, technically JsxChildren do include boolean values, but the type is incorrect
103
+ includeChildren = children !== false;
104
+ }
105
+ // Return the result
106
+ return {
107
+ t: type || `C${currentIndex}`,
108
+ i: currentIndex,
109
+ ...(includeChildren && { c: children }),
110
+ ...(generaltranslation && { d: generaltranslation }),
111
+ };
112
+ }
113
+ if (typeof child === 'number') {
114
+ return child.toString();
115
+ }
116
+ return child;
117
+ };
118
+ /**
119
+ * Handle children
120
+ * @param children - The children to handle
121
+ * @returns The handled children
122
+ */
123
+ const handleChildren = (children) => {
124
+ return Array.isArray(children)
125
+ ? children.map(handleSingleChild).filter((child) => {
126
+ // Enforce boolean rendering behavior
127
+ // <T>{true}{false}{null}</T> -> []
128
+ if (typeof child === 'boolean' ||
129
+ child === null ||
130
+ child === undefined) {
131
+ return false;
132
+ }
133
+ return true;
134
+ })
135
+ : handleSingleChild(children);
136
+ };
137
+ return handleChildren(tree);
138
+ }
@@ -0,0 +1,6 @@
1
+ import { JsxTree, MultiplicationNode, WhitespaceJsxTreeResult, WhitespaceMultiplicationNode } from './types.js';
2
+ export declare function trimJsxStringChild(child: string): string;
3
+ export declare function handleChildrenWhitespace(currentTree: MultiplicationNode['branches'], parentNodeType: 'multiplication'): (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];
4
+ export declare function handleChildrenWhitespace(currentTree: MultiplicationNode['branches'], parentNodeType?: 'element' | 'expression' | undefined): WhitespaceJsxTreeResult | WhitespaceMultiplicationNode | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];
5
+ export declare function handleChildrenWhitespace(currentTree: MultiplicationNode | JsxTree, parentNodeType?: 'multiplication' | 'element' | 'expression' | undefined): null | WhitespaceJsxTreeResult | WhitespaceMultiplicationNode;
6
+ export declare function handleChildrenWhitespace(currentTree: JsxTree | JsxTree[]): null | WhitespaceJsxTreeResult | WhitespaceJsxTreeResult[];
@@ -0,0 +1,197 @@
1
+ import { isAcceptedPluralForm } from 'generaltranslation/internal';
2
+ import { isElementNode, isExpressionNode, isMultiplicationNode, } from './types.js';
3
+ // JSX whitespace characters (space, tab, newline, carriage return)
4
+ // Does NOT include non-breaking space (U+00A0) which should be preserved
5
+ const isJsxWhitespace = (char) => {
6
+ return char === ' ' || char === '\t' || char === '\n' || char === '\r';
7
+ };
8
+ const trimJsxWhitespace = (str, side = 'both') => {
9
+ let start = 0;
10
+ let end = str.length;
11
+ if (side === 'start' || side === 'both') {
12
+ while (start < end && isJsxWhitespace(str[start])) {
13
+ start++;
14
+ }
15
+ }
16
+ if (side === 'end' || side === 'both') {
17
+ while (end > start && isJsxWhitespace(str[end - 1])) {
18
+ end--;
19
+ }
20
+ }
21
+ return str.slice(start, end);
22
+ };
23
+ const hasNonJsxWhitespace = (str) => {
24
+ for (const char of str) {
25
+ if (!isJsxWhitespace(char))
26
+ return true;
27
+ }
28
+ return false;
29
+ };
30
+ export function trimJsxStringChild(child) {
31
+ if (!child.includes('\n') && !child.includes('\r')) {
32
+ return child;
33
+ }
34
+ // Normalize line endings to \n for consistency across platforms
35
+ let result = child.replace(/\r\n|\r/g, '\n');
36
+ // Collapse multiple spaces/tabs into a single space (but not nbsp)
37
+ result = result.replace(/[\t ]+/g, ' ');
38
+ let newResult = '';
39
+ let newline = false;
40
+ for (const char of result) {
41
+ if (char === '\n') {
42
+ if (hasNonJsxWhitespace(newResult))
43
+ newResult += ' ';
44
+ else
45
+ newResult = '';
46
+ newline = true;
47
+ continue;
48
+ }
49
+ if (!newline) {
50
+ newResult += char;
51
+ continue;
52
+ }
53
+ if (isJsxWhitespace(char))
54
+ continue;
55
+ newResult += char;
56
+ newline = false;
57
+ }
58
+ if (newline)
59
+ newResult = trimJsxWhitespace(newResult, 'end');
60
+ result = newResult;
61
+ // Collapse multiple spaces/tabs into a single space (but not nbsp)
62
+ result = result.replace(/[\t ]+/g, ' ');
63
+ return result;
64
+ }
65
+ /**
66
+ * Handles whitespace in children of a JSX element, and strips elements
67
+ * @param currentTree - The current tree to handle
68
+ * @returns The processed tree with whitespace handled
69
+ *
70
+ * For unresolved functions, we just make it so that Static has no children
71
+ *
72
+ * The typing was so much worse before this. Don't come for me. All I did was enforce the typing.
73
+ */
74
+ export function handleChildrenWhitespace(currentTree, parentNodeType = undefined) {
75
+ if (Array.isArray(currentTree)) {
76
+ const childrenTypes = currentTree.map((child) => {
77
+ if (typeof child === 'string')
78
+ return 'text';
79
+ if (isExpressionNode(child))
80
+ return 'expression';
81
+ if (isElementNode(child))
82
+ return 'element';
83
+ if (isMultiplicationNode(child))
84
+ return 'multiplication';
85
+ return 'other';
86
+ });
87
+ const newChildren = [];
88
+ currentTree.forEach((child, index) => {
89
+ switch (childrenTypes[index]) {
90
+ case 'text':
91
+ const textNode = child;
92
+ if (parentNodeType === 'multiplication') {
93
+ // This should be treated like a new tree (no parent here b/c its a new tree)
94
+ const result = handleChildrenWhitespace(textNode);
95
+ if (result)
96
+ newChildren.push(result);
97
+ }
98
+ else {
99
+ const string = trimJsxStringChild(textNode);
100
+ if (string)
101
+ newChildren.push(string);
102
+ }
103
+ break;
104
+ case 'expression':
105
+ // Strip expressions
106
+ const result = child.result;
107
+ if (isMultiplicationNode(result)) {
108
+ newChildren.push(handleChildrenWhitespace(result));
109
+ }
110
+ else if (typeof result === 'string') {
111
+ newChildren.push(result);
112
+ }
113
+ else {
114
+ // other case
115
+ newChildren.push(result);
116
+ }
117
+ break;
118
+ case 'element':
119
+ const newElement = handleChildrenWhitespace(child);
120
+ newChildren.push(newElement);
121
+ break;
122
+ case 'multiplication':
123
+ newChildren.push({
124
+ nodeType: 'multiplication',
125
+ branches: handleChildrenWhitespace(child.branches, 'multiplication'),
126
+ });
127
+ break;
128
+ case 'other':
129
+ // Return number or boolean or null
130
+ newChildren.push(child);
131
+ break;
132
+ }
133
+ });
134
+ if (parentNodeType === 'multiplication') {
135
+ // Return the branches as an array
136
+ return newChildren;
137
+ }
138
+ return newChildren.length === 1 ? newChildren[0] : newChildren;
139
+ }
140
+ else if (isElementNode(currentTree)) {
141
+ // Process all props recursively
142
+ // What if there is a different component sharing the same name?
143
+ const elementIsPlural = currentTree.type === 'Plural';
144
+ const elementIsBranch = currentTree.type === 'Branch';
145
+ const processedProps = !currentTree.props
146
+ ? undefined
147
+ : Object.fromEntries(Object.entries(currentTree.props).map(([key, value]) => {
148
+ let shouldProcess = false;
149
+ // Process children
150
+ if (key === 'children')
151
+ shouldProcess = true;
152
+ // Process plural children
153
+ if (elementIsPlural && isAcceptedPluralForm(key))
154
+ shouldProcess = true;
155
+ // Process branch children
156
+ if (elementIsBranch && key !== 'branch')
157
+ shouldProcess = true;
158
+ // Do not process raw strings
159
+ if (typeof value === 'string' && key !== 'children')
160
+ shouldProcess = false;
161
+ // Process props
162
+ if (!shouldProcess) {
163
+ return [key, value];
164
+ }
165
+ return [key, handleChildrenWhitespace(value)];
166
+ }));
167
+ return {
168
+ nodeType: 'element',
169
+ type: currentTree.type,
170
+ ...(processedProps ? { props: processedProps } : {}),
171
+ };
172
+ }
173
+ else if (isExpressionNode(currentTree)) {
174
+ // Strip expression
175
+ const result = currentTree.result;
176
+ if (isMultiplicationNode(result)) {
177
+ return handleChildrenWhitespace(result);
178
+ }
179
+ else if (typeof result === 'string') {
180
+ return result;
181
+ }
182
+ else {
183
+ return result;
184
+ }
185
+ }
186
+ else if (isMultiplicationNode(currentTree)) {
187
+ return {
188
+ nodeType: 'multiplication',
189
+ branches: handleChildrenWhitespace(currentTree.branches, 'multiplication'),
190
+ };
191
+ }
192
+ else if (typeof currentTree === 'string') {
193
+ return trimJsxStringChild(currentTree);
194
+ }
195
+ // null or number or boolean
196
+ return currentTree;
197
+ }
@@ -0,0 +1,13 @@
1
+ import { WhitespaceJsxTreeResult, WhitespaceMultiplicationNode } from '../types.js';
2
+ export type MultiplicationNodeResult = {
3
+ parent: any | undefined;
4
+ key: string | undefined;
5
+ node: WhitespaceMultiplicationNode;
6
+ };
7
+ /**
8
+ * Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
9
+ * TODO: I am sure there is some optimization to be done here
10
+ *
11
+ * Maybe there is an optimization here with caching used paths btwn calls
12
+ */
13
+ export declare function findMultiplicationNode(root: WhitespaceJsxTreeResult | WhitespaceMultiplicationNode | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[]): MultiplicationNodeResult | undefined;
@@ -0,0 +1,42 @@
1
+ import { isWhitespaceMultiplicationNode, isWhitespaceJsxTree, } from '../types.js';
2
+ /**
3
+ * Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
4
+ * TODO: I am sure there is some optimization to be done here
5
+ *
6
+ * Maybe there is an optimization here with caching used paths btwn calls
7
+ */
8
+ export function findMultiplicationNode(root) {
9
+ // Entry point
10
+ return handleChildren(root, undefined, undefined);
11
+ // Helper function to handle children
12
+ function handleChildren(curr, parent, key) {
13
+ if (Array.isArray(curr)) {
14
+ for (const [index, child] of Object.entries(curr)) {
15
+ const result = handleChild(child, curr, index);
16
+ if (result)
17
+ return result;
18
+ }
19
+ return undefined;
20
+ }
21
+ else {
22
+ return handleChild(curr, parent, key);
23
+ }
24
+ }
25
+ // Helper function to handle a single child
26
+ function handleChild(curr, parent, key) {
27
+ if (isWhitespaceMultiplicationNode(curr)) {
28
+ return { parent, key, node: curr };
29
+ }
30
+ else if (isWhitespaceJsxTree(curr)) {
31
+ if (curr.props?.children) {
32
+ return handleChildren(curr.props.children, curr.props, 'children');
33
+ }
34
+ else {
35
+ return undefined;
36
+ }
37
+ }
38
+ else {
39
+ return undefined;
40
+ }
41
+ }
42
+ }
@@ -0,0 +1,5 @@
1
+ import { MultipliedTreeNode, WhitespaceJsxTreeResult } from '../types.js';
2
+ /**
3
+ * Given a JSX tree, multiply the static function nodes
4
+ */
5
+ export declare function multiplyJsxTree(tree: WhitespaceJsxTreeResult | WhitespaceJsxTreeResult[]): MultipliedTreeNode[];
@@ -0,0 +1,69 @@
1
+ import { findMultiplicationNode } from './findMultiplicationNode.js';
2
+ /**
3
+ * Given a JSX tree, multiply the static function nodes
4
+ */
5
+ export function multiplyJsxTree(tree) {
6
+ if (!Array.isArray(tree)) {
7
+ return multiplyBranches([tree]);
8
+ }
9
+ else {
10
+ // when tree is an array, this is just sibbling elements within the <T>, so we need to treat them as a single branch
11
+ const wrapperElement = {
12
+ nodeType: 'element',
13
+ type: 'T',
14
+ props: {
15
+ children: tree,
16
+ },
17
+ };
18
+ // Multiply the wrapper element
19
+ const multipliedBranches = multiplyBranches([
20
+ wrapperElement,
21
+ ]);
22
+ // Unwrap the branches
23
+ return multipliedBranches.map((branch) => branch.props.children);
24
+ }
25
+ }
26
+ /**
27
+ * Given a list of branches, multiply recursively (DFS)
28
+ * @param branches
29
+ */
30
+ function multiplyBranches(branches) {
31
+ // Queue of branches to process
32
+ const branchQueue = branches;
33
+ // Finalized branches
34
+ const newBranches = [];
35
+ // Process branches until exhausted
36
+ while (branchQueue.length) {
37
+ // Pop the next branch
38
+ const branch = branchQueue.shift();
39
+ // Get closest multiplication node
40
+ const currentNode = findMultiplicationNode(branch);
41
+ // No multiplication nodes, just add the branch to the final list
42
+ if (!currentNode) {
43
+ newBranches.push(branch);
44
+ continue;
45
+ }
46
+ const { node, parent, key } = currentNode;
47
+ // Recursive call
48
+ const subBranches = multiplyBranches(node.branches);
49
+ // For every sub branch, create a new cloned branch
50
+ for (const subBranch of subBranches) {
51
+ // Placeholder for the new branch
52
+ let newBranch = undefined;
53
+ // Create a clone of the original with the sub branch swapped in
54
+ if (parent === undefined || key === undefined) {
55
+ // This means the subBranch directly replaces the branch itself
56
+ newBranches.push(subBranch);
57
+ }
58
+ else {
59
+ // Replace the multiplication node with the sub branch
60
+ parent[key] = subBranch;
61
+ // eslint-disable-next-line no-undef
62
+ newBranch = structuredClone(branch);
63
+ // Add the new branch to the list
64
+ branchQueue.push(newBranch);
65
+ }
66
+ }
67
+ }
68
+ return newBranches;
69
+ }
@@ -0,0 +1,33 @@
1
+ import { Updates } from '../../../../types/index.js';
2
+ import { ParsingConfigOptions } from '../../../../types/parsing.js';
3
+ import traverseModule from '@babel/traverse';
4
+ import { GTLibrary } from '../../../../types/libraries.js';
5
+ /**
6
+ * Immutable configuration options for parsing.
7
+ */
8
+ type ConfigOptions = {
9
+ parsingOptions: ParsingConfigOptions;
10
+ importAliases: Record<string, string>;
11
+ pkgs: GTLibrary[];
12
+ file: string;
13
+ };
14
+ /**
15
+ * Collectors for errors, warnings, and unwrapped expressions.
16
+ */
17
+ type OutputCollector = {
18
+ errors: string[];
19
+ warnings: Set<string>;
20
+ unwrappedExpressions: string[];
21
+ };
22
+ /**
23
+ * Entry point for JSX parsing
24
+ */
25
+ export declare function parseTranslationComponent({ originalName, localName, path, updates, config, output, }: {
26
+ originalName: string;
27
+ localName: string;
28
+ path: traverseModule.NodePath<traverseModule.Node>;
29
+ updates: Updates;
30
+ config: ConfigOptions;
31
+ output: OutputCollector;
32
+ }): void;
33
+ export {};