gt 2.14.35 → 2.14.37

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 (430) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/dist/api/collectUserEditDiffs.js +112 -155
  3. package/dist/api/collectUserEditDiffs.js.map +1 -0
  4. package/dist/api/downloadFileBatch.js +164 -241
  5. package/dist/api/downloadFileBatch.js.map +1 -0
  6. package/dist/api/saveLocalEdits.js +37 -41
  7. package/dist/api/saveLocalEdits.js.map +1 -0
  8. package/dist/bin/bin-entry.js +17 -7
  9. package/dist/bin/bin-entry.js.map +1 -0
  10. package/dist/bin/bin-main.js +43 -61
  11. package/dist/bin/bin-main.js.map +1 -0
  12. package/dist/cli/base.js +382 -497
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/download.js +41 -49
  15. package/dist/cli/commands/download.js.map +1 -0
  16. package/dist/cli/commands/enqueue.js +26 -25
  17. package/dist/cli/commands/enqueue.js.map +1 -0
  18. package/dist/cli/commands/setupProject.js +33 -36
  19. package/dist/cli/commands/setupProject.js.map +1 -0
  20. package/dist/cli/commands/stage.js +53 -61
  21. package/dist/cli/commands/stage.js.map +1 -0
  22. package/dist/cli/commands/translate.js +75 -112
  23. package/dist/cli/commands/translate.js.map +1 -0
  24. package/dist/cli/commands/upload.js +185 -213
  25. package/dist/cli/commands/upload.js.map +1 -0
  26. package/dist/cli/commands/utils/validation.js +39 -34
  27. package/dist/cli/commands/utils/validation.js.map +1 -0
  28. package/dist/cli/flags.js +35 -62
  29. package/dist/cli/flags.js.map +1 -0
  30. package/dist/cli/inline.js +112 -137
  31. package/dist/cli/inline.js.map +1 -0
  32. package/dist/cli/next.js +17 -12
  33. package/dist/cli/next.js.map +1 -0
  34. package/dist/cli/node.js +19 -15
  35. package/dist/cli/node.js.map +1 -0
  36. package/dist/cli/python.js +13 -8
  37. package/dist/cli/python.js.map +1 -0
  38. package/dist/cli/react.js +61 -78
  39. package/dist/cli/react.js.map +1 -0
  40. package/dist/config/defaults.js +16 -11
  41. package/dist/config/defaults.js.map +1 -0
  42. package/dist/config/generateSettings.js +167 -269
  43. package/dist/config/generateSettings.js.map +1 -0
  44. package/dist/config/optionPresets.js +78 -96
  45. package/dist/config/optionPresets.js.map +1 -0
  46. package/dist/config/resolveConfig.js +27 -32
  47. package/dist/config/resolveConfig.js.map +1 -0
  48. package/dist/config/utils.js +7 -3
  49. package/dist/config/utils.js.map +1 -0
  50. package/dist/config/validateSettings.js +19 -30
  51. package/dist/config/validateSettings.js.map +1 -0
  52. package/dist/console/colors.js +18 -13
  53. package/dist/console/colors.js.map +1 -0
  54. package/dist/console/displayTranslateSummary.js +40 -37
  55. package/dist/console/displayTranslateSummary.js.map +1 -0
  56. package/dist/console/formatting.js +8 -5
  57. package/dist/console/formatting.js.map +1 -0
  58. package/dist/console/index.d.ts +11 -9
  59. package/dist/console/index.js +53 -50
  60. package/dist/console/index.js.map +1 -0
  61. package/dist/console/inkFields.d.ts +23 -0
  62. package/dist/console/inkFields.js +87 -0
  63. package/dist/console/inkFields.js.map +1 -0
  64. package/dist/console/inkLayout.d.ts +7 -0
  65. package/dist/console/inkLayout.js +139 -0
  66. package/dist/console/inkLayout.js.map +1 -0
  67. package/dist/console/inkLocaleData.d.ts +4 -0
  68. package/dist/console/inkLocaleData.js +32 -0
  69. package/dist/console/inkLocaleData.js.map +1 -0
  70. package/dist/console/inkPrompts.d.ts +8 -0
  71. package/dist/console/inkPrompts.js +496 -0
  72. package/dist/console/inkPrompts.js.map +1 -0
  73. package/dist/console/inkSession.d.ts +3 -0
  74. package/dist/console/inkSession.js +42 -0
  75. package/dist/console/inkSession.js.map +1 -0
  76. package/dist/console/inkTerminal.d.ts +4 -0
  77. package/dist/console/inkTerminal.js +15 -0
  78. package/dist/console/inkTerminal.js.map +1 -0
  79. package/dist/console/inkTypes.d.ts +66 -0
  80. package/dist/console/inkTypes.js +1 -0
  81. package/dist/console/inkUtils.d.ts +24 -0
  82. package/dist/console/inkUtils.js +87 -0
  83. package/dist/console/inkUtils.js.map +1 -0
  84. package/dist/console/logger.js +209 -249
  85. package/dist/console/logger.js.map +1 -0
  86. package/dist/console/logging.d.ts +14 -0
  87. package/dist/console/logging.js +203 -162
  88. package/dist/console/logging.js.map +1 -0
  89. package/dist/console/promptParsing.d.ts +5 -0
  90. package/dist/console/promptParsing.js +28 -0
  91. package/dist/console/promptParsing.js.map +1 -0
  92. package/dist/console/terminalSession.d.ts +5 -0
  93. package/dist/console/terminalSession.js +38 -0
  94. package/dist/console/terminalSession.js.map +1 -0
  95. package/dist/extraction/index.js +3 -2
  96. package/dist/extraction/mapToUpdates.js +19 -18
  97. package/dist/extraction/mapToUpdates.js.map +1 -0
  98. package/dist/extraction/postProcess.js +68 -86
  99. package/dist/extraction/postProcess.js.map +1 -0
  100. package/dist/formats/files/aggregateFiles.js +223 -304
  101. package/dist/formats/files/aggregateFiles.js.map +1 -0
  102. package/dist/formats/files/collectFiles.js +53 -54
  103. package/dist/formats/files/collectFiles.js.map +1 -0
  104. package/dist/formats/files/convertToFileTranslationData.js +21 -19
  105. package/dist/formats/files/convertToFileTranslationData.js.map +1 -0
  106. package/dist/formats/files/fileMapping.js +82 -119
  107. package/dist/formats/files/fileMapping.js.map +1 -0
  108. package/dist/formats/files/preprocess/mdx.js +15 -12
  109. package/dist/formats/files/preprocess/mdx.js.map +1 -0
  110. package/dist/formats/files/preprocess/mintlify.js +15 -13
  111. package/dist/formats/files/preprocess/mintlify.js.map +1 -0
  112. package/dist/formats/files/preprocessContent.js +20 -21
  113. package/dist/formats/files/preprocessContent.js.map +1 -0
  114. package/dist/formats/files/save.js +18 -15
  115. package/dist/formats/files/save.js.map +1 -0
  116. package/dist/formats/files/supportedFiles.js +27 -22
  117. package/dist/formats/files/supportedFiles.js.map +1 -0
  118. package/dist/formats/files/transformFormat.js +93 -100
  119. package/dist/formats/files/transformFormat.js.map +1 -0
  120. package/dist/formats/json/extractJson.js +83 -110
  121. package/dist/formats/json/extractJson.js.map +1 -0
  122. package/dist/formats/json/flattenJson.js +41 -48
  123. package/dist/formats/json/flattenJson.js.map +1 -0
  124. package/dist/formats/json/jsonPath.js +20 -15
  125. package/dist/formats/json/jsonPath.js.map +1 -0
  126. package/dist/formats/json/jsonPointer.js +17 -17
  127. package/dist/formats/json/jsonPointer.js.map +1 -0
  128. package/dist/formats/json/mergeJson.js +230 -371
  129. package/dist/formats/json/mergeJson.js.map +1 -0
  130. package/dist/formats/json/parseJson.js +74 -111
  131. package/dist/formats/json/parseJson.js.map +1 -0
  132. package/dist/formats/json/transformJson.js +53 -61
  133. package/dist/formats/json/transformJson.js.map +1 -0
  134. package/dist/formats/json/utils.js +158 -187
  135. package/dist/formats/json/utils.js.map +1 -0
  136. package/dist/formats/parseKeyedMetadata.js +85 -106
  137. package/dist/formats/parseKeyedMetadata.js.map +1 -0
  138. package/dist/formats/utils.js +13 -23
  139. package/dist/formats/utils.js.map +1 -0
  140. package/dist/formats/yaml/extractYaml.js +32 -31
  141. package/dist/formats/yaml/extractYaml.js.map +1 -0
  142. package/dist/formats/yaml/mergeYaml.js +43 -60
  143. package/dist/formats/yaml/mergeYaml.js.map +1 -0
  144. package/dist/formats/yaml/parseYaml.js +34 -23
  145. package/dist/formats/yaml/parseYaml.js.map +1 -0
  146. package/dist/formats/yaml/utils.js +19 -21
  147. package/dist/formats/yaml/utils.js.map +1 -0
  148. package/dist/fs/clearLocaleDirs.js +82 -114
  149. package/dist/fs/clearLocaleDirs.js.map +1 -0
  150. package/dist/fs/config/downloadedVersions.js +174 -188
  151. package/dist/fs/config/downloadedVersions.js.map +1 -0
  152. package/dist/fs/config/loadConfig.js +12 -8
  153. package/dist/fs/config/loadConfig.js.map +1 -0
  154. package/dist/fs/config/parseFilesConfig.js +166 -227
  155. package/dist/fs/config/parseFilesConfig.js.map +1 -0
  156. package/dist/fs/config/setupConfig.js +43 -52
  157. package/dist/fs/config/setupConfig.js.map +1 -0
  158. package/dist/fs/config/updateConfig.js +44 -56
  159. package/dist/fs/config/updateConfig.js.map +1 -0
  160. package/dist/fs/config/updateVersions.js +27 -28
  161. package/dist/fs/config/updateVersions.js.map +1 -0
  162. package/dist/fs/copyFile.js +33 -37
  163. package/dist/fs/copyFile.js.map +1 -0
  164. package/dist/fs/createLoadTranslationsFile.js +32 -48
  165. package/dist/fs/createLoadTranslationsFile.js.map +1 -0
  166. package/dist/fs/determineFramework/detectPythonLibrary.js +30 -34
  167. package/dist/fs/determineFramework/detectPythonLibrary.js.map +1 -0
  168. package/dist/fs/determineFramework/index.js +46 -64
  169. package/dist/fs/determineFramework/index.js.map +1 -0
  170. package/dist/fs/determineFramework/matchPyprojectDependency.js +65 -78
  171. package/dist/fs/determineFramework/matchPyprojectDependency.js.map +1 -0
  172. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js +21 -19
  173. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js.map +1 -0
  174. package/dist/fs/determineFramework/matchSetupPyDependency.js +60 -81
  175. package/dist/fs/determineFramework/matchSetupPyDependency.js.map +1 -0
  176. package/dist/fs/determineFramework/resolveGtDependency.js +15 -15
  177. package/dist/fs/determineFramework/resolveGtDependency.js.map +1 -0
  178. package/dist/fs/findFilepath.js +63 -78
  179. package/dist/fs/findFilepath.js.map +1 -0
  180. package/dist/fs/loadJSON.js +18 -15
  181. package/dist/fs/loadJSON.js.map +1 -0
  182. package/dist/fs/matchFiles.js +12 -7
  183. package/dist/fs/matchFiles.js.map +1 -0
  184. package/dist/fs/saveJSON.js +10 -6
  185. package/dist/fs/saveJSON.js.map +1 -0
  186. package/dist/fs/utils.js +19 -15
  187. package/dist/fs/utils.js.map +1 -0
  188. package/dist/functions.d.ts +2 -1
  189. package/dist/functions.js +3 -6
  190. package/dist/generated/version.d.ts +1 -1
  191. package/dist/generated/version.js +6 -2
  192. package/dist/generated/version.js.map +1 -0
  193. package/dist/git/branches.js +77 -83
  194. package/dist/git/branches.js.map +1 -0
  195. package/dist/hooks/postProcess.js +97 -114
  196. package/dist/hooks/postProcess.js.map +1 -0
  197. package/dist/index.js +23 -31
  198. package/dist/index.js.map +1 -0
  199. package/dist/locadex/setupFlow.js +11 -8
  200. package/dist/locadex/setupFlow.js.map +1 -0
  201. package/dist/main.js +17 -7
  202. package/dist/main.js.map +1 -0
  203. package/dist/next/config/parseNextConfig.js +32 -51
  204. package/dist/next/config/parseNextConfig.js.map +1 -0
  205. package/dist/next/jsx/utils.js +25 -37
  206. package/dist/next/jsx/utils.js.map +1 -0
  207. package/dist/next/parse/handleInitGT.js +87 -154
  208. package/dist/next/parse/handleInitGT.js.map +1 -0
  209. package/dist/next/parse/wrapContent.js +136 -158
  210. package/dist/next/parse/wrapContent.js.map +1 -0
  211. package/dist/python/parse/createPythonInlineUpdates.js +36 -33
  212. package/dist/python/parse/createPythonInlineUpdates.js.map +1 -0
  213. package/dist/react/config/createESBuildConfig.js +115 -115
  214. package/dist/react/config/createESBuildConfig.js.map +1 -0
  215. package/dist/react/jsx/evaluateJsx.js +90 -124
  216. package/dist/react/jsx/evaluateJsx.js.map +1 -0
  217. package/dist/react/jsx/utils/buildImportMap.js +24 -28
  218. package/dist/react/jsx/utils/buildImportMap.js.map +1 -0
  219. package/dist/react/jsx/utils/constants.js +79 -87
  220. package/dist/react/jsx/utils/constants.js.map +1 -0
  221. package/dist/react/jsx/utils/extractSourceCode.js +36 -37
  222. package/dist/react/jsx/utils/extractSourceCode.js.map +1 -0
  223. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +30 -30
  224. package/dist/react/jsx/utils/getCalleeNameFromExpression.js.map +1 -0
  225. package/dist/react/jsx/utils/getPathsAndAliases.js +70 -105
  226. package/dist/react/jsx/utils/getPathsAndAliases.js.map +1 -0
  227. package/dist/react/jsx/utils/isNumberLiteral.js +13 -11
  228. package/dist/react/jsx/utils/isNumberLiteral.js.map +1 -0
  229. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +103 -148
  230. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js.map +1 -0
  231. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js +305 -389
  232. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js.map +1 -0
  233. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +122 -193
  234. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js.map +1 -0
  235. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +50 -64
  236. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js.map +1 -0
  237. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +41 -68
  238. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js.map +1 -0
  239. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +760 -1107
  240. package/dist/react/jsx/utils/jsxParsing/parseJsx.js.map +1 -0
  241. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +35 -71
  242. package/dist/react/jsx/utils/jsxParsing/parseTProps.js.map +1 -0
  243. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +39 -58
  244. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js.map +1 -0
  245. package/dist/react/jsx/utils/jsxParsing/types.js +10 -24
  246. package/dist/react/jsx/utils/jsxParsing/types.js.map +1 -0
  247. package/dist/react/jsx/utils/mapAttributeName.js +13 -13
  248. package/dist/react/jsx/utils/mapAttributeName.js.map +1 -0
  249. package/dist/react/jsx/utils/parseAst.js +142 -272
  250. package/dist/react/jsx/utils/parseAst.js.map +1 -0
  251. package/dist/react/jsx/utils/parseString.js +726 -1090
  252. package/dist/react/jsx/utils/parseString.js.map +1 -0
  253. package/dist/react/jsx/utils/parseStringFunction.js +274 -401
  254. package/dist/react/jsx/utils/parseStringFunction.js.map +1 -0
  255. package/dist/react/jsx/utils/resolveImportPath.d.ts +1 -1
  256. package/dist/react/jsx/utils/resolveImportPath.js +125 -108
  257. package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
  258. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
  259. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
  260. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
  261. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
  262. package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
  263. package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
  264. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
  265. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
  266. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
  267. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
  268. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
  269. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
  270. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
  271. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
  272. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
  273. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
  274. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
  275. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
  276. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
  277. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
  278. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
  279. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
  280. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
  281. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
  282. package/dist/react/jsx/utils/validateStringFunction.js +21 -29
  283. package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
  284. package/dist/react/jsx/wrapJsx.js +192 -375
  285. package/dist/react/jsx/wrapJsx.js.map +1 -0
  286. package/dist/react/parse/addVitePlugin/index.js +40 -34
  287. package/dist/react/parse/addVitePlugin/index.js.map +1 -0
  288. package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
  289. package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
  290. package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
  291. package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
  292. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
  293. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
  294. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
  295. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
  296. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
  297. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
  298. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
  299. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
  300. package/dist/react/parse/createDictionaryUpdates.js +121 -185
  301. package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
  302. package/dist/react/parse/createInlineUpdates.js +123 -139
  303. package/dist/react/parse/createInlineUpdates.js.map +1 -0
  304. package/dist/react/parse/wrapContent.js +131 -156
  305. package/dist/react/parse/wrapContent.js.map +1 -0
  306. package/dist/react/utils/flattenDictionary.js +55 -70
  307. package/dist/react/utils/flattenDictionary.js.map +1 -0
  308. package/dist/react/utils/getEntryAndMetadata.js +14 -10
  309. package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
  310. package/dist/react/utils/getVariableName.js +36 -33
  311. package/dist/react/utils/getVariableName.js.map +1 -0
  312. package/dist/setup/detectFramework.js +85 -102
  313. package/dist/setup/detectFramework.js.map +1 -0
  314. package/dist/setup/frameworkUtils.js +17 -28
  315. package/dist/setup/frameworkUtils.js.map +1 -0
  316. package/dist/setup/userInput.js +24 -31
  317. package/dist/setup/userInput.js.map +1 -0
  318. package/dist/setup/wizard.js +141 -143
  319. package/dist/setup/wizard.js.map +1 -0
  320. package/dist/state/mintlifyRefMap.js +12 -9
  321. package/dist/state/mintlifyRefMap.js.map +1 -0
  322. package/dist/state/recentDownloads.js +26 -23
  323. package/dist/state/recentDownloads.js.map +1 -0
  324. package/dist/state/translateWarnings.js +17 -8
  325. package/dist/state/translateWarnings.js.map +1 -0
  326. package/dist/translation/parse.js +77 -98
  327. package/dist/translation/parse.js.map +1 -0
  328. package/dist/translation/stage.js +28 -43
  329. package/dist/translation/stage.js.map +1 -0
  330. package/dist/translation/validate.js +68 -91
  331. package/dist/translation/validate.js.map +1 -0
  332. package/dist/types/libraries.js +93 -91
  333. package/dist/types/libraries.js.map +1 -0
  334. package/dist/types/parsing.js +19 -10
  335. package/dist/types/parsing.js.map +1 -0
  336. package/dist/utils/addExplicitAnchorIds.js +270 -389
  337. package/dist/utils/addExplicitAnchorIds.js.map +1 -0
  338. package/dist/utils/calculateTimeoutMs.js +11 -6
  339. package/dist/utils/calculateTimeoutMs.js.map +1 -0
  340. package/dist/utils/constants.js +15 -12
  341. package/dist/utils/constants.js.map +1 -0
  342. package/dist/utils/credentials.js +67 -114
  343. package/dist/utils/credentials.js.map +1 -0
  344. package/dist/utils/fetch.js +22 -20
  345. package/dist/utils/fetch.js.map +1 -0
  346. package/dist/utils/flattenJsonFiles.js +27 -34
  347. package/dist/utils/flattenJsonFiles.js.map +1 -0
  348. package/dist/utils/gitDiff.js +30 -32
  349. package/dist/utils/gitDiff.js.map +1 -0
  350. package/dist/utils/gt.js +7 -2
  351. package/dist/utils/gt.js.map +1 -0
  352. package/dist/utils/hash.js +14 -9
  353. package/dist/utils/hash.js.map +1 -0
  354. package/dist/utils/headers.js +10 -13
  355. package/dist/utils/headers.js.map +1 -0
  356. package/dist/utils/installPackage.js +70 -75
  357. package/dist/utils/installPackage.js.map +1 -0
  358. package/dist/utils/localizeRelativeAssets.js +114 -157
  359. package/dist/utils/localizeRelativeAssets.js.map +1 -0
  360. package/dist/utils/localizeStaticImports.js +229 -371
  361. package/dist/utils/localizeStaticImports.js.map +1 -0
  362. package/dist/utils/localizeStaticUrls.js +241 -424
  363. package/dist/utils/localizeStaticUrls.js.map +1 -0
  364. package/dist/utils/mintlifyTitleFallback.js +64 -72
  365. package/dist/utils/mintlifyTitleFallback.js.map +1 -0
  366. package/dist/utils/monorepoVersionCheck.js +177 -215
  367. package/dist/utils/monorepoVersionCheck.js.map +1 -0
  368. package/dist/utils/packageInfo.js +17 -16
  369. package/dist/utils/packageInfo.js.map +1 -0
  370. package/dist/utils/packageJson.js +51 -66
  371. package/dist/utils/packageJson.js.map +1 -0
  372. package/dist/utils/packageManager.js +237 -260
  373. package/dist/utils/packageManager.js.map +1 -0
  374. package/dist/utils/parse/needsCJS.js +36 -69
  375. package/dist/utils/parse/needsCJS.js.map +1 -0
  376. package/dist/utils/persistPostprocessHashes.js +30 -32
  377. package/dist/utils/persistPostprocessHashes.js.map +1 -0
  378. package/dist/utils/processAnchorIds.js +32 -54
  379. package/dist/utils/processAnchorIds.js.map +1 -0
  380. package/dist/utils/processOpenApi.js +469 -578
  381. package/dist/utils/processOpenApi.js.map +1 -0
  382. package/dist/utils/resolveMintlifyRefs.js +89 -105
  383. package/dist/utils/resolveMintlifyRefs.js.map +1 -0
  384. package/dist/utils/resolvePublish.js +46 -54
  385. package/dist/utils/resolvePublish.js.map +1 -0
  386. package/dist/utils/sanitizeFileContent.js +20 -27
  387. package/dist/utils/sanitizeFileContent.js.map +1 -0
  388. package/dist/utils/sharedStaticAssets.js +248 -366
  389. package/dist/utils/sharedStaticAssets.js.map +1 -0
  390. package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
  391. package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
  392. package/dist/utils/validateMdx.js +26 -23
  393. package/dist/utils/validateMdx.js.map +1 -0
  394. package/dist/utils/wrapPlainUrls.js +58 -70
  395. package/dist/utils/wrapPlainUrls.js.map +1 -0
  396. package/dist/workflows/download.js +92 -126
  397. package/dist/workflows/download.js.map +1 -0
  398. package/dist/workflows/enqueue.js +47 -54
  399. package/dist/workflows/enqueue.js.map +1 -0
  400. package/dist/workflows/publish.js +29 -29
  401. package/dist/workflows/publish.js.map +1 -0
  402. package/dist/workflows/setupProject.js +39 -40
  403. package/dist/workflows/setupProject.js.map +1 -0
  404. package/dist/workflows/stage.js +61 -65
  405. package/dist/workflows/stage.js.map +1 -0
  406. package/dist/workflows/steps/BranchStep.js +118 -163
  407. package/dist/workflows/steps/BranchStep.js.map +1 -0
  408. package/dist/workflows/steps/DownloadStep.js +107 -137
  409. package/dist/workflows/steps/DownloadStep.js.map +1 -0
  410. package/dist/workflows/steps/EnqueueStep.js +32 -32
  411. package/dist/workflows/steps/EnqueueStep.js.map +1 -0
  412. package/dist/workflows/steps/PollJobsStep.js +208 -292
  413. package/dist/workflows/steps/PollJobsStep.js.map +1 -0
  414. package/dist/workflows/steps/PublishStep.js +33 -38
  415. package/dist/workflows/steps/PublishStep.js.map +1 -0
  416. package/dist/workflows/steps/SetupStep.js +71 -72
  417. package/dist/workflows/steps/SetupStep.js.map +1 -0
  418. package/dist/workflows/steps/TagStep.js +39 -44
  419. package/dist/workflows/steps/TagStep.js.map +1 -0
  420. package/dist/workflows/steps/UploadSourcesStep.js +108 -140
  421. package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
  422. package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
  423. package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
  424. package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
  425. package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
  426. package/dist/workflows/steps/WorkflowStep.js +6 -2
  427. package/dist/workflows/steps/WorkflowStep.js.map +1 -0
  428. package/dist/workflows/upload.js +45 -46
  429. package/dist/workflows/upload.js.map +1 -0
  430. package/package.json +14 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoInsertion.js","names":[],"sources":["../../../../../src/react/jsx/utils/jsxParsing/autoInsertion.ts"],"sourcesContent":["/**\n * Auto JSX Insertion for CLI extraction.\n *\n * Inserts <T> and <Var> JSX elements into the AST so the extraction pipeline\n * can process them as if the user wrote them. This operates on raw JSX syntax\n * (JSXElement, JSXText, JSXExpressionContainer) — NOT compiled jsx() calls.\n *\n * Rules follow JSX_INSERTION_RULES.md from the compiler package.\n */\nimport * as t from '@babel/types';\nimport traverseModule, { NodePath } from '@babel/traverse';\n\nconst traverse: typeof traverseModule.default =\n traverseModule.default || traverseModule;\nimport { isStaticExpression } from '../../evaluateJsx.js';\nimport {\n TRANSLATION_COMPONENT,\n INTERNAL_TRANSLATION_COMPONENT,\n INTERNAL_VAR_COMPONENT,\n VARIABLE_COMPONENTS,\n BRANCH_COMPONENT,\n PLURAL_COMPONENT,\n DEFAULT_GT_IMPORT_SOURCE,\n DERIVE_COMPONENT,\n STATIC_COMPONENT,\n BRANCH_CONTROL_PROPS,\n PLURAL_CONTROL_PROPS,\n} from '../constants.js';\n\n/** Tracks which AST nodes were auto-inserted by this module */\nconst autoInsertedNodes = new WeakSet<t.Node>();\n\n/** Check if a node was auto-inserted */\nexport function isAutoInserted(node: t.Node): boolean {\n return autoInsertedNodes.has(node);\n}\n\n// ===== Public API ===== //\n\n/**\n * Ensure GtInternalTranslateJsx and GtInternalVar are imported in the AST.\n * Always adds: import { GtInternalTranslateJsx, GtInternalVar } from 'gt-react/browser';\n * These are distinct from user T/Var so there's no ambiguity.\n *\n * Updates importAliases in-place.\n */\nexport function ensureTAndVarImported(\n ast: t.File,\n importAliases: Record<string, string>\n): void {\n // Check if internal components are already imported\n const hasInternalT = Object.values(importAliases).includes(\n INTERNAL_TRANSLATION_COMPONENT\n );\n const hasInternalVar = Object.values(importAliases).includes(\n INTERNAL_VAR_COMPONENT\n );\n\n if (hasInternalT && hasInternalVar) return;\n\n const specifiers: t.ImportSpecifier[] = [];\n if (!hasInternalT) {\n specifiers.push(\n t.importSpecifier(\n t.identifier(INTERNAL_TRANSLATION_COMPONENT),\n t.identifier(INTERNAL_TRANSLATION_COMPONENT)\n )\n );\n importAliases[INTERNAL_TRANSLATION_COMPONENT] =\n INTERNAL_TRANSLATION_COMPONENT;\n }\n if (!hasInternalVar) {\n specifiers.push(\n t.importSpecifier(\n t.identifier(INTERNAL_VAR_COMPONENT),\n t.identifier(INTERNAL_VAR_COMPONENT)\n )\n );\n importAliases[INTERNAL_VAR_COMPONENT] = INTERNAL_VAR_COMPONENT;\n }\n\n const importDecl = t.importDeclaration(\n specifiers,\n t.stringLiteral(DEFAULT_GT_IMPORT_SOURCE)\n );\n\n traverse(ast, {\n Program(path) {\n path.unshiftContainer('body', importDecl);\n path.stop();\n },\n });\n}\n\n/**\n * Traverse the AST and insert GtInternalTranslateJsx and GtInternalVar JSX elements following\n * the insertion rules. Uses deliberate children traversal.\n *\n * Every inserted node gets node._autoInserted = true.\n */\nexport function autoInsertJsxComponents(\n ast: t.File,\n importAliases: Record<string, string>\n): void {\n const processedNodes = new WeakSet<t.Node>();\n const tLocalName = getLocalName(\n importAliases,\n INTERNAL_TRANSLATION_COMPONENT\n );\n const varLocalName = getLocalName(importAliases, INTERNAL_VAR_COMPONENT);\n\n traverse(ast, {\n JSXElement(path) {\n if (processedNodes.has(path.node)) return;\n processJsxElement({\n path,\n insideAutoT: false,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n },\n JSXFragment(path) {\n if (processedNodes.has(path.node)) return;\n processJsxFragment({\n path,\n insideAutoT: false,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n },\n });\n}\n\n// ===== Core recursive functions ===== //\n\ninterface InsertionContext {\n insideAutoT: boolean;\n importAliases: Record<string, string>;\n processedNodes: WeakSet<t.Node>;\n tLocalName: string;\n varLocalName: string;\n}\n\nfunction processJsxElement({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXElement> } & InsertionContext): void {\n processedNodes.add(path.node);\n\n // Get component type\n const typeName = getElementTypeName(path.node);\n const canonicalName = typeName ? importAliases[typeName] : undefined;\n\n // User T → mark all descendants, hands off\n if (canonicalName === TRANSLATION_COMPONENT) {\n markDescendantJsx(path, processedNodes);\n return;\n }\n\n // Branch/Plural/Derive/Static → opaque, process props for dynamic Var\n // Must be checked BEFORE user variable check because Derive/Static are in VARIABLE_COMPONENTS\n if (\n canonicalName === BRANCH_COMPONENT ||\n canonicalName === PLURAL_COMPONENT ||\n canonicalName === DERIVE_COMPONENT ||\n canonicalName === STATIC_COMPONENT\n ) {\n if (!insideAutoT) {\n // Root-level opaque component — wrap in _T\n const tWrapper = createTWrapper([path.node], tLocalName);\n processedNodes.add(tWrapper);\n path.replaceWith(tWrapper);\n }\n processOpaqueComponentProps({\n path,\n insideAutoT: true,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n canonicalName,\n });\n return;\n }\n\n // User Var/Num/Currency/DateTime → mark descendants, hands off\n if (canonicalName && VARIABLE_COMPONENTS.includes(canonicalName)) {\n markDescendantJsx(path, processedNodes);\n return;\n }\n\n // Process children\n processElementChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n}\n\nfunction processJsxFragment({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXFragment> } & InsertionContext): void {\n processedNodes.add(path.node);\n\n // Fragments are treated like regular elements\n processFragmentChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n}\n\n// ===== Children processing ===== //\n\nfunction processElementChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXElement> } & InsertionContext): void {\n const children = path.node.children;\n const ctx: InsertionContext = {\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n };\n\n const hasText = hasTranslatableText(children);\n const hasOpaque = hasOpaqueGTChild(children, importAliases);\n const shouldClaimT = !insideAutoT && (hasText || hasOpaque);\n\n if (shouldClaimT) {\n // Process children: wrap dynamic expressions in Var, recurse into child elements\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, { ...ctx, insideAutoT: true });\n }\n // Wrap all children in <T>\n wrapChildrenInT(path, tLocalName, processedNodes);\n } else if (insideAutoT) {\n // Inside a T region: wrap dynamic expressions, recurse\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, ctx);\n }\n } else {\n // No text, no opaque, not inside T: just recurse into child elements\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n if (childPath.isJSXElement() && !processedNodes.has(childPath.node)) {\n processJsxElement({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXFragment() &&\n !processedNodes.has(childPath.node)\n ) {\n processJsxFragment({ path: childPath, ...ctx });\n }\n }\n }\n}\n\nfunction processFragmentChildren({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n}: { path: NodePath<t.JSXFragment> } & InsertionContext): void {\n const children = path.node.children;\n const ctx: InsertionContext = {\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n };\n\n const hasText = hasTranslatableText(children);\n const hasOpaque = hasOpaqueGTChild(children, importAliases);\n const shouldClaimT = !insideAutoT && (hasText || hasOpaque);\n\n if (shouldClaimT) {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, { ...ctx, insideAutoT: true });\n }\n wrapFragmentChildrenInT(path, tLocalName, processedNodes);\n } else if (insideAutoT) {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, ctx);\n }\n } else {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n if (childPath.isJSXElement() && !processedNodes.has(childPath.node)) {\n processJsxElement({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXFragment() &&\n !processedNodes.has(childPath.node)\n ) {\n processJsxFragment({ path: childPath, ...ctx });\n }\n }\n }\n}\n\nfunction processChild(childPath: NodePath, ctx: InsertionContext): void {\n if (childPath.isJSXElement() && !ctx.processedNodes.has(childPath.node)) {\n processJsxElement({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXFragment() &&\n !ctx.processedNodes.has(childPath.node)\n ) {\n processJsxFragment({ path: childPath, ...ctx });\n } else if (\n childPath.isJSXExpressionContainer() &&\n ctx.insideAutoT &&\n needsVarWrapping(childPath.node)\n ) {\n // Wrap dynamic expression in <Var>\n const varWrapper = createVarWrapper(\n childPath.node,\n ctx.varLocalName,\n ctx.processedNodes\n );\n childPath.replaceWith(varWrapper);\n ctx.processedNodes.add(varWrapper);\n }\n}\n\n// ===== Opaque component props ===== //\n\nfunction processOpaqueComponentProps({\n path,\n insideAutoT,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n canonicalName,\n}: {\n path: NodePath<t.JSXElement>;\n canonicalName: string | undefined;\n} & InsertionContext): void {\n // Branch/Plural children (fallback content) — process element-by-element before marking\n if (\n insideAutoT &&\n (canonicalName === BRANCH_COMPONENT || canonicalName === PLURAL_COMPONENT)\n ) {\n const childPaths = path.get('children');\n for (const childPath of childPaths) {\n processChild(childPath, {\n insideAutoT: true,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n });\n }\n }\n\n if (!insideAutoT) {\n markDescendantJsx(path, processedNodes);\n return;\n }\n\n const ctx: InsertionContext = {\n insideAutoT: true,\n importAliases,\n processedNodes,\n tLocalName,\n varLocalName,\n };\n\n // Wrap dynamic prop values in <Var>, skipping control props.\n // This must happen BEFORE markDescendantJsx so that JSX inside auto-inserted\n // _Var wrappers stays unmarked for the top-level visitor to process independently.\n const attrs = path.get('openingElement').get('attributes');\n for (const attrPath of attrs) {\n if (!attrPath.isJSXAttribute()) continue;\n\n // Determine prop name and skip control props\n const nameNode = attrPath.node.name;\n const propName = t.isJSXIdentifier(nameNode) ? nameNode.name : null;\n if (isControlProp(canonicalName, propName)) continue;\n\n const valuePath = attrPath.get('value');\n if (!valuePath.isJSXExpressionContainer()) continue;\n\n const expr = valuePath.node.expression;\n\n // Content prop with JSX value — recurse into children for Var-wrapping\n if (t.isJSXElement(expr) || t.isJSXFragment(expr)) {\n const exprPath = (valuePath as NodePath<t.JSXExpressionContainer>).get(\n 'expression'\n );\n if (exprPath.isJSXElement() || exprPath.isJSXFragment()) {\n const childPaths = (\n exprPath as NodePath<t.JSXElement | t.JSXFragment>\n ).get('children');\n for (const childPath of childPaths) {\n processChild(childPath, ctx);\n }\n }\n continue;\n }\n\n // Non-JSX dynamic value — wrap in Var\n if (needsVarWrapping(valuePath.node)) {\n const varWrapper = createVarWrapper(\n valuePath.node,\n varLocalName,\n processedNodes\n );\n valuePath.replaceWith(varWrapper);\n processedNodes.add(varWrapper);\n }\n }\n\n // Mark remaining descendant JSX as processed, but skip auto-inserted nodes\n // so the top-level visitor can still discover JSX inside _Var wrappers.\n // For Derive/Static, only mark props — leave children unmarked so the\n // top-level visitor can independently process them (e.g. Branch/Plural\n // inside Derive should get their own _T, matching compiler behavior).\n if (\n canonicalName === DERIVE_COMPONENT ||\n canonicalName === STATIC_COMPONENT\n ) {\n for (const attrPath of path.get('openingElement').get('attributes')) {\n attrPath.traverse({\n JSXElement(childPath) {\n processedNodes.add(childPath.node);\n },\n JSXFragment(childPath) {\n processedNodes.add(childPath.node);\n },\n });\n }\n } else {\n markDescendantJsx(path, processedNodes);\n }\n}\n\nfunction isControlProp(\n canonicalName: string | undefined,\n propName: string | null\n): boolean {\n if (!propName) return false;\n if (canonicalName === BRANCH_COMPONENT) {\n return BRANCH_CONTROL_PROPS.has(propName) || propName.startsWith('data-');\n }\n if (canonicalName === PLURAL_COMPONENT) {\n return PLURAL_CONTROL_PROPS.has(propName);\n }\n return false;\n}\n\n// ===== Helper functions ===== //\n\nfunction getElementTypeName(element: t.JSXElement): string | null {\n const name = element.openingElement.name;\n if (t.isJSXIdentifier(name)) return name.name;\n return null;\n}\n\nfunction getLocalName(\n importAliases: Record<string, string>,\n canonicalName: string\n): string {\n const entry = Object.entries(importAliases).find(\n ([, v]) => v === canonicalName\n );\n return entry ? entry[0] : canonicalName;\n}\n\nfunction hasTranslatableText(children: t.Node[]): boolean {\n return children.some(\n (child) => t.isJSXText(child) && child.value.trim().length > 0\n );\n}\n\nfunction hasOpaqueGTChild(\n children: t.Node[],\n importAliases: Record<string, string>\n): boolean {\n return children.some((child) => {\n if (!t.isJSXElement(child)) return false;\n const typeName = getElementTypeName(child);\n if (!typeName) return false;\n const canonical = importAliases[typeName];\n return (\n canonical === BRANCH_COMPONENT ||\n canonical === PLURAL_COMPONENT ||\n canonical === DERIVE_COMPONENT ||\n canonical === STATIC_COMPONENT\n );\n });\n}\n\nfunction needsVarWrapping(container: t.JSXExpressionContainer): boolean {\n const expr = container.expression;\n if (t.isJSXEmptyExpression(expr)) return false;\n\n // Use isStaticExpression to check — if static, no wrapping needed\n const analysis = isStaticExpression(expr, true);\n if (analysis.isStatic) return false;\n\n // JSX elements/fragments inside expressions are not dynamic — they're valid children\n if (t.isJSXElement(expr) || t.isJSXFragment(expr)) return false;\n\n return true;\n}\n\n// ===== AST construction ===== //\n\nfunction createTWrapper(\n children: t.JSXElement['children'],\n tName: string\n): t.JSXElement {\n const element = t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier(tName), []),\n t.jsxClosingElement(t.jsxIdentifier(tName)),\n children\n );\n autoInsertedNodes.add(element);\n return element;\n}\n\nfunction createVarWrapper(\n child: t.JSXExpressionContainer,\n varName: string,\n processedNodes: WeakSet<t.Node>\n): t.JSXExpressionContainer {\n const varElement = t.jsxElement(\n t.jsxOpeningElement(t.jsxIdentifier(varName), []),\n t.jsxClosingElement(t.jsxIdentifier(varName)),\n [child]\n );\n autoInsertedNodes.add(varElement);\n processedNodes.add(varElement);\n return t.jsxExpressionContainer(varElement);\n}\n\nfunction wrapChildrenInT(\n elementPath: NodePath<t.JSXElement>,\n tName: string,\n processedNodes: WeakSet<t.Node>\n): void {\n const children = [...elementPath.node.children];\n const tWrapper = createTWrapper(children, tName);\n processedNodes.add(tWrapper);\n elementPath.node.children = [tWrapper];\n}\n\nfunction wrapFragmentChildrenInT(\n fragmentPath: NodePath<t.JSXFragment>,\n tName: string,\n processedNodes: WeakSet<t.Node>\n): void {\n const children = [...fragmentPath.node.children];\n const tWrapper = createTWrapper(children, tName);\n processedNodes.add(tWrapper);\n fragmentPath.node.children = [tWrapper];\n}\n\n// ===== Marking descendants as processed ===== //\n\nfunction markDescendantJsx(\n path: NodePath<t.JSXElement | t.JSXFragment>,\n processedNodes: WeakSet<t.Node>\n): void {\n path.traverse({\n JSXElement(childPath) {\n // Don't mark JSX inside auto-inserted _Var — the top-level visitor\n // needs to find and process those independently\n if (autoInsertedNodes.has(childPath.node)) {\n childPath.skip();\n return;\n }\n processedNodes.add(childPath.node);\n },\n JSXFragment(childPath) {\n if (autoInsertedNodes.has(childPath.node)) {\n childPath.skip();\n return;\n }\n processedNodes.add(childPath.node);\n },\n });\n}\n"],"mappings":"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"}
@@ -1,201 +1,130 @@
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
1
+ import { isElementNode, isExpressionNode, isMultiplicationNode } from "./types.js";
2
+ import { isAcceptedPluralForm } from "generaltranslation/internal";
3
+ //#region src/react/jsx/utils/jsxParsing/handleChildrenWhitespace.ts
5
4
  const isJsxWhitespace = (char) => {
6
- return char === ' ' || char === '\t' || char === '\n' || char === '\r';
5
+ return char === " " || char === " " || char === "\n" || char === "\r";
7
6
  };
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);
7
+ const trimJsxWhitespace = (str, side = "both") => {
8
+ let start = 0;
9
+ let end = str.length;
10
+ if (side === "start" || side === "both") while (start < end && isJsxWhitespace(str[start])) start++;
11
+ if (side === "end" || side === "both") while (end > start && isJsxWhitespace(str[end - 1])) end--;
12
+ return str.slice(start, end);
22
13
  };
23
14
  const hasNonJsxWhitespace = (str) => {
24
- for (const char of str) {
25
- if (!isJsxWhitespace(char))
26
- return true;
27
- }
28
- return false;
15
+ for (const char of str) if (!isJsxWhitespace(char)) return true;
16
+ return false;
29
17
  };
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;
18
+ function trimJsxStringChild(child) {
19
+ if (!child.includes("\n") && !child.includes("\r")) return child;
20
+ let result = child.replace(/\r\n|\r/g, "\n");
21
+ result = result.replace(/[\t ]+/g, " ");
22
+ let newResult = "";
23
+ let newline = false;
24
+ for (const char of result) {
25
+ if (char === "\n") {
26
+ if (hasNonJsxWhitespace(newResult)) newResult += " ";
27
+ else newResult = "";
28
+ newline = true;
29
+ continue;
30
+ }
31
+ if (!newline) {
32
+ newResult += char;
33
+ continue;
34
+ }
35
+ if (isJsxWhitespace(char)) continue;
36
+ newResult += char;
37
+ newline = false;
38
+ }
39
+ if (newline) newResult = trimJsxWhitespace(newResult, "end");
40
+ result = newResult;
41
+ result = result.replace(/[\t ]+/g, " ");
42
+ return result;
64
43
  }
65
44
  /**
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 Derive 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
- const processChild = handleChildrenWhitespace;
166
- return [
167
- key,
168
- processChild(value),
169
- ];
170
- }));
171
- return {
172
- nodeType: 'element',
173
- type: currentTree.type,
174
- ...(processedProps ? { props: processedProps } : {}),
175
- };
176
- }
177
- else if (isExpressionNode(currentTree)) {
178
- // Strip expression
179
- const result = currentTree.result;
180
- if (isMultiplicationNode(result)) {
181
- return handleChildrenWhitespace(result);
182
- }
183
- else if (typeof result === 'string') {
184
- return result;
185
- }
186
- else {
187
- return result;
188
- }
189
- }
190
- else if (isMultiplicationNode(currentTree)) {
191
- return {
192
- nodeType: 'multiplication',
193
- branches: handleChildrenWhitespace(currentTree.branches, 'multiplication'),
194
- };
195
- }
196
- else if (typeof currentTree === 'string') {
197
- return trimJsxStringChild(currentTree);
198
- }
199
- // null or number or boolean
200
- return currentTree;
45
+ * Handles whitespace in children of a JSX element, and strips elements
46
+ * @param currentTree - The current tree to handle
47
+ * @returns The processed tree with whitespace handled
48
+ *
49
+ * For unresolved functions, we just make it so that Derive has no children
50
+ *
51
+ * The typing was so much worse before this. Don't come for me. All I did was enforce the typing.
52
+ */
53
+ function handleChildrenWhitespace(currentTree, parentNodeType = void 0) {
54
+ if (Array.isArray(currentTree)) {
55
+ const childrenTypes = currentTree.map((child) => {
56
+ if (typeof child === "string") return "text";
57
+ if (isExpressionNode(child)) return "expression";
58
+ if (isElementNode(child)) return "element";
59
+ if (isMultiplicationNode(child)) return "multiplication";
60
+ return "other";
61
+ });
62
+ const newChildren = [];
63
+ currentTree.forEach((child, index) => {
64
+ switch (childrenTypes[index]) {
65
+ case "text":
66
+ const textNode = child;
67
+ if (parentNodeType === "multiplication") {
68
+ const result = handleChildrenWhitespace(textNode);
69
+ if (result) newChildren.push(result);
70
+ } else {
71
+ const string = trimJsxStringChild(textNode);
72
+ if (string) newChildren.push(string);
73
+ }
74
+ break;
75
+ case "expression":
76
+ const result = child.result;
77
+ if (isMultiplicationNode(result)) newChildren.push(handleChildrenWhitespace(result));
78
+ else if (typeof result === "string") newChildren.push(result);
79
+ else newChildren.push(result);
80
+ break;
81
+ case "element":
82
+ const newElement = handleChildrenWhitespace(child);
83
+ newChildren.push(newElement);
84
+ break;
85
+ case "multiplication":
86
+ newChildren.push({
87
+ nodeType: "multiplication",
88
+ branches: handleChildrenWhitespace(child.branches, "multiplication")
89
+ });
90
+ break;
91
+ case "other":
92
+ newChildren.push(child);
93
+ break;
94
+ }
95
+ });
96
+ if (parentNodeType === "multiplication") return newChildren;
97
+ return newChildren.length === 1 ? newChildren[0] : newChildren;
98
+ } else if (isElementNode(currentTree)) {
99
+ const elementIsPlural = currentTree.type === "Plural";
100
+ const elementIsBranch = currentTree.type === "Branch";
101
+ const processedProps = !currentTree.props ? void 0 : Object.fromEntries(Object.entries(currentTree.props).map(([key, value]) => {
102
+ let shouldProcess = false;
103
+ if (key === "children") shouldProcess = true;
104
+ if (elementIsPlural && isAcceptedPluralForm(key)) shouldProcess = true;
105
+ if (elementIsBranch && key !== "branch") shouldProcess = true;
106
+ if (typeof value === "string" && key !== "children") shouldProcess = false;
107
+ if (!shouldProcess) return [key, value];
108
+ return [key, handleChildrenWhitespace(value)];
109
+ }));
110
+ return {
111
+ nodeType: "element",
112
+ type: currentTree.type,
113
+ ...processedProps ? { props: processedProps } : {}
114
+ };
115
+ } else if (isExpressionNode(currentTree)) {
116
+ const result = currentTree.result;
117
+ if (isMultiplicationNode(result)) return handleChildrenWhitespace(result);
118
+ else if (typeof result === "string") return result;
119
+ else return result;
120
+ } else if (isMultiplicationNode(currentTree)) return {
121
+ nodeType: "multiplication",
122
+ branches: handleChildrenWhitespace(currentTree.branches, "multiplication")
123
+ };
124
+ else if (typeof currentTree === "string") return trimJsxStringChild(currentTree);
125
+ return currentTree;
201
126
  }
127
+ //#endregion
128
+ export { handleChildrenWhitespace, trimJsxStringChild };
129
+
130
+ //# sourceMappingURL=handleChildrenWhitespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleChildrenWhitespace.js","names":["processChild"],"sources":["../../../../../src/react/jsx/utils/jsxParsing/handleChildrenWhitespace.ts"],"sourcesContent":["import { isAcceptedPluralForm } from 'generaltranslation/internal';\nimport {\n ElementNode,\n ExpressionNode,\n isElementNode,\n isExpressionNode,\n isMultiplicationNode,\n JsxTree,\n MultiplicationNode,\n WhitespaceJsxTreeResult,\n WhitespaceMultiplicationNode,\n} from './types.js';\n\n// JSX whitespace characters (space, tab, newline, carriage return)\n// Does NOT include non-breaking space (U+00A0) which should be preserved\nconst isJsxWhitespace = (char: string) => {\n return char === ' ' || char === '\\t' || char === '\\n' || char === '\\r';\n};\n\nconst trimJsxWhitespace = (\n str: string,\n side: 'start' | 'end' | 'both' = 'both'\n) => {\n let start = 0;\n let end = str.length;\n\n if (side === 'start' || side === 'both') {\n while (start < end && isJsxWhitespace(str[start])) {\n start++;\n }\n }\n\n if (side === 'end' || side === 'both') {\n while (end > start && isJsxWhitespace(str[end - 1])) {\n end--;\n }\n }\n\n return str.slice(start, end);\n};\n\nconst hasNonJsxWhitespace = (str: string) => {\n for (const char of str) {\n if (!isJsxWhitespace(char)) return true;\n }\n return false;\n};\n\nexport function trimJsxStringChild(child: string) {\n if (!child.includes('\\n') && !child.includes('\\r')) {\n return child;\n }\n\n // Normalize line endings to \\n for consistency across platforms\n let result = child.replace(/\\r\\n|\\r/g, '\\n');\n\n // Collapse multiple spaces/tabs into a single space (but not nbsp)\n result = result.replace(/[\\t ]+/g, ' ');\n\n let newResult = '';\n let newline = false;\n for (const char of result) {\n if (char === '\\n') {\n if (hasNonJsxWhitespace(newResult)) newResult += ' ';\n else newResult = '';\n newline = true;\n continue;\n }\n if (!newline) {\n newResult += char;\n continue;\n }\n if (isJsxWhitespace(char)) continue;\n newResult += char;\n newline = false;\n }\n if (newline) newResult = trimJsxWhitespace(newResult, 'end');\n result = newResult;\n // Collapse multiple spaces/tabs into a single space (but not nbsp)\n result = result.replace(/[\\t ]+/g, ' ');\n return result;\n}\n\n// Overload for when currentTree is an array\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode['branches'],\n parentNodeType: 'multiplication'\n): (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];\n\n// Overload for when currentTree is an array\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode['branches'],\n parentNodeType?: 'element' | 'expression' | undefined\n):\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[];\n\n// Overload for when currentTree is not an array\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode | JsxTree,\n parentNodeType?: 'multiplication' | 'element' | 'expression' | undefined\n): null | WhitespaceJsxTreeResult | WhitespaceMultiplicationNode;\n\n// Overload for entry point\nexport function handleChildrenWhitespace(\n currentTree: JsxTree | JsxTree[]\n): null | WhitespaceJsxTreeResult | WhitespaceJsxTreeResult[];\n/**\n * Handles whitespace in children of a JSX element, and strips elements\n * @param currentTree - The current tree to handle\n * @returns The processed tree with whitespace handled\n *\n * For unresolved functions, we just make it so that Derive has no children\n *\n * The typing was so much worse before this. Don't come for me. All I did was enforce the typing.\n */\nexport function handleChildrenWhitespace(\n currentTree: MultiplicationNode | JsxTree | MultiplicationNode['branches'],\n parentNodeType:\n | 'multiplication'\n | 'element'\n | 'expression'\n | undefined = undefined\n):\n | null\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[] {\n if (Array.isArray(currentTree)) {\n const childrenTypes: (\n | 'text'\n | 'element'\n | 'expression'\n | 'multiplication'\n | 'other'\n )[] = currentTree.map((child) => {\n if (typeof child === 'string') return 'text';\n if (isExpressionNode(child)) return 'expression';\n if (isElementNode(child)) return 'element';\n if (isMultiplicationNode(child)) return 'multiplication';\n return 'other';\n });\n const newChildren: (\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n )[] = [];\n currentTree.forEach((child, index) => {\n switch (childrenTypes[index]) {\n case 'text':\n const textNode = child as string;\n if (parentNodeType === 'multiplication') {\n // This should be treated like a new tree (no parent here b/c its a new tree)\n const result = handleChildrenWhitespace(textNode);\n if (result) newChildren.push(result);\n } else {\n const string = trimJsxStringChild(textNode);\n if (string) newChildren.push(string);\n }\n break;\n case 'expression':\n // Strip expressions\n const result = (child as ExpressionNode).result;\n if (isMultiplicationNode(result)) {\n newChildren.push(handleChildrenWhitespace(result));\n } else if (typeof result === 'string') {\n newChildren.push(result);\n } else {\n // other case\n newChildren.push(result);\n }\n break;\n case 'element':\n const newElement = handleChildrenWhitespace(\n child as ElementNode | null\n );\n newChildren.push(newElement);\n break;\n case 'multiplication':\n newChildren.push({\n nodeType: 'multiplication',\n branches: handleChildrenWhitespace(\n (child as MultiplicationNode).branches,\n 'multiplication'\n ),\n });\n break;\n case 'other':\n // Return number or boolean or null\n newChildren.push(child as number | boolean | null);\n break;\n }\n });\n if (parentNodeType === 'multiplication') {\n // Return the branches as an array\n return newChildren;\n }\n return newChildren.length === 1 ? newChildren[0] : newChildren;\n } else if (isElementNode(currentTree)) {\n // Process all props recursively\n // What if there is a different component sharing the same name?\n const elementIsPlural = currentTree.type === 'Plural';\n const elementIsBranch = currentTree.type === 'Branch';\n const processedProps = !currentTree.props\n ? undefined\n : Object.fromEntries(\n Object.entries(currentTree.props).map(\n ([key, value]:\n | [string, unknown]\n | [\n 'children',\n (\n | JsxTree\n | MultiplicationNode\n | (JsxTree | MultiplicationNode)[]\n ),\n ]): [string, unknown] => {\n let shouldProcess = false;\n // Process children\n if (key === 'children') shouldProcess = true;\n // Process plural children\n if (elementIsPlural && isAcceptedPluralForm(key as string))\n shouldProcess = true;\n // Process branch children\n if (elementIsBranch && key !== 'branch') shouldProcess = true;\n // Do not process raw strings\n if (typeof value === 'string' && key !== 'children')\n shouldProcess = false;\n // Process props\n if (!shouldProcess) {\n return [key, value];\n }\n const processChild = handleChildrenWhitespace as (\n currentTree:\n | JsxTree\n | MultiplicationNode\n | (JsxTree | MultiplicationNode)[]\n ) => unknown;\n return [\n key,\n processChild(\n value as\n | JsxTree\n | MultiplicationNode\n | (JsxTree | MultiplicationNode)[]\n ),\n ];\n }\n )\n );\n return {\n nodeType: 'element',\n type: currentTree.type,\n ...(processedProps ? { props: processedProps } : {}),\n };\n } else if (isExpressionNode(currentTree)) {\n // Strip expression\n const result = (currentTree as ExpressionNode).result;\n if (isMultiplicationNode(result)) {\n return handleChildrenWhitespace(result);\n } else if (typeof result === 'string') {\n return result;\n } else {\n return result;\n }\n } else if (isMultiplicationNode(currentTree)) {\n return {\n nodeType: 'multiplication',\n branches: handleChildrenWhitespace(\n currentTree.branches,\n 'multiplication'\n ),\n };\n } else if (typeof currentTree === 'string') {\n return trimJsxStringChild(currentTree);\n }\n // null or number or boolean\n return currentTree;\n}\n"],"mappings":"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"}
@@ -1,66 +1,52 @@
1
- import { isWhitespaceMultiplicationNode, isWhitespaceJsxTree, } from '../types.js';
2
- import { isAcceptedPluralForm } from 'generaltranslation/internal';
3
- import { PLURAL_COMPONENT, BRANCH_COMPONENT, BRANCH_CONTROL_PROPS, } from '../../constants.js';
1
+ import { BRANCH_COMPONENT, BRANCH_CONTROL_PROPS, PLURAL_COMPONENT } from "../../constants.js";
2
+ import { isWhitespaceJsxTree, isWhitespaceMultiplicationNode } from "../types.js";
3
+ import { isAcceptedPluralForm } from "generaltranslation/internal";
4
+ //#region src/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.ts
4
5
  /**
5
- * Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
6
- * TODO: I am sure there is some optimization to be done here
7
- *
8
- * Maybe there is an optimization here with caching used paths btwn calls
9
- */
10
- export function findMultiplicationNode(root) {
11
- // Entry point
12
- return handleChildren(root, undefined, undefined);
13
- // Helper function to handle children
14
- function handleChildren(curr, parent, key) {
15
- if (Array.isArray(curr)) {
16
- for (const [index, child] of Object.entries(curr)) {
17
- const result = handleChild(child, curr, index);
18
- if (result)
19
- return result;
20
- }
21
- return undefined;
22
- }
23
- else {
24
- return handleChild(curr, parent, key);
25
- }
26
- }
27
- // Helper function to handle a single child
28
- function handleChild(curr, parent, key) {
29
- if (isWhitespaceMultiplicationNode(curr)) {
30
- return { parent, key, node: curr };
31
- }
32
- else if (isWhitespaceJsxTree(curr)) {
33
- if (!curr.props)
34
- return undefined;
35
- // Check children first
36
- if (curr.props.children) {
37
- const result = handleChildren(curr.props.children, curr.props, 'children');
38
- if (result)
39
- return result;
40
- }
41
- // For Plural/Branch, also search translatable content props
42
- // Mirrors the prop filtering in handleChildrenWhitespace.ts and autoInsertion.ts
43
- const elementIsPlural = curr.type === PLURAL_COMPONENT;
44
- const elementIsBranch = curr.type === BRANCH_COMPONENT;
45
- if (elementIsPlural || elementIsBranch) {
46
- for (const [propKey, propValue] of Object.entries(curr.props)) {
47
- if (propKey === 'children')
48
- continue;
49
- if (elementIsPlural && !isAcceptedPluralForm(propKey))
50
- continue;
51
- if (elementIsBranch && BRANCH_CONTROL_PROPS.has(propKey))
52
- continue;
53
- if (propValue && typeof propValue === 'object') {
54
- const result = handleChildren(propValue, curr.props, propKey);
55
- if (result)
56
- return result;
57
- }
58
- }
59
- }
60
- return undefined;
61
- }
62
- else {
63
- return undefined;
64
- }
65
- }
6
+ * Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)
7
+ * TODO: I am sure there is some optimization to be done here
8
+ *
9
+ * Maybe there is an optimization here with caching used paths btwn calls
10
+ */
11
+ function findMultiplicationNode(root) {
12
+ return handleChildren(root, void 0, void 0);
13
+ function handleChildren(curr, parent, key) {
14
+ if (Array.isArray(curr)) {
15
+ for (const [index, child] of Object.entries(curr)) {
16
+ const result = handleChild(child, curr, index);
17
+ if (result) return result;
18
+ }
19
+ return;
20
+ } else return handleChild(curr, parent, key);
21
+ }
22
+ function handleChild(curr, parent, key) {
23
+ if (isWhitespaceMultiplicationNode(curr)) return {
24
+ parent,
25
+ key,
26
+ node: curr
27
+ };
28
+ else if (isWhitespaceJsxTree(curr)) {
29
+ if (!curr.props) return void 0;
30
+ if (curr.props.children) {
31
+ const result = handleChildren(curr.props.children, curr.props, "children");
32
+ if (result) return result;
33
+ }
34
+ const elementIsPlural = curr.type === PLURAL_COMPONENT;
35
+ const elementIsBranch = curr.type === BRANCH_COMPONENT;
36
+ if (elementIsPlural || elementIsBranch) for (const [propKey, propValue] of Object.entries(curr.props)) {
37
+ if (propKey === "children") continue;
38
+ if (elementIsPlural && !isAcceptedPluralForm(propKey)) continue;
39
+ if (elementIsBranch && BRANCH_CONTROL_PROPS.has(propKey)) continue;
40
+ if (propValue && typeof propValue === "object") {
41
+ const result = handleChildren(propValue, curr.props, propKey);
42
+ if (result) return result;
43
+ }
44
+ }
45
+ return;
46
+ } else return;
47
+ }
66
48
  }
49
+ //#endregion
50
+ export { findMultiplicationNode };
51
+
52
+ //# sourceMappingURL=findMultiplicationNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findMultiplicationNode.js","names":[],"sources":["../../../../../../src/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.ts"],"sourcesContent":["import {\n WhitespaceJsxTreeResult,\n WhitespaceMultiplicationNode,\n isWhitespaceMultiplicationNode,\n isWhitespaceJsxTree,\n} from '../types.js';\nimport { isAcceptedPluralForm } from 'generaltranslation/internal';\nimport {\n PLURAL_COMPONENT,\n BRANCH_COMPONENT,\n BRANCH_CONTROL_PROPS,\n} from '../../constants.js';\n\nexport type MultiplicationNodeResult = {\n parent: Record<string, unknown> | unknown[] | undefined;\n key: string | undefined;\n node: WhitespaceMultiplicationNode;\n};\n\n/**\n * Finds the immediate multiplication node from the given root (eg no nested multiplication nodes)\n * TODO: I am sure there is some optimization to be done here\n *\n * Maybe there is an optimization here with caching used paths btwn calls\n */\nexport function findMultiplicationNode(\n root:\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[]\n): MultiplicationNodeResult | undefined {\n // Entry point\n return handleChildren(root, undefined, undefined);\n\n // Helper function to handle children\n function handleChildren(\n curr:\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[],\n parent: MultiplicationNodeResult['parent'],\n key: string | undefined\n ): MultiplicationNodeResult | undefined {\n if (Array.isArray(curr)) {\n for (const [index, child] of Object.entries(curr)) {\n const result = handleChild(child, curr, index);\n if (result) return result;\n }\n return undefined;\n } else {\n return handleChild(curr, parent, key);\n }\n }\n\n // Helper function to handle a single child\n function handleChild(\n curr: WhitespaceJsxTreeResult | WhitespaceMultiplicationNode,\n parent: MultiplicationNodeResult['parent'],\n key: string | undefined\n ): MultiplicationNodeResult | undefined {\n if (isWhitespaceMultiplicationNode(curr)) {\n return { parent, key, node: curr };\n } else if (isWhitespaceJsxTree(curr)) {\n if (!curr.props) return undefined;\n\n // Check children first\n if (curr.props.children) {\n const result = handleChildren(\n curr.props.children,\n curr.props,\n 'children'\n );\n if (result) return result;\n }\n\n // For Plural/Branch, also search translatable content props\n // Mirrors the prop filtering in handleChildrenWhitespace.ts and autoInsertion.ts\n const elementIsPlural = curr.type === PLURAL_COMPONENT;\n const elementIsBranch = curr.type === BRANCH_COMPONENT;\n if (elementIsPlural || elementIsBranch) {\n for (const [propKey, propValue] of Object.entries(curr.props)) {\n if (propKey === 'children') continue;\n if (elementIsPlural && !isAcceptedPluralForm(propKey)) continue;\n if (elementIsBranch && BRANCH_CONTROL_PROPS.has(propKey)) continue;\n if (propValue && typeof propValue === 'object') {\n const result = handleChildren(\n propValue as\n | WhitespaceJsxTreeResult\n | WhitespaceMultiplicationNode\n | (WhitespaceJsxTreeResult | WhitespaceMultiplicationNode)[],\n curr.props,\n propKey\n );\n if (result) return result;\n }\n }\n }\n\n return undefined;\n } else {\n return undefined;\n }\n }\n}\n"],"mappings":";;;;;;;;;;AAyBA,SAAgB,uBACd,MAIsC;AAEtC,QAAO,eAAe,MAAM,KAAA,GAAW,KAAA,EAAU;CAGjD,SAAS,eACP,MAIA,QACA,KACsC;AACtC,MAAI,MAAM,QAAQ,KAAK,EAAE;AACvB,QAAK,MAAM,CAAC,OAAO,UAAU,OAAO,QAAQ,KAAK,EAAE;IACjD,MAAM,SAAS,YAAY,OAAO,MAAM,MAAM;AAC9C,QAAI,OAAQ,QAAO;;AAErB;QAEA,QAAO,YAAY,MAAM,QAAQ,IAAI;;CAKzC,SAAS,YACP,MACA,QACA,KACsC;AACtC,MAAI,+BAA+B,KAAK,CACtC,QAAO;GAAE;GAAQ;GAAK,MAAM;GAAM;WACzB,oBAAoB,KAAK,EAAE;AACpC,OAAI,CAAC,KAAK,MAAO,QAAO,KAAA;AAGxB,OAAI,KAAK,MAAM,UAAU;IACvB,MAAM,SAAS,eACb,KAAK,MAAM,UACX,KAAK,OACL,WACD;AACD,QAAI,OAAQ,QAAO;;GAKrB,MAAM,kBAAkB,KAAK,SAAS;GACtC,MAAM,kBAAkB,KAAK,SAAS;AACtC,OAAI,mBAAmB,gBACrB,MAAK,MAAM,CAAC,SAAS,cAAc,OAAO,QAAQ,KAAK,MAAM,EAAE;AAC7D,QAAI,YAAY,WAAY;AAC5B,QAAI,mBAAmB,CAAC,qBAAqB,QAAQ,CAAE;AACvD,QAAI,mBAAmB,qBAAqB,IAAI,QAAQ,CAAE;AAC1D,QAAI,aAAa,OAAO,cAAc,UAAU;KAC9C,MAAM,SAAS,eACb,WAIA,KAAK,OACL,QACD;AACD,SAAI,OAAQ,QAAO;;;AAKzB;QAEA"}