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
@@ -1,77 +1,72 @@
1
- import chalk from 'chalk';
2
- import { spawn } from 'child_process';
3
- import { logger } from '../console/logger.js';
4
- export async function installPackage(packageName, packageManager, asDevDependency, cwd = process.cwd()) {
5
- return new Promise((resolve, reject) => {
6
- const command = packageManager.name;
7
- const args = [packageManager.installCommand, packageName];
8
- if (asDevDependency) {
9
- args.push(packageManager.devDependencyFlag);
10
- }
11
- const childProcess = spawn(command, args, {
12
- stdio: ['pipe', 'ignore', 'pipe'],
13
- cwd,
14
- });
15
- let errorOutput = '';
16
- if (childProcess.stderr) {
17
- childProcess.stderr.on('data', (data) => {
18
- errorOutput += data.toString();
19
- });
20
- }
21
- childProcess.on('error', (error) => {
22
- logger.error(chalk.red(`Installation error: ${error.message}`));
23
- logger.info(`Manually install ${packageName} with: ${packageManager.name} ${packageManager.installCommand} ${packageName}`);
24
- reject(error);
25
- });
26
- childProcess.on('close', (code) => {
27
- if (code === 0) {
28
- resolve();
29
- }
30
- else {
31
- logger.error(chalk.red(`Installation failed with exit code ${code}`));
32
- if (errorOutput) {
33
- logger.error(chalk.red(`Error details: ${errorOutput}`));
34
- }
35
- logger.info(`Manually install ${packageName} with: ${packageManager.name} ${packageManager.installCommand} ${packageName}`);
36
- reject(new Error(`Process exited with code ${code}`));
37
- }
38
- });
39
- });
1
+ import { logger } from "../console/logger.js";
2
+ import chalk from "chalk";
3
+ import { spawn } from "child_process";
4
+ //#region src/utils/installPackage.ts
5
+ async function installPackage(packageName, packageManager, asDevDependency, cwd = process.cwd()) {
6
+ return new Promise((resolve, reject) => {
7
+ const command = packageManager.name;
8
+ const args = [packageManager.installCommand, packageName];
9
+ if (asDevDependency) args.push(packageManager.devDependencyFlag);
10
+ const childProcess = spawn(command, args, {
11
+ stdio: [
12
+ "pipe",
13
+ "ignore",
14
+ "pipe"
15
+ ],
16
+ cwd
17
+ });
18
+ let errorOutput = "";
19
+ if (childProcess.stderr) childProcess.stderr.on("data", (data) => {
20
+ errorOutput += data.toString();
21
+ });
22
+ childProcess.on("error", (error) => {
23
+ logger.error(chalk.red(`Installation error: ${error.message}`));
24
+ logger.info(`Manually install ${packageName} with: ${packageManager.name} ${packageManager.installCommand} ${packageName}`);
25
+ reject(error);
26
+ });
27
+ childProcess.on("close", (code) => {
28
+ if (code === 0) resolve();
29
+ else {
30
+ logger.error(chalk.red(`Installation failed with exit code ${code}`));
31
+ if (errorOutput) logger.error(chalk.red(`Error details: ${errorOutput}`));
32
+ logger.info(`Manually install ${packageName} with: ${packageManager.name} ${packageManager.installCommand} ${packageName}`);
33
+ reject(/* @__PURE__ */ new Error(`Process exited with code ${code}`));
34
+ }
35
+ });
36
+ });
40
37
  }
41
- export async function installPackageGlobal(packageName, version) {
42
- return new Promise((resolve, reject) => {
43
- const command = 'npm';
44
- const args = [
45
- 'install',
46
- '-g',
47
- version ? `${packageName}@${version}` : packageName,
48
- ];
49
- const childProcess = spawn(command, args, {
50
- stdio: ['pipe', 'ignore', 'pipe'],
51
- });
52
- let errorOutput = '';
53
- if (childProcess.stderr) {
54
- childProcess.stderr.on('data', (data) => {
55
- errorOutput += data.toString();
56
- });
57
- }
58
- childProcess.on('error', (error) => {
59
- logger.error(chalk.red(`Installation error: ${error.message}`));
60
- logger.info(`Manually install ${packageName} with: npm install -g ${packageName}`);
61
- reject(error);
62
- });
63
- childProcess.on('close', (code) => {
64
- if (code === 0) {
65
- resolve();
66
- }
67
- else {
68
- logger.error(chalk.red(`Installation failed with exit code ${code}`));
69
- if (errorOutput) {
70
- logger.error(chalk.red(`Error details: ${errorOutput}`));
71
- }
72
- logger.info(`Manually install ${packageName} with: npm install -g ${packageName}`);
73
- reject(new Error(`Process exited with code ${code}`));
74
- }
75
- });
76
- });
38
+ async function installPackageGlobal(packageName, version) {
39
+ return new Promise((resolve, reject) => {
40
+ const childProcess = spawn("npm", [
41
+ "install",
42
+ "-g",
43
+ version ? `${packageName}@${version}` : packageName
44
+ ], { stdio: [
45
+ "pipe",
46
+ "ignore",
47
+ "pipe"
48
+ ] });
49
+ let errorOutput = "";
50
+ if (childProcess.stderr) childProcess.stderr.on("data", (data) => {
51
+ errorOutput += data.toString();
52
+ });
53
+ childProcess.on("error", (error) => {
54
+ logger.error(chalk.red(`Installation error: ${error.message}`));
55
+ logger.info(`Manually install ${packageName} with: npm install -g ${packageName}`);
56
+ reject(error);
57
+ });
58
+ childProcess.on("close", (code) => {
59
+ if (code === 0) resolve();
60
+ else {
61
+ logger.error(chalk.red(`Installation failed with exit code ${code}`));
62
+ if (errorOutput) logger.error(chalk.red(`Error details: ${errorOutput}`));
63
+ logger.info(`Manually install ${packageName} with: npm install -g ${packageName}`);
64
+ reject(/* @__PURE__ */ new Error(`Process exited with code ${code}`));
65
+ }
66
+ });
67
+ });
77
68
  }
69
+ //#endregion
70
+ export { installPackage, installPackageGlobal };
71
+
72
+ //# sourceMappingURL=installPackage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installPackage.js","names":[],"sources":["../../src/utils/installPackage.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport { logger } from '../console/logger.js';\nimport { PackageManager } from './packageManager.js';\n\nexport async function installPackage(\n packageName: string,\n packageManager: PackageManager,\n asDevDependency?: boolean,\n cwd: string = process.cwd()\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const command = packageManager.name;\n const args = [packageManager.installCommand, packageName];\n\n if (asDevDependency) {\n args.push(packageManager.devDependencyFlag);\n }\n\n const childProcess = spawn(command, args, {\n stdio: ['pipe', 'ignore', 'pipe'],\n cwd,\n });\n\n let errorOutput = '';\n if (childProcess.stderr) {\n childProcess.stderr.on('data', (data) => {\n errorOutput += data.toString();\n });\n }\n\n childProcess.on('error', (error) => {\n logger.error(chalk.red(`Installation error: ${error.message}`));\n logger.info(\n `Manually install ${packageName} with: ${packageManager.name} ${packageManager.installCommand} ${packageName}`\n );\n reject(error);\n });\n\n childProcess.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n logger.error(chalk.red(`Installation failed with exit code ${code}`));\n if (errorOutput) {\n logger.error(chalk.red(`Error details: ${errorOutput}`));\n }\n logger.info(\n `Manually install ${packageName} with: ${packageManager.name} ${packageManager.installCommand} ${packageName}`\n );\n reject(new Error(`Process exited with code ${code}`));\n }\n });\n });\n}\n\nexport async function installPackageGlobal(\n packageName: string,\n version?: string\n): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n const command = 'npm';\n const args = [\n 'install',\n '-g',\n version ? `${packageName}@${version}` : packageName,\n ];\n\n const childProcess = spawn(command, args, {\n stdio: ['pipe', 'ignore', 'pipe'],\n });\n\n let errorOutput = '';\n if (childProcess.stderr) {\n childProcess.stderr.on('data', (data) => {\n errorOutput += data.toString();\n });\n }\n\n childProcess.on('error', (error) => {\n logger.error(chalk.red(`Installation error: ${error.message}`));\n logger.info(\n `Manually install ${packageName} with: npm install -g ${packageName}`\n );\n reject(error);\n });\n\n childProcess.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n logger.error(chalk.red(`Installation failed with exit code ${code}`));\n if (errorOutput) {\n logger.error(chalk.red(`Error details: ${errorOutput}`));\n }\n logger.info(\n `Manually install ${packageName} with: npm install -g ${packageName}`\n );\n reject(new Error(`Process exited with code ${code}`));\n }\n });\n });\n}\n"],"mappings":";;;;AAKA,eAAsB,eACpB,aACA,gBACA,iBACA,MAAc,QAAQ,KAAK,EACZ;AACf,QAAO,IAAI,SAAe,SAAS,WAAW;EAC5C,MAAM,UAAU,eAAe;EAC/B,MAAM,OAAO,CAAC,eAAe,gBAAgB,YAAY;AAEzD,MAAI,gBACF,MAAK,KAAK,eAAe,kBAAkB;EAG7C,MAAM,eAAe,MAAM,SAAS,MAAM;GACxC,OAAO;IAAC;IAAQ;IAAU;IAAO;GACjC;GACD,CAAC;EAEF,IAAI,cAAc;AAClB,MAAI,aAAa,OACf,cAAa,OAAO,GAAG,SAAS,SAAS;AACvC,kBAAe,KAAK,UAAU;IAC9B;AAGJ,eAAa,GAAG,UAAU,UAAU;AAClC,UAAO,MAAM,MAAM,IAAI,uBAAuB,MAAM,UAAU,CAAC;AAC/D,UAAO,KACL,oBAAoB,YAAY,SAAS,eAAe,KAAK,GAAG,eAAe,eAAe,GAAG,cAClG;AACD,UAAO,MAAM;IACb;AAEF,eAAa,GAAG,UAAU,SAAS;AACjC,OAAI,SAAS,EACX,UAAS;QACJ;AACL,WAAO,MAAM,MAAM,IAAI,sCAAsC,OAAO,CAAC;AACrE,QAAI,YACF,QAAO,MAAM,MAAM,IAAI,kBAAkB,cAAc,CAAC;AAE1D,WAAO,KACL,oBAAoB,YAAY,SAAS,eAAe,KAAK,GAAG,eAAe,eAAe,GAAG,cAClG;AACD,2BAAO,IAAI,MAAM,4BAA4B,OAAO,CAAC;;IAEvD;GACF;;AAGJ,eAAsB,qBACpB,aACA,SACe;AACf,QAAO,IAAI,SAAe,SAAS,WAAW;EAQ5C,MAAM,eAAe,MAAM,OAAS;GALlC;GACA;GACA,UAAU,GAAG,YAAY,GAAG,YAAY;GAGF,EAAE,EACxC,OAAO;GAAC;GAAQ;GAAU;GAAO,EAClC,CAAC;EAEF,IAAI,cAAc;AAClB,MAAI,aAAa,OACf,cAAa,OAAO,GAAG,SAAS,SAAS;AACvC,kBAAe,KAAK,UAAU;IAC9B;AAGJ,eAAa,GAAG,UAAU,UAAU;AAClC,UAAO,MAAM,MAAM,IAAI,uBAAuB,MAAM,UAAU,CAAC;AAC/D,UAAO,KACL,oBAAoB,YAAY,wBAAwB,cACzD;AACD,UAAO,MAAM;IACb;AAEF,eAAa,GAAG,UAAU,SAAS;AACjC,OAAI,SAAS,EACX,UAAS;QACJ;AACL,WAAO,MAAM,MAAM,IAAI,sCAAsC,OAAO,CAAC;AACrE,QAAI,YACF,QAAO,MAAM,MAAM,IAAI,kBAAkB,cAAc,CAAC;AAE1D,WAAO,KACL,oBAAoB,YAAY,wBAAwB,cACzD;AACD,2BAAO,IAAI,MAAM,4BAA4B,OAAO,CAAC;;IAEvD;GACF"}
@@ -1,167 +1,124 @@
1
- import * as fs from 'fs';
2
- import path from 'node:path';
3
- import { unified } from 'unified';
4
- import remarkParse from 'remark-parse';
5
- import remarkMdx from 'remark-mdx';
6
- import remarkFrontmatter from 'remark-frontmatter';
7
- import remarkStringify from 'remark-stringify';
8
- import { visit } from 'unist-util-visit';
9
- import { escapeHtmlInTextNodes, normalizeCJKCharacters } from 'gt-remark';
10
- import { createFileMapping } from '../formats/files/fileMapping.js';
1
+ import { createFileMapping } from "../formats/files/fileMapping.js";
2
+ import path from "node:path";
3
+ import * as fs$1 from "fs";
4
+ import { unified } from "unified";
5
+ import remarkParse from "remark-parse";
6
+ import remarkMdx from "remark-mdx";
7
+ import remarkFrontmatter from "remark-frontmatter";
8
+ import { visit } from "unist-util-visit";
9
+ import remarkStringify from "remark-stringify";
10
+ import { escapeHtmlInTextNodes, normalizeCJKCharacters } from "gt-remark";
11
+ //#region src/utils/localizeRelativeAssets.ts
11
12
  function stripQueryAndHash(url) {
12
- const match = url.match(/^[^?#]+/);
13
- const base = match ? match[0] : url;
14
- const suffix = url.slice(base.length);
15
- return { base, suffix };
13
+ const match = url.match(/^[^?#]+/);
14
+ const base = match ? match[0] : url;
15
+ return {
16
+ base,
17
+ suffix: url.slice(base.length)
18
+ };
16
19
  }
17
20
  function isSkippableUrl(url) {
18
- if (!url)
19
- return true;
20
- if (url.startsWith('/'))
21
- return true;
22
- if (/^(https?:)?\/\//i.test(url))
23
- return true;
24
- if (url.startsWith('data:'))
25
- return true;
26
- if (url.startsWith('#'))
27
- return true;
28
- if (url.startsWith('mailto:'))
29
- return true;
30
- if (url.startsWith('tel:'))
31
- return true;
32
- return false;
21
+ if (!url) return true;
22
+ if (url.startsWith("/")) return true;
23
+ if (/^(https?:)?\/\//i.test(url)) return true;
24
+ if (url.startsWith("data:")) return true;
25
+ if (url.startsWith("#")) return true;
26
+ if (url.startsWith("mailto:")) return true;
27
+ if (url.startsWith("tel:")) return true;
28
+ return false;
33
29
  }
34
30
  function toPosix(p) {
35
- return p.replace(/\\/g, '/');
31
+ return p.replace(/\\/g, "/");
36
32
  }
37
33
  function isSubPath(child, parent) {
38
- const rel = path.relative(parent, child);
39
- return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
34
+ const rel = path.relative(parent, child);
35
+ return rel === "" || !rel.startsWith("..") && !path.isAbsolute(rel);
40
36
  }
41
- export function localizeRelativeAssetsForContent(content, sourcePath, targetPath, cwd) {
42
- let changed = false;
43
- let ast;
44
- try {
45
- const processor = unified()
46
- .use(remarkParse)
47
- .use(remarkFrontmatter, ['yaml', 'toml'])
48
- .use(remarkMdx);
49
- ast = processor.runSync(processor.parse(content));
50
- }
51
- catch {
52
- return { content, hasChanges: false };
53
- }
54
- const sourceDir = path.dirname(sourcePath);
55
- const targetDir = path.dirname(targetPath);
56
- const maybeRewrite = (url) => {
57
- if (isSkippableUrl(url))
58
- return null;
59
- const { base, suffix } = stripQueryAndHash(url);
60
- if (isSkippableUrl(base))
61
- return null;
62
- const targetResolved = path.resolve(targetDir, base);
63
- if (fs.existsSync(targetResolved)) {
64
- return null;
65
- }
66
- const sourceResolved = path.resolve(sourceDir, base);
67
- if (!fs.existsSync(sourceResolved)) {
68
- return null;
69
- }
70
- let newPath;
71
- if (isSubPath(sourceResolved, cwd)) {
72
- newPath = '/' + toPosix(path.relative(cwd, sourceResolved));
73
- }
74
- else {
75
- const rel = toPosix(path.relative(targetDir, sourceResolved));
76
- newPath = rel || toPosix(path.basename(sourceResolved));
77
- }
78
- if (newPath === base)
79
- return null;
80
- changed = true;
81
- return newPath + suffix;
82
- };
83
- visit(ast, (node) => {
84
- const assetNode = node;
85
- if (assetNode.type === 'image' && typeof assetNode.url === 'string') {
86
- const newUrl = maybeRewrite(assetNode.url);
87
- if (newUrl)
88
- assetNode.url = newUrl;
89
- return;
90
- }
91
- if ((assetNode.type === 'mdxJsxFlowElement' ||
92
- assetNode.type === 'mdxJsxTextElement') &&
93
- assetNode.name === 'img' &&
94
- Array.isArray(assetNode.attributes)) {
95
- for (const attr of assetNode.attributes) {
96
- const attribute = attr;
97
- if (attribute.type === 'mdxJsxAttribute' &&
98
- attribute.name === 'src' &&
99
- typeof attribute.value === 'string') {
100
- const newUrl = maybeRewrite(attribute.value);
101
- if (newUrl)
102
- attribute.value = newUrl;
103
- }
104
- }
105
- }
106
- });
107
- try {
108
- const s = unified()
109
- .use(remarkFrontmatter, ['yaml', 'toml'])
110
- .use(remarkMdx)
111
- .use(normalizeCJKCharacters)
112
- .use(escapeHtmlInTextNodes)
113
- .use(remarkStringify, {
114
- handlers: {
115
- text(node) {
116
- return node.value;
117
- },
118
- },
119
- });
120
- const outTree = s.runSync(ast);
121
- let out = s.stringify(outTree);
122
- if (out.endsWith('\n') && !content.endsWith('\n'))
123
- out = out.slice(0, -1);
124
- if (content.startsWith('\n') && !out.startsWith('\n'))
125
- out = '\n' + out;
126
- return { content: out, hasChanges: changed };
127
- }
128
- catch {
129
- return { content, hasChanges: false };
130
- }
37
+ function localizeRelativeAssetsForContent(content, sourcePath, targetPath, cwd) {
38
+ let changed = false;
39
+ let ast;
40
+ try {
41
+ const processor = unified().use(remarkParse).use(remarkFrontmatter, ["yaml", "toml"]).use(remarkMdx);
42
+ ast = processor.runSync(processor.parse(content));
43
+ } catch {
44
+ return {
45
+ content,
46
+ hasChanges: false
47
+ };
48
+ }
49
+ const sourceDir = path.dirname(sourcePath);
50
+ const targetDir = path.dirname(targetPath);
51
+ const maybeRewrite = (url) => {
52
+ if (isSkippableUrl(url)) return null;
53
+ const { base, suffix } = stripQueryAndHash(url);
54
+ if (isSkippableUrl(base)) return null;
55
+ const targetResolved = path.resolve(targetDir, base);
56
+ if (fs$1.existsSync(targetResolved)) return null;
57
+ const sourceResolved = path.resolve(sourceDir, base);
58
+ if (!fs$1.existsSync(sourceResolved)) return null;
59
+ let newPath;
60
+ if (isSubPath(sourceResolved, cwd)) newPath = "/" + toPosix(path.relative(cwd, sourceResolved));
61
+ else newPath = toPosix(path.relative(targetDir, sourceResolved)) || toPosix(path.basename(sourceResolved));
62
+ if (newPath === base) return null;
63
+ changed = true;
64
+ return newPath + suffix;
65
+ };
66
+ visit(ast, (node) => {
67
+ const assetNode = node;
68
+ if (assetNode.type === "image" && typeof assetNode.url === "string") {
69
+ const newUrl = maybeRewrite(assetNode.url);
70
+ if (newUrl) assetNode.url = newUrl;
71
+ return;
72
+ }
73
+ if ((assetNode.type === "mdxJsxFlowElement" || assetNode.type === "mdxJsxTextElement") && assetNode.name === "img" && Array.isArray(assetNode.attributes)) for (const attr of assetNode.attributes) {
74
+ const attribute = attr;
75
+ if (attribute.type === "mdxJsxAttribute" && attribute.name === "src" && typeof attribute.value === "string") {
76
+ const newUrl = maybeRewrite(attribute.value);
77
+ if (newUrl) attribute.value = newUrl;
78
+ }
79
+ }
80
+ });
81
+ try {
82
+ const s = unified().use(remarkFrontmatter, ["yaml", "toml"]).use(remarkMdx).use(normalizeCJKCharacters).use(escapeHtmlInTextNodes).use(remarkStringify, { handlers: { text(node) {
83
+ return node.value;
84
+ } } });
85
+ const outTree = s.runSync(ast);
86
+ let out = s.stringify(outTree);
87
+ if (out.endsWith("\n") && !content.endsWith("\n")) out = out.slice(0, -1);
88
+ if (content.startsWith("\n") && !out.startsWith("\n")) out = "\n" + out;
89
+ return {
90
+ content: out,
91
+ hasChanges: changed
92
+ };
93
+ } catch {
94
+ return {
95
+ content,
96
+ hasChanges: false
97
+ };
98
+ }
131
99
  }
132
- export default async function localizeRelativeAssets(settings, targetLocales, includeFiles) {
133
- if (!settings.files ||
134
- (Object.keys(settings.files.placeholderPaths).length === 1 &&
135
- settings.files.placeholderPaths.gt)) {
136
- return;
137
- }
138
- const { resolvedPaths: sourceFiles } = settings.files;
139
- const locales = targetLocales || settings.locales;
140
- const fileMapping = createFileMapping(sourceFiles, settings.files.placeholderPaths, settings.files.transformPaths ?? {}, settings.files.transformFormats ?? {}, settings.locales, settings.defaultLocale);
141
- const cwd = process.cwd();
142
- const processPromises = Object.entries(fileMapping)
143
- .filter(([locale]) => locales.includes(locale))
144
- .map(async ([, filesMap]) => {
145
- const reverseMap = new Map();
146
- for (const [sourcePath, targetPath] of Object.entries(filesMap)) {
147
- reverseMap.set(targetPath, sourcePath);
148
- }
149
- const targetFiles = Object.values(filesMap).filter((p) => (p.endsWith('.md') || p.endsWith('.mdx')) &&
150
- (!includeFiles || includeFiles.has(p)));
151
- await Promise.all(targetFiles.map(async (targetPath) => {
152
- if (!fs.existsSync(targetPath))
153
- return;
154
- const sourcePath = reverseMap.get(targetPath);
155
- if (!sourcePath)
156
- return;
157
- if (!fs.existsSync(sourcePath))
158
- return;
159
- const content = await fs.promises.readFile(targetPath, 'utf8');
160
- const result = localizeRelativeAssetsForContent(content, sourcePath, targetPath, cwd);
161
- if (result.hasChanges) {
162
- await fs.promises.writeFile(targetPath, result.content);
163
- }
164
- }));
165
- });
166
- await Promise.all(processPromises);
100
+ async function localizeRelativeAssets(settings, targetLocales, includeFiles) {
101
+ if (!settings.files || Object.keys(settings.files.placeholderPaths).length === 1 && settings.files.placeholderPaths.gt) return;
102
+ const { resolvedPaths: sourceFiles } = settings.files;
103
+ const locales = targetLocales || settings.locales;
104
+ const fileMapping = createFileMapping(sourceFiles, settings.files.placeholderPaths, settings.files.transformPaths ?? {}, settings.files.transformFormats ?? {}, settings.locales, settings.defaultLocale);
105
+ const cwd = process.cwd();
106
+ const processPromises = Object.entries(fileMapping).filter(([locale]) => locales.includes(locale)).map(async ([, filesMap]) => {
107
+ const reverseMap = /* @__PURE__ */ new Map();
108
+ for (const [sourcePath, targetPath] of Object.entries(filesMap)) reverseMap.set(targetPath, sourcePath);
109
+ const targetFiles = Object.values(filesMap).filter((p) => (p.endsWith(".md") || p.endsWith(".mdx")) && (!includeFiles || includeFiles.has(p)));
110
+ await Promise.all(targetFiles.map(async (targetPath) => {
111
+ if (!fs$1.existsSync(targetPath)) return;
112
+ const sourcePath = reverseMap.get(targetPath);
113
+ if (!sourcePath) return;
114
+ if (!fs$1.existsSync(sourcePath)) return;
115
+ const result = localizeRelativeAssetsForContent(await fs$1.promises.readFile(targetPath, "utf8"), sourcePath, targetPath, cwd);
116
+ if (result.hasChanges) await fs$1.promises.writeFile(targetPath, result.content);
117
+ }));
118
+ });
119
+ await Promise.all(processPromises);
167
120
  }
121
+ //#endregion
122
+ export { localizeRelativeAssets as default, localizeRelativeAssetsForContent };
123
+
124
+ //# sourceMappingURL=localizeRelativeAssets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localizeRelativeAssets.js","names":["fs"],"sources":["../../src/utils/localizeRelativeAssets.ts"],"sourcesContent":["import * as fs from 'fs';\nimport path from 'node:path';\nimport { unified } from 'unified';\nimport remarkParse from 'remark-parse';\nimport remarkMdx from 'remark-mdx';\nimport remarkFrontmatter from 'remark-frontmatter';\nimport remarkStringify from 'remark-stringify';\nimport { visit } from 'unist-util-visit';\nimport type { Literal, Root } from 'mdast';\nimport { escapeHtmlInTextNodes, normalizeCJKCharacters } from 'gt-remark';\nimport type { StaticLocalizationSettings } from '../types/index.js';\nimport { createFileMapping } from '../formats/files/fileMapping.js';\n\ntype RewriteResult = { content: string; hasChanges: boolean };\nexport type RelativeAssetSettings = StaticLocalizationSettings;\n\ntype MdxAssetNode = {\n type?: string;\n name?: unknown;\n attributes?: unknown;\n url?: unknown;\n};\n\ntype MdxAttribute = {\n type?: string;\n name?: string;\n value?: unknown;\n};\n\nfunction stripQueryAndHash(url: string): { base: string; suffix: string } {\n const match = url.match(/^[^?#]+/);\n const base = match ? match[0] : url;\n const suffix = url.slice(base.length);\n return { base, suffix };\n}\n\nfunction isSkippableUrl(url: string): boolean {\n if (!url) return true;\n if (url.startsWith('/')) return true;\n if (/^(https?:)?\\/\\//i.test(url)) return true;\n if (url.startsWith('data:')) return true;\n if (url.startsWith('#')) return true;\n if (url.startsWith('mailto:')) return true;\n if (url.startsWith('tel:')) return true;\n return false;\n}\n\nfunction toPosix(p: string): string {\n return p.replace(/\\\\/g, '/');\n}\n\nfunction isSubPath(child: string, parent: string): boolean {\n const rel = path.relative(parent, child);\n return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));\n}\n\nexport function localizeRelativeAssetsForContent(\n content: string,\n sourcePath: string,\n targetPath: string,\n cwd: string\n): RewriteResult {\n let changed = false;\n\n let ast: Root;\n try {\n const processor = unified()\n .use(remarkParse)\n .use(remarkFrontmatter, ['yaml', 'toml'])\n .use(remarkMdx);\n ast = processor.runSync(processor.parse(content)) as Root;\n } catch {\n return { content, hasChanges: false };\n }\n\n const sourceDir = path.dirname(sourcePath);\n const targetDir = path.dirname(targetPath);\n\n const maybeRewrite = (url: string): string | null => {\n if (isSkippableUrl(url)) return null;\n const { base, suffix } = stripQueryAndHash(url);\n if (isSkippableUrl(base)) return null;\n\n const targetResolved = path.resolve(targetDir, base);\n if (fs.existsSync(targetResolved)) {\n return null;\n }\n\n const sourceResolved = path.resolve(sourceDir, base);\n if (!fs.existsSync(sourceResolved)) {\n return null;\n }\n\n let newPath: string;\n if (isSubPath(sourceResolved, cwd)) {\n newPath = '/' + toPosix(path.relative(cwd, sourceResolved));\n } else {\n const rel = toPosix(path.relative(targetDir, sourceResolved));\n newPath = rel || toPosix(path.basename(sourceResolved));\n }\n\n if (newPath === base) return null;\n changed = true;\n return newPath + suffix;\n };\n\n visit(ast, (node) => {\n const assetNode = node as MdxAssetNode;\n if (assetNode.type === 'image' && typeof assetNode.url === 'string') {\n const newUrl = maybeRewrite(assetNode.url);\n if (newUrl) assetNode.url = newUrl;\n return;\n }\n if (\n (assetNode.type === 'mdxJsxFlowElement' ||\n assetNode.type === 'mdxJsxTextElement') &&\n assetNode.name === 'img' &&\n Array.isArray(assetNode.attributes)\n ) {\n for (const attr of assetNode.attributes) {\n const attribute = attr as MdxAttribute;\n if (\n attribute.type === 'mdxJsxAttribute' &&\n attribute.name === 'src' &&\n typeof attribute.value === 'string'\n ) {\n const newUrl = maybeRewrite(attribute.value);\n if (newUrl) attribute.value = newUrl;\n }\n }\n }\n });\n\n try {\n const s = unified()\n .use(remarkFrontmatter, ['yaml', 'toml'])\n .use(remarkMdx)\n .use(normalizeCJKCharacters)\n .use(escapeHtmlInTextNodes)\n .use(remarkStringify, {\n handlers: {\n text(node: Literal) {\n return node.value;\n },\n },\n });\n const outTree = s.runSync(ast) as Root;\n let out = s.stringify(outTree);\n if (out.endsWith('\\n') && !content.endsWith('\\n')) out = out.slice(0, -1);\n if (content.startsWith('\\n') && !out.startsWith('\\n')) out = '\\n' + out;\n return { content: out, hasChanges: changed };\n } catch {\n return { content, hasChanges: false };\n }\n}\n\nexport default async function localizeRelativeAssets(\n settings: RelativeAssetSettings,\n targetLocales?: string[],\n includeFiles?: Set<string>\n) {\n if (\n !settings.files ||\n (Object.keys(settings.files.placeholderPaths).length === 1 &&\n settings.files.placeholderPaths.gt)\n ) {\n return;\n }\n\n const { resolvedPaths: sourceFiles } = settings.files;\n const locales = targetLocales || settings.locales;\n\n const fileMapping = createFileMapping(\n sourceFiles,\n settings.files.placeholderPaths,\n settings.files.transformPaths ?? {},\n settings.files.transformFormats ?? {},\n settings.locales,\n settings.defaultLocale\n );\n\n const cwd = process.cwd();\n const processPromises = Object.entries(fileMapping)\n .filter(([locale]) => locales.includes(locale))\n .map(async ([, filesMap]) => {\n const reverseMap = new Map<string, string>();\n for (const [sourcePath, targetPath] of Object.entries(filesMap)) {\n reverseMap.set(targetPath, sourcePath);\n }\n const targetFiles = Object.values(filesMap).filter(\n (p) =>\n (p.endsWith('.md') || p.endsWith('.mdx')) &&\n (!includeFiles || includeFiles.has(p))\n );\n\n await Promise.all(\n targetFiles.map(async (targetPath) => {\n if (!fs.existsSync(targetPath)) return;\n const sourcePath = reverseMap.get(targetPath);\n if (!sourcePath) return;\n if (!fs.existsSync(sourcePath)) return;\n\n const content = await fs.promises.readFile(targetPath, 'utf8');\n const result = localizeRelativeAssetsForContent(\n content,\n sourcePath,\n targetPath,\n cwd\n );\n if (result.hasChanges) {\n await fs.promises.writeFile(targetPath, result.content);\n }\n })\n );\n });\n\n await Promise.all(processPromises);\n}\n"],"mappings":"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"}