gt 0.10.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/CHANGELOG.md +1275 -0
  2. package/LICENSE.md +105 -0
  3. package/README.md +26 -198
  4. package/dist/api/collectUserEditDiffs.d.ts +9 -0
  5. package/dist/api/collectUserEditDiffs.js +159 -0
  6. package/dist/api/downloadFileBatch.d.ts +23 -0
  7. package/dist/api/downloadFileBatch.js +190 -0
  8. package/dist/api/saveLocalEdits.d.ts +6 -0
  9. package/dist/api/saveLocalEdits.js +38 -0
  10. package/dist/bin/bin-entry.d.ts +1 -0
  11. package/dist/bin/bin-entry.js +9 -0
  12. package/dist/bin/bin-main.d.ts +2 -0
  13. package/dist/bin/bin-main.js +67 -0
  14. package/dist/cli/base.d.ts +59 -0
  15. package/dist/cli/base.js +529 -0
  16. package/dist/cli/commands/download.d.ts +8 -0
  17. package/dist/cli/commands/download.js +51 -0
  18. package/dist/cli/commands/enqueue.d.ts +9 -0
  19. package/dist/cli/commands/enqueue.js +27 -0
  20. package/dist/cli/commands/setupProject.d.ts +7 -0
  21. package/dist/cli/commands/setupProject.js +37 -0
  22. package/dist/cli/commands/stage.d.ts +9 -0
  23. package/dist/cli/commands/stage.js +59 -0
  24. package/dist/cli/commands/translate.d.ts +7 -0
  25. package/dist/cli/commands/translate.js +70 -0
  26. package/dist/cli/commands/upload.d.ts +13 -0
  27. package/dist/cli/commands/upload.js +142 -0
  28. package/dist/cli/commands/utils/validation.d.ts +13 -0
  29. package/dist/cli/commands/utils/validation.js +38 -0
  30. package/dist/cli/flags.d.ts +15 -0
  31. package/dist/cli/flags.js +70 -0
  32. package/dist/cli/inline.d.ts +17 -0
  33. package/dist/cli/inline.js +135 -0
  34. package/dist/cli/next.d.ts +10 -0
  35. package/dist/cli/next.js +12 -0
  36. package/dist/cli/node.d.ts +10 -0
  37. package/dist/cli/node.js +9 -0
  38. package/dist/cli/react.d.ts +12 -0
  39. package/dist/cli/react.js +72 -0
  40. package/dist/config/generateSettings.d.ts +9 -0
  41. package/dist/config/generateSettings.js +214 -0
  42. package/dist/config/optionPresets.d.ts +3 -0
  43. package/dist/config/optionPresets.js +65 -0
  44. package/dist/config/resolveConfig.d.ts +4 -0
  45. package/dist/config/resolveConfig.js +33 -0
  46. package/dist/config/utils.d.ts +2 -0
  47. package/dist/config/utils.js +4 -0
  48. package/dist/config/validateSettings.d.ts +3 -0
  49. package/dist/config/validateSettings.js +32 -0
  50. package/dist/console/colors.d.ts +6 -0
  51. package/dist/console/colors.js +19 -0
  52. package/dist/console/displayTranslateSummary.d.ts +1 -0
  53. package/dist/console/displayTranslateSummary.js +42 -0
  54. package/dist/console/formatting.d.ts +1 -0
  55. package/dist/console/formatting.js +7 -0
  56. package/dist/console/index.d.ts +34 -0
  57. package/dist/console/index.js +46 -0
  58. package/dist/console/logger.d.ts +35 -0
  59. package/dist/console/logger.js +250 -0
  60. package/dist/console/logging.d.ts +52 -0
  61. package/dist/console/logging.js +175 -0
  62. package/dist/formats/files/aggregateFiles.d.ts +4 -0
  63. package/dist/formats/files/aggregateFiles.js +156 -0
  64. package/dist/formats/files/collectFiles.d.ts +6 -0
  65. package/dist/formats/files/collectFiles.js +49 -0
  66. package/dist/formats/files/convertToFileTranslationData.d.ts +15 -0
  67. package/dist/formats/files/convertToFileTranslationData.js +21 -0
  68. package/dist/formats/files/fileMapping.d.ts +11 -0
  69. package/dist/formats/files/fileMapping.js +115 -0
  70. package/dist/formats/files/preprocess/mdx.d.ts +6 -0
  71. package/dist/formats/files/preprocess/mdx.js +14 -0
  72. package/dist/formats/files/preprocess/mintlify.d.ts +5 -0
  73. package/dist/formats/files/preprocess/mintlify.js +15 -0
  74. package/dist/formats/files/preprocessContent.d.ts +8 -0
  75. package/dist/formats/files/preprocessContent.js +23 -0
  76. package/dist/formats/files/save.d.ts +5 -0
  77. package/dist/formats/files/save.js +17 -0
  78. package/dist/formats/files/supportedFiles.d.ts +11 -0
  79. package/dist/formats/files/supportedFiles.js +20 -0
  80. package/dist/formats/json/extractJson.d.ts +15 -0
  81. package/dist/formats/json/extractJson.js +101 -0
  82. package/dist/formats/json/flattenJson.d.ts +14 -0
  83. package/dist/formats/json/flattenJson.js +64 -0
  84. package/dist/formats/json/mergeJson.d.ts +13 -0
  85. package/dist/formats/json/mergeJson.js +367 -0
  86. package/dist/formats/json/parseJson.d.ts +2 -0
  87. package/dist/formats/json/parseJson.js +109 -0
  88. package/dist/formats/json/utils.d.ts +47 -0
  89. package/dist/formats/json/utils.js +150 -0
  90. package/dist/formats/utils.d.ts +2 -0
  91. package/dist/formats/utils.js +24 -0
  92. package/dist/formats/yaml/mergeYaml.d.ts +5 -0
  93. package/dist/formats/yaml/mergeYaml.js +61 -0
  94. package/dist/formats/yaml/parseYaml.d.ts +5 -0
  95. package/dist/formats/yaml/parseYaml.js +24 -0
  96. package/dist/formats/yaml/utils.d.ts +2 -0
  97. package/dist/formats/yaml/utils.js +23 -0
  98. package/dist/fs/clearLocaleDirs.d.ts +8 -0
  99. package/dist/fs/clearLocaleDirs.js +126 -0
  100. package/dist/fs/config/downloadedVersions.d.ts +21 -0
  101. package/dist/fs/config/downloadedVersions.js +50 -0
  102. package/dist/fs/config/loadConfig.d.ts +1 -0
  103. package/dist/fs/config/loadConfig.js +9 -0
  104. package/dist/fs/config/parseFilesConfig.d.ts +27 -0
  105. package/dist/fs/config/parseFilesConfig.js +150 -0
  106. package/dist/fs/config/setupConfig.d.ts +17 -0
  107. package/dist/fs/config/setupConfig.js +50 -0
  108. package/dist/fs/config/updateConfig.d.ts +21 -0
  109. package/dist/fs/config/updateConfig.js +57 -0
  110. package/dist/fs/config/updateVersions.d.ts +11 -0
  111. package/dist/fs/config/updateVersions.js +30 -0
  112. package/dist/fs/copyFile.d.ts +7 -0
  113. package/dist/fs/copyFile.js +39 -0
  114. package/dist/fs/createLoadTranslationsFile.d.ts +1 -0
  115. package/dist/fs/createLoadTranslationsFile.js +49 -0
  116. package/dist/fs/determineFramework.d.ts +5 -0
  117. package/dist/fs/determineFramework.js +53 -0
  118. package/dist/fs/findFilepath.d.ts +36 -0
  119. package/dist/fs/findFilepath.js +90 -0
  120. package/dist/fs/index.d.ts +1 -0
  121. package/dist/fs/index.js +1 -0
  122. package/dist/fs/loadJSON.d.ts +6 -0
  123. package/dist/fs/loadJSON.js +17 -0
  124. package/dist/fs/matchFiles.d.ts +1 -0
  125. package/dist/fs/matchFiles.js +8 -0
  126. package/dist/fs/saveJSON.d.ts +1 -0
  127. package/dist/fs/saveJSON.js +7 -0
  128. package/dist/fs/utils.d.ts +1 -0
  129. package/dist/fs/utils.js +16 -0
  130. package/dist/functions.d.ts +7 -0
  131. package/dist/functions.js +6 -0
  132. package/dist/generated/version.d.ts +1 -0
  133. package/dist/generated/version.js +2 -0
  134. package/dist/git/branches.d.ts +7 -0
  135. package/dist/git/branches.js +88 -0
  136. package/dist/hooks/postProcess.d.ts +4 -0
  137. package/dist/hooks/postProcess.js +110 -0
  138. package/dist/index.d.ts +4 -0
  139. package/dist/index.js +27 -0
  140. package/dist/locadex/setupFlow.d.ts +2 -0
  141. package/dist/locadex/setupFlow.js +9 -0
  142. package/dist/main.d.ts +2 -0
  143. package/dist/main.js +10 -0
  144. package/dist/next/config/parseNextConfig.d.ts +10 -0
  145. package/dist/next/config/parseNextConfig.js +53 -0
  146. package/dist/next/jsx/utils.d.ts +7 -0
  147. package/dist/next/jsx/utils.js +42 -0
  148. package/dist/next/parse/handleInitGT.d.ts +7 -0
  149. package/dist/next/parse/handleInitGT.js +157 -0
  150. package/dist/next/parse/wrapContent.d.ts +12 -0
  151. package/dist/next/parse/wrapContent.js +164 -0
  152. package/dist/react/config/createESBuildConfig.d.ts +2 -0
  153. package/dist/react/config/createESBuildConfig.js +119 -0
  154. package/dist/react/jsx/evaluateJsx.d.ts +24 -0
  155. package/dist/react/jsx/evaluateJsx.js +123 -0
  156. package/dist/react/jsx/utils/buildImportMap.d.ts +9 -0
  157. package/dist/react/jsx/utils/buildImportMap.js +30 -0
  158. package/dist/react/jsx/utils/constants.d.ts +15 -0
  159. package/dist/react/jsx/utils/constants.js +49 -0
  160. package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +9 -0
  161. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +32 -0
  162. package/dist/react/jsx/utils/getPathsAndAliases.d.ts +21 -0
  163. package/dist/react/jsx/utils/getPathsAndAliases.js +91 -0
  164. package/dist/react/jsx/utils/isNumberLiteral.d.ts +7 -0
  165. package/dist/react/jsx/utils/isNumberLiteral.js +13 -0
  166. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +9 -0
  167. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +138 -0
  168. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +6 -0
  169. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +197 -0
  170. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +13 -0
  171. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +42 -0
  172. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +5 -0
  173. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +69 -0
  174. package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +33 -0
  175. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +918 -0
  176. package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +8 -0
  177. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +65 -0
  178. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +2 -0
  179. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +61 -0
  180. package/dist/react/jsx/utils/jsxParsing/types.d.ts +48 -0
  181. package/dist/react/jsx/utils/jsxParsing/types.js +34 -0
  182. package/dist/react/jsx/utils/mapAttributeName.d.ts +11 -0
  183. package/dist/react/jsx/utils/mapAttributeName.js +12 -0
  184. package/dist/react/jsx/utils/parseAst.d.ts +31 -0
  185. package/dist/react/jsx/utils/parseAst.js +278 -0
  186. package/dist/react/jsx/utils/parseDeclareStatic.d.ts +15 -0
  187. package/dist/react/jsx/utils/parseDeclareStatic.js +540 -0
  188. package/dist/react/jsx/utils/parseString.d.ts +25 -0
  189. package/dist/react/jsx/utils/parseString.js +540 -0
  190. package/dist/react/jsx/utils/parseStringFunction.d.ts +30 -0
  191. package/dist/react/jsx/utils/parseStringFunction.js +348 -0
  192. package/dist/react/jsx/utils/resolveImportPath.d.ts +11 -0
  193. package/dist/react/jsx/utils/resolveImportPath.js +111 -0
  194. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +29 -0
  195. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +86 -0
  196. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +14 -0
  197. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +24 -0
  198. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +19 -0
  199. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +31 -0
  200. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +22 -0
  201. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +51 -0
  202. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +18 -0
  203. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +39 -0
  204. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +24 -0
  205. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +68 -0
  206. package/dist/react/jsx/utils/stringParsing/types.d.ts +41 -0
  207. package/dist/react/jsx/utils/stringParsing/types.js +1 -0
  208. package/dist/react/jsx/utils/types.d.ts +14 -0
  209. package/dist/react/jsx/utils/types.js +1 -0
  210. package/dist/react/jsx/utils/validateStringFunction.d.ts +7 -0
  211. package/dist/react/jsx/utils/validateStringFunction.js +31 -0
  212. package/dist/react/jsx/wrapJsx.d.ts +51 -0
  213. package/dist/react/jsx/wrapJsx.js +387 -0
  214. package/dist/react/parse/addVitePlugin/index.d.ts +22 -0
  215. package/dist/react/parse/addVitePlugin/index.js +41 -0
  216. package/dist/react/parse/addVitePlugin/installCompiler.d.ts +8 -0
  217. package/dist/react/parse/addVitePlugin/installCompiler.js +22 -0
  218. package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +19 -0
  219. package/dist/react/parse/addVitePlugin/updateViteConfig.js +120 -0
  220. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +9 -0
  221. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +34 -0
  222. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +11 -0
  223. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +48 -0
  224. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +15 -0
  225. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +113 -0
  226. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +12 -0
  227. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +32 -0
  228. package/dist/react/parse/createDictionaryUpdates.d.ts +3 -0
  229. package/dist/react/parse/createDictionaryUpdates.js +187 -0
  230. package/dist/react/parse/createInlineUpdates.d.ts +13 -0
  231. package/dist/react/parse/createInlineUpdates.js +161 -0
  232. package/dist/react/parse/wrapContent.d.ts +12 -0
  233. package/dist/react/parse/wrapContent.js +162 -0
  234. package/dist/react/utils/flattenDictionary.d.ts +20 -0
  235. package/dist/react/utils/flattenDictionary.js +75 -0
  236. package/dist/react/utils/getEntryAndMetadata.d.ts +5 -0
  237. package/dist/react/utils/getEntryAndMetadata.js +11 -0
  238. package/dist/react/utils/getVariableName.d.ts +25 -0
  239. package/dist/react/utils/getVariableName.js +37 -0
  240. package/dist/setup/agentInstructions.d.ts +24 -0
  241. package/dist/setup/agentInstructions.js +138 -0
  242. package/dist/setup/detectFramework.d.ts +31 -0
  243. package/dist/setup/detectFramework.js +106 -0
  244. package/dist/setup/frameworkUtils.d.ts +3 -0
  245. package/dist/setup/frameworkUtils.js +30 -0
  246. package/dist/setup/instructions/base.md +29 -0
  247. package/dist/setup/instructions/gt-next.md +107 -0
  248. package/dist/setup/instructions/gt-react.md +98 -0
  249. package/dist/setup/userInput.d.ts +4 -0
  250. package/dist/setup/userInput.js +32 -0
  251. package/dist/setup/wizard.d.ts +3 -0
  252. package/dist/setup/wizard.js +147 -0
  253. package/dist/state/recentDownloads.d.ts +12 -0
  254. package/dist/state/recentDownloads.js +18 -0
  255. package/dist/state/translateWarnings.d.ts +10 -0
  256. package/dist/state/translateWarnings.js +13 -0
  257. package/dist/translation/parse.d.ts +17 -0
  258. package/dist/translation/parse.js +77 -0
  259. package/dist/translation/stage.d.ts +3 -0
  260. package/dist/translation/stage.js +44 -0
  261. package/dist/translation/validate.d.ts +14 -0
  262. package/dist/translation/validate.js +100 -0
  263. package/dist/types/branch.d.ts +14 -0
  264. package/dist/types/branch.js +1 -0
  265. package/dist/types/data/json.d.ts +6 -0
  266. package/dist/types/data/json.js +1 -0
  267. package/dist/types/data.d.ts +37 -0
  268. package/dist/types/data.js +1 -0
  269. package/dist/types/files.d.ts +8 -0
  270. package/dist/types/files.js +1 -0
  271. package/dist/types/index.d.ts +243 -0
  272. package/dist/types/index.js +1 -0
  273. package/dist/types/libraries.d.ts +31 -0
  274. package/dist/types/libraries.js +72 -0
  275. package/dist/types/parsing.d.ts +3 -0
  276. package/dist/types/parsing.js +1 -0
  277. package/dist/utils/addExplicitAnchorIds.d.ts +24 -0
  278. package/dist/utils/addExplicitAnchorIds.js +416 -0
  279. package/dist/utils/constants.d.ts +5 -0
  280. package/dist/utils/constants.js +6 -0
  281. package/dist/utils/credentials.d.ts +12 -0
  282. package/dist/utils/credentials.js +120 -0
  283. package/dist/utils/flattenJsonFiles.d.ts +2 -0
  284. package/dist/utils/flattenJsonFiles.js +36 -0
  285. package/dist/utils/gitDiff.d.ts +8 -0
  286. package/dist/utils/gitDiff.js +34 -0
  287. package/dist/utils/gt.d.ts +2 -0
  288. package/dist/utils/gt.js +2 -0
  289. package/dist/utils/hash.d.ts +6 -0
  290. package/dist/utils/hash.js +11 -0
  291. package/dist/utils/headers.d.ts +1 -0
  292. package/dist/utils/headers.js +14 -0
  293. package/dist/utils/installPackage.d.ts +3 -0
  294. package/dist/utils/installPackage.js +77 -0
  295. package/dist/utils/localizeRelativeAssets.d.ts +8 -0
  296. package/dist/utils/localizeRelativeAssets.js +166 -0
  297. package/dist/utils/localizeStaticImports.d.ts +15 -0
  298. package/dist/utils/localizeStaticImports.js +397 -0
  299. package/dist/utils/localizeStaticUrls.d.ts +19 -0
  300. package/dist/utils/localizeStaticUrls.js +450 -0
  301. package/dist/utils/mintlifyTitleFallback.d.ts +6 -0
  302. package/dist/utils/mintlifyTitleFallback.js +80 -0
  303. package/dist/utils/packageInfo.d.ts +3 -0
  304. package/dist/utils/packageInfo.js +17 -0
  305. package/dist/utils/packageJson.d.ts +6 -0
  306. package/dist/utils/packageJson.js +68 -0
  307. package/dist/utils/packageManager.d.ts +28 -0
  308. package/dist/utils/packageManager.js +269 -0
  309. package/dist/utils/parse/needsCJS.d.ts +20 -0
  310. package/dist/utils/parse/needsCJS.js +72 -0
  311. package/dist/utils/persistPostprocessHashes.d.ts +12 -0
  312. package/dist/utils/persistPostprocessHashes.js +39 -0
  313. package/dist/utils/processAnchorIds.d.ts +6 -0
  314. package/dist/utils/processAnchorIds.js +56 -0
  315. package/dist/utils/processOpenApi.d.ts +8 -0
  316. package/dist/utils/processOpenApi.js +651 -0
  317. package/dist/utils/sanitizeFileContent.d.ts +6 -0
  318. package/dist/utils/sanitizeFileContent.js +29 -0
  319. package/dist/utils/sharedStaticAssets.d.ts +9 -0
  320. package/dist/utils/sharedStaticAssets.js +384 -0
  321. package/dist/utils/validateMdx.d.ts +10 -0
  322. package/dist/utils/validateMdx.js +25 -0
  323. package/dist/utils/wrapPlainUrls.d.ts +8 -0
  324. package/dist/utils/wrapPlainUrls.js +72 -0
  325. package/dist/workflows/download.d.ts +32 -0
  326. package/dist/workflows/download.js +131 -0
  327. package/dist/workflows/enqueue.d.ts +17 -0
  328. package/dist/workflows/enqueue.js +59 -0
  329. package/dist/workflows/setupProject.d.ts +13 -0
  330. package/dist/workflows/setupProject.js +48 -0
  331. package/dist/workflows/stage.d.ts +18 -0
  332. package/dist/workflows/stage.js +59 -0
  333. package/dist/workflows/steps/BranchStep.d.ts +13 -0
  334. package/dist/workflows/steps/BranchStep.js +161 -0
  335. package/dist/workflows/steps/DownloadStep.d.ts +19 -0
  336. package/dist/workflows/steps/DownloadStep.js +131 -0
  337. package/dist/workflows/steps/EnqueueStep.d.ts +15 -0
  338. package/dist/workflows/steps/EnqueueStep.js +33 -0
  339. package/dist/workflows/steps/PollJobsStep.d.ts +31 -0
  340. package/dist/workflows/steps/PollJobsStep.js +288 -0
  341. package/dist/workflows/steps/SetupStep.d.ts +16 -0
  342. package/dist/workflows/steps/SetupStep.js +72 -0
  343. package/dist/workflows/steps/UploadSourcesStep.d.ts +27 -0
  344. package/dist/workflows/steps/UploadSourcesStep.js +131 -0
  345. package/dist/workflows/steps/UploadTranslationsStep.d.ts +22 -0
  346. package/dist/workflows/steps/UploadTranslationsStep.js +71 -0
  347. package/dist/workflows/steps/UserEditDiffsStep.d.ts +11 -0
  348. package/dist/workflows/steps/UserEditDiffsStep.js +30 -0
  349. package/dist/workflows/steps/WorkflowStep.d.ts +4 -0
  350. package/dist/workflows/steps/WorkflowStep.js +2 -0
  351. package/dist/workflows/upload.d.ts +15 -0
  352. package/dist/workflows/upload.js +47 -0
  353. package/package.json +149 -112
  354. package/.dont-break +0 -6
  355. package/.jshintrc +0 -76
  356. package/.npmignore +0 -9
  357. package/.travis.yml +0 -21
  358. package/Gruntfile.js +0 -65
  359. package/History.md +0 -90
  360. package/MIT-License.txt +0 -21
  361. package/bin/gt.js +0 -58
  362. package/complexity.json +0 -17
  363. package/doc/RequireJsExample.md +0 -10
  364. package/examples/all.js +0 -72
  365. package/examples/altAsserrionSyntax/tests.js +0 -32
  366. package/examples/amd/bar.js +0 -4
  367. package/examples/amd/foo.js +0 -15
  368. package/examples/amd/fooTests.js +0 -8
  369. package/examples/arrays/test.js +0 -15
  370. package/examples/assert/test-assert-object.js +0 -15
  371. package/examples/assert/test-assert-require.js +0 -17
  372. package/examples/async/asyncAll.js +0 -37
  373. package/examples/async/asyncSetup.js +0 -29
  374. package/examples/async/asyncSetupOnce.js +0 -25
  375. package/examples/async/asyncTeardown.js +0 -27
  376. package/examples/async/stopStart.js +0 -22
  377. package/examples/async/test.js +0 -43
  378. package/examples/async/timeoutTests.js +0 -19
  379. package/examples/basic/code.js +0 -50
  380. package/examples/basic/code2.js +0 -9
  381. package/examples/basic/default.js +0 -26
  382. package/examples/basic/definedUndefined.js +0 -28
  383. package/examples/basic/empty.js +0 -24
  384. package/examples/basic/exceptionTests.js +0 -55
  385. package/examples/basic/fullMessage.js +0 -28
  386. package/examples/basic/functions.js +0 -18
  387. package/examples/basic/incomplete.js +0 -16
  388. package/examples/basic/null.js +0 -17
  389. package/examples/basic/optional.js +0 -45
  390. package/examples/basic/tests.js +0 -147
  391. package/examples/bdd/spec.js +0 -67
  392. package/examples/browser/code_coverage_report.json +0 -1
  393. package/examples/browser/index.html +0 -50
  394. package/examples/browser/packages.js +0 -12
  395. package/examples/browser/packagesDefault.js +0 -12
  396. package/examples/browser/qunit/qunit-1.10.0.css +0 -235
  397. package/examples/browser/qunit/qunit-1.10.0.js +0 -1977
  398. package/examples/browser/runTestsWithCoverage.bat +0 -19
  399. package/examples/browser/runner.js +0 -178
  400. package/examples/browser/src/Foo.js +0 -14
  401. package/examples/browser/srcInstrumented/Foo.js +0 -6
  402. package/examples/browser/test/FooTest.js +0 -31
  403. package/examples/browser/testDojo.js +0 -63
  404. package/examples/browser/testInstrumented/FooTest.js +0 -6
  405. package/examples/coffee/coffeeTestsCoffee/foo.coffee +0 -4
  406. package/examples/coffee/coffeeTestsCoffee/tests.coffee +0 -7
  407. package/examples/coffee/coffeeTestsJs/foo.js +0 -9
  408. package/examples/coffee/coffeeTestsJs/tests.coffee +0 -9
  409. package/examples/coffee/jsTestsCoffee/foo.coffee +0 -4
  410. package/examples/coffee/jsTestsCoffee/tests.js +0 -8
  411. package/examples/coverage.png +0 -0
  412. package/examples/crash/foo.js +0 -8
  413. package/examples/crashOnLoading/foo.js +0 -3
  414. package/examples/crashStackSize/foo.js +0 -8
  415. package/examples/crashStackSize/test.js +0 -7
  416. package/examples/doh/foo.js +0 -15
  417. package/examples/doh/fooTests.js +0 -28
  418. package/examples/dohDefine/foo.js +0 -14
  419. package/examples/dohDefine/fooTests.js +0 -24
  420. package/examples/dojo/src/Foo.js +0 -12
  421. package/examples/dojo/test/FooTest.js +0 -9
  422. package/examples/dojo/testDojo.js +0 -69
  423. package/examples/equiv/equiv.js +0 -22
  424. package/examples/example.png +0 -0
  425. package/examples/exec/foo.js +0 -5
  426. package/examples/exec/tests.js +0 -50
  427. package/examples/expect/test.js +0 -53
  428. package/examples/extend/extend-through-api.js +0 -40
  429. package/examples/extend/test.js +0 -18
  430. package/examples/faster/fibonacci.js +0 -18
  431. package/examples/faster/test.js +0 -89
  432. package/examples/fluent/foo.js +0 -38
  433. package/examples/funcAndArity/test.js +0 -15
  434. package/examples/gtAndQUnit/gtTests.js +0 -6
  435. package/examples/gtAndQUnit/qunitTests.js +0 -5
  436. package/examples/jsUnity/foo.js +0 -10
  437. package/examples/jsUnity/fooTests.js +0 -19
  438. package/examples/lodash/totalLength.js +0 -19
  439. package/examples/longStrings/test.js +0 -27
  440. package/examples/moduleSetupTeardown/test.js +0 -115
  441. package/examples/namedTest/foo.js +0 -9
  442. package/examples/overrideGt/test.js +0 -11
  443. package/examples/quickFail/test.js +0 -22
  444. package/examples/qunit/foo.js +0 -13
  445. package/examples/reporting/tests.coffee +0 -9
  446. package/examples/requirejs/lib/Foo.js +0 -11
  447. package/examples/requirejs/lib/Rectangle.js +0 -13
  448. package/examples/requirejs/runTests.js +0 -5
  449. package/examples/requirejs/test/RectangleTest.js +0 -22
  450. package/examples/silent/foo.js +0 -7
  451. package/examples/silent/fooTest.js +0 -18
  452. package/examples/skipTest/tests.js +0 -15
  453. package/examples/testsFromOtherTests/parentTests.js +0 -7
  454. package/examples/testsFromOtherTests/tests.js +0 -5
  455. package/examples/throws/test.js +0 -17
  456. package/examples/use-gt-as-module/fooTest.js +0 -8
  457. package/examples/use-gt-as-module/test-code.js +0 -7
  458. package/gt.js +0 -11
  459. package/lib/coverage.js +0 -234
  460. package/src/JUnitReporter.js +0 -30
  461. package/src/QUnitBrowserAdapter.js +0 -15
  462. package/src/Reporter.js +0 -127
  463. package/src/TestRunInfo.js +0 -25
  464. package/src/TestRunner.js +0 -223
  465. package/src/UnitTest/CollectionMethods.js +0 -97
  466. package/src/UnitTest/ModuleTests.js +0 -104
  467. package/src/UnitTest/Test.js +0 -85
  468. package/src/UnitTest/TestAsync.js +0 -78
  469. package/src/UnitTest/TestBaseInfo.js +0 -21
  470. package/src/UnitTest/TestCollection.js +0 -206
  471. package/src/UnitTest/TestInfo.js +0 -30
  472. package/src/UnitTest/TestReport.js +0 -27
  473. package/src/assertions/PrimaryAssertions.js +0 -163
  474. package/src/assertions/SecondaryAssertions.js +0 -262
  475. package/src/assertions/TertiaryAssertions.js +0 -99
  476. package/src/bddInterface.js +0 -39
  477. package/src/covered.js +0 -156
  478. package/src/dohAdapter.js +0 -79
  479. package/src/dohInterface.js +0 -20
  480. package/src/equiv.js +0 -11
  481. package/src/jsunityAdapter.js +0 -66
  482. package/src/jsunityInterface.js +0 -13
  483. package/src/options.js +0 -116
  484. package/src/shiv.js +0 -16
  485. package/src/sure.js +0 -226
  486. package/src/test/ConsoleHider.js +0 -26
  487. package/src/test/JUnitReporter.js +0 -12
  488. package/src/test/ModuleTests.js +0 -37
  489. package/src/test/Test.js +0 -18
  490. package/src/test/TestCollection.js +0 -21
  491. package/src/test/TestRunInfo.js +0 -15
  492. package/src/test/TestRunner.js +0 -9
  493. package/src/test/utils.js +0 -43
  494. package/src/utils/ConsoleHider.js +0 -27
  495. package/src/utils/WatchFiles.js +0 -13
  496. package/src/utils/discoverFiles.js +0 -18
  497. package/src/utils/joinArguments.js +0 -13
  498. package/src/utils/not.js +0 -14
  499. package/src/utils/pluckFunction.js +0 -15
  500. package/src/utils/test/joinArgumentsTest.js +0 -24
  501. package/src/utils/test/not.js +0 -70
  502. package/src/utils/test/pluckFunctionLoDashTest.js +0 -51
  503. package/src/utils/test/pluckFunctionTest.js +0 -41
  504. package/src/utils/test/pluckObjects.js +0 -20
  505. package/src/utils/utils.js +0 -146
  506. package/tests/all.js +0 -24
  507. package/tests/large/bddTest.js +0 -9
  508. package/tests/large/expectedCrash.js +0 -3
  509. package/tests/large/expectedCrashTest.js +0 -9
  510. package/tests/large/filterCLI.js +0 -10
  511. package/tests/large/filterCLITest.js +0 -18
  512. package/tests/large/loadingCrash.js +0 -1
  513. package/tests/large/loadingCrashTest.js +0 -9
  514. package/tests/large/skip.js +0 -11
  515. package/tests/large/skipTest.js +0 -9
  516. package/tests/large/twoFailing.js +0 -9
  517. package/tests/large/twoFailingTest.js +0 -9
  518. package/tests/mocha/.npmignore +0 -1
  519. package/tests/mocha/basic.js +0 -12
  520. package/tests/mocha/gt-as-module.js +0 -65
  521. package/tests/mocha/test-collection.js +0 -67
  522. package/tests/small/errorInAsync.js +0 -6
  523. package/tests/small/errorInAsyncTest.js +0 -14
  524. package/tests/small/oneFails.js +0 -7
  525. package/tests/small/oneFailsTest.js +0 -18
  526. package/tests/small/pluckObjects.js +0 -20
  527. package/tests/small/pluckTest.js +0 -51
  528. package/tests/small/setupException.js +0 -8
  529. package/tests/small/setupExceptionTest.js +0 -9
  530. package/tests/small/teardownException.js +0 -8
  531. package/tests/small/teardownExceptionTest.js +0 -9
@@ -0,0 +1,19 @@
1
+ import { Settings } from '../types/index.js';
2
+ /**
3
+ * Localizes static urls in content files.
4
+ * Currently only supported for md and mdx files. (/docs/ -> /[locale]/docs/)
5
+ * @param settings - The settings object containing the project configuration.
6
+ * @returns void
7
+ *
8
+ * @TODO This is an experimental feature, and only works in very specific cases. This needs to be improved before
9
+ * it can be enabled by default.
10
+ *
11
+ * Before this becomes a non-experimental feature, we need to:
12
+ * - Support more file types
13
+ * - Support more complex paths
14
+ */
15
+ export default function localizeStaticUrls(settings: Settings, targetLocales?: string[], includeFiles?: Set<string>): Promise<void>;
16
+ /**
17
+ * Main URL transformation function that delegates to specific scenarios
18
+ */
19
+ export declare function transformUrlPath(originalUrl: string, patternHead: string, targetLocale: string, defaultLocale: string, hideDefaultLocale: boolean): string | null;
@@ -0,0 +1,450 @@
1
+ import * as fs from 'fs';
2
+ import { createFileMapping } from '../formats/files/fileMapping.js';
3
+ import micromatch from 'micromatch';
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
+ const { isMatch } = micromatch;
12
+ /**
13
+ * Localizes static urls in content files.
14
+ * Currently only supported for md and mdx files. (/docs/ -> /[locale]/docs/)
15
+ * @param settings - The settings object containing the project configuration.
16
+ * @returns void
17
+ *
18
+ * @TODO This is an experimental feature, and only works in very specific cases. This needs to be improved before
19
+ * it can be enabled by default.
20
+ *
21
+ * Before this becomes a non-experimental feature, we need to:
22
+ * - Support more file types
23
+ * - Support more complex paths
24
+ */
25
+ export default async function localizeStaticUrls(settings, targetLocales, includeFiles) {
26
+ if (!settings.files ||
27
+ (Object.keys(settings.files.placeholderPaths).length === 1 &&
28
+ settings.files.placeholderPaths.gt)) {
29
+ return;
30
+ }
31
+ const { resolvedPaths: sourceFiles } = settings.files;
32
+ // Use filtered locales if provided, otherwise use all locales
33
+ const locales = targetLocales || settings.locales;
34
+ const fileMapping = createFileMapping(sourceFiles, settings.files.placeholderPaths, settings.files.transformPaths, settings.locales, // Always use all locales for mapping, filter later
35
+ settings.defaultLocale);
36
+ // Process all file types at once with a single call
37
+ const processPromises = [];
38
+ // First, process default locale files (from source files)
39
+ // This is needed because they might not be in the fileMapping if they're not being translated
40
+ // Only process default locale if it's in the target locales filter
41
+ if (!fileMapping[settings.defaultLocale] &&
42
+ locales.includes(settings.defaultLocale) &&
43
+ !includeFiles // when filtering, skip default-locale pass
44
+ ) {
45
+ const defaultLocaleFiles = [];
46
+ // Collect all .md and .mdx files from sourceFiles
47
+ if (sourceFiles.md) {
48
+ defaultLocaleFiles.push(...sourceFiles.md);
49
+ }
50
+ if (sourceFiles.mdx) {
51
+ defaultLocaleFiles.push(...sourceFiles.mdx);
52
+ }
53
+ if (defaultLocaleFiles.length > 0) {
54
+ const defaultPromise = Promise.all(defaultLocaleFiles.map(async (filePath) => {
55
+ // Check if file exists before processing
56
+ if (!fs.existsSync(filePath)) {
57
+ return;
58
+ }
59
+ // Get file content
60
+ const fileContent = await fs.promises.readFile(filePath, 'utf8');
61
+ // Localize the file using default locale
62
+ const result = localizeStaticUrlsForFile(fileContent, settings.defaultLocale, settings.defaultLocale, // Process as default locale
63
+ settings.options?.experimentalHideDefaultLocale || false, settings.options?.docsUrlPattern, settings.options?.excludeStaticUrls, settings.options?.baseDomain);
64
+ // Only write the file if there were changes
65
+ if (result.hasChanges) {
66
+ await fs.promises.writeFile(filePath, result.content);
67
+ }
68
+ }));
69
+ processPromises.push(defaultPromise);
70
+ }
71
+ }
72
+ // Then process all other locales from fileMapping
73
+ const mappingPromises = Object.entries(fileMapping)
74
+ .filter(([locale, filesMap]) => locales.includes(locale)) // Filter by target locales
75
+ .map(async ([locale, filesMap]) => {
76
+ // Get all files that are md or mdx
77
+ const targetFiles = Object.values(filesMap).filter((p) => (p.endsWith('.md') || p.endsWith('.mdx')) &&
78
+ (!includeFiles || includeFiles.has(p)));
79
+ // Replace the placeholder path with the target path
80
+ await Promise.all(targetFiles.map(async (filePath) => {
81
+ // Check if file exists before processing
82
+ if (!fs.existsSync(filePath)) {
83
+ return;
84
+ }
85
+ // Get file content
86
+ const fileContent = await fs.promises.readFile(filePath, 'utf8');
87
+ // Localize the file (handles both URLs and hrefs in single AST pass)
88
+ const result = localizeStaticUrlsForFile(fileContent, settings.defaultLocale, locale, settings.options?.experimentalHideDefaultLocale || false, settings.options?.docsUrlPattern, settings.options?.excludeStaticUrls, settings.options?.baseDomain);
89
+ // Only write the file if there were changes
90
+ if (result.hasChanges) {
91
+ await fs.promises.writeFile(filePath, result.content);
92
+ }
93
+ }));
94
+ });
95
+ processPromises.push(...mappingPromises);
96
+ await Promise.all(processPromises);
97
+ }
98
+ /**
99
+ * Determines if a URL should be processed based on pattern matching
100
+ */
101
+ function shouldProcessUrl(originalUrl, patternHead, targetLocale, defaultLocale, baseDomain) {
102
+ // Check fragment-only URLs like "#id-name"
103
+ if (/^\s*#/.test(originalUrl)) {
104
+ return false;
105
+ }
106
+ const patternWithoutSlash = patternHead.replace(/\/$/, '');
107
+ // Handle absolute URLs with baseDomain
108
+ let urlToCheck = originalUrl;
109
+ if (baseDomain && originalUrl.startsWith(baseDomain)) {
110
+ urlToCheck = originalUrl.substring(baseDomain.length);
111
+ }
112
+ if (targetLocale === defaultLocale) {
113
+ // For default locale processing, check if URL contains the pattern
114
+ return urlToCheck.includes(patternWithoutSlash);
115
+ }
116
+ else {
117
+ // For non-default locales, check if URL starts with pattern
118
+ return urlToCheck.startsWith(patternWithoutSlash);
119
+ }
120
+ }
121
+ /**
122
+ * Determines if a URL should be processed based on the base domain
123
+ */
124
+ function shouldProcessAbsoluteUrl(originalUrl, baseDomain) {
125
+ return originalUrl.startsWith(baseDomain);
126
+ }
127
+ /**
128
+ * Checks if a URL should be excluded based on exclusion patterns
129
+ */
130
+ function isUrlExcluded(originalUrl, exclude, defaultLocale) {
131
+ const excludePatterns = exclude.map((p) => p.replace(/\[locale\]/g, defaultLocale));
132
+ return excludePatterns.some((pattern) => isMatch(originalUrl, pattern));
133
+ }
134
+ /**
135
+ * Main URL transformation function that delegates to specific scenarios
136
+ */
137
+ export function transformUrlPath(originalUrl, patternHead, targetLocale, defaultLocale, hideDefaultLocale) {
138
+ const originalPathArray = originalUrl
139
+ .split('/')
140
+ .filter((path) => path !== '');
141
+ const patternHeadArray = patternHead.split('/').filter((path) => path !== '');
142
+ // check if the pattern head matches the original path
143
+ if (!checkIfPathMatchesPattern(originalPathArray, patternHeadArray)) {
144
+ return null;
145
+ }
146
+ if (patternHeadArray.length > originalPathArray.length) {
147
+ return null; // Pattern is longer than the URL path
148
+ }
149
+ let result = null;
150
+ if (targetLocale === defaultLocale) {
151
+ if (hideDefaultLocale) {
152
+ // check if default locale is already present
153
+ if (originalPathArray?.[patternHeadArray.length] !== defaultLocale) {
154
+ return null;
155
+ }
156
+ // remove default locale
157
+ const newPathArray = [
158
+ ...originalPathArray.slice(0, patternHeadArray.length),
159
+ ...originalPathArray.slice(patternHeadArray.length + 1),
160
+ ];
161
+ result = newPathArray.join('/');
162
+ }
163
+ else {
164
+ // check if default locale is already present
165
+ if (originalPathArray?.[patternHeadArray.length] === defaultLocale) {
166
+ return null;
167
+ }
168
+ // insert default locale
169
+ const newPathArray = [
170
+ ...originalPathArray.slice(0, patternHeadArray.length),
171
+ defaultLocale,
172
+ ...originalPathArray.slice(patternHeadArray.length),
173
+ ];
174
+ result = newPathArray.join('/');
175
+ }
176
+ }
177
+ else if (hideDefaultLocale) {
178
+ // Avoid duplicating target locale if already present
179
+ if (originalPathArray?.[patternHeadArray.length] === targetLocale) {
180
+ return null;
181
+ }
182
+ const newPathArray = [
183
+ ...originalPathArray.slice(0, patternHeadArray.length),
184
+ targetLocale,
185
+ ...originalPathArray.slice(patternHeadArray.length),
186
+ ];
187
+ result = newPathArray.join('/');
188
+ }
189
+ else {
190
+ // check default locale
191
+ if (originalPathArray?.[patternHeadArray.length] !== defaultLocale) {
192
+ return null;
193
+ }
194
+ // replace default locale with target locale
195
+ const newPathArray = [...originalPathArray];
196
+ newPathArray[patternHeadArray.length] = targetLocale;
197
+ result = newPathArray.join('/');
198
+ }
199
+ // check for leading and trailing slashes
200
+ if (originalUrl.startsWith('/')) {
201
+ result = '/' + result;
202
+ }
203
+ if (originalUrl.endsWith('/')) {
204
+ result = result + '/';
205
+ }
206
+ return result;
207
+ }
208
+ /**
209
+ * AST-based transformation for MDX files using remark-mdx
210
+ */
211
+ function transformMdxUrls(mdxContent, defaultLocale, targetLocale, hideDefaultLocale, pattern = '/[locale]', exclude = [], baseDomain) {
212
+ const transformedUrls = [];
213
+ if (!pattern.startsWith('/')) {
214
+ pattern = '/' + pattern;
215
+ }
216
+ const patternHead = pattern.split('[locale]')[0];
217
+ // Quick check: if the file doesn't contain the pattern, skip expensive AST parsing
218
+ // For default locale processing, we also need to check if content might need adjustment
219
+ if (targetLocale === defaultLocale) {
220
+ // For default locale files, we always need to check as we're looking for either:
221
+ // - paths without locale (when hideDefaultLocale=false)
222
+ // - paths with default locale (when hideDefaultLocale=true)
223
+ const patternWithoutSlash = patternHead.replace(/\/$/, '');
224
+ if (!mdxContent.includes(patternWithoutSlash)) {
225
+ return {
226
+ content: mdxContent,
227
+ hasChanges: false,
228
+ transformedUrls: [],
229
+ };
230
+ }
231
+ }
232
+ else {
233
+ // For non-default locales, use the original logic
234
+ if (!mdxContent.includes(patternHead.replace(/\/$/, ''))) {
235
+ return {
236
+ content: mdxContent,
237
+ hasChanges: false,
238
+ transformedUrls: [],
239
+ };
240
+ }
241
+ }
242
+ // Parse the MDX content into an AST
243
+ let processedAst;
244
+ try {
245
+ const parseProcessor = unified()
246
+ .use(remarkParse)
247
+ .use(remarkFrontmatter, ['yaml', 'toml'])
248
+ .use(remarkMdx);
249
+ const ast = parseProcessor.parse(mdxContent);
250
+ processedAst = parseProcessor.runSync(ast);
251
+ }
252
+ catch {
253
+ return {
254
+ content: mdxContent,
255
+ hasChanges: false,
256
+ transformedUrls,
257
+ };
258
+ }
259
+ // Helper function to transform URL based on pattern
260
+ const transformUrl = (originalUrl, linkType) => {
261
+ // For Markdown links [text](path), only process absolute-root paths starting with '/'
262
+ // Relative markdown links should remain relative to the current page and not be localized.
263
+ if (linkType === 'markdown') {
264
+ const isFragment = /^\s*#/.test(originalUrl);
265
+ const isAbsoluteRoot = originalUrl.startsWith('/');
266
+ const looksAbsoluteWithDomain = baseDomain
267
+ ? shouldProcessAbsoluteUrl(originalUrl, baseDomain)
268
+ : false;
269
+ if (!isAbsoluteRoot && !looksAbsoluteWithDomain && !isFragment) {
270
+ return null;
271
+ }
272
+ }
273
+ // Check if URL should be processed
274
+ if (!shouldProcessUrl(originalUrl, patternHead, targetLocale, defaultLocale, baseDomain)) {
275
+ return null;
276
+ }
277
+ // Skip absolute URLs (http://, https://, //, etc.)
278
+ if (baseDomain && shouldProcessAbsoluteUrl(originalUrl, baseDomain)) {
279
+ // Get everything after the base domain
280
+ const afterDomain = originalUrl.substring(baseDomain.length);
281
+ const transformedPath = transformUrlPath(afterDomain, patternHead, targetLocale, defaultLocale, hideDefaultLocale);
282
+ if (!transformedPath) {
283
+ return null;
284
+ }
285
+ transformedUrls.push({
286
+ originalPath: originalUrl,
287
+ newPath: transformedPath,
288
+ type: linkType,
289
+ });
290
+ return transformedPath ? baseDomain + transformedPath : null;
291
+ }
292
+ // Exclude colon-prefixed URLs (http://, https://, //, etc.)
293
+ if (originalUrl.split('?')[0].includes(':')) {
294
+ return null;
295
+ }
296
+ // Transform the URL based on locale and configuration
297
+ const newUrl = transformUrlPath(originalUrl, patternHead, targetLocale, defaultLocale, hideDefaultLocale);
298
+ if (!newUrl) {
299
+ return null;
300
+ }
301
+ // Check exclusions
302
+ if (isUrlExcluded(originalUrl, exclude, defaultLocale)) {
303
+ return null;
304
+ }
305
+ transformedUrls.push({
306
+ originalPath: originalUrl,
307
+ newPath: newUrl,
308
+ type: linkType,
309
+ });
310
+ return newUrl;
311
+ };
312
+ // Visit markdown link nodes: [text](url)
313
+ visit(processedAst, 'link', (node) => {
314
+ if (node.url) {
315
+ const newUrl = transformUrl(node.url, 'markdown');
316
+ if (newUrl) {
317
+ node.url = newUrl;
318
+ }
319
+ }
320
+ });
321
+ // Visit JSX/HTML elements for href attributes: <a href="url"> or <Card href="url">
322
+ visit(processedAst, ['mdxJsxFlowElement', 'mdxJsxTextElement'], (node) => {
323
+ const jsxNode = node;
324
+ if (jsxNode.attributes) {
325
+ for (const attr of jsxNode.attributes) {
326
+ if (attr.type === 'mdxJsxAttribute' &&
327
+ attr.name === 'href' &&
328
+ attr.value) {
329
+ // Handle MdxJsxAttribute with string or MdxJsxAttributeValueExpression
330
+ const hrefValue = typeof attr.value === 'string' ? attr.value : attr.value.value;
331
+ if (typeof hrefValue === 'string') {
332
+ const newUrl = transformUrl(hrefValue, 'href');
333
+ if (newUrl) {
334
+ if (typeof attr.value === 'string') {
335
+ attr.value = newUrl;
336
+ }
337
+ else {
338
+ attr.value.value = newUrl;
339
+ }
340
+ }
341
+ }
342
+ }
343
+ }
344
+ }
345
+ });
346
+ // Visit raw JSX nodes for href attributes in JSX strings
347
+ visit(processedAst, 'jsx', (node) => {
348
+ if (node.value && typeof node.value === 'string') {
349
+ const jsxContent = node.value;
350
+ // Use regex to find href attributes in the JSX string
351
+ const hrefRegex = /href\s*=\s*["']([^"']+)["']/g;
352
+ let match;
353
+ const replacements = [];
354
+ // Reset regex lastIndex to avoid issues with global flag
355
+ hrefRegex.lastIndex = 0;
356
+ while ((match = hrefRegex.exec(jsxContent)) !== null) {
357
+ const originalHref = match[1];
358
+ const newUrl = transformUrl(originalHref, 'href');
359
+ if (newUrl) {
360
+ // Store replacement info
361
+ const oldHrefAttr = match[0]; // The full match like 'href="/quickstart"'
362
+ const quote = oldHrefAttr.includes('"') ? '"' : "'";
363
+ const newHrefAttr = `href=${quote}${newUrl}${quote}`;
364
+ replacements.push({
365
+ start: match.index,
366
+ end: match.index + oldHrefAttr.length,
367
+ oldHrefAttr,
368
+ newHrefAttr,
369
+ });
370
+ }
371
+ }
372
+ // Apply replacements in reverse order (from end to start) to avoid position shifts
373
+ if (replacements.length > 0) {
374
+ let newJsxContent = jsxContent;
375
+ replacements
376
+ .sort((a, b) => b.start - a.start)
377
+ .forEach(({ start, end, newHrefAttr }) => {
378
+ newJsxContent =
379
+ newJsxContent.slice(0, start) +
380
+ newHrefAttr +
381
+ newJsxContent.slice(end);
382
+ });
383
+ node.value = newJsxContent;
384
+ }
385
+ }
386
+ });
387
+ // Convert the modified AST back to MDX string
388
+ let content;
389
+ try {
390
+ const stringifyProcessor = unified()
391
+ .use(remarkFrontmatter, ['yaml', 'toml'])
392
+ .use(remarkMdx)
393
+ .use(normalizeCJKCharacters)
394
+ .use(escapeHtmlInTextNodes)
395
+ .use(remarkStringify, {
396
+ handlers: {
397
+ // Handler to prevent escaping (avoids '&lt;' -> '\&lt;')
398
+ text(node) {
399
+ return node.value;
400
+ },
401
+ },
402
+ });
403
+ const outTree = stringifyProcessor.runSync(processedAst);
404
+ content = stringifyProcessor.stringify(outTree);
405
+ }
406
+ catch (error) {
407
+ console.warn(`Failed to stringify MDX content: ${error instanceof Error ? error.message : String(error)}`);
408
+ console.warn('Returning original content unchanged due to stringify error.');
409
+ return {
410
+ content: mdxContent,
411
+ hasChanges: false,
412
+ transformedUrls: [],
413
+ };
414
+ }
415
+ // Handle newline formatting to match original input
416
+ if (content.endsWith('\n') && !mdxContent.endsWith('\n')) {
417
+ content = content.slice(0, -1);
418
+ }
419
+ // Preserve leading newlines from original content
420
+ if (mdxContent.startsWith('\n') && !content.startsWith('\n')) {
421
+ content = '\n' + content;
422
+ }
423
+ return {
424
+ content,
425
+ hasChanges: transformedUrls.length > 0,
426
+ transformedUrls,
427
+ };
428
+ }
429
+ // AST-based transformation for MDX files using remark
430
+ function localizeStaticUrlsForFile(file, defaultLocale, targetLocale, hideDefaultLocale, pattern = '/[locale]', // eg /docs/[locale] or /[locale]
431
+ exclude = [], baseDomain) {
432
+ // Use AST-based transformation for MDX files
433
+ return transformMdxUrls(file, defaultLocale, targetLocale, hideDefaultLocale, pattern, exclude, baseDomain || '');
434
+ }
435
+ function cleanPath(path) {
436
+ let cleanedPath = path.startsWith('/') ? path.slice(1) : path;
437
+ cleanedPath = cleanedPath.endsWith('/')
438
+ ? cleanedPath.slice(0, -1)
439
+ : cleanedPath;
440
+ return cleanedPath;
441
+ }
442
+ function checkIfPathMatchesPattern(originalUrlArray, patternHeadArray) {
443
+ // check if the pattern head matches the original path
444
+ for (let i = 0; i < patternHeadArray.length; i++) {
445
+ if (patternHeadArray[i] !== originalUrlArray?.[i]) {
446
+ return false;
447
+ }
448
+ }
449
+ return true;
450
+ }
@@ -0,0 +1,6 @@
1
+ type TitleFallbackResult = {
2
+ content: string;
3
+ addedTitle: boolean;
4
+ };
5
+ export declare function applyMintlifyTitleFallback(content: string, fileName: string, defaultLocale?: string): TitleFallbackResult;
6
+ export {};
@@ -0,0 +1,80 @@
1
+ import path from 'path';
2
+ import YAML from 'yaml';
3
+ const FRONTMATTER_REGEX = /^---\s*\r?\n([\s\S]*?)\r?\n(---|\.\.\.)\s*(?:\r?\n|$)/;
4
+ function toTitleCase(value) {
5
+ return value
6
+ .split(' ')
7
+ .map((word) => {
8
+ if (!word)
9
+ return '';
10
+ return word[0].toUpperCase() + word.slice(1);
11
+ })
12
+ .join(' ');
13
+ }
14
+ function deriveTitleFromFilename(fileName, defaultLocale) {
15
+ const base = path.basename(fileName, path.extname(fileName));
16
+ if (base.toLowerCase() === 'index') {
17
+ const parentDir = path.dirname(fileName);
18
+ if (parentDir === '.' || parentDir === path.sep) {
19
+ return 'Index';
20
+ }
21
+ const parent = path.basename(parentDir);
22
+ if (parent && defaultLocale && parent === defaultLocale) {
23
+ return 'Index';
24
+ }
25
+ if (parent) {
26
+ return toTitleCase(parent.replace(/[-_]+/g, ' ').trim());
27
+ }
28
+ return 'Index';
29
+ }
30
+ const normalized = base.replace(/[-_]+/g, ' ').replace(/\s+/g, ' ').trim();
31
+ if (!normalized) {
32
+ return base;
33
+ }
34
+ return toTitleCase(normalized);
35
+ }
36
+ function hasMeaningfulTitle(value) {
37
+ if (value === null || value === undefined) {
38
+ return false;
39
+ }
40
+ if (typeof value === 'string') {
41
+ return value.trim().length > 0;
42
+ }
43
+ return true;
44
+ }
45
+ export function applyMintlifyTitleFallback(content, fileName, defaultLocale) {
46
+ const inferredTitle = deriveTitleFromFilename(fileName, defaultLocale);
47
+ if (!inferredTitle) {
48
+ return { content, addedTitle: false };
49
+ }
50
+ const hasBom = content.startsWith('\uFEFF');
51
+ const contentBody = hasBom ? content.slice(1) : content;
52
+ const newline = contentBody.includes('\r\n') ? '\r\n' : '\n';
53
+ const frontmatterMatch = contentBody.match(FRONTMATTER_REGEX);
54
+ if (frontmatterMatch) {
55
+ const frontmatterContent = frontmatterMatch[1];
56
+ let parsed;
57
+ try {
58
+ parsed = YAML.parse(frontmatterContent);
59
+ }
60
+ catch {
61
+ return { content, addedTitle: false };
62
+ }
63
+ if (parsed && hasMeaningfulTitle(parsed.title)) {
64
+ return { content, addedTitle: false };
65
+ }
66
+ const titleLine = YAML.stringify({ title: inferredTitle }).trimEnd();
67
+ const headerEndIndex = contentBody.indexOf(newline) + newline.length;
68
+ const updated = contentBody.slice(0, headerEndIndex) +
69
+ titleLine +
70
+ newline +
71
+ contentBody.slice(headerEndIndex);
72
+ return { content: (hasBom ? '\uFEFF' : '') + updated, addedTitle: true };
73
+ }
74
+ const titleLine = YAML.stringify({ title: inferredTitle }).trimEnd();
75
+ const frontmatterBlock = `---${newline}${titleLine}${newline}---${newline}${newline}`;
76
+ return {
77
+ content: (hasBom ? '\uFEFF' : '') + frontmatterBlock + contentBody,
78
+ addedTitle: true,
79
+ };
80
+ }
@@ -0,0 +1,3 @@
1
+ export declare function getPackageInfo(packageName: string): Promise<{
2
+ version: string;
3
+ } | undefined>;
@@ -0,0 +1,17 @@
1
+ import { execSync } from 'child_process';
2
+ export async function getPackageInfo(packageName) {
3
+ try {
4
+ const output = execSync(`npm list -g ${packageName}`, {
5
+ encoding: 'utf8',
6
+ stdio: 'pipe',
7
+ });
8
+ const match = output.match(new RegExp(`${packageName}@([\\d\\.\\w-]+)`));
9
+ if (match && match[1]) {
10
+ return { version: match[1] };
11
+ }
12
+ return undefined;
13
+ }
14
+ catch (error) {
15
+ return undefined;
16
+ }
17
+ }
@@ -0,0 +1,6 @@
1
+ export declare function searchForPackageJson(cwd?: string): Promise<Record<string, any> | null>;
2
+ export declare function getPackageJson(cwd?: string): Promise<Record<string, any> | null>;
3
+ export declare function getCLIVersion(): string;
4
+ export declare function updatePackageJson(packageJson: Record<string, any>, cwd?: string): Promise<void>;
5
+ export declare function isPackageInstalled(packageName: string, packageJson: Record<string, any>, asDevDependency?: boolean, checkBoth?: boolean): boolean;
6
+ export declare function getPackageVersion(packageName: string, packageJson: Record<string, any>): string | undefined;
@@ -0,0 +1,68 @@
1
+ import { logger } from '../console/logger.js';
2
+ import chalk from 'chalk';
3
+ import path from 'node:path';
4
+ import fs from 'node:fs';
5
+ import { exitSync } from '../console/logging.js';
6
+ import { PACKAGE_VERSION } from '../generated/version.js';
7
+ // search for package.json such that we can run init in non-js projects
8
+ export async function searchForPackageJson(cwd = process.cwd()) {
9
+ // Get the current working directory (where the CLI is being run)
10
+ const packageJsonPath = path.join(cwd, 'package.json');
11
+ // Check if package.json exists
12
+ if (!fs.existsSync(packageJsonPath)) {
13
+ return null;
14
+ }
15
+ try {
16
+ return JSON.parse(await fs.promises.readFile(packageJsonPath, 'utf8'));
17
+ }
18
+ catch (error) {
19
+ return null;
20
+ }
21
+ }
22
+ export async function getPackageJson(cwd = process.cwd()) {
23
+ const packageJsonPath = path.join(cwd, 'package.json');
24
+ // Check if package.json exists
25
+ if (!fs.existsSync(packageJsonPath)) {
26
+ return null;
27
+ }
28
+ try {
29
+ return JSON.parse(await fs.promises.readFile(packageJsonPath, 'utf8'));
30
+ }
31
+ catch (error) {
32
+ return null;
33
+ }
34
+ }
35
+ export function getCLIVersion() {
36
+ return PACKAGE_VERSION;
37
+ }
38
+ export async function updatePackageJson(packageJson, cwd = process.cwd()) {
39
+ try {
40
+ await fs.promises.writeFile(path.join(cwd, 'package.json'), JSON.stringify(packageJson, null, 2));
41
+ }
42
+ catch (error) {
43
+ logger.error(chalk.red('Error updating package.json: ' + String(error)));
44
+ exitSync(1);
45
+ }
46
+ }
47
+ // check if a package is installed in the package.json file
48
+ export function isPackageInstalled(packageName, packageJson, asDevDependency = false, checkBoth = false) {
49
+ const dependencies = checkBoth
50
+ ? {
51
+ ...packageJson.devDependencies,
52
+ ...packageJson.dependencies,
53
+ }
54
+ : asDevDependency
55
+ ? packageJson.devDependencies
56
+ : packageJson.dependencies;
57
+ if (!dependencies) {
58
+ return false;
59
+ }
60
+ return dependencies[packageName] !== undefined;
61
+ }
62
+ export function getPackageVersion(packageName, packageJson) {
63
+ const dependencies = {
64
+ ...packageJson.dependencies,
65
+ ...packageJson.devDependencies,
66
+ };
67
+ return dependencies[packageName] ?? undefined;
68
+ }
@@ -0,0 +1,28 @@
1
+ export interface PackageManager {
2
+ id: string;
3
+ name: string;
4
+ label: string;
5
+ installCommand: string;
6
+ installAllCommand: string;
7
+ buildCommand: string;
8
+ runScriptCommand: string;
9
+ flags: string;
10
+ forceInstallFlag: string;
11
+ devDependencyFlag: string;
12
+ registry?: string;
13
+ detect: (cwd: string) => boolean;
14
+ addOverride: (pkgName: string, pkgVersion: string) => Promise<void>;
15
+ }
16
+ export declare class NoPackageManagerError extends Error {
17
+ constructor(message: string);
18
+ }
19
+ export declare const BUN: PackageManager;
20
+ export declare const DENO: PackageManager;
21
+ export declare const YARN_V1: PackageManager;
22
+ /** YARN V2/3/4 */
23
+ export declare const YARN_V2: PackageManager;
24
+ export declare const PNPM: PackageManager;
25
+ export declare const NPM: PackageManager;
26
+ export declare const packageManagers: PackageManager[];
27
+ export declare function _detectPackageManger(cwd: string): PackageManager | null;
28
+ export declare function getPackageManager(cwd?: string, specifiedPackageManager?: string, errorIfNotFound?: boolean): Promise<PackageManager>;