gt 2.14.35 → 2.14.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/dist/api/collectUserEditDiffs.js +112 -155
  3. package/dist/api/collectUserEditDiffs.js.map +1 -0
  4. package/dist/api/downloadFileBatch.js +164 -241
  5. package/dist/api/downloadFileBatch.js.map +1 -0
  6. package/dist/api/saveLocalEdits.js +37 -41
  7. package/dist/api/saveLocalEdits.js.map +1 -0
  8. package/dist/bin/bin-entry.js +17 -7
  9. package/dist/bin/bin-entry.js.map +1 -0
  10. package/dist/bin/bin-main.js +43 -61
  11. package/dist/bin/bin-main.js.map +1 -0
  12. package/dist/cli/base.js +382 -497
  13. package/dist/cli/base.js.map +1 -0
  14. package/dist/cli/commands/download.js +41 -49
  15. package/dist/cli/commands/download.js.map +1 -0
  16. package/dist/cli/commands/enqueue.js +26 -25
  17. package/dist/cli/commands/enqueue.js.map +1 -0
  18. package/dist/cli/commands/setupProject.js +33 -36
  19. package/dist/cli/commands/setupProject.js.map +1 -0
  20. package/dist/cli/commands/stage.js +53 -61
  21. package/dist/cli/commands/stage.js.map +1 -0
  22. package/dist/cli/commands/translate.js +75 -112
  23. package/dist/cli/commands/translate.js.map +1 -0
  24. package/dist/cli/commands/upload.js +185 -213
  25. package/dist/cli/commands/upload.js.map +1 -0
  26. package/dist/cli/commands/utils/validation.js +39 -34
  27. package/dist/cli/commands/utils/validation.js.map +1 -0
  28. package/dist/cli/flags.js +35 -62
  29. package/dist/cli/flags.js.map +1 -0
  30. package/dist/cli/inline.js +112 -137
  31. package/dist/cli/inline.js.map +1 -0
  32. package/dist/cli/next.js +17 -12
  33. package/dist/cli/next.js.map +1 -0
  34. package/dist/cli/node.js +19 -15
  35. package/dist/cli/node.js.map +1 -0
  36. package/dist/cli/python.js +13 -8
  37. package/dist/cli/python.js.map +1 -0
  38. package/dist/cli/react.js +61 -78
  39. package/dist/cli/react.js.map +1 -0
  40. package/dist/config/defaults.js +16 -11
  41. package/dist/config/defaults.js.map +1 -0
  42. package/dist/config/generateSettings.js +167 -269
  43. package/dist/config/generateSettings.js.map +1 -0
  44. package/dist/config/optionPresets.js +78 -96
  45. package/dist/config/optionPresets.js.map +1 -0
  46. package/dist/config/resolveConfig.js +27 -32
  47. package/dist/config/resolveConfig.js.map +1 -0
  48. package/dist/config/utils.js +7 -3
  49. package/dist/config/utils.js.map +1 -0
  50. package/dist/config/validateSettings.js +19 -30
  51. package/dist/config/validateSettings.js.map +1 -0
  52. package/dist/console/colors.js +18 -13
  53. package/dist/console/colors.js.map +1 -0
  54. package/dist/console/displayTranslateSummary.js +40 -37
  55. package/dist/console/displayTranslateSummary.js.map +1 -0
  56. package/dist/console/formatting.js +8 -5
  57. package/dist/console/formatting.js.map +1 -0
  58. package/dist/console/index.d.ts +11 -9
  59. package/dist/console/index.js +53 -50
  60. package/dist/console/index.js.map +1 -0
  61. package/dist/console/inkFields.d.ts +23 -0
  62. package/dist/console/inkFields.js +87 -0
  63. package/dist/console/inkFields.js.map +1 -0
  64. package/dist/console/inkLayout.d.ts +7 -0
  65. package/dist/console/inkLayout.js +139 -0
  66. package/dist/console/inkLayout.js.map +1 -0
  67. package/dist/console/inkLocaleData.d.ts +4 -0
  68. package/dist/console/inkLocaleData.js +32 -0
  69. package/dist/console/inkLocaleData.js.map +1 -0
  70. package/dist/console/inkPrompts.d.ts +8 -0
  71. package/dist/console/inkPrompts.js +496 -0
  72. package/dist/console/inkPrompts.js.map +1 -0
  73. package/dist/console/inkSession.d.ts +3 -0
  74. package/dist/console/inkSession.js +42 -0
  75. package/dist/console/inkSession.js.map +1 -0
  76. package/dist/console/inkTerminal.d.ts +4 -0
  77. package/dist/console/inkTerminal.js +15 -0
  78. package/dist/console/inkTerminal.js.map +1 -0
  79. package/dist/console/inkTypes.d.ts +66 -0
  80. package/dist/console/inkTypes.js +1 -0
  81. package/dist/console/inkUtils.d.ts +24 -0
  82. package/dist/console/inkUtils.js +87 -0
  83. package/dist/console/inkUtils.js.map +1 -0
  84. package/dist/console/logger.js +209 -249
  85. package/dist/console/logger.js.map +1 -0
  86. package/dist/console/logging.d.ts +14 -0
  87. package/dist/console/logging.js +203 -162
  88. package/dist/console/logging.js.map +1 -0
  89. package/dist/console/promptParsing.d.ts +5 -0
  90. package/dist/console/promptParsing.js +28 -0
  91. package/dist/console/promptParsing.js.map +1 -0
  92. package/dist/console/terminalSession.d.ts +5 -0
  93. package/dist/console/terminalSession.js +38 -0
  94. package/dist/console/terminalSession.js.map +1 -0
  95. package/dist/extraction/index.js +3 -2
  96. package/dist/extraction/mapToUpdates.js +19 -18
  97. package/dist/extraction/mapToUpdates.js.map +1 -0
  98. package/dist/extraction/postProcess.js +68 -86
  99. package/dist/extraction/postProcess.js.map +1 -0
  100. package/dist/formats/files/aggregateFiles.js +223 -304
  101. package/dist/formats/files/aggregateFiles.js.map +1 -0
  102. package/dist/formats/files/collectFiles.js +53 -54
  103. package/dist/formats/files/collectFiles.js.map +1 -0
  104. package/dist/formats/files/convertToFileTranslationData.js +21 -19
  105. package/dist/formats/files/convertToFileTranslationData.js.map +1 -0
  106. package/dist/formats/files/fileMapping.js +82 -119
  107. package/dist/formats/files/fileMapping.js.map +1 -0
  108. package/dist/formats/files/preprocess/mdx.js +15 -12
  109. package/dist/formats/files/preprocess/mdx.js.map +1 -0
  110. package/dist/formats/files/preprocess/mintlify.js +15 -13
  111. package/dist/formats/files/preprocess/mintlify.js.map +1 -0
  112. package/dist/formats/files/preprocessContent.js +20 -21
  113. package/dist/formats/files/preprocessContent.js.map +1 -0
  114. package/dist/formats/files/save.js +18 -15
  115. package/dist/formats/files/save.js.map +1 -0
  116. package/dist/formats/files/supportedFiles.js +27 -22
  117. package/dist/formats/files/supportedFiles.js.map +1 -0
  118. package/dist/formats/files/transformFormat.js +93 -100
  119. package/dist/formats/files/transformFormat.js.map +1 -0
  120. package/dist/formats/json/extractJson.js +83 -110
  121. package/dist/formats/json/extractJson.js.map +1 -0
  122. package/dist/formats/json/flattenJson.js +41 -48
  123. package/dist/formats/json/flattenJson.js.map +1 -0
  124. package/dist/formats/json/jsonPath.js +20 -15
  125. package/dist/formats/json/jsonPath.js.map +1 -0
  126. package/dist/formats/json/jsonPointer.js +17 -17
  127. package/dist/formats/json/jsonPointer.js.map +1 -0
  128. package/dist/formats/json/mergeJson.js +230 -371
  129. package/dist/formats/json/mergeJson.js.map +1 -0
  130. package/dist/formats/json/parseJson.js +74 -111
  131. package/dist/formats/json/parseJson.js.map +1 -0
  132. package/dist/formats/json/transformJson.js +53 -61
  133. package/dist/formats/json/transformJson.js.map +1 -0
  134. package/dist/formats/json/utils.js +158 -187
  135. package/dist/formats/json/utils.js.map +1 -0
  136. package/dist/formats/parseKeyedMetadata.js +85 -106
  137. package/dist/formats/parseKeyedMetadata.js.map +1 -0
  138. package/dist/formats/utils.js +13 -23
  139. package/dist/formats/utils.js.map +1 -0
  140. package/dist/formats/yaml/extractYaml.js +32 -31
  141. package/dist/formats/yaml/extractYaml.js.map +1 -0
  142. package/dist/formats/yaml/mergeYaml.js +43 -60
  143. package/dist/formats/yaml/mergeYaml.js.map +1 -0
  144. package/dist/formats/yaml/parseYaml.js +34 -23
  145. package/dist/formats/yaml/parseYaml.js.map +1 -0
  146. package/dist/formats/yaml/utils.js +19 -21
  147. package/dist/formats/yaml/utils.js.map +1 -0
  148. package/dist/fs/clearLocaleDirs.js +82 -114
  149. package/dist/fs/clearLocaleDirs.js.map +1 -0
  150. package/dist/fs/config/downloadedVersions.js +174 -188
  151. package/dist/fs/config/downloadedVersions.js.map +1 -0
  152. package/dist/fs/config/loadConfig.js +12 -8
  153. package/dist/fs/config/loadConfig.js.map +1 -0
  154. package/dist/fs/config/parseFilesConfig.js +166 -227
  155. package/dist/fs/config/parseFilesConfig.js.map +1 -0
  156. package/dist/fs/config/setupConfig.js +43 -52
  157. package/dist/fs/config/setupConfig.js.map +1 -0
  158. package/dist/fs/config/updateConfig.js +44 -56
  159. package/dist/fs/config/updateConfig.js.map +1 -0
  160. package/dist/fs/config/updateVersions.js +27 -28
  161. package/dist/fs/config/updateVersions.js.map +1 -0
  162. package/dist/fs/copyFile.js +33 -37
  163. package/dist/fs/copyFile.js.map +1 -0
  164. package/dist/fs/createLoadTranslationsFile.js +32 -48
  165. package/dist/fs/createLoadTranslationsFile.js.map +1 -0
  166. package/dist/fs/determineFramework/detectPythonLibrary.js +30 -34
  167. package/dist/fs/determineFramework/detectPythonLibrary.js.map +1 -0
  168. package/dist/fs/determineFramework/index.js +46 -64
  169. package/dist/fs/determineFramework/index.js.map +1 -0
  170. package/dist/fs/determineFramework/matchPyprojectDependency.js +65 -78
  171. package/dist/fs/determineFramework/matchPyprojectDependency.js.map +1 -0
  172. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js +21 -19
  173. package/dist/fs/determineFramework/matchRequirementsTxtDependency.js.map +1 -0
  174. package/dist/fs/determineFramework/matchSetupPyDependency.js +60 -81
  175. package/dist/fs/determineFramework/matchSetupPyDependency.js.map +1 -0
  176. package/dist/fs/determineFramework/resolveGtDependency.js +15 -15
  177. package/dist/fs/determineFramework/resolveGtDependency.js.map +1 -0
  178. package/dist/fs/findFilepath.js +63 -78
  179. package/dist/fs/findFilepath.js.map +1 -0
  180. package/dist/fs/loadJSON.js +18 -15
  181. package/dist/fs/loadJSON.js.map +1 -0
  182. package/dist/fs/matchFiles.js +12 -7
  183. package/dist/fs/matchFiles.js.map +1 -0
  184. package/dist/fs/saveJSON.js +10 -6
  185. package/dist/fs/saveJSON.js.map +1 -0
  186. package/dist/fs/utils.js +19 -15
  187. package/dist/fs/utils.js.map +1 -0
  188. package/dist/functions.d.ts +2 -1
  189. package/dist/functions.js +3 -6
  190. package/dist/generated/version.d.ts +1 -1
  191. package/dist/generated/version.js +6 -2
  192. package/dist/generated/version.js.map +1 -0
  193. package/dist/git/branches.js +77 -83
  194. package/dist/git/branches.js.map +1 -0
  195. package/dist/hooks/postProcess.js +97 -114
  196. package/dist/hooks/postProcess.js.map +1 -0
  197. package/dist/index.js +23 -31
  198. package/dist/index.js.map +1 -0
  199. package/dist/locadex/setupFlow.js +11 -8
  200. package/dist/locadex/setupFlow.js.map +1 -0
  201. package/dist/main.js +17 -7
  202. package/dist/main.js.map +1 -0
  203. package/dist/next/config/parseNextConfig.js +32 -51
  204. package/dist/next/config/parseNextConfig.js.map +1 -0
  205. package/dist/next/jsx/utils.js +25 -37
  206. package/dist/next/jsx/utils.js.map +1 -0
  207. package/dist/next/parse/handleInitGT.js +87 -154
  208. package/dist/next/parse/handleInitGT.js.map +1 -0
  209. package/dist/next/parse/wrapContent.js +136 -158
  210. package/dist/next/parse/wrapContent.js.map +1 -0
  211. package/dist/python/parse/createPythonInlineUpdates.js +36 -33
  212. package/dist/python/parse/createPythonInlineUpdates.js.map +1 -0
  213. package/dist/react/config/createESBuildConfig.js +115 -115
  214. package/dist/react/config/createESBuildConfig.js.map +1 -0
  215. package/dist/react/jsx/evaluateJsx.js +90 -124
  216. package/dist/react/jsx/evaluateJsx.js.map +1 -0
  217. package/dist/react/jsx/utils/buildImportMap.js +24 -28
  218. package/dist/react/jsx/utils/buildImportMap.js.map +1 -0
  219. package/dist/react/jsx/utils/constants.js +79 -87
  220. package/dist/react/jsx/utils/constants.js.map +1 -0
  221. package/dist/react/jsx/utils/extractSourceCode.js +36 -37
  222. package/dist/react/jsx/utils/extractSourceCode.js.map +1 -0
  223. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +30 -30
  224. package/dist/react/jsx/utils/getCalleeNameFromExpression.js.map +1 -0
  225. package/dist/react/jsx/utils/getPathsAndAliases.js +70 -105
  226. package/dist/react/jsx/utils/getPathsAndAliases.js.map +1 -0
  227. package/dist/react/jsx/utils/isNumberLiteral.js +13 -11
  228. package/dist/react/jsx/utils/isNumberLiteral.js.map +1 -0
  229. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +103 -148
  230. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js.map +1 -0
  231. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js +305 -389
  232. package/dist/react/jsx/utils/jsxParsing/autoInsertion.js.map +1 -0
  233. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +122 -193
  234. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js.map +1 -0
  235. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +50 -64
  236. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js.map +1 -0
  237. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +41 -68
  238. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js.map +1 -0
  239. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +760 -1107
  240. package/dist/react/jsx/utils/jsxParsing/parseJsx.js.map +1 -0
  241. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +35 -71
  242. package/dist/react/jsx/utils/jsxParsing/parseTProps.js.map +1 -0
  243. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +39 -58
  244. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js.map +1 -0
  245. package/dist/react/jsx/utils/jsxParsing/types.js +10 -24
  246. package/dist/react/jsx/utils/jsxParsing/types.js.map +1 -0
  247. package/dist/react/jsx/utils/mapAttributeName.js +13 -13
  248. package/dist/react/jsx/utils/mapAttributeName.js.map +1 -0
  249. package/dist/react/jsx/utils/parseAst.js +142 -272
  250. package/dist/react/jsx/utils/parseAst.js.map +1 -0
  251. package/dist/react/jsx/utils/parseString.js +726 -1090
  252. package/dist/react/jsx/utils/parseString.js.map +1 -0
  253. package/dist/react/jsx/utils/parseStringFunction.js +274 -401
  254. package/dist/react/jsx/utils/parseStringFunction.js.map +1 -0
  255. package/dist/react/jsx/utils/resolveImportPath.d.ts +1 -1
  256. package/dist/react/jsx/utils/resolveImportPath.js +125 -108
  257. package/dist/react/jsx/utils/resolveImportPath.js.map +1 -0
  258. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js +18 -24
  259. package/dist/react/jsx/utils/stringParsing/derivation/containsDeriveCall.js.map +1 -0
  260. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js +412 -579
  261. package/dist/react/jsx/utils/stringParsing/derivation/handleDerivation.js.map +1 -0
  262. package/dist/react/jsx/utils/stringParsing/derivation/index.js +57 -67
  263. package/dist/react/jsx/utils/stringParsing/derivation/index.js.map +1 -0
  264. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js +26 -36
  265. package/dist/react/jsx/utils/stringParsing/derivation/isDeriveCall.js.map +1 -0
  266. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js +29 -24
  267. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/handleTaggedTemplateTranslationCall.js.map +1 -0
  268. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js +34 -32
  269. package/dist/react/jsx/utils/stringParsing/processTaggedTemplateCall/index.js.map +1 -0
  270. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +80 -117
  271. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js.map +1 -0
  272. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js +24 -19
  273. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleDeriveTranslationCall.js.map +1 -0
  274. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +18 -21
  275. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js.map +1 -0
  276. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +45 -50
  277. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js.map +1 -0
  278. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +54 -59
  279. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js.map +1 -0
  280. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +56 -69
  281. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js.map +1 -0
  282. package/dist/react/jsx/utils/validateStringFunction.js +21 -29
  283. package/dist/react/jsx/utils/validateStringFunction.js.map +1 -0
  284. package/dist/react/jsx/wrapJsx.js +192 -375
  285. package/dist/react/jsx/wrapJsx.js.map +1 -0
  286. package/dist/react/parse/addVitePlugin/index.js +40 -34
  287. package/dist/react/parse/addVitePlugin/index.js.map +1 -0
  288. package/dist/react/parse/addVitePlugin/installCompiler.js +18 -20
  289. package/dist/react/parse/addVitePlugin/installCompiler.js.map +1 -0
  290. package/dist/react/parse/addVitePlugin/updateViteConfig.js +107 -111
  291. package/dist/react/parse/addVitePlugin/updateViteConfig.js.map +1 -0
  292. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +23 -26
  293. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js.map +1 -0
  294. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +29 -43
  295. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js.map +1 -0
  296. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +70 -104
  297. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js.map +1 -0
  298. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +23 -29
  299. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js.map +1 -0
  300. package/dist/react/parse/createDictionaryUpdates.js +121 -185
  301. package/dist/react/parse/createDictionaryUpdates.js.map +1 -0
  302. package/dist/react/parse/createInlineUpdates.js +123 -139
  303. package/dist/react/parse/createInlineUpdates.js.map +1 -0
  304. package/dist/react/parse/wrapContent.js +131 -156
  305. package/dist/react/parse/wrapContent.js.map +1 -0
  306. package/dist/react/utils/flattenDictionary.js +55 -70
  307. package/dist/react/utils/flattenDictionary.js.map +1 -0
  308. package/dist/react/utils/getEntryAndMetadata.js +14 -10
  309. package/dist/react/utils/getEntryAndMetadata.js.map +1 -0
  310. package/dist/react/utils/getVariableName.js +36 -33
  311. package/dist/react/utils/getVariableName.js.map +1 -0
  312. package/dist/setup/detectFramework.js +85 -102
  313. package/dist/setup/detectFramework.js.map +1 -0
  314. package/dist/setup/frameworkUtils.js +17 -28
  315. package/dist/setup/frameworkUtils.js.map +1 -0
  316. package/dist/setup/userInput.js +24 -31
  317. package/dist/setup/userInput.js.map +1 -0
  318. package/dist/setup/wizard.js +141 -143
  319. package/dist/setup/wizard.js.map +1 -0
  320. package/dist/state/mintlifyRefMap.js +12 -9
  321. package/dist/state/mintlifyRefMap.js.map +1 -0
  322. package/dist/state/recentDownloads.js +26 -23
  323. package/dist/state/recentDownloads.js.map +1 -0
  324. package/dist/state/translateWarnings.js +17 -8
  325. package/dist/state/translateWarnings.js.map +1 -0
  326. package/dist/translation/parse.js +77 -98
  327. package/dist/translation/parse.js.map +1 -0
  328. package/dist/translation/stage.js +28 -43
  329. package/dist/translation/stage.js.map +1 -0
  330. package/dist/translation/validate.js +68 -91
  331. package/dist/translation/validate.js.map +1 -0
  332. package/dist/types/libraries.js +93 -91
  333. package/dist/types/libraries.js.map +1 -0
  334. package/dist/types/parsing.js +19 -10
  335. package/dist/types/parsing.js.map +1 -0
  336. package/dist/utils/addExplicitAnchorIds.js +270 -389
  337. package/dist/utils/addExplicitAnchorIds.js.map +1 -0
  338. package/dist/utils/calculateTimeoutMs.js +11 -6
  339. package/dist/utils/calculateTimeoutMs.js.map +1 -0
  340. package/dist/utils/constants.js +15 -12
  341. package/dist/utils/constants.js.map +1 -0
  342. package/dist/utils/credentials.js +67 -114
  343. package/dist/utils/credentials.js.map +1 -0
  344. package/dist/utils/fetch.js +22 -20
  345. package/dist/utils/fetch.js.map +1 -0
  346. package/dist/utils/flattenJsonFiles.js +27 -34
  347. package/dist/utils/flattenJsonFiles.js.map +1 -0
  348. package/dist/utils/gitDiff.js +30 -32
  349. package/dist/utils/gitDiff.js.map +1 -0
  350. package/dist/utils/gt.js +7 -2
  351. package/dist/utils/gt.js.map +1 -0
  352. package/dist/utils/hash.js +14 -9
  353. package/dist/utils/hash.js.map +1 -0
  354. package/dist/utils/headers.js +10 -13
  355. package/dist/utils/headers.js.map +1 -0
  356. package/dist/utils/installPackage.js +70 -75
  357. package/dist/utils/installPackage.js.map +1 -0
  358. package/dist/utils/localizeRelativeAssets.js +114 -157
  359. package/dist/utils/localizeRelativeAssets.js.map +1 -0
  360. package/dist/utils/localizeStaticImports.js +229 -371
  361. package/dist/utils/localizeStaticImports.js.map +1 -0
  362. package/dist/utils/localizeStaticUrls.js +241 -424
  363. package/dist/utils/localizeStaticUrls.js.map +1 -0
  364. package/dist/utils/mintlifyTitleFallback.js +64 -72
  365. package/dist/utils/mintlifyTitleFallback.js.map +1 -0
  366. package/dist/utils/monorepoVersionCheck.js +177 -215
  367. package/dist/utils/monorepoVersionCheck.js.map +1 -0
  368. package/dist/utils/packageInfo.js +17 -16
  369. package/dist/utils/packageInfo.js.map +1 -0
  370. package/dist/utils/packageJson.js +51 -66
  371. package/dist/utils/packageJson.js.map +1 -0
  372. package/dist/utils/packageManager.js +237 -260
  373. package/dist/utils/packageManager.js.map +1 -0
  374. package/dist/utils/parse/needsCJS.js +36 -69
  375. package/dist/utils/parse/needsCJS.js.map +1 -0
  376. package/dist/utils/persistPostprocessHashes.js +30 -32
  377. package/dist/utils/persistPostprocessHashes.js.map +1 -0
  378. package/dist/utils/processAnchorIds.js +32 -54
  379. package/dist/utils/processAnchorIds.js.map +1 -0
  380. package/dist/utils/processOpenApi.js +469 -578
  381. package/dist/utils/processOpenApi.js.map +1 -0
  382. package/dist/utils/resolveMintlifyRefs.js +89 -105
  383. package/dist/utils/resolveMintlifyRefs.js.map +1 -0
  384. package/dist/utils/resolvePublish.js +46 -54
  385. package/dist/utils/resolvePublish.js.map +1 -0
  386. package/dist/utils/sanitizeFileContent.js +20 -27
  387. package/dist/utils/sanitizeFileContent.js.map +1 -0
  388. package/dist/utils/sharedStaticAssets.js +248 -366
  389. package/dist/utils/sharedStaticAssets.js.map +1 -0
  390. package/dist/utils/splitMintlifyLanguageRefs.js +208 -282
  391. package/dist/utils/splitMintlifyLanguageRefs.js.map +1 -0
  392. package/dist/utils/validateMdx.js +26 -23
  393. package/dist/utils/validateMdx.js.map +1 -0
  394. package/dist/utils/wrapPlainUrls.js +58 -70
  395. package/dist/utils/wrapPlainUrls.js.map +1 -0
  396. package/dist/workflows/download.js +92 -126
  397. package/dist/workflows/download.js.map +1 -0
  398. package/dist/workflows/enqueue.js +47 -54
  399. package/dist/workflows/enqueue.js.map +1 -0
  400. package/dist/workflows/publish.js +29 -29
  401. package/dist/workflows/publish.js.map +1 -0
  402. package/dist/workflows/setupProject.js +39 -40
  403. package/dist/workflows/setupProject.js.map +1 -0
  404. package/dist/workflows/stage.js +61 -65
  405. package/dist/workflows/stage.js.map +1 -0
  406. package/dist/workflows/steps/BranchStep.js +118 -163
  407. package/dist/workflows/steps/BranchStep.js.map +1 -0
  408. package/dist/workflows/steps/DownloadStep.js +107 -137
  409. package/dist/workflows/steps/DownloadStep.js.map +1 -0
  410. package/dist/workflows/steps/EnqueueStep.js +32 -32
  411. package/dist/workflows/steps/EnqueueStep.js.map +1 -0
  412. package/dist/workflows/steps/PollJobsStep.js +208 -292
  413. package/dist/workflows/steps/PollJobsStep.js.map +1 -0
  414. package/dist/workflows/steps/PublishStep.js +33 -38
  415. package/dist/workflows/steps/PublishStep.js.map +1 -0
  416. package/dist/workflows/steps/SetupStep.js +71 -72
  417. package/dist/workflows/steps/SetupStep.js.map +1 -0
  418. package/dist/workflows/steps/TagStep.js +39 -44
  419. package/dist/workflows/steps/TagStep.js.map +1 -0
  420. package/dist/workflows/steps/UploadSourcesStep.js +108 -140
  421. package/dist/workflows/steps/UploadSourcesStep.js.map +1 -0
  422. package/dist/workflows/steps/UploadTranslationsStep.js +61 -71
  423. package/dist/workflows/steps/UploadTranslationsStep.js.map +1 -0
  424. package/dist/workflows/steps/UserEditDiffsStep.js +32 -34
  425. package/dist/workflows/steps/UserEditDiffsStep.js.map +1 -0
  426. package/dist/workflows/steps/WorkflowStep.js +6 -2
  427. package/dist/workflows/steps/WorkflowStep.js.map +1 -0
  428. package/dist/workflows/upload.js +45 -46
  429. package/dist/workflows/upload.js.map +1 -0
  430. package/package.json +14 -7
@@ -1,389 +1,271 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- import fg from 'fast-glob';
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 remarkStringify from 'remark-stringify';
9
- import { visit } from 'unist-util-visit';
10
- import { escapeHtmlInTextNodes, normalizeCJKCharacters } from 'gt-remark';
11
- import { createFileMapping } from '../formats/files/fileMapping.js';
12
- import { TEMPLATE_FILE_NAME } from './constants.js';
1
+ import "./constants.js";
2
+ import { createFileMapping } from "../formats/files/fileMapping.js";
3
+ import path from "node:path";
4
+ import fs from "node:fs";
5
+ import fg from "fast-glob";
6
+ import { unified } from "unified";
7
+ import remarkParse from "remark-parse";
8
+ import remarkMdx from "remark-mdx";
9
+ import remarkFrontmatter from "remark-frontmatter";
10
+ import { visit } from "unist-util-visit";
11
+ import remarkStringify from "remark-stringify";
12
+ import { escapeHtmlInTextNodes, normalizeCJKCharacters } from "gt-remark";
13
+ //#region src/utils/sharedStaticAssets.ts
13
14
  function derivePublicPath(outDir, provided) {
14
- if (provided)
15
- return provided;
16
- const norm = outDir.replace(/\\/g, '/');
17
- if (norm.startsWith('public/'))
18
- return '/' + norm.slice('public/'.length);
19
- if (norm.startsWith('static/'))
20
- return '/' + norm.slice('static/'.length);
21
- if (norm.startsWith('/'))
22
- return norm; // already absolute URL path
23
- return '/' + path.basename(norm);
15
+ if (provided) return provided;
16
+ const norm = outDir.replace(/\\/g, "/");
17
+ if (norm.startsWith("public/")) return "/" + norm.slice(7);
18
+ if (norm.startsWith("static/")) return "/" + norm.slice(7);
19
+ if (norm.startsWith("/")) return norm;
20
+ return "/" + path.basename(norm);
24
21
  }
25
22
  function toArray(val) {
26
- if (!val)
27
- return [];
28
- return Array.isArray(val) ? val : [val];
23
+ if (!val) return [];
24
+ return Array.isArray(val) ? val : [val];
29
25
  }
30
26
  async function ensureDir(dir) {
31
- await fs.promises.mkdir(dir, { recursive: true });
27
+ await fs.promises.mkdir(dir, { recursive: true });
32
28
  }
33
29
  async function moveFile(src, dest) {
34
- if (src === dest)
35
- return;
36
- try {
37
- await ensureDir(path.dirname(dest));
38
- await fs.promises.rename(src, dest);
39
- }
40
- catch (err) {
41
- const code = err?.code;
42
- // Fallback to copy+unlink for cross-device or existing files
43
- if (code === 'EXDEV' || code === 'EEXIST' || code === 'ENOTEMPTY') {
44
- const data = await fs.promises.readFile(src);
45
- await ensureDir(path.dirname(dest));
46
- await fs.promises.writeFile(dest, data);
47
- try {
48
- await fs.promises.unlink(src);
49
- }
50
- catch {
51
- // Ignore cleanup errors for source files that were already moved.
52
- }
53
- }
54
- else if (code === 'ENOENT') {
55
- // already moved or missing; ignore
56
- return;
57
- }
58
- else {
59
- throw err;
60
- }
61
- }
30
+ if (src === dest) return;
31
+ try {
32
+ await ensureDir(path.dirname(dest));
33
+ await fs.promises.rename(src, dest);
34
+ } catch (err) {
35
+ const code = err?.code;
36
+ if (code === "EXDEV" || code === "EEXIST" || code === "ENOTEMPTY") {
37
+ const data = await fs.promises.readFile(src);
38
+ await ensureDir(path.dirname(dest));
39
+ await fs.promises.writeFile(dest, data);
40
+ try {
41
+ await fs.promises.unlink(src);
42
+ } catch {}
43
+ } else if (code === "ENOENT") return;
44
+ else throw err;
45
+ }
62
46
  }
63
47
  async function pathExists(p) {
64
- try {
65
- await fs.promises.stat(p);
66
- return true;
67
- }
68
- catch {
69
- return false;
70
- }
48
+ try {
49
+ await fs.promises.stat(p);
50
+ return true;
51
+ } catch {
52
+ return false;
53
+ }
71
54
  }
72
55
  async function isDirEmpty(dir) {
73
- try {
74
- const entries = await fs.promises.readdir(dir);
75
- return entries.length === 0;
76
- }
77
- catch {
78
- return false;
79
- }
56
+ try {
57
+ return (await fs.promises.readdir(dir)).length === 0;
58
+ } catch {
59
+ return false;
60
+ }
80
61
  }
81
62
  async function removeEmptyDirsUpwards(startDir, stopDir) {
82
- let current = path.resolve(startDir);
83
- const stop = path.resolve(stopDir);
84
- while (current.startsWith(stop)) {
85
- if (current === stop)
86
- break;
87
- const exists = await pathExists(current);
88
- if (!exists)
89
- break;
90
- const empty = await isDirEmpty(current);
91
- if (!empty)
92
- break;
93
- try {
94
- await fs.promises.rmdir(current);
95
- }
96
- catch {
97
- break;
98
- }
99
- const parent = path.dirname(current);
100
- if (parent === current)
101
- break;
102
- current = parent;
103
- }
63
+ let current = path.resolve(startDir);
64
+ const stop = path.resolve(stopDir);
65
+ while (current.startsWith(stop)) {
66
+ if (current === stop) break;
67
+ if (!await pathExists(current)) break;
68
+ if (!await isDirEmpty(current)) break;
69
+ try {
70
+ await fs.promises.rmdir(current);
71
+ } catch {
72
+ break;
73
+ }
74
+ const parent = path.dirname(current);
75
+ if (parent === current) break;
76
+ current = parent;
77
+ }
104
78
  }
105
79
  function stripQueryAndHash(url) {
106
- const match = url.match(/^[^?#]+/);
107
- const base = match ? match[0] : url;
108
- const suffix = url.slice(base.length);
109
- return { base, suffix };
80
+ const match = url.match(/^[^?#]+/);
81
+ const base = match ? match[0] : url;
82
+ return {
83
+ base,
84
+ suffix: url.slice(base.length)
85
+ };
110
86
  }
111
87
  function rewriteMdxContent(content, filePath, pathMap) {
112
- let changed = false;
113
- let ast;
114
- try {
115
- const processor = unified()
116
- .use(remarkParse)
117
- .use(remarkFrontmatter, ['yaml', 'toml'])
118
- .use(remarkMdx);
119
- ast = processor.runSync(processor.parse(content));
120
- }
121
- catch {
122
- return { content, changed: false };
123
- }
124
- const fileDir = path.dirname(filePath);
125
- // Helper to resolve and possibly rewrite a URL
126
- const maybeRewrite = (url) => {
127
- if (!url ||
128
- /^(https?:)?\/\//i.test(url) ||
129
- url.startsWith('data:') ||
130
- url.startsWith('#') ||
131
- url.startsWith('mailto:') ||
132
- url.startsWith('tel:')) {
133
- return null;
134
- }
135
- const { base, suffix } = stripQueryAndHash(url);
136
- // Only handle relative paths
137
- if (base.startsWith('/'))
138
- return null;
139
- const abs = path.resolve(fileDir, base);
140
- const normAbs = path.normalize(abs);
141
- const mapped = pathMap.get(normAbs);
142
- if (mapped) {
143
- changed = true;
144
- return mapped + suffix;
145
- }
146
- return null;
147
- };
148
- visit(ast, (node) => {
149
- const assetNode = node;
150
- // Markdown image: ![alt](url)
151
- if (assetNode.type === 'image' && typeof assetNode.url === 'string') {
152
- const newUrl = maybeRewrite(assetNode.url);
153
- if (newUrl)
154
- assetNode.url = newUrl;
155
- return;
156
- }
157
- // Markdown link: [text](url) — useful for PDFs and other downloadable assets
158
- if (assetNode.type === 'link' && typeof assetNode.url === 'string') {
159
- const newUrl = maybeRewrite(assetNode.url);
160
- if (newUrl)
161
- assetNode.url = newUrl;
162
- return;
163
- }
164
- // MDX <img src="..." />
165
- if ((assetNode.type === 'mdxJsxFlowElement' ||
166
- assetNode.type === 'mdxJsxTextElement') &&
167
- Array.isArray(assetNode.attributes)) {
168
- for (const attr of assetNode.attributes) {
169
- const attribute = attr;
170
- if (attribute.type === 'mdxJsxAttribute' &&
171
- (attribute.name === 'src' || attribute.name === 'href') &&
172
- typeof attribute.value === 'string') {
173
- const newUrl = maybeRewrite(attribute.value);
174
- if (newUrl)
175
- attribute.value = newUrl;
176
- }
177
- }
178
- }
179
- });
180
- try {
181
- const s = unified()
182
- .use(remarkFrontmatter, ['yaml', 'toml'])
183
- .use(remarkMdx)
184
- .use(normalizeCJKCharacters)
185
- .use(escapeHtmlInTextNodes)
186
- .use(remarkStringify, {
187
- handlers: {
188
- text(node) {
189
- return node.value;
190
- },
191
- },
192
- });
193
- const outTree = s.runSync(ast);
194
- let out = s.stringify(outTree);
195
- // Preserve trailing/leading newlines similar to localizeStaticUrls
196
- if (out.endsWith('\n') && !content.endsWith('\n'))
197
- out = out.slice(0, -1);
198
- if (content.startsWith('\n') && !out.startsWith('\n'))
199
- out = '\n' + out;
200
- return { content: out, changed };
201
- }
202
- catch {
203
- return { content, changed: false };
204
- }
88
+ let changed = false;
89
+ let ast;
90
+ try {
91
+ const processor = unified().use(remarkParse).use(remarkFrontmatter, ["yaml", "toml"]).use(remarkMdx);
92
+ ast = processor.runSync(processor.parse(content));
93
+ } catch {
94
+ return {
95
+ content,
96
+ changed: false
97
+ };
98
+ }
99
+ const fileDir = path.dirname(filePath);
100
+ const maybeRewrite = (url) => {
101
+ if (!url || /^(https?:)?\/\//i.test(url) || url.startsWith("data:") || url.startsWith("#") || url.startsWith("mailto:") || url.startsWith("tel:")) return null;
102
+ const { base, suffix } = stripQueryAndHash(url);
103
+ if (base.startsWith("/")) return null;
104
+ const abs = path.resolve(fileDir, base);
105
+ const normAbs = path.normalize(abs);
106
+ const mapped = pathMap.get(normAbs);
107
+ if (mapped) {
108
+ changed = true;
109
+ return mapped + suffix;
110
+ }
111
+ return null;
112
+ };
113
+ visit(ast, (node) => {
114
+ const assetNode = node;
115
+ if (assetNode.type === "image" && typeof assetNode.url === "string") {
116
+ const newUrl = maybeRewrite(assetNode.url);
117
+ if (newUrl) assetNode.url = newUrl;
118
+ return;
119
+ }
120
+ if (assetNode.type === "link" && typeof assetNode.url === "string") {
121
+ const newUrl = maybeRewrite(assetNode.url);
122
+ if (newUrl) assetNode.url = newUrl;
123
+ return;
124
+ }
125
+ if ((assetNode.type === "mdxJsxFlowElement" || assetNode.type === "mdxJsxTextElement") && Array.isArray(assetNode.attributes)) for (const attr of assetNode.attributes) {
126
+ const attribute = attr;
127
+ if (attribute.type === "mdxJsxAttribute" && (attribute.name === "src" || attribute.name === "href") && typeof attribute.value === "string") {
128
+ const newUrl = maybeRewrite(attribute.value);
129
+ if (newUrl) attribute.value = newUrl;
130
+ }
131
+ }
132
+ });
133
+ try {
134
+ const s = unified().use(remarkFrontmatter, ["yaml", "toml"]).use(remarkMdx).use(normalizeCJKCharacters).use(escapeHtmlInTextNodes).use(remarkStringify, { handlers: { text(node) {
135
+ return node.value;
136
+ } } });
137
+ const outTree = s.runSync(ast);
138
+ let out = s.stringify(outTree);
139
+ if (out.endsWith("\n") && !content.endsWith("\n")) out = out.slice(0, -1);
140
+ if (content.startsWith("\n") && !out.startsWith("\n")) out = "\n" + out;
141
+ return {
142
+ content: out,
143
+ changed
144
+ };
145
+ } catch {
146
+ return {
147
+ content,
148
+ changed: false
149
+ };
150
+ }
205
151
  }
206
152
  function resolveAssetPaths(include, cwd) {
207
- const assetPaths = new Set();
208
- for (let pattern of include) {
209
- if (pattern.startsWith('/'))
210
- pattern = pattern.slice(1);
211
- const matches = fg.sync(path.resolve(cwd, pattern), { absolute: true });
212
- for (const m of matches)
213
- assetPaths.add(path.normalize(m));
214
- }
215
- return assetPaths;
153
+ const assetPaths = /* @__PURE__ */ new Set();
154
+ for (let pattern of include) {
155
+ if (pattern.startsWith("/")) pattern = pattern.slice(1);
156
+ const matches = fg.sync(path.resolve(cwd, pattern), { absolute: true });
157
+ for (const m of matches) assetPaths.add(path.normalize(m));
158
+ }
159
+ return assetPaths;
216
160
  }
217
- export async function mirrorAssetsToLocales(settings) {
218
- const cfg = settings.sharedStaticAssets;
219
- if (!cfg?.mirrorToLocales)
220
- return;
221
- if (!settings.files)
222
- return;
223
- const cwd = process.cwd();
224
- const include = toArray(cfg.include);
225
- if (include.length === 0)
226
- return;
227
- const assetPaths = resolveAssetPaths(include, cwd);
228
- if (assetPaths.size === 0)
229
- return;
230
- const { resolvedPaths, placeholderPaths, transformPaths, transformFormats } = settings.files;
231
- const targetLocales = settings.locales.filter((l) => l !== settings.defaultLocale);
232
- if (targetLocales.length === 0)
233
- return;
234
- const fileMapping = createFileMapping(resolvedPaths, placeholderPaths, transformPaths, transformFormats, targetLocales, settings.defaultLocale);
235
- for (const locale of targetLocales) {
236
- const filesMap = fileMapping[locale];
237
- if (!filesMap)
238
- continue;
239
- // Extract unique (sourceDir, targetDir) pairs from the file mapping
240
- const dirPairs = new Map();
241
- for (const [sourcePath, targetPath] of Object.entries(filesMap)) {
242
- if (sourcePath === TEMPLATE_FILE_NAME)
243
- continue;
244
- const sourceDir = path.dirname(path.resolve(cwd, sourcePath));
245
- const targetDir = path.dirname(path.resolve(cwd, targetPath));
246
- if (sourceDir !== targetDir) {
247
- dirPairs.set(sourceDir, targetDir);
248
- }
249
- }
250
- if (dirPairs.size === 0)
251
- continue;
252
- // Derive ancestor directory pairs by walking up from each known pair.
253
- // e.g. if docs/guide → ja/docs/guide, infer docs → ja/docs.
254
- // Stop at cwd or when an existing pair conflicts.
255
- const ancestorPairs = new Map();
256
- for (const [sourceDir, targetDir] of dirPairs) {
257
- let s = path.dirname(sourceDir);
258
- let t = path.dirname(targetDir);
259
- while (s.startsWith(cwd) && s !== cwd) {
260
- const existing = dirPairs.get(s) ?? ancestorPairs.get(s);
261
- if (existing !== undefined) {
262
- if (existing !== t)
263
- break; // conflict — different transforms
264
- }
265
- else {
266
- ancestorPairs.set(s, t);
267
- }
268
- s = path.dirname(s);
269
- t = path.dirname(t);
270
- }
271
- }
272
- for (const [s, t] of ancestorPairs) {
273
- dirPairs.set(s, t);
274
- }
275
- // Sort source dirs by length descending so longest prefix matches first
276
- const sortedPairs = [...dirPairs.entries()].sort((a, b) => b[0].length - a[0].length);
277
- for (const assetAbs of assetPaths) {
278
- // Find the directory pair whose sourceDir is the longest prefix of the asset
279
- let bestSource;
280
- let bestTarget;
281
- for (const [sourceDir, targetDir] of sortedPairs) {
282
- if (assetAbs.startsWith(sourceDir + path.sep) ||
283
- assetAbs.startsWith(sourceDir + '/')) {
284
- bestSource = sourceDir;
285
- bestTarget = targetDir;
286
- break;
287
- }
288
- }
289
- if (!bestSource || !bestTarget)
290
- continue;
291
- const relFromSource = path.relative(bestSource, assetAbs);
292
- const targetAsset = path.resolve(bestTarget, relFromSource);
293
- // Skip if target already exists with same size
294
- try {
295
- const [srcStat, dstStat] = await Promise.all([
296
- fs.promises.stat(assetAbs),
297
- fs.promises.stat(targetAsset),
298
- ]);
299
- if (dstStat.isFile() && srcStat.size === dstStat.size)
300
- continue;
301
- }
302
- catch {
303
- // target doesn't exist, proceed with copy
304
- }
305
- await ensureDir(path.dirname(targetAsset));
306
- await fs.promises.copyFile(assetAbs, targetAsset);
307
- }
308
- }
161
+ async function mirrorAssetsToLocales(settings) {
162
+ const cfg = settings.sharedStaticAssets;
163
+ if (!cfg?.mirrorToLocales) return;
164
+ if (!settings.files) return;
165
+ const cwd = process.cwd();
166
+ const include = toArray(cfg.include);
167
+ if (include.length === 0) return;
168
+ const assetPaths = resolveAssetPaths(include, cwd);
169
+ if (assetPaths.size === 0) return;
170
+ const { resolvedPaths, placeholderPaths, transformPaths, transformFormats } = settings.files;
171
+ const targetLocales = settings.locales.filter((l) => l !== settings.defaultLocale);
172
+ if (targetLocales.length === 0) return;
173
+ const fileMapping = createFileMapping(resolvedPaths, placeholderPaths, transformPaths, transformFormats, targetLocales, settings.defaultLocale);
174
+ for (const locale of targetLocales) {
175
+ const filesMap = fileMapping[locale];
176
+ if (!filesMap) continue;
177
+ const dirPairs = /* @__PURE__ */ new Map();
178
+ for (const [sourcePath, targetPath] of Object.entries(filesMap)) {
179
+ if (sourcePath === "__INTERNAL_GT_TEMPLATE_NAME__") continue;
180
+ const sourceDir = path.dirname(path.resolve(cwd, sourcePath));
181
+ const targetDir = path.dirname(path.resolve(cwd, targetPath));
182
+ if (sourceDir !== targetDir) dirPairs.set(sourceDir, targetDir);
183
+ }
184
+ if (dirPairs.size === 0) continue;
185
+ const ancestorPairs = /* @__PURE__ */ new Map();
186
+ for (const [sourceDir, targetDir] of dirPairs) {
187
+ let s = path.dirname(sourceDir);
188
+ let t = path.dirname(targetDir);
189
+ while (s.startsWith(cwd) && s !== cwd) {
190
+ const existing = dirPairs.get(s) ?? ancestorPairs.get(s);
191
+ if (existing !== void 0) {
192
+ if (existing !== t) break;
193
+ } else ancestorPairs.set(s, t);
194
+ s = path.dirname(s);
195
+ t = path.dirname(t);
196
+ }
197
+ }
198
+ for (const [s, t] of ancestorPairs) dirPairs.set(s, t);
199
+ const sortedPairs = [...dirPairs.entries()].sort((a, b) => b[0].length - a[0].length);
200
+ for (const assetAbs of assetPaths) {
201
+ let bestSource;
202
+ let bestTarget;
203
+ for (const [sourceDir, targetDir] of sortedPairs) if (assetAbs.startsWith(sourceDir + path.sep) || assetAbs.startsWith(sourceDir + "/")) {
204
+ bestSource = sourceDir;
205
+ bestTarget = targetDir;
206
+ break;
207
+ }
208
+ if (!bestSource || !bestTarget) continue;
209
+ const relFromSource = path.relative(bestSource, assetAbs);
210
+ const targetAsset = path.resolve(bestTarget, relFromSource);
211
+ try {
212
+ const [srcStat, dstStat] = await Promise.all([fs.promises.stat(assetAbs), fs.promises.stat(targetAsset)]);
213
+ if (dstStat.isFile() && srcStat.size === dstStat.size) continue;
214
+ } catch {}
215
+ await ensureDir(path.dirname(targetAsset));
216
+ await fs.promises.copyFile(assetAbs, targetAsset);
217
+ }
218
+ }
309
219
  }
310
220
  /**
311
- * If you specify in config you have blob patterns pointing to assets (jpg, png, etc.)
312
- * Moves static assets into a specified directory and goes thru src files and updates refrence to static assets
313
- * @param settings
314
- * @returns
315
- */
316
- export default async function processSharedStaticAssets(settings) {
317
- const cfg = settings.sharedStaticAssets;
318
- if (!cfg)
319
- return;
320
- // mirrorToLocales is handled separately after translations are downloaded
321
- if (cfg.mirrorToLocales)
322
- return;
323
- const cwd = process.cwd();
324
- const include = toArray(cfg.include);
325
- if (include.length === 0)
326
- return;
327
- // Resolve assets
328
- const assetPaths = resolveAssetPaths(include, cwd);
329
- if (assetPaths.size === 0)
330
- return;
331
- if (!cfg.outDir)
332
- return;
333
- const outDirInput = cfg.outDir.startsWith('/')
334
- ? cfg.outDir.slice(1)
335
- : cfg.outDir;
336
- const outDirAbs = path.resolve(cwd, outDirInput);
337
- const publicPath = derivePublicPath(outDirInput, cfg.publicPath);
338
- // Map original absolute path -> public URL
339
- const originalToPublic = new Map();
340
- for (const abs of assetPaths) {
341
- const relFromRoot = path.relative(cwd, abs).replace(/\\/g, '/');
342
- const publicUrl = (publicPath.endsWith('/') ? publicPath.slice(0, -1) : publicPath) +
343
- '/' +
344
- relFromRoot;
345
- originalToPublic.set(path.normalize(abs), publicUrl);
346
- }
347
- // Move assets to outDir, preserving relative structure
348
- for (const abs of assetPaths) {
349
- const relFromRoot = path.relative(cwd, abs);
350
- const destAbs = path.resolve(outDirAbs, relFromRoot);
351
- // Skip if already in destination
352
- if (path.normalize(abs) === path.normalize(destAbs))
353
- continue;
354
- // If destination exists, assume already moved
355
- try {
356
- const st = await fs.promises.stat(destAbs).catch(() => null);
357
- if (st && st.isFile()) {
358
- // Remove source if it still exists
359
- await fs.promises.unlink(abs).catch(() => {
360
- // Ignore missing source files.
361
- });
362
- await removeEmptyDirsUpwards(path.dirname(abs), cwd);
363
- continue;
364
- }
365
- }
366
- catch {
367
- // If stat/removal fails, fall through to the normal move path.
368
- }
369
- await moveFile(abs, destAbs);
370
- await removeEmptyDirsUpwards(path.dirname(abs), cwd);
371
- }
372
- // Rewrite references in default-locale files we send for translation
373
- const resolved = settings.files?.resolvedPaths || {};
374
- const mdFiles = [...(resolved.mdx || []), ...(resolved.md || [])];
375
- await Promise.all(mdFiles.map(async (filePath) => {
376
- // only rewrite existing files
377
- const exists = await fs.promises
378
- .stat(filePath)
379
- .then(() => true)
380
- .catch(() => false);
381
- if (!exists)
382
- return;
383
- const orig = await fs.promises.readFile(filePath, 'utf8');
384
- const { content: out, changed } = rewriteMdxContent(orig, filePath, originalToPublic);
385
- if (changed) {
386
- await fs.promises.writeFile(filePath, out, 'utf8');
387
- }
388
- }));
221
+ * If you specify in config you have blob patterns pointing to assets (jpg, png, etc.)
222
+ * Moves static assets into a specified directory and goes thru src files and updates refrence to static assets
223
+ * @param settings
224
+ * @returns
225
+ */
226
+ async function processSharedStaticAssets(settings) {
227
+ const cfg = settings.sharedStaticAssets;
228
+ if (!cfg) return;
229
+ if (cfg.mirrorToLocales) return;
230
+ const cwd = process.cwd();
231
+ const include = toArray(cfg.include);
232
+ if (include.length === 0) return;
233
+ const assetPaths = resolveAssetPaths(include, cwd);
234
+ if (assetPaths.size === 0) return;
235
+ if (!cfg.outDir) return;
236
+ const outDirInput = cfg.outDir.startsWith("/") ? cfg.outDir.slice(1) : cfg.outDir;
237
+ const outDirAbs = path.resolve(cwd, outDirInput);
238
+ const publicPath = derivePublicPath(outDirInput, cfg.publicPath);
239
+ const originalToPublic = /* @__PURE__ */ new Map();
240
+ for (const abs of assetPaths) {
241
+ const relFromRoot = path.relative(cwd, abs).replace(/\\/g, "/");
242
+ const publicUrl = (publicPath.endsWith("/") ? publicPath.slice(0, -1) : publicPath) + "/" + relFromRoot;
243
+ originalToPublic.set(path.normalize(abs), publicUrl);
244
+ }
245
+ for (const abs of assetPaths) {
246
+ const relFromRoot = path.relative(cwd, abs);
247
+ const destAbs = path.resolve(outDirAbs, relFromRoot);
248
+ if (path.normalize(abs) === path.normalize(destAbs)) continue;
249
+ try {
250
+ const st = await fs.promises.stat(destAbs).catch(() => null);
251
+ if (st && st.isFile()) {
252
+ await fs.promises.unlink(abs).catch(() => {});
253
+ await removeEmptyDirsUpwards(path.dirname(abs), cwd);
254
+ continue;
255
+ }
256
+ } catch {}
257
+ await moveFile(abs, destAbs);
258
+ await removeEmptyDirsUpwards(path.dirname(abs), cwd);
259
+ }
260
+ const resolved = settings.files?.resolvedPaths || {};
261
+ const mdFiles = [...resolved.mdx || [], ...resolved.md || []];
262
+ await Promise.all(mdFiles.map(async (filePath) => {
263
+ if (!await fs.promises.stat(filePath).then(() => true).catch(() => false)) return;
264
+ const { content: out, changed } = rewriteMdxContent(await fs.promises.readFile(filePath, "utf8"), filePath, originalToPublic);
265
+ if (changed) await fs.promises.writeFile(filePath, out, "utf8");
266
+ }));
389
267
  }
268
+ //#endregion
269
+ export { processSharedStaticAssets as default, mirrorAssetsToLocales };
270
+
271
+ //# sourceMappingURL=sharedStaticAssets.js.map