gtx-cli 2.6.31 → 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 (348) hide show
  1. package/CHANGELOG.md +4 -1261
  2. package/README.md +12 -3
  3. package/dist/bin/bin-entry.js +2 -1
  4. package/dist/config/generateSettings.d.ts +1 -9
  5. package/dist/config/generateSettings.js +1 -214
  6. package/dist/config/resolveConfig.d.ts +1 -4
  7. package/dist/config/resolveConfig.js +1 -33
  8. package/dist/fs/config/setupConfig.d.ts +1 -17
  9. package/dist/fs/config/setupConfig.js +1 -50
  10. package/dist/fs/matchFiles.d.ts +1 -1
  11. package/dist/fs/matchFiles.js +1 -8
  12. package/dist/functions.d.ts +1 -7
  13. package/dist/functions.js +1 -6
  14. package/dist/index.d.ts +1 -4
  15. package/dist/index.js +1 -27
  16. package/dist/main.js +2 -2
  17. package/dist/next/parse/handleInitGT.d.ts +1 -7
  18. package/dist/next/parse/handleInitGT.js +1 -157
  19. package/dist/next/parse/wrapContent.d.ts +1 -12
  20. package/dist/next/parse/wrapContent.js +1 -164
  21. package/dist/react/parse/wrapContent.d.ts +1 -12
  22. package/dist/react/parse/wrapContent.js +1 -162
  23. package/dist/types/index.d.ts +1 -243
  24. package/dist/types/index.js +1 -1
  25. package/dist/utils/installPackage.d.ts +1 -3
  26. package/dist/utils/installPackage.js +1 -77
  27. package/dist/utils/packageInfo.d.ts +1 -3
  28. package/dist/utils/packageInfo.js +1 -17
  29. package/dist/utils/packageJson.d.ts +1 -6
  30. package/dist/utils/packageJson.js +1 -68
  31. package/dist/utils/packageManager.d.ts +1 -28
  32. package/dist/utils/packageManager.js +1 -269
  33. package/package.json +11 -97
  34. package/dist/api/collectUserEditDiffs.d.ts +0 -9
  35. package/dist/api/collectUserEditDiffs.js +0 -159
  36. package/dist/api/downloadFileBatch.d.ts +0 -23
  37. package/dist/api/downloadFileBatch.js +0 -190
  38. package/dist/api/saveLocalEdits.d.ts +0 -6
  39. package/dist/api/saveLocalEdits.js +0 -38
  40. package/dist/cli/base.d.ts +0 -59
  41. package/dist/cli/base.js +0 -529
  42. package/dist/cli/commands/download.d.ts +0 -8
  43. package/dist/cli/commands/download.js +0 -51
  44. package/dist/cli/commands/enqueue.d.ts +0 -9
  45. package/dist/cli/commands/enqueue.js +0 -27
  46. package/dist/cli/commands/setupProject.d.ts +0 -7
  47. package/dist/cli/commands/setupProject.js +0 -37
  48. package/dist/cli/commands/stage.d.ts +0 -9
  49. package/dist/cli/commands/stage.js +0 -59
  50. package/dist/cli/commands/translate.d.ts +0 -7
  51. package/dist/cli/commands/translate.js +0 -70
  52. package/dist/cli/commands/upload.d.ts +0 -13
  53. package/dist/cli/commands/upload.js +0 -142
  54. package/dist/cli/commands/utils/validation.d.ts +0 -13
  55. package/dist/cli/commands/utils/validation.js +0 -38
  56. package/dist/cli/flags.d.ts +0 -15
  57. package/dist/cli/flags.js +0 -70
  58. package/dist/cli/inline.d.ts +0 -17
  59. package/dist/cli/inline.js +0 -135
  60. package/dist/cli/next.d.ts +0 -10
  61. package/dist/cli/next.js +0 -12
  62. package/dist/cli/node.d.ts +0 -10
  63. package/dist/cli/node.js +0 -9
  64. package/dist/cli/react.d.ts +0 -12
  65. package/dist/cli/react.js +0 -72
  66. package/dist/config/optionPresets.d.ts +0 -3
  67. package/dist/config/optionPresets.js +0 -65
  68. package/dist/config/utils.d.ts +0 -2
  69. package/dist/config/utils.js +0 -4
  70. package/dist/config/validateSettings.d.ts +0 -3
  71. package/dist/config/validateSettings.js +0 -32
  72. package/dist/console/colors.d.ts +0 -6
  73. package/dist/console/colors.js +0 -19
  74. package/dist/console/displayTranslateSummary.d.ts +0 -1
  75. package/dist/console/displayTranslateSummary.js +0 -42
  76. package/dist/console/formatting.d.ts +0 -1
  77. package/dist/console/formatting.js +0 -7
  78. package/dist/console/index.d.ts +0 -34
  79. package/dist/console/index.js +0 -46
  80. package/dist/console/logger.d.ts +0 -35
  81. package/dist/console/logger.js +0 -250
  82. package/dist/console/logging.d.ts +0 -52
  83. package/dist/console/logging.js +0 -175
  84. package/dist/formats/files/aggregateFiles.d.ts +0 -4
  85. package/dist/formats/files/aggregateFiles.js +0 -156
  86. package/dist/formats/files/collectFiles.d.ts +0 -6
  87. package/dist/formats/files/collectFiles.js +0 -49
  88. package/dist/formats/files/convertToFileTranslationData.d.ts +0 -15
  89. package/dist/formats/files/convertToFileTranslationData.js +0 -21
  90. package/dist/formats/files/fileMapping.d.ts +0 -11
  91. package/dist/formats/files/fileMapping.js +0 -115
  92. package/dist/formats/files/preprocess/mdx.d.ts +0 -6
  93. package/dist/formats/files/preprocess/mdx.js +0 -14
  94. package/dist/formats/files/preprocess/mintlify.d.ts +0 -5
  95. package/dist/formats/files/preprocess/mintlify.js +0 -15
  96. package/dist/formats/files/preprocessContent.d.ts +0 -8
  97. package/dist/formats/files/preprocessContent.js +0 -23
  98. package/dist/formats/files/save.d.ts +0 -5
  99. package/dist/formats/files/save.js +0 -17
  100. package/dist/formats/files/supportedFiles.d.ts +0 -11
  101. package/dist/formats/files/supportedFiles.js +0 -20
  102. package/dist/formats/json/extractJson.d.ts +0 -15
  103. package/dist/formats/json/extractJson.js +0 -101
  104. package/dist/formats/json/flattenJson.d.ts +0 -14
  105. package/dist/formats/json/flattenJson.js +0 -64
  106. package/dist/formats/json/mergeJson.d.ts +0 -13
  107. package/dist/formats/json/mergeJson.js +0 -367
  108. package/dist/formats/json/parseJson.d.ts +0 -2
  109. package/dist/formats/json/parseJson.js +0 -109
  110. package/dist/formats/json/utils.d.ts +0 -47
  111. package/dist/formats/json/utils.js +0 -150
  112. package/dist/formats/utils.d.ts +0 -2
  113. package/dist/formats/utils.js +0 -24
  114. package/dist/formats/yaml/mergeYaml.d.ts +0 -5
  115. package/dist/formats/yaml/mergeYaml.js +0 -61
  116. package/dist/formats/yaml/parseYaml.d.ts +0 -5
  117. package/dist/formats/yaml/parseYaml.js +0 -24
  118. package/dist/formats/yaml/utils.d.ts +0 -2
  119. package/dist/formats/yaml/utils.js +0 -23
  120. package/dist/fs/clearLocaleDirs.d.ts +0 -8
  121. package/dist/fs/clearLocaleDirs.js +0 -126
  122. package/dist/fs/config/downloadedVersions.d.ts +0 -21
  123. package/dist/fs/config/downloadedVersions.js +0 -50
  124. package/dist/fs/config/loadConfig.d.ts +0 -1
  125. package/dist/fs/config/loadConfig.js +0 -9
  126. package/dist/fs/config/parseFilesConfig.d.ts +0 -27
  127. package/dist/fs/config/parseFilesConfig.js +0 -150
  128. package/dist/fs/config/updateConfig.d.ts +0 -21
  129. package/dist/fs/config/updateConfig.js +0 -57
  130. package/dist/fs/config/updateVersions.d.ts +0 -11
  131. package/dist/fs/config/updateVersions.js +0 -30
  132. package/dist/fs/copyFile.d.ts +0 -7
  133. package/dist/fs/copyFile.js +0 -39
  134. package/dist/fs/createLoadTranslationsFile.d.ts +0 -1
  135. package/dist/fs/createLoadTranslationsFile.js +0 -49
  136. package/dist/fs/determineFramework.d.ts +0 -5
  137. package/dist/fs/determineFramework.js +0 -53
  138. package/dist/fs/findFilepath.d.ts +0 -36
  139. package/dist/fs/findFilepath.js +0 -90
  140. package/dist/fs/index.d.ts +0 -1
  141. package/dist/fs/index.js +0 -1
  142. package/dist/fs/loadJSON.d.ts +0 -6
  143. package/dist/fs/loadJSON.js +0 -17
  144. package/dist/fs/saveJSON.d.ts +0 -1
  145. package/dist/fs/saveJSON.js +0 -7
  146. package/dist/fs/utils.d.ts +0 -1
  147. package/dist/fs/utils.js +0 -16
  148. package/dist/generated/version.d.ts +0 -1
  149. package/dist/generated/version.js +0 -2
  150. package/dist/git/branches.d.ts +0 -7
  151. package/dist/git/branches.js +0 -88
  152. package/dist/hooks/postProcess.d.ts +0 -4
  153. package/dist/hooks/postProcess.js +0 -110
  154. package/dist/locadex/setupFlow.d.ts +0 -2
  155. package/dist/locadex/setupFlow.js +0 -9
  156. package/dist/next/config/parseNextConfig.d.ts +0 -10
  157. package/dist/next/config/parseNextConfig.js +0 -53
  158. package/dist/next/jsx/utils.d.ts +0 -7
  159. package/dist/next/jsx/utils.js +0 -42
  160. package/dist/react/config/createESBuildConfig.d.ts +0 -2
  161. package/dist/react/config/createESBuildConfig.js +0 -119
  162. package/dist/react/jsx/evaluateJsx.d.ts +0 -24
  163. package/dist/react/jsx/evaluateJsx.js +0 -123
  164. package/dist/react/jsx/utils/buildImportMap.d.ts +0 -9
  165. package/dist/react/jsx/utils/buildImportMap.js +0 -30
  166. package/dist/react/jsx/utils/constants.d.ts +0 -15
  167. package/dist/react/jsx/utils/constants.js +0 -49
  168. package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +0 -9
  169. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +0 -32
  170. package/dist/react/jsx/utils/getPathsAndAliases.d.ts +0 -21
  171. package/dist/react/jsx/utils/getPathsAndAliases.js +0 -91
  172. package/dist/react/jsx/utils/isNumberLiteral.d.ts +0 -7
  173. package/dist/react/jsx/utils/isNumberLiteral.js +0 -13
  174. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +0 -9
  175. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +0 -138
  176. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +0 -6
  177. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +0 -197
  178. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +0 -13
  179. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +0 -42
  180. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +0 -5
  181. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +0 -69
  182. package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +0 -33
  183. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +0 -918
  184. package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +0 -8
  185. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +0 -65
  186. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +0 -2
  187. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +0 -61
  188. package/dist/react/jsx/utils/jsxParsing/types.d.ts +0 -48
  189. package/dist/react/jsx/utils/jsxParsing/types.js +0 -34
  190. package/dist/react/jsx/utils/mapAttributeName.d.ts +0 -11
  191. package/dist/react/jsx/utils/mapAttributeName.js +0 -12
  192. package/dist/react/jsx/utils/parseAst.d.ts +0 -31
  193. package/dist/react/jsx/utils/parseAst.js +0 -278
  194. package/dist/react/jsx/utils/parseDeclareStatic.d.ts +0 -15
  195. package/dist/react/jsx/utils/parseDeclareStatic.js +0 -540
  196. package/dist/react/jsx/utils/parseString.d.ts +0 -25
  197. package/dist/react/jsx/utils/parseString.js +0 -540
  198. package/dist/react/jsx/utils/parseStringFunction.d.ts +0 -30
  199. package/dist/react/jsx/utils/parseStringFunction.js +0 -348
  200. package/dist/react/jsx/utils/resolveImportPath.d.ts +0 -11
  201. package/dist/react/jsx/utils/resolveImportPath.js +0 -111
  202. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +0 -29
  203. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +0 -86
  204. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +0 -14
  205. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +0 -24
  206. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +0 -19
  207. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +0 -31
  208. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +0 -22
  209. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +0 -51
  210. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +0 -18
  211. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +0 -39
  212. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +0 -24
  213. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +0 -68
  214. package/dist/react/jsx/utils/stringParsing/types.d.ts +0 -41
  215. package/dist/react/jsx/utils/stringParsing/types.js +0 -1
  216. package/dist/react/jsx/utils/types.d.ts +0 -14
  217. package/dist/react/jsx/utils/types.js +0 -1
  218. package/dist/react/jsx/utils/validateStringFunction.d.ts +0 -7
  219. package/dist/react/jsx/utils/validateStringFunction.js +0 -31
  220. package/dist/react/jsx/wrapJsx.d.ts +0 -51
  221. package/dist/react/jsx/wrapJsx.js +0 -387
  222. package/dist/react/parse/addVitePlugin/index.d.ts +0 -22
  223. package/dist/react/parse/addVitePlugin/index.js +0 -41
  224. package/dist/react/parse/addVitePlugin/installCompiler.d.ts +0 -8
  225. package/dist/react/parse/addVitePlugin/installCompiler.js +0 -22
  226. package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +0 -19
  227. package/dist/react/parse/addVitePlugin/updateViteConfig.js +0 -120
  228. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +0 -9
  229. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +0 -34
  230. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +0 -11
  231. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +0 -48
  232. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +0 -15
  233. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +0 -113
  234. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +0 -12
  235. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +0 -32
  236. package/dist/react/parse/createDictionaryUpdates.d.ts +0 -3
  237. package/dist/react/parse/createDictionaryUpdates.js +0 -187
  238. package/dist/react/parse/createInlineUpdates.d.ts +0 -13
  239. package/dist/react/parse/createInlineUpdates.js +0 -161
  240. package/dist/react/utils/flattenDictionary.d.ts +0 -20
  241. package/dist/react/utils/flattenDictionary.js +0 -75
  242. package/dist/react/utils/getEntryAndMetadata.d.ts +0 -5
  243. package/dist/react/utils/getEntryAndMetadata.js +0 -11
  244. package/dist/react/utils/getVariableName.d.ts +0 -25
  245. package/dist/react/utils/getVariableName.js +0 -37
  246. package/dist/setup/agentInstructions.d.ts +0 -24
  247. package/dist/setup/agentInstructions.js +0 -138
  248. package/dist/setup/detectFramework.d.ts +0 -31
  249. package/dist/setup/detectFramework.js +0 -106
  250. package/dist/setup/frameworkUtils.d.ts +0 -3
  251. package/dist/setup/frameworkUtils.js +0 -30
  252. package/dist/setup/instructions/base.md +0 -29
  253. package/dist/setup/instructions/gt-next.md +0 -107
  254. package/dist/setup/instructions/gt-react.md +0 -98
  255. package/dist/setup/userInput.d.ts +0 -4
  256. package/dist/setup/userInput.js +0 -32
  257. package/dist/setup/wizard.d.ts +0 -3
  258. package/dist/setup/wizard.js +0 -147
  259. package/dist/state/recentDownloads.d.ts +0 -12
  260. package/dist/state/recentDownloads.js +0 -18
  261. package/dist/state/translateWarnings.d.ts +0 -10
  262. package/dist/state/translateWarnings.js +0 -13
  263. package/dist/translation/parse.d.ts +0 -17
  264. package/dist/translation/parse.js +0 -77
  265. package/dist/translation/stage.d.ts +0 -3
  266. package/dist/translation/stage.js +0 -44
  267. package/dist/translation/validate.d.ts +0 -14
  268. package/dist/translation/validate.js +0 -100
  269. package/dist/types/branch.d.ts +0 -14
  270. package/dist/types/branch.js +0 -1
  271. package/dist/types/data/json.d.ts +0 -6
  272. package/dist/types/data/json.js +0 -1
  273. package/dist/types/data.d.ts +0 -37
  274. package/dist/types/data.js +0 -1
  275. package/dist/types/files.d.ts +0 -8
  276. package/dist/types/files.js +0 -1
  277. package/dist/types/libraries.d.ts +0 -31
  278. package/dist/types/libraries.js +0 -72
  279. package/dist/types/parsing.d.ts +0 -3
  280. package/dist/types/parsing.js +0 -1
  281. package/dist/utils/addExplicitAnchorIds.d.ts +0 -24
  282. package/dist/utils/addExplicitAnchorIds.js +0 -416
  283. package/dist/utils/constants.d.ts +0 -5
  284. package/dist/utils/constants.js +0 -6
  285. package/dist/utils/credentials.d.ts +0 -12
  286. package/dist/utils/credentials.js +0 -120
  287. package/dist/utils/flattenJsonFiles.d.ts +0 -2
  288. package/dist/utils/flattenJsonFiles.js +0 -36
  289. package/dist/utils/gitDiff.d.ts +0 -8
  290. package/dist/utils/gitDiff.js +0 -34
  291. package/dist/utils/gt.d.ts +0 -2
  292. package/dist/utils/gt.js +0 -2
  293. package/dist/utils/hash.d.ts +0 -6
  294. package/dist/utils/hash.js +0 -11
  295. package/dist/utils/headers.d.ts +0 -1
  296. package/dist/utils/headers.js +0 -14
  297. package/dist/utils/localizeRelativeAssets.d.ts +0 -8
  298. package/dist/utils/localizeRelativeAssets.js +0 -166
  299. package/dist/utils/localizeStaticImports.d.ts +0 -15
  300. package/dist/utils/localizeStaticImports.js +0 -397
  301. package/dist/utils/localizeStaticUrls.d.ts +0 -19
  302. package/dist/utils/localizeStaticUrls.js +0 -450
  303. package/dist/utils/mintlifyTitleFallback.d.ts +0 -6
  304. package/dist/utils/mintlifyTitleFallback.js +0 -80
  305. package/dist/utils/parse/needsCJS.d.ts +0 -20
  306. package/dist/utils/parse/needsCJS.js +0 -72
  307. package/dist/utils/persistPostprocessHashes.d.ts +0 -12
  308. package/dist/utils/persistPostprocessHashes.js +0 -39
  309. package/dist/utils/processAnchorIds.d.ts +0 -6
  310. package/dist/utils/processAnchorIds.js +0 -56
  311. package/dist/utils/processOpenApi.d.ts +0 -8
  312. package/dist/utils/processOpenApi.js +0 -651
  313. package/dist/utils/sanitizeFileContent.d.ts +0 -6
  314. package/dist/utils/sanitizeFileContent.js +0 -29
  315. package/dist/utils/sharedStaticAssets.d.ts +0 -9
  316. package/dist/utils/sharedStaticAssets.js +0 -384
  317. package/dist/utils/validateMdx.d.ts +0 -10
  318. package/dist/utils/validateMdx.js +0 -25
  319. package/dist/utils/wrapPlainUrls.d.ts +0 -8
  320. package/dist/utils/wrapPlainUrls.js +0 -72
  321. package/dist/workflows/download.d.ts +0 -32
  322. package/dist/workflows/download.js +0 -131
  323. package/dist/workflows/enqueue.d.ts +0 -17
  324. package/dist/workflows/enqueue.js +0 -59
  325. package/dist/workflows/setupProject.d.ts +0 -13
  326. package/dist/workflows/setupProject.js +0 -48
  327. package/dist/workflows/stage.d.ts +0 -18
  328. package/dist/workflows/stage.js +0 -59
  329. package/dist/workflows/steps/BranchStep.d.ts +0 -13
  330. package/dist/workflows/steps/BranchStep.js +0 -161
  331. package/dist/workflows/steps/DownloadStep.d.ts +0 -19
  332. package/dist/workflows/steps/DownloadStep.js +0 -131
  333. package/dist/workflows/steps/EnqueueStep.d.ts +0 -15
  334. package/dist/workflows/steps/EnqueueStep.js +0 -33
  335. package/dist/workflows/steps/PollJobsStep.d.ts +0 -31
  336. package/dist/workflows/steps/PollJobsStep.js +0 -288
  337. package/dist/workflows/steps/SetupStep.d.ts +0 -16
  338. package/dist/workflows/steps/SetupStep.js +0 -72
  339. package/dist/workflows/steps/UploadSourcesStep.d.ts +0 -27
  340. package/dist/workflows/steps/UploadSourcesStep.js +0 -131
  341. package/dist/workflows/steps/UploadTranslationsStep.d.ts +0 -22
  342. package/dist/workflows/steps/UploadTranslationsStep.js +0 -71
  343. package/dist/workflows/steps/UserEditDiffsStep.d.ts +0 -11
  344. package/dist/workflows/steps/UserEditDiffsStep.js +0 -30
  345. package/dist/workflows/steps/WorkflowStep.d.ts +0 -4
  346. package/dist/workflows/steps/WorkflowStep.js +0 -2
  347. package/dist/workflows/upload.d.ts +0 -15
  348. package/dist/workflows/upload.js +0 -47
@@ -1,450 +0,0 @@
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
- }
@@ -1,6 +0,0 @@
1
- type TitleFallbackResult = {
2
- content: string;
3
- addedTitle: boolean;
4
- };
5
- export declare function applyMintlifyTitleFallback(content: string, fileName: string, defaultLocale?: string): TitleFallbackResult;
6
- export {};
@@ -1,80 +0,0 @@
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
- }
@@ -1,20 +0,0 @@
1
- import { ParseResult } from '@babel/parser';
2
- import * as t from '@babel/types';
3
- /**
4
- * Given an AST determines if the file needs to be compiled as CommonJS or ESM.
5
- * @param ast - The AST to analyze
6
- * @returns True if the file needs to be compiled as CommonJS, false if it needs to be compiled as ESM
7
- */
8
- export declare function needsCJS({ ast, warnings, filepath, packageJson, tsconfigJson, }: {
9
- ast: ParseResult<t.File>;
10
- warnings: string[];
11
- filepath: string;
12
- packageJson?: {
13
- type?: string;
14
- };
15
- tsconfigJson?: {
16
- compilerOptions?: {
17
- module?: string;
18
- };
19
- };
20
- }): boolean;
@@ -1,72 +0,0 @@
1
- import traverseModule from '@babel/traverse';
2
- import * as t from '@babel/types';
3
- // Handle CommonJS/ESM interop
4
- const traverse = traverseModule.default || traverseModule;
5
- /**
6
- * Given an AST determines if the file needs to be compiled as CommonJS or ESM.
7
- * @param ast - The AST to analyze
8
- * @returns True if the file needs to be compiled as CommonJS, false if it needs to be compiled as ESM
9
- */
10
- export function needsCJS({ ast, warnings, filepath, packageJson, tsconfigJson, }) {
11
- // Analyze the actual file content to determine module system
12
- let hasES6Imports = false;
13
- let hasCommonJSRequire = false;
14
- traverse(ast, {
15
- ImportDeclaration() {
16
- hasES6Imports = true;
17
- },
18
- CallExpression(path) {
19
- if (t.isIdentifier(path.node.callee, { name: 'require' })) {
20
- hasCommonJSRequire = true;
21
- }
22
- },
23
- });
24
- // Determine if we need CommonJS based on actual file content and fallback to config-based logic
25
- let needsCJS = false;
26
- if (hasES6Imports && !hasCommonJSRequire) {
27
- // File uses ES6 imports, so we should use ES6 imports
28
- needsCJS = false;
29
- }
30
- else if (hasCommonJSRequire && !hasES6Imports) {
31
- // File uses CommonJS require, so we should use CommonJS require
32
- needsCJS = true;
33
- }
34
- else if (hasES6Imports && hasCommonJSRequire) {
35
- // Mixed usage - this is unusual but we'll default to ES6 imports
36
- warnings.push(`Mixed ES6 imports and CommonJS require detected in ${filepath}. Defaulting to ES6 imports.`);
37
- needsCJS = false;
38
- }
39
- else {
40
- // No imports/requires found, fall back to configuration-based logic
41
- if (filepath.endsWith('.ts') || filepath.endsWith('.tsx')) {
42
- // For TypeScript files, check tsconfig.json compilerOptions.module
43
- const moduleSetting = tsconfigJson?.compilerOptions?.module;
44
- if (moduleSetting === 'commonjs' || moduleSetting === 'node') {
45
- needsCJS = true;
46
- }
47
- else if (moduleSetting === 'esnext' ||
48
- moduleSetting === 'es2022' ||
49
- moduleSetting === 'es2020' ||
50
- moduleSetting === 'es2015' ||
51
- moduleSetting === 'es6' ||
52
- moduleSetting === 'node16' ||
53
- moduleSetting === 'nodenext') {
54
- needsCJS = false;
55
- }
56
- else {
57
- // Default to ESM for TypeScript files if no module setting is specified
58
- needsCJS = false;
59
- }
60
- }
61
- else if (filepath.endsWith('.js')) {
62
- // For JavaScript files, check package.json type
63
- // If package.json has "type": "module", .js files are treated as ES modules
64
- needsCJS = packageJson?.type !== 'module';
65
- }
66
- else {
67
- // For other file extensions, default to ESM
68
- needsCJS = false;
69
- }
70
- }
71
- return needsCJS;
72
- }
@@ -1,12 +0,0 @@
1
- import type { Settings } from '../types/index.js';
2
- type DownloadMeta = {
3
- branchId: string;
4
- fileId: string;
5
- versionId: string;
6
- locale: string;
7
- };
8
- /**
9
- * Persist postprocessed content hashes for recently downloaded files into gt-lock.json.
10
- */
11
- export declare function persistPostProcessHashes(settings: Settings, includeFiles: Set<string> | undefined, downloadedMeta: Map<string, DownloadMeta>): void;
12
- export {};
@@ -1,39 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import { ensureNestedObject, getDownloadedVersions, saveDownloadedVersions, } from '../fs/config/downloadedVersions.js';
3
- import { hashStringSync } from './hash.js';
4
- /**
5
- * Persist postprocessed content hashes for recently downloaded files into gt-lock.json.
6
- */
7
- export function persistPostProcessHashes(settings, includeFiles, downloadedMeta) {
8
- if (!includeFiles || includeFiles.size === 0 || downloadedMeta.size === 0) {
9
- return;
10
- }
11
- const downloadedVersions = getDownloadedVersions(settings.configDirectory);
12
- let lockUpdated = false;
13
- for (const filePath of includeFiles) {
14
- const meta = downloadedMeta.get(filePath);
15
- if (!meta)
16
- continue;
17
- if (!fs.existsSync(filePath))
18
- continue;
19
- const content = fs.readFileSync(filePath, 'utf8');
20
- const hash = hashStringSync(content);
21
- ensureNestedObject(downloadedVersions.entries, [
22
- meta.branchId,
23
- meta.fileId,
24
- meta.versionId,
25
- meta.locale,
26
- ]);
27
- const existing = downloadedVersions.entries[meta.branchId][meta.fileId][meta.versionId][meta.locale] || {};
28
- if (existing.postProcessHash !== hash) {
29
- downloadedVersions.entries[meta.branchId][meta.fileId][meta.versionId][meta.locale] = {
30
- ...existing,
31
- postProcessHash: hash,
32
- };
33
- lockUpdated = true;
34
- }
35
- }
36
- if (lockUpdated) {
37
- saveDownloadedVersions(settings.configDirectory, downloadedVersions);
38
- }
39
- }