gt 2.14.35 → 2.14.36

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 (429) hide show
  1. package/CHANGELOG.md +16 -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.js +104 -108
  256. package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
  257. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
  258. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
  259. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
  260. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
  261. package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
  262. package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
  263. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
  264. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
  265. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
  266. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
  267. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
  268. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
  269. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
  270. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
  271. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
  272. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
  273. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
  274. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
  275. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
  276. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
  277. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
  278. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
  279. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
  280. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
  281. package/dist/react/jsx/utils/validateStringFunction.js +21 -29
  282. package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
  283. package/dist/react/jsx/wrapJsx.js +192 -375
  284. package/dist/react/jsx/wrapJsx.js.map +1 -0
  285. package/dist/react/parse/addVitePlugin/index.js +40 -34
  286. package/dist/react/parse/addVitePlugin/index.js.map +1 -0
  287. package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
  288. package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
  289. package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
  290. package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
  291. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
  292. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
  293. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
  294. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
  295. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
  296. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
  297. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
  298. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
  299. package/dist/react/parse/createDictionaryUpdates.js +121 -185
  300. package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
  301. package/dist/react/parse/createInlineUpdates.js +123 -139
  302. package/dist/react/parse/createInlineUpdates.js.map +1 -0
  303. package/dist/react/parse/wrapContent.js +131 -156
  304. package/dist/react/parse/wrapContent.js.map +1 -0
  305. package/dist/react/utils/flattenDictionary.js +55 -70
  306. package/dist/react/utils/flattenDictionary.js.map +1 -0
  307. package/dist/react/utils/getEntryAndMetadata.js +14 -10
  308. package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
  309. package/dist/react/utils/getVariableName.js +36 -33
  310. package/dist/react/utils/getVariableName.js.map +1 -0
  311. package/dist/setup/detectFramework.js +85 -102
  312. package/dist/setup/detectFramework.js.map +1 -0
  313. package/dist/setup/frameworkUtils.js +17 -28
  314. package/dist/setup/frameworkUtils.js.map +1 -0
  315. package/dist/setup/userInput.js +24 -31
  316. package/dist/setup/userInput.js.map +1 -0
  317. package/dist/setup/wizard.js +141 -143
  318. package/dist/setup/wizard.js.map +1 -0
  319. package/dist/state/mintlifyRefMap.js +12 -9
  320. package/dist/state/mintlifyRefMap.js.map +1 -0
  321. package/dist/state/recentDownloads.js +26 -23
  322. package/dist/state/recentDownloads.js.map +1 -0
  323. package/dist/state/translateWarnings.js +17 -8
  324. package/dist/state/translateWarnings.js.map +1 -0
  325. package/dist/translation/parse.js +77 -98
  326. package/dist/translation/parse.js.map +1 -0
  327. package/dist/translation/stage.js +28 -43
  328. package/dist/translation/stage.js.map +1 -0
  329. package/dist/translation/validate.js +68 -91
  330. package/dist/translation/validate.js.map +1 -0
  331. package/dist/types/libraries.js +93 -91
  332. package/dist/types/libraries.js.map +1 -0
  333. package/dist/types/parsing.js +19 -10
  334. package/dist/types/parsing.js.map +1 -0
  335. package/dist/utils/addExplicitAnchorIds.js +270 -389
  336. package/dist/utils/addExplicitAnchorIds.js.map +1 -0
  337. package/dist/utils/calculateTimeoutMs.js +11 -6
  338. package/dist/utils/calculateTimeoutMs.js.map +1 -0
  339. package/dist/utils/constants.js +15 -12
  340. package/dist/utils/constants.js.map +1 -0
  341. package/dist/utils/credentials.js +67 -114
  342. package/dist/utils/credentials.js.map +1 -0
  343. package/dist/utils/fetch.js +22 -20
  344. package/dist/utils/fetch.js.map +1 -0
  345. package/dist/utils/flattenJsonFiles.js +27 -34
  346. package/dist/utils/flattenJsonFiles.js.map +1 -0
  347. package/dist/utils/gitDiff.js +30 -32
  348. package/dist/utils/gitDiff.js.map +1 -0
  349. package/dist/utils/gt.js +7 -2
  350. package/dist/utils/gt.js.map +1 -0
  351. package/dist/utils/hash.js +14 -9
  352. package/dist/utils/hash.js.map +1 -0
  353. package/dist/utils/headers.js +10 -13
  354. package/dist/utils/headers.js.map +1 -0
  355. package/dist/utils/installPackage.js +70 -75
  356. package/dist/utils/installPackage.js.map +1 -0
  357. package/dist/utils/localizeRelativeAssets.js +114 -157
  358. package/dist/utils/localizeRelativeAssets.js.map +1 -0
  359. package/dist/utils/localizeStaticImports.js +229 -371
  360. package/dist/utils/localizeStaticImports.js.map +1 -0
  361. package/dist/utils/localizeStaticUrls.js +241 -424
  362. package/dist/utils/localizeStaticUrls.js.map +1 -0
  363. package/dist/utils/mintlifyTitleFallback.js +64 -72
  364. package/dist/utils/mintlifyTitleFallback.js.map +1 -0
  365. package/dist/utils/monorepoVersionCheck.js +177 -215
  366. package/dist/utils/monorepoVersionCheck.js.map +1 -0
  367. package/dist/utils/packageInfo.js +17 -16
  368. package/dist/utils/packageInfo.js.map +1 -0
  369. package/dist/utils/packageJson.js +51 -66
  370. package/dist/utils/packageJson.js.map +1 -0
  371. package/dist/utils/packageManager.js +237 -260
  372. package/dist/utils/packageManager.js.map +1 -0
  373. package/dist/utils/parse/needsCJS.js +36 -69
  374. package/dist/utils/parse/needsCJS.js.map +1 -0
  375. package/dist/utils/persistPostprocessHashes.js +30 -32
  376. package/dist/utils/persistPostprocessHashes.js.map +1 -0
  377. package/dist/utils/processAnchorIds.js +32 -54
  378. package/dist/utils/processAnchorIds.js.map +1 -0
  379. package/dist/utils/processOpenApi.js +469 -578
  380. package/dist/utils/processOpenApi.js.map +1 -0
  381. package/dist/utils/resolveMintlifyRefs.js +89 -105
  382. package/dist/utils/resolveMintlifyRefs.js.map +1 -0
  383. package/dist/utils/resolvePublish.js +46 -54
  384. package/dist/utils/resolvePublish.js.map +1 -0
  385. package/dist/utils/sanitizeFileContent.js +20 -27
  386. package/dist/utils/sanitizeFileContent.js.map +1 -0
  387. package/dist/utils/sharedStaticAssets.js +248 -366
  388. package/dist/utils/sharedStaticAssets.js.map +1 -0
  389. package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
  390. package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
  391. package/dist/utils/validateMdx.js +26 -23
  392. package/dist/utils/validateMdx.js.map +1 -0
  393. package/dist/utils/wrapPlainUrls.js +58 -70
  394. package/dist/utils/wrapPlainUrls.js.map +1 -0
  395. package/dist/workflows/download.js +92 -126
  396. package/dist/workflows/download.js.map +1 -0
  397. package/dist/workflows/enqueue.js +47 -54
  398. package/dist/workflows/enqueue.js.map +1 -0
  399. package/dist/workflows/publish.js +29 -29
  400. package/dist/workflows/publish.js.map +1 -0
  401. package/dist/workflows/setupProject.js +39 -40
  402. package/dist/workflows/setupProject.js.map +1 -0
  403. package/dist/workflows/stage.js +61 -65
  404. package/dist/workflows/stage.js.map +1 -0
  405. package/dist/workflows/steps/BranchStep.js +118 -163
  406. package/dist/workflows/steps/BranchStep.js.map +1 -0
  407. package/dist/workflows/steps/DownloadStep.js +107 -137
  408. package/dist/workflows/steps/DownloadStep.js.map +1 -0
  409. package/dist/workflows/steps/EnqueueStep.js +32 -32
  410. package/dist/workflows/steps/EnqueueStep.js.map +1 -0
  411. package/dist/workflows/steps/PollJobsStep.js +208 -292
  412. package/dist/workflows/steps/PollJobsStep.js.map +1 -0
  413. package/dist/workflows/steps/PublishStep.js +33 -38
  414. package/dist/workflows/steps/PublishStep.js.map +1 -0
  415. package/dist/workflows/steps/SetupStep.js +71 -72
  416. package/dist/workflows/steps/SetupStep.js.map +1 -0
  417. package/dist/workflows/steps/TagStep.js +39 -44
  418. package/dist/workflows/steps/TagStep.js.map +1 -0
  419. package/dist/workflows/steps/UploadSourcesStep.js +108 -140
  420. package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
  421. package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
  422. package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
  423. package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
  424. package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
  425. package/dist/workflows/steps/WorkflowStep.js +6 -2
  426. package/dist/workflows/steps/WorkflowStep.js.map +1 -0
  427. package/dist/workflows/upload.js +45 -46
  428. package/dist/workflows/upload.js.map +1 -0
  429. package/package.json +14 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleDerivation.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/derivation/handleDerivation.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { ParsingConfigOptions } from '../../../../../types/parsing.js';\nimport { parseStringExpression, nodeToStrings } from '../../parseString.js';\nimport { StringNode } from '../../types.js';\nimport { buildImportMap } from '../../buildImportMap.js';\nimport { resolveImportPath } from '../../resolveImportPath.js';\nimport { parse } from '@babel/parser';\nimport fs from 'node:fs';\nimport {\n warnFunctionNotFoundSync,\n warnDeriveFunctionNoResultsSync,\n warnDeriveFunctionNotWrappedSync,\n warnAutoderiveNoResultsSync,\n} from '../../../../../console/index.js';\n\nimport traverseModule from '@babel/traverse';\nimport generateModule from '@babel/generator';\nimport { isDeriveCall } from './isDeriveCall.js';\n// Handle CommonJS/ESM interop\nconst traverse = traverseModule.default || traverseModule;\nconst generate = generateModule.default || generateModule;\n\n// Nested arrays of strings (deprecated - kept for backwards compatibility)\nexport type StringTree = (string | StringTree)[];\n\n/**\n * Cache for resolved import paths to avoid redundant I/O operations.\n * Key: `${currentFile}::${importPath}`\n * Value: resolved absolute path or null\n */\nconst resolveImportPathCache = new Map<string, string | null>();\n\n/**\n * Cache for processed functions to avoid re-parsing the same files.\n * Key: `${filePath}::${functionName}`\n * Value: Node result or null\n */\nconst processFunctionCache = new Map<string, StringNode | null>();\n\n/**\n * Extracts content if an expression is derivable (statically analyzable) or uses derive()\n * Returns a Node representing the parsed expression\n * @param expr - The expression to check\n * @param tPath - NodePath for scope resolution\n * @param file - Current file path\n * @param parsingOptions - Parsing configuration\n * @param errors - Errors to add to\n * @param runtimeInterpolationState - When provided, non-derive dynamic expressions become {n} placeholders instead of errors. Pass { index: 0 } at the entry point for template macros.\n * @param skipDeriveInvocation - If true, skip derive invocation check\n * @returns Node | null - The parsed node, or null if invalid\n *\n * @note runtimeInterpolationState\n * - Only provide at entry for template macros, otherwise omit\n * - t`Hello {nonDerivableValue}` -> t`Hello {0}`\n *\n */\nexport function handleDerivation({\n expr,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n}: {\n expr: t.Expression;\n tPath: NodePath;\n file: string;\n parsingOptions: ParsingConfigOptions;\n errors: string[];\n warnings: Set<string>;\n runtimeInterpolationState?: { index: number };\n skipDeriveInvocation?: boolean;\n}): StringNode | null {\n if (!expr) {\n return null;\n }\n\n // Handle expressions\n if (t.isCallExpression(expr)) {\n if (isDeriveCall({ expr, tPath })) {\n const variants = getDeriveVariants({\n call: expr,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n });\n if (variants) {\n return {\n type: 'choice',\n nodes: variants.map((v) => ({ type: 'text', text: v })),\n };\n }\n // derive() had no resolvable results\n const code =\n expr.arguments.length > 0\n ? generate(expr.arguments[0]).code\n : 'no arguments';\n errors.push(\n warnDeriveFunctionNoResultsSync(\n file,\n code,\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return null;\n }\n // Non-derive call\n if (runtimeInterpolationState) {\n return { type: 'text', text: `{${runtimeInterpolationState.index++}}` };\n }\n const calleeName = t.isIdentifier(expr.callee)\n ? expr.callee.name\n : generate(expr.callee).code;\n errors.push(\n warnDeriveFunctionNotWrappedSync(\n file,\n calleeName,\n `${expr.callee.loc?.start?.line}:${expr.callee.loc?.start?.column}`\n )\n );\n return null;\n }\n\n // Handle direct string literals\n if (t.isStringLiteral(expr)) {\n return { type: 'text', text: expr.value };\n }\n\n // Handle template literals\n if (t.isTemplateLiteral(expr)) {\n const parts: StringNode[] = [];\n for (let index = 0; index < expr.quasis.length; index++) {\n const quasi = expr.quasis[index];\n const text = quasi.value.cooked ?? quasi.value.raw ?? '';\n if (text) {\n parts.push({ type: 'text', text });\n }\n const exprNode = expr.expressions[index];\n if (exprNode && t.isExpression(exprNode)) {\n if (isDeriveCall({ expr: exprNode, tPath })) {\n // Derive — resolve fully (no runtime interpolation forwarding)\n const result = handleDerivation({\n expr: exprNode,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n });\n if (result === null) return null;\n parts.push(result);\n } else {\n // Non-derive — recurse with runtime interpolation forwarded\n const result = handleDerivation({\n expr: exprNode,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n if (result === null) return null;\n parts.push(result);\n }\n }\n }\n\n if (parts.length === 0) {\n return { type: 'text', text: '' };\n }\n if (parts.length === 1) {\n return parts[0];\n }\n return { type: 'sequence', nodes: parts };\n }\n\n // Handle binary expressions\n if (t.isBinaryExpression(expr) && expr.operator === '+') {\n if (!t.isExpression(expr.left) || !t.isExpression(expr.right)) {\n return null;\n }\n const leftResult = handleDerivation({\n expr: expr.left,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n const rightResult = handleDerivation({\n expr: expr.right,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n\n if (leftResult === null || rightResult === null) {\n return null;\n }\n\n return { type: 'sequence', nodes: [leftResult, rightResult] };\n }\n\n // Handle parenthesized expressions\n if (t.isParenthesizedExpression(expr)) {\n return handleDerivation({\n expr: expr.expression,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n runtimeInterpolationState,\n skipDeriveInvocation,\n });\n }\n\n // Handle numeric literals by converting them to strings\n if (t.isNumericLiteral(expr)) {\n return { type: 'text', text: String(expr.value) };\n }\n\n // Handle unary expressions by converting them to strings\n if (t.isUnaryExpression(expr)) {\n let operator = '';\n if (expr.operator === '-') {\n operator = expr.operator;\n }\n if (t.isNumericLiteral(expr.argument)) {\n if (expr.argument.value === 0) {\n return { type: 'text', text: '0' };\n } else {\n return {\n type: 'text',\n text: operator + expr.argument.value.toString(),\n };\n }\n } else {\n // invalid\n return null;\n }\n }\n\n // Handle boolean literals by converting them to strings\n if (t.isBooleanLiteral(expr)) {\n return { type: 'text', text: String(expr.value) };\n }\n\n // Handle null literal\n if (t.isNullLiteral(expr)) {\n return { type: 'text', text: 'null' };\n }\n\n // Non-static expression\n if (skipDeriveInvocation) {\n // Skip pass a `derive()` invocation to do derivation\n const variants = resolveCallStringVariants(\n expr,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings\n );\n if (variants) {\n return {\n type: 'choice',\n nodes: variants.map((v) => ({ type: 'text', text: v })),\n };\n }\n // Autoderive had no resolvable results\n const code = generate(expr).code;\n errors.push(\n warnAutoderiveNoResultsSync(\n file,\n code,\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return null;\n }\n\n // Not a derivable expression\n if (runtimeInterpolationState) {\n return { type: 'text', text: `{${runtimeInterpolationState.index++}}` };\n }\n return null;\n}\n\n/**\n * Given a CallExpression, if it is derive(<call>) or derive(await <call>),\n * return all possible string outcomes of that argument call as an array of strings.\n *\n * Examples:\n * derive(time()) -> [\"day\", \"night\"]\n * derive(await time()) -> [\"day\", \"night\"]\n *\n * Returns null if it can't be resolved.\n */\nfunction getDeriveVariants<T extends t.CallExpression = t.CallExpression>({\n call,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n}: {\n call: T;\n tPath: NodePath;\n file: string;\n parsingOptions: ParsingConfigOptions;\n errors: string[];\n warnings: Set<string>;\n}): string[] | null {\n // --- Validate Callee --- //\n\n // Must be a derive(...) call or an alias of it\n if (!isDeriveCall({ expr: call, tPath })) {\n const calleeName = t.isIdentifier(call.callee)\n ? call.callee.name\n : generate(call.callee).code;\n errors.push(\n warnDeriveFunctionNotWrappedSync(\n file,\n calleeName,\n `${call.callee.loc?.start?.line}:${call.callee.loc?.start?.column}`\n )\n );\n return null;\n }\n\n // --- Validate Arguments --- //\n\n if (call.arguments.length !== 1) return null;\n\n const arg = call.arguments[0];\n if (!t.isExpression(arg)) return null;\n\n // Handle await expression: derive(await time())\n if (t.isAwaitExpression(arg)) {\n // Resolve the inner call's possible string outcomes\n return resolveCallStringVariants(\n arg.argument,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings\n );\n }\n // Handle call expression: derive(time())\n if (t.isCallExpression(arg)) {\n return resolveCallStringVariants(\n arg,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings\n );\n }\n // Handle other expressions (ternary, string literal, etc.) by recursing into handleDerivation\n const node = handleDerivation({\n expr: arg,\n tPath,\n file,\n parsingOptions,\n errors,\n warnings,\n skipDeriveInvocation: true,\n });\n if (node) {\n return nodeToStrings(node);\n }\n return null;\n}\n\nfunction resolveCallStringVariants(\n expression: t.Expression,\n tPath: NodePath,\n file: string,\n parsingOptions: ParsingConfigOptions,\n errors: string[],\n warnings: Set<string>\n): string[] | null {\n // Handle function identifier calls: derive(time())\n if (t.isCallExpression(expression) && t.isIdentifier(expression.callee)) {\n const functionName = expression.callee.name;\n\n // Use Binding to resolve the function\n const calleeBinding = tPath.scope.getBinding(functionName);\n\n if (calleeBinding) {\n // Check if the binding itself is an import (not just if the name exists in imports)\n const isImportBinding =\n calleeBinding.path.isImportSpecifier() ||\n calleeBinding.path.isImportDefaultSpecifier() ||\n calleeBinding.path.isImportNamespaceSpecifier();\n\n if (isImportBinding) {\n // Function is imported - resolve cross-file\n const importedFunctionsMap = buildImportMap(\n tPath.scope.getProgramParent().path\n );\n\n let originalName: string | undefined;\n if (calleeBinding.path.isImportSpecifier()) {\n originalName = t.isIdentifier(calleeBinding.path.node.imported)\n ? calleeBinding.path.node.imported.name\n : calleeBinding.path.node.imported.value;\n } else if (calleeBinding.path.isImportDefaultSpecifier()) {\n originalName = calleeBinding.path.node.local.name;\n } else if (calleeBinding.path.isImportNamespaceSpecifier()) {\n originalName = calleeBinding.path.node.local.name;\n }\n\n const importPath = importedFunctionsMap.get(functionName);\n if (importPath) {\n const filePath = resolveImportPath(\n file,\n importPath,\n parsingOptions,\n resolveImportPathCache\n );\n\n if (filePath && originalName) {\n const node = resolveFunctionInFile(\n filePath,\n originalName,\n parsingOptions,\n errors,\n warnings\n );\n if (node) {\n return nodeToStrings(node);\n }\n }\n }\n } else {\n // Function is local - use parseStringExpression with resolveFunctionCall\n const node = resolveFunctionCallFromBinding(\n calleeBinding,\n tPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (node) {\n return nodeToStrings(node);\n }\n }\n } else {\n // Function not found in scope\n errors.push(\n warnFunctionNotFoundSync(\n file,\n functionName,\n `${expression.callee.loc?.start?.line}:${expression.callee.loc?.start?.column}`\n )\n );\n return null;\n }\n }\n\n // If we get here: analyze this call as derivable (statically analyzable)\n const node = parseStringExpression(\n expression,\n tPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (node) {\n return nodeToStrings(node);\n }\n return null;\n}\n\n/**\n * Resolves a function from a binding (local function) using parseStringExpression logic\n */\nfunction resolveFunctionCallFromBinding(\n calleeBinding: ReturnType<NodePath['scope']['getBinding']>,\n tPath: NodePath,\n file: string,\n parsingOptions: ParsingConfigOptions,\n warnings: Set<string>,\n errors: string[]\n): StringNode | null {\n if (!calleeBinding) {\n return null;\n }\n\n const bindingPath = calleeBinding.path;\n const branches: StringNode[] = [];\n\n // Handle function declarations: function time() { return \"day\"; }\n if (bindingPath.isFunctionDeclaration()) {\n bindingPath.traverse({\n ReturnStatement(returnPath) {\n // Only process return statements that are direct children of this function\n const parentFunction = returnPath.getFunctionParent();\n if (parentFunction?.node !== bindingPath.node) {\n return;\n }\n\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n }\n // Handle arrow functions: const time = () => \"day\"\n else if (bindingPath.isVariableDeclarator()) {\n const init = bindingPath.get('init');\n if (!init.isArrowFunctionExpression()) {\n return null;\n }\n\n const body = init.get('body');\n\n // Handle expression body: () => \"day\"\n if (body.isExpression()) {\n const bodyResult = parseStringExpression(\n body.node,\n body,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (bodyResult !== null) {\n branches.push(bodyResult);\n }\n }\n // Handle block body: () => { return \"day\"; }\n else if (body.isBlockStatement()) {\n const arrowFunction = init.node;\n body.traverse({\n ReturnStatement(returnPath) {\n // Only process return statements that are direct children of this function\n const parentFunction = returnPath.getFunctionParent();\n if (parentFunction?.node !== arrowFunction) {\n return;\n }\n\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n file,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n }\n }\n\n if (branches.length === 0) {\n return null;\n }\n\n if (branches.length === 1) {\n return branches[0];\n }\n\n return { type: 'choice', nodes: branches };\n}\n\n/**\n * Resolves a function definition in an external file\n */\nfunction resolveFunctionInFile(\n filePath: string,\n functionName: string,\n parsingOptions: ParsingConfigOptions,\n errors: string[],\n warnings: Set<string>\n): StringNode | null {\n // Check cache first\n const cacheKey = `${filePath}::${functionName}`;\n if (processFunctionCache.has(cacheKey)) {\n return processFunctionCache.get(cacheKey) ?? null;\n }\n\n let result: StringNode | null = null;\n\n try {\n const code = fs.readFileSync(filePath, 'utf8');\n const ast = parse(code, {\n sourceType: 'module',\n plugins: ['jsx', 'typescript'],\n });\n\n traverse(ast, {\n // Handle re-exports: export * from './utils'\n ExportAllDeclaration(path) {\n // Only follow re-exports if we haven't found the function yet\n if (result !== null) return;\n\n if (t.isStringLiteral(path.node.source)) {\n const reexportPath = path.node.source.value;\n const resolvedPath = resolveImportPath(\n filePath,\n reexportPath,\n parsingOptions,\n resolveImportPathCache\n );\n\n if (resolvedPath) {\n // Recursively resolve in the re-exported file\n const reexportResult = resolveFunctionInFile(\n resolvedPath,\n functionName,\n parsingOptions,\n errors,\n warnings\n );\n if (reexportResult) {\n result = reexportResult;\n }\n }\n }\n },\n // Handle named re-exports: export { fn1 } from './utils'\n ExportNamedDeclaration(path) {\n // Only follow re-exports if we haven't found the function yet\n if (result !== null) return;\n\n // Check if this is a re-export with a source\n if (path.node.source && t.isStringLiteral(path.node.source)) {\n // Check if any of the exported specifiers match our function name\n const hasMatchingExport = path.node.specifiers.some((spec) => {\n if (t.isExportSpecifier(spec)) {\n const exportedName = t.isIdentifier(spec.exported)\n ? spec.exported.name\n : spec.exported.value;\n return exportedName === functionName;\n }\n return false;\n });\n\n if (hasMatchingExport) {\n const reexportPath = path.node.source.value;\n const resolvedPath = resolveImportPath(\n filePath,\n reexportPath,\n parsingOptions,\n resolveImportPathCache\n );\n\n if (resolvedPath) {\n // Find the original name in case it was renamed\n const specifier = path.node.specifiers.find((spec) => {\n if (t.isExportSpecifier(spec)) {\n const exportedName = t.isIdentifier(spec.exported)\n ? spec.exported.name\n : spec.exported.value;\n return exportedName === functionName;\n }\n return false;\n });\n\n let originalName = functionName;\n if (\n specifier &&\n t.isExportSpecifier(specifier) &&\n t.isIdentifier(specifier.local)\n ) {\n originalName = specifier.local.name;\n }\n\n // Recursively resolve in the re-exported file\n const reexportResult = resolveFunctionInFile(\n resolvedPath,\n originalName,\n parsingOptions,\n errors,\n warnings\n );\n if (reexportResult) {\n result = reexportResult;\n }\n }\n }\n }\n },\n // Handle function declarations: function woah() { ... }\n FunctionDeclaration(path) {\n if (path.node.id?.name === functionName && result === null) {\n const branches: StringNode[] = [];\n path.traverse({\n Function(innerPath) {\n // Skip nested functions\n innerPath.skip();\n },\n ReturnStatement(returnPath: NodePath) {\n if (!t.isReturnStatement(returnPath.node)) {\n return;\n }\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n filePath,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n\n if (branches.length === 1) {\n result = branches[0];\n } else if (branches.length > 1) {\n result = { type: 'choice', nodes: branches };\n }\n }\n },\n // Handle variable declarations: const woah = () => { ... }\n VariableDeclarator(path) {\n if (\n t.isIdentifier(path.node.id) &&\n path.node.id.name === functionName &&\n path.node.init &&\n (t.isArrowFunctionExpression(path.node.init) ||\n t.isFunctionExpression(path.node.init)) &&\n result === null\n ) {\n const init = path.get('init');\n if (\n !init.isArrowFunctionExpression() &&\n !init.isFunctionExpression()\n ) {\n return;\n }\n\n const bodyPath = init.get('body');\n const branches: StringNode[] = [];\n\n // Handle expression body: () => \"day\"\n if (!Array.isArray(bodyPath) && t.isExpression(bodyPath.node)) {\n const bodyResult = parseStringExpression(\n bodyPath.node,\n bodyPath,\n filePath,\n parsingOptions,\n warnings,\n errors\n );\n if (bodyResult !== null) {\n branches.push(bodyResult);\n }\n }\n // Handle block body: () => { return \"day\"; }\n else if (\n !Array.isArray(bodyPath) &&\n t.isBlockStatement(bodyPath.node)\n ) {\n const arrowFunction = init.node;\n bodyPath.traverse({\n Function(innerPath: NodePath) {\n // Skip nested functions\n innerPath.skip();\n },\n ReturnStatement(returnPath: NodePath) {\n // Only process return statements that are direct children of this function\n const parentFunction = returnPath.getFunctionParent();\n if (parentFunction?.node !== arrowFunction) {\n return;\n }\n\n if (!t.isReturnStatement(returnPath.node)) {\n return;\n }\n const returnArg = returnPath.node.argument;\n if (!returnArg || !t.isExpression(returnArg)) {\n return;\n }\n const returnResult = parseStringExpression(\n returnArg,\n returnPath,\n filePath,\n parsingOptions,\n warnings,\n errors\n );\n if (returnResult !== null) {\n branches.push(returnResult);\n }\n },\n });\n }\n\n if (branches.length === 1) {\n result = branches[0];\n } else if (branches.length > 1) {\n result = { type: 'choice', nodes: branches };\n }\n }\n },\n });\n } catch (error) {\n // File read or parse error - return null\n errors.push(\n warnDeriveFunctionNoResultsSync(\n filePath,\n functionName,\n 'file read/parse error: ' + error\n )\n );\n result = null;\n }\n\n // Cache the result\n processFunctionCache.set(cacheKey, result);\n return result;\n}\n"],"mappings":"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"}
@@ -1,70 +1,60 @@
1
- import { handleDerivation } from './handleDerivation.js';
2
- import { warnNonStringSync } from '../../../../../console/index.js';
3
- import { nodeToStrings } from '../../parseString.js';
4
- import generateModule from '@babel/generator';
5
- import { indexVars } from 'generaltranslation/internal';
6
- import { randomUUID } from 'node:crypto';
7
- import { isValidIcu } from '../../../evaluateJsx.js';
8
- import { warnInvalidIcuSync } from '../../../../../console/index.js';
9
- // Handle CommonJS/ESM interop
1
+ import { isValidIcu } from "../../../evaluateJsx.js";
2
+ import { warnInvalidIcuSync, warnNonStringSync } from "../../../../../console/index.js";
3
+ import { nodeToStrings } from "../../parseString.js";
4
+ import { handleDerivation } from "./handleDerivation.js";
5
+ import { randomUUID } from "node:crypto";
6
+ import generateModule from "@babel/generator";
7
+ import { indexVars } from "generaltranslation/internal";
8
+ //#region src/react/jsx/utils/stringParsing/derivation/index.ts
10
9
  const generate = generateModule.default || generateModule;
11
10
  /**
12
- * Registers an expression with support for derive
13
- * Entry point for string derivation
14
- *
15
- * @param tPath - The path to the tag identifier
16
- * @param expr - The expression to parse
17
- * @param metadata - Extracted metadata (empty for tagged templates)
18
- * @param config - Parsing configuration
19
- * @param output - Parsing output collectors
20
- * @param enableRuntimeInterpolation - For template macros, enables runtime interpolation for non-derive calls
21
- */
22
- export function deriveExpression({ tPath, expr, metadata, config, output, index, enableRuntimeInterpolation = false, contextVariants, }) {
23
- // parse derivable expression
24
- const stringNode = handleDerivation({
25
- expr,
26
- tPath,
27
- file: config.file,
28
- parsingOptions: config.parsingOptions,
29
- errors: output.errors,
30
- warnings: output.warnings,
31
- runtimeInterpolationState: enableRuntimeInterpolation
32
- ? { index: 0 }
33
- : undefined,
34
- skipDeriveInvocation: config.autoderiveMethod === 'ENABLED',
35
- });
36
- // Nothing returned, push error
37
- if (!stringNode) {
38
- output.errors.push(warnNonStringSync(config.file, generate(expr).code, `${expr.loc?.start?.line}:${expr.loc?.start?.column}`));
39
- return;
40
- }
41
- // validate ICU
42
- const strings = nodeToStrings(stringNode).map(indexVars);
43
- if (!config.ignoreInvalidIcu) {
44
- for (const string of strings) {
45
- const { isValid, error } = isValidIcu(string);
46
- if (!isValid) {
47
- output.warnings.add(warnInvalidIcuSync(config.file, string, error ?? 'Unknown error', `${expr.loc?.start?.line}:${expr.loc?.start?.column}`));
48
- return;
49
- }
50
- }
51
- }
52
- const temporaryDeriveId = `derive-temp-id-${randomUUID()}`;
53
- const contexts = contextVariants ?? [metadata.context];
54
- for (const string of strings) {
55
- for (const context of contexts) {
56
- output.updates.push({
57
- dataFormat: (metadata.format || 'ICU'),
58
- source: string,
59
- metadata: {
60
- ...metadata,
61
- ...(context != null && { context }),
62
- // Add the index if an id and index is provided (for handling when registering an array of strings)
63
- ...(metadata.id &&
64
- index != null && { id: `${metadata.id}.${index}` }),
65
- staticId: temporaryDeriveId,
66
- },
67
- });
68
- }
69
- }
11
+ * Registers an expression with support for derive
12
+ * Entry point for string derivation
13
+ *
14
+ * @param tPath - The path to the tag identifier
15
+ * @param expr - The expression to parse
16
+ * @param metadata - Extracted metadata (empty for tagged templates)
17
+ * @param config - Parsing configuration
18
+ * @param output - Parsing output collectors
19
+ * @param enableRuntimeInterpolation - For template macros, enables runtime interpolation for non-derive calls
20
+ */
21
+ function deriveExpression({ tPath, expr, metadata, config, output, index, enableRuntimeInterpolation = false, contextVariants }) {
22
+ const stringNode = handleDerivation({
23
+ expr,
24
+ tPath,
25
+ file: config.file,
26
+ parsingOptions: config.parsingOptions,
27
+ errors: output.errors,
28
+ warnings: output.warnings,
29
+ runtimeInterpolationState: enableRuntimeInterpolation ? { index: 0 } : void 0,
30
+ skipDeriveInvocation: config.autoderiveMethod === "ENABLED"
31
+ });
32
+ if (!stringNode) {
33
+ output.errors.push(warnNonStringSync(config.file, generate(expr).code, `${expr.loc?.start?.line}:${expr.loc?.start?.column}`));
34
+ return;
35
+ }
36
+ const strings = nodeToStrings(stringNode).map(indexVars);
37
+ if (!config.ignoreInvalidIcu) for (const string of strings) {
38
+ const { isValid, error } = isValidIcu(string);
39
+ if (!isValid) {
40
+ output.warnings.add(warnInvalidIcuSync(config.file, string, error ?? "Unknown error", `${expr.loc?.start?.line}:${expr.loc?.start?.column}`));
41
+ return;
42
+ }
43
+ }
44
+ const temporaryDeriveId = `derive-temp-id-${randomUUID()}`;
45
+ const contexts = contextVariants ?? [metadata.context];
46
+ for (const string of strings) for (const context of contexts) output.updates.push({
47
+ dataFormat: metadata.format || "ICU",
48
+ source: string,
49
+ metadata: {
50
+ ...metadata,
51
+ ...context != null && { context },
52
+ ...metadata.id && index != null && { id: `${metadata.id}.${index}` },
53
+ staticId: temporaryDeriveId
54
+ }
55
+ });
70
56
  }
57
+ //#endregion
58
+ export { deriveExpression };
59
+
60
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/derivation/index.ts"],"sourcesContent":["import { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport type { DataFormat } from '@generaltranslation/format/types';\nimport { InlineMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';\nimport { ParsingConfig } from '../types.js';\nimport { ParsingOutput } from '../types.js';\nimport { handleDerivation } from './handleDerivation.js';\nimport { warnNonStringSync } from '../../../../../console/index.js';\nimport { nodeToStrings } from '../../parseString.js';\nimport generateModule from '@babel/generator';\nimport { indexVars } from 'generaltranslation/internal';\nimport { randomUUID } from 'node:crypto';\nimport { isValidIcu } from '../../../evaluateJsx.js';\nimport { warnInvalidIcuSync } from '../../../../../console/index.js';\n\n// Handle CommonJS/ESM interop\nconst generate = generateModule.default || generateModule;\n\n/**\n * Registers an expression with support for derive\n * Entry point for string derivation\n *\n * @param tPath - The path to the tag identifier\n * @param expr - The expression to parse\n * @param metadata - Extracted metadata (empty for tagged templates)\n * @param config - Parsing configuration\n * @param output - Parsing output collectors\n * @param enableRuntimeInterpolation - For template macros, enables runtime interpolation for non-derive calls\n */\nexport function deriveExpression({\n tPath,\n expr,\n metadata,\n config,\n output,\n index,\n enableRuntimeInterpolation = false,\n contextVariants,\n}: {\n tPath: NodePath;\n expr: t.Expression;\n metadata: InlineMetadata;\n config: ParsingConfig;\n output: ParsingOutput;\n index?: number;\n enableRuntimeInterpolation?: boolean;\n contextVariants?: string[];\n}) {\n // parse derivable expression\n const stringNode = handleDerivation({\n expr,\n tPath,\n file: config.file,\n parsingOptions: config.parsingOptions,\n errors: output.errors,\n warnings: output.warnings,\n runtimeInterpolationState: enableRuntimeInterpolation\n ? { index: 0 }\n : undefined,\n skipDeriveInvocation: config.autoderiveMethod === 'ENABLED',\n });\n\n // Nothing returned, push error\n if (!stringNode) {\n output.errors.push(\n warnNonStringSync(\n config.file,\n generate(expr).code,\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return;\n }\n\n // validate ICU\n const strings = nodeToStrings(stringNode).map(indexVars);\n if (!config.ignoreInvalidIcu) {\n for (const string of strings) {\n const { isValid, error } = isValidIcu(string);\n if (!isValid) {\n output.warnings.add(\n warnInvalidIcuSync(\n config.file,\n string,\n error ?? 'Unknown error',\n `${expr.loc?.start?.line}:${expr.loc?.start?.column}`\n )\n );\n return;\n }\n }\n }\n\n const temporaryDeriveId = `derive-temp-id-${randomUUID()}`;\n const contexts = contextVariants ?? [metadata.context];\n for (const string of strings) {\n for (const context of contexts) {\n output.updates.push({\n dataFormat: (metadata.format || 'ICU') as DataFormat,\n source: string,\n metadata: {\n ...metadata,\n ...(context != null && { context }),\n // Add the index if an id and index is provided (for handling when registering an array of strings)\n ...(metadata.id &&\n index != null && { id: `${metadata.id}.${index}` }),\n staticId: temporaryDeriveId,\n },\n });\n }\n }\n}\n"],"mappings":";;;;;;;;AAgBA,MAAM,WAAW,eAAe,WAAW;;;;;;;;;;;;AAa3C,SAAgB,iBAAiB,EAC/B,OACA,MACA,UACA,QACA,QACA,OACA,6BAA6B,OAC7B,mBAUC;CAED,MAAM,aAAa,iBAAiB;EAClC;EACA;EACA,MAAM,OAAO;EACb,gBAAgB,OAAO;EACvB,QAAQ,OAAO;EACf,UAAU,OAAO;EACjB,2BAA2B,6BACvB,EAAE,OAAO,GAAG,GACZ,KAAA;EACJ,sBAAsB,OAAO,qBAAqB;EACnD,CAAC;AAGF,KAAI,CAAC,YAAY;AACf,SAAO,OAAO,KACZ,kBACE,OAAO,MACP,SAAS,KAAK,CAAC,MACf,GAAG,KAAK,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,SAC9C,CACF;AACD;;CAIF,MAAM,UAAU,cAAc,WAAW,CAAC,IAAI,UAAU;AACxD,KAAI,CAAC,OAAO,iBACV,MAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,EAAE,SAAS,UAAU,WAAW,OAAO;AAC7C,MAAI,CAAC,SAAS;AACZ,UAAO,SAAS,IACd,mBACE,OAAO,MACP,QACA,SAAS,iBACT,GAAG,KAAK,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,SAC9C,CACF;AACD;;;CAKN,MAAM,oBAAoB,kBAAkB,YAAY;CACxD,MAAM,WAAW,mBAAmB,CAAC,SAAS,QAAQ;AACtD,MAAK,MAAM,UAAU,QACnB,MAAK,MAAM,WAAW,SACpB,QAAO,QAAQ,KAAK;EAClB,YAAa,SAAS,UAAU;EAChC,QAAQ;EACR,UAAU;GACR,GAAG;GACH,GAAI,WAAW,QAAQ,EAAE,SAAS;GAElC,GAAI,SAAS,MACX,SAAS,QAAQ,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,SAAS;GACpD,UAAU;GACX;EACF,CAAC"}
@@ -1,38 +1,28 @@
1
- import * as t from '@babel/types';
2
- import { GT_DERIVE_STRING_FUNCTIONS } from '../../constants.js';
3
- import { GT_LIBRARIES } from '../../../../../types/libraries.js';
1
+ import { GT_DERIVE_STRING_FUNCTIONS } from "../../constants.js";
2
+ import { GT_LIBRARIES } from "../../../../../types/libraries.js";
3
+ import * as t from "@babel/types";
4
+ //#region src/react/jsx/utils/stringParsing/derivation/isDeriveCall.ts
4
5
  /**
5
- * Given an expression, determine if it is a derive call
6
- * @param expr - The expression to check
7
- * @returns True if the expression is a derive call, false otherwise
8
- */
9
- export function isDeriveCall({ expr, tPath, }) {
10
- // Check if the expression is a call expression
11
- if (!t.isCallExpression(expr))
12
- return false;
13
- const callee = expr.callee;
14
- if (!t.isIdentifier(callee))
15
- return false;
16
- // Fail if no binding
17
- const calleeName = callee.name;
18
- const binding = tPath.scope.getBinding(calleeName);
19
- if (!binding)
20
- return false;
21
- // Check if the callee is imported from GT
22
- if (!binding.path.isImportSpecifier())
23
- return false;
24
- const source = binding.path.parentPath?.isImportDeclaration()
25
- ? binding.path.parentPath?.node.source.value
26
- : undefined;
27
- if (!GT_LIBRARIES.includes(source))
28
- return false;
29
- // Fail if the original name is not 'derive' (or the deprecated 'declareStatic')
30
- const imported = binding.path.node.imported;
31
- const originalName = t.isIdentifier(imported)
32
- ? imported.name
33
- : imported.value;
34
- if (!GT_DERIVE_STRING_FUNCTIONS.includes(originalName)) {
35
- return false;
36
- }
37
- return true;
6
+ * Given an expression, determine if it is a derive call
7
+ * @param expr - The expression to check
8
+ * @returns True if the expression is a derive call, false otherwise
9
+ */
10
+ function isDeriveCall({ expr, tPath }) {
11
+ if (!t.isCallExpression(expr)) return false;
12
+ const callee = expr.callee;
13
+ if (!t.isIdentifier(callee)) return false;
14
+ const calleeName = callee.name;
15
+ const binding = tPath.scope.getBinding(calleeName);
16
+ if (!binding) return false;
17
+ if (!binding.path.isImportSpecifier()) return false;
18
+ const source = binding.path.parentPath?.isImportDeclaration() ? binding.path.parentPath?.node.source.value : void 0;
19
+ if (!GT_LIBRARIES.includes(source)) return false;
20
+ const imported = binding.path.node.imported;
21
+ const originalName = t.isIdentifier(imported) ? imported.name : imported.value;
22
+ if (!GT_DERIVE_STRING_FUNCTIONS.includes(originalName)) return false;
23
+ return true;
38
24
  }
25
+ //#endregion
26
+ export { isDeriveCall };
27
+
28
+ //# sourceMappingURL=isDeriveCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isDeriveCall.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/derivation/isDeriveCall.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { NodePath } from '@babel/traverse';\nimport { GT_DERIVE_STRING_FUNCTIONS } from '../../constants.js';\nimport { GT_LIBRARIES, GTLibrary } from '../../../../../types/libraries.js';\n\n/**\n * Given an expression, determine if it is a derive call\n * @param expr - The expression to check\n * @returns True if the expression is a derive call, false otherwise\n */\nexport function isDeriveCall({\n expr,\n tPath,\n}: {\n expr: t.Expression;\n tPath: NodePath;\n}): boolean {\n // Check if the expression is a call expression\n if (!t.isCallExpression(expr)) return false;\n const callee = expr.callee;\n if (!t.isIdentifier(callee)) return false;\n\n // Fail if no binding\n const calleeName = callee.name;\n const binding = tPath.scope.getBinding(calleeName);\n if (!binding) return false;\n\n // Check if the callee is imported from GT\n if (!binding.path.isImportSpecifier()) return false;\n const source = binding.path.parentPath?.isImportDeclaration()\n ? binding.path.parentPath?.node.source.value\n : undefined;\n if (!GT_LIBRARIES.includes(source as GTLibrary)) return false;\n\n // Fail if the original name is not 'derive' (or the deprecated 'declareStatic')\n const imported = binding.path.node.imported;\n const originalName = t.isIdentifier(imported)\n ? imported.name\n : imported.value;\n if (\n !GT_DERIVE_STRING_FUNCTIONS.includes(\n originalName as (typeof GT_DERIVE_STRING_FUNCTIONS)[number]\n )\n ) {\n return false;\n }\n\n return true;\n}\n"],"mappings":";;;;;;;;;AAUA,SAAgB,aAAa,EAC3B,MACA,SAIU;AAEV,KAAI,CAAC,EAAE,iBAAiB,KAAK,CAAE,QAAO;CACtC,MAAM,SAAS,KAAK;AACpB,KAAI,CAAC,EAAE,aAAa,OAAO,CAAE,QAAO;CAGpC,MAAM,aAAa,OAAO;CAC1B,MAAM,UAAU,MAAM,MAAM,WAAW,WAAW;AAClD,KAAI,CAAC,QAAS,QAAO;AAGrB,KAAI,CAAC,QAAQ,KAAK,mBAAmB,CAAE,QAAO;CAC9C,MAAM,SAAS,QAAQ,KAAK,YAAY,qBAAqB,GACzD,QAAQ,KAAK,YAAY,KAAK,OAAO,QACrC,KAAA;AACJ,KAAI,CAAC,aAAa,SAAS,OAAoB,CAAE,QAAO;CAGxD,MAAM,WAAW,QAAQ,KAAK,KAAK;CACnC,MAAM,eAAe,EAAE,aAAa,SAAS,GACzC,SAAS,OACT,SAAS;AACb,KACE,CAAC,2BAA2B,SAC1B,aACD,CAED,QAAO;AAGT,QAAO"}
@@ -1,26 +1,31 @@
1
- import { deriveExpression } from '../derivation/index.js';
1
+ import { deriveExpression } from "../derivation/index.js";
2
+ //#region src/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.ts
2
3
  /**
3
- * Extracts a translatable message from a TaggedTemplateExpression.
4
- *
5
- * Follows the same extraction pattern as `extractInterpolatableValues` in
6
- * `packages/react/src/i18n-context/functions/translation/t.ts`:
7
- * - Iterates through quasis and expressions interleaved
8
- * - Creates numeric placeholders ({0}, {1}, etc.) for each expression
9
- * - Joins all parts into the final source string
10
- *
11
- * @param tPath - The path to the tag identifier
12
- * @param quasi - The TemplateLiteral from the TaggedTemplateExpression
13
- * @param metadata - Extracted metadata (empty for tagged templates)
14
- * @param config - Parsing configuration
15
- * @param output - Parsing output collectors
16
- */
17
- export function handleTaggedTemplateTranslationCall({ tPath, quasi, metadata, config, output, }) {
18
- deriveExpression({
19
- tPath,
20
- expr: quasi,
21
- metadata,
22
- config,
23
- output,
24
- enableRuntimeInterpolation: true,
25
- });
4
+ * Extracts a translatable message from a TaggedTemplateExpression.
5
+ *
6
+ * Follows the same extraction pattern as `extractInterpolatableValues` in
7
+ * `packages/react/src/i18n-context/functions/translation/t.ts`:
8
+ * - Iterates through quasis and expressions interleaved
9
+ * - Creates numeric placeholders ({0}, {1}, etc.) for each expression
10
+ * - Joins all parts into the final source string
11
+ *
12
+ * @param tPath - The path to the tag identifier
13
+ * @param quasi - The TemplateLiteral from the TaggedTemplateExpression
14
+ * @param metadata - Extracted metadata (empty for tagged templates)
15
+ * @param config - Parsing configuration
16
+ * @param output - Parsing output collectors
17
+ */
18
+ function handleTaggedTemplateTranslationCall({ tPath, quasi, metadata, config, output }) {
19
+ deriveExpression({
20
+ tPath,
21
+ expr: quasi,
22
+ metadata,
23
+ config,
24
+ output,
25
+ enableRuntimeInterpolation: true
26
+ });
26
27
  }
28
+ //#endregion
29
+ export { handleTaggedTemplateTranslationCall };
30
+
31
+ //# sourceMappingURL=handleTaggedTemplateTranslationCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleTaggedTemplateTranslationCall.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.ts"],"sourcesContent":["import * as t from '@babel/types';\nimport { ParsingConfig, ParsingOutput } from '../types.js';\nimport { InlineMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';\nimport { NodePath } from '@babel/traverse';\nimport { deriveExpression } from '../derivation/index.js';\n\n/**\n * Extracts a translatable message from a TaggedTemplateExpression.\n *\n * Follows the same extraction pattern as `extractInterpolatableValues` in\n * `packages/react/src/i18n-context/functions/translation/t.ts`:\n * - Iterates through quasis and expressions interleaved\n * - Creates numeric placeholders ({0}, {1}, etc.) for each expression\n * - Joins all parts into the final source string\n *\n * @param tPath - The path to the tag identifier\n * @param quasi - The TemplateLiteral from the TaggedTemplateExpression\n * @param metadata - Extracted metadata (empty for tagged templates)\n * @param config - Parsing configuration\n * @param output - Parsing output collectors\n */\nexport function handleTaggedTemplateTranslationCall({\n tPath,\n quasi,\n metadata,\n config,\n output,\n}: {\n tPath: NodePath;\n quasi: t.TemplateLiteral;\n metadata: InlineMetadata;\n config: ParsingConfig;\n output: ParsingOutput;\n}): void {\n deriveExpression({\n tPath,\n expr: quasi,\n metadata,\n config,\n output,\n enableRuntimeInterpolation: true,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,SAAgB,oCAAoC,EAClD,OACA,OACA,UACA,QACA,UAOO;AACP,kBAAiB;EACf;EACA,MAAM;EACN;EACA;EACA;EACA,4BAA4B;EAC7B,CAAC"}
@@ -1,34 +1,36 @@
1
- import * as t from '@babel/types';
2
- import { handleTaggedTemplateTranslationCall } from './handleTaggedTemplateTranslationCall.js';
3
- import { extractStringEntryMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';
4
- import { SURROUNDING_LINE_COUNT } from '../../../../../utils/constants.js';
1
+ import "../../../../../utils/constants.js";
2
+ import { extractStringEntryMetadata } from "../processTranslationCall/extractStringEntryMetadata.js";
3
+ import { handleTaggedTemplateTranslationCall } from "./handleTaggedTemplateTranslationCall.js";
4
+ import * as t from "@babel/types";
5
+ //#region src/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.ts
5
6
  /**
6
- * Processes a tagged template expression (e.g., t`hello ${name}`).
7
- * Extracts the translatable string with numeric placeholders for expressions.
8
- *
9
- * Tagged templates don't support an options argument, but still carry
10
- * source metadata for dashboard grouping and source context.
11
- *
12
- * @param tPath - The path to the tag identifier
13
- * @param config - Parsing configuration
14
- * @param output - Parsing output collectors
15
- */
16
- export function processTaggedTemplateCall(tPath, config, output) {
17
- if (!t.isTaggedTemplateExpression(tPath.parent) ||
18
- tPath.parent.tag !== tPath.node) {
19
- return;
20
- }
21
- const metadata = extractStringEntryMetadata({
22
- output,
23
- config,
24
- nodeLoc: tPath.parent.loc,
25
- surroundingLineCount: SURROUNDING_LINE_COUNT,
26
- });
27
- handleTaggedTemplateTranslationCall({
28
- tPath,
29
- quasi: tPath.parent.quasi,
30
- metadata,
31
- config,
32
- output,
33
- });
7
+ * Processes a tagged template expression (e.g., t`hello ${name}`).
8
+ * Extracts the translatable string with numeric placeholders for expressions.
9
+ *
10
+ * Tagged templates don't support an options argument, but still carry
11
+ * source metadata for dashboard grouping and source context.
12
+ *
13
+ * @param tPath - The path to the tag identifier
14
+ * @param config - Parsing configuration
15
+ * @param output - Parsing output collectors
16
+ */
17
+ function processTaggedTemplateCall(tPath, config, output) {
18
+ if (!t.isTaggedTemplateExpression(tPath.parent) || tPath.parent.tag !== tPath.node) return;
19
+ const metadata = extractStringEntryMetadata({
20
+ output,
21
+ config,
22
+ nodeLoc: tPath.parent.loc,
23
+ surroundingLineCount: 5
24
+ });
25
+ handleTaggedTemplateTranslationCall({
26
+ tPath,
27
+ quasi: tPath.parent.quasi,
28
+ metadata,
29
+ config,
30
+ output
31
+ });
34
32
  }
33
+ //#endregion
34
+ export { processTaggedTemplateCall };
35
+
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.ts"],"sourcesContent":["import { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { ParsingConfig, ParsingOutput } from '../types.js';\nimport { handleTaggedTemplateTranslationCall } from './handleTaggedTemplateTranslationCall.js';\nimport { extractStringEntryMetadata } from '../processTranslationCall/extractStringEntryMetadata.js';\nimport { SURROUNDING_LINE_COUNT } from '../../../../../utils/constants.js';\n\n/**\n * Processes a tagged template expression (e.g., t`hello ${name}`).\n * Extracts the translatable string with numeric placeholders for expressions.\n *\n * Tagged templates don't support an options argument, but still carry\n * source metadata for dashboard grouping and source context.\n *\n * @param tPath - The path to the tag identifier\n * @param config - Parsing configuration\n * @param output - Parsing output collectors\n */\nexport function processTaggedTemplateCall(\n tPath: NodePath,\n config: ParsingConfig,\n output: ParsingOutput\n): void {\n if (\n !t.isTaggedTemplateExpression(tPath.parent) ||\n tPath.parent.tag !== tPath.node\n ) {\n return;\n }\n\n const metadata = extractStringEntryMetadata({\n output,\n config,\n nodeLoc: tPath.parent.loc,\n surroundingLineCount: SURROUNDING_LINE_COUNT,\n });\n\n handleTaggedTemplateTranslationCall({\n tPath,\n quasi: tPath.parent.quasi,\n metadata,\n config,\n output,\n });\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,SAAgB,0BACd,OACA,QACA,QACM;AACN,KACE,CAAC,EAAE,2BAA2B,MAAM,OAAO,IAC3C,MAAM,OAAO,QAAQ,MAAM,KAE3B;CAGF,MAAM,WAAW,2BAA2B;EAC1C;EACA;EACA,SAAS,MAAM,OAAO;EACtB,sBAAA;EACD,CAAC;AAEF,qCAAoC;EAClC;EACA,OAAO,MAAM,OAAO;EACpB;EACA;EACA;EACD,CAAC"}