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,156 @@
1
+ import { logger } from '../../console/logger.js';
2
+ import { recordWarning } from '../../state/translateWarnings.js';
3
+ import { getRelative, readFile } from '../../fs/findFilepath.js';
4
+ import { SUPPORTED_FILE_EXTENSIONS } from './supportedFiles.js';
5
+ import { parseJson } from '../json/parseJson.js';
6
+ import parseYaml from '../yaml/parseYaml.js';
7
+ import YAML from 'yaml';
8
+ import { determineLibrary } from '../../fs/determineFramework.js';
9
+ import { hashStringSync } from '../../utils/hash.js';
10
+ import { preprocessContent } from './preprocessContent.js';
11
+ export const SUPPORTED_DATA_FORMATS = ['JSX', 'ICU', 'I18NEXT'];
12
+ export async function aggregateFiles(settings) {
13
+ // Aggregate all files to translate
14
+ const allFiles = [];
15
+ if (!settings.files ||
16
+ (Object.keys(settings.files.placeholderPaths).length === 1 &&
17
+ settings.files.placeholderPaths.gt)) {
18
+ return allFiles;
19
+ }
20
+ const { resolvedPaths: filePaths } = settings.files;
21
+ const skipValidation = settings.options?.skipFileValidation;
22
+ // Process JSON files
23
+ if (filePaths.json) {
24
+ const { library, additionalModules } = determineLibrary();
25
+ // Determine dataFormat for JSONs
26
+ let dataFormat;
27
+ if (library === 'next-intl') {
28
+ dataFormat = 'ICU';
29
+ }
30
+ else if (library === 'i18next') {
31
+ if (additionalModules.includes('i18next-icu')) {
32
+ dataFormat = 'ICU';
33
+ }
34
+ else {
35
+ dataFormat = 'I18NEXT';
36
+ }
37
+ }
38
+ else {
39
+ dataFormat = 'STRING';
40
+ }
41
+ const jsonFiles = filePaths.json
42
+ .map((filePath) => {
43
+ const content = readFile(filePath);
44
+ const relativePath = getRelative(filePath);
45
+ // Pre-validate JSON parseability
46
+ if (!skipValidation?.json) {
47
+ try {
48
+ JSON.parse(content);
49
+ }
50
+ catch (e) {
51
+ logger.warn(`Skipping ${relativePath}: JSON file is not parsable`);
52
+ recordWarning('skipped_file', relativePath, 'JSON file is not parsable');
53
+ return null;
54
+ }
55
+ }
56
+ const parsedJson = parseJson(content, filePath, settings.options || {}, settings.defaultLocale);
57
+ return {
58
+ fileId: hashStringSync(relativePath),
59
+ versionId: hashStringSync(parsedJson),
60
+ content: parsedJson,
61
+ fileName: relativePath,
62
+ fileFormat: 'JSON',
63
+ dataFormat,
64
+ locale: settings.defaultLocale,
65
+ };
66
+ })
67
+ .filter((file) => {
68
+ if (!file)
69
+ return false;
70
+ if (typeof file.content !== 'string' || !file.content.trim()) {
71
+ logger.warn(`Skipping ${file.fileName}: JSON file is empty`);
72
+ recordWarning('skipped_file', file.fileName, 'JSON file is empty');
73
+ return false;
74
+ }
75
+ return true;
76
+ });
77
+ allFiles.push(...jsonFiles.filter((file) => file !== null));
78
+ }
79
+ // Process YAML files
80
+ if (filePaths.yaml) {
81
+ const yamlFiles = filePaths.yaml
82
+ .map((filePath) => {
83
+ const content = readFile(filePath);
84
+ const relativePath = getRelative(filePath);
85
+ // Pre-validate YAML parseability
86
+ if (!skipValidation?.yaml) {
87
+ try {
88
+ YAML.parse(content);
89
+ }
90
+ catch (e) {
91
+ logger.warn(`Skipping ${relativePath}: YAML file is not parsable`);
92
+ recordWarning('skipped_file', relativePath, 'YAML file is not parsable');
93
+ return null;
94
+ }
95
+ }
96
+ const { content: parsedYaml, fileFormat } = parseYaml(content, filePath, settings.options || {});
97
+ return {
98
+ content: parsedYaml,
99
+ fileName: relativePath,
100
+ fileFormat,
101
+ fileId: hashStringSync(relativePath),
102
+ versionId: hashStringSync(parsedYaml),
103
+ locale: settings.defaultLocale,
104
+ };
105
+ })
106
+ .filter((file) => {
107
+ if (!file || typeof file.content !== 'string' || !file.content.trim()) {
108
+ logger.warn(`Skipping ${file?.fileName ?? 'unknown'}: YAML file is empty`);
109
+ recordWarning('skipped_file', file?.fileName ?? 'unknown', 'YAML file is empty');
110
+ return false;
111
+ }
112
+ return true;
113
+ });
114
+ allFiles.push(...yamlFiles.filter((file) => file !== null));
115
+ }
116
+ for (const fileType of SUPPORTED_FILE_EXTENSIONS) {
117
+ if (fileType === 'json' || fileType === 'yaml')
118
+ continue;
119
+ if (filePaths[fileType]) {
120
+ const files = filePaths[fileType]
121
+ .map((filePath) => {
122
+ const content = readFile(filePath);
123
+ const relativePath = getRelative(filePath);
124
+ const processed = preprocessContent(content, relativePath, fileType, settings);
125
+ if (typeof processed !== 'string') {
126
+ logger.warn(`Skipping ${relativePath}: ${processed.skip}`);
127
+ recordWarning('skipped_file', relativePath, processed.skip);
128
+ return null;
129
+ }
130
+ return {
131
+ content: processed,
132
+ fileName: relativePath,
133
+ fileFormat: fileType.toUpperCase(),
134
+ fileId: hashStringSync(relativePath),
135
+ versionId: hashStringSync(content),
136
+ locale: settings.defaultLocale,
137
+ };
138
+ })
139
+ .filter((file) => {
140
+ if (!file ||
141
+ typeof file.content !== 'string' ||
142
+ !file.content.trim()) {
143
+ logger.warn(`Skipping ${file?.fileName ?? 'unknown'}: File is empty after sanitization`);
144
+ recordWarning('skipped_file', file?.fileName ?? 'unknown', 'File is empty after sanitization');
145
+ return false;
146
+ }
147
+ return true;
148
+ });
149
+ allFiles.push(...files.filter((file) => file !== null));
150
+ }
151
+ }
152
+ if (allFiles.length === 0 && !settings.publish) {
153
+ logger.error('No files to translate were found. Please check your configuration and try again.');
154
+ }
155
+ return allFiles;
156
+ }
@@ -0,0 +1,6 @@
1
+ import { Settings, SupportedLibraries, TranslateFlags } from '../../types/index.js';
2
+ import type { FileToUpload } from 'generaltranslation/types';
3
+ export declare function collectFiles(options: TranslateFlags, settings: Settings, library: SupportedLibraries): Promise<{
4
+ files: FileToUpload[];
5
+ reactComponents: number;
6
+ }>;
@@ -0,0 +1,49 @@
1
+ import { logErrorAndExit } from '../../console/logging.js';
2
+ import { invalidConfigurationError } from '../../console/index.js';
3
+ import { aggregateFiles } from './aggregateFiles.js';
4
+ import { aggregateInlineTranslations } from '../../translation/stage.js';
5
+ import { hashStringSync } from '../../utils/hash.js';
6
+ import { TEMPLATE_FILE_NAME, TEMPLATE_FILE_ID } from '../../utils/constants.js';
7
+ import { isInlineLibrary } from '../../types/libraries.js';
8
+ export async function collectFiles(options, settings, library) {
9
+ // Aggregate files
10
+ const allFiles = await aggregateFiles(settings);
11
+ // Parse for React components
12
+ let reactComponents = 0;
13
+ if (isInlineLibrary(library)) {
14
+ const updates = await aggregateInlineTranslations(options, settings, library);
15
+ if (updates.length > 0) {
16
+ if (!settings.publish && !settings.files?.placeholderPaths.gt) {
17
+ logErrorAndExit(invalidConfigurationError);
18
+ }
19
+ // Convert updates to a file object
20
+ const fileData = {};
21
+ const fileMetadata = {};
22
+ // Convert updates to the proper data format
23
+ for (const update of updates) {
24
+ const { source, metadata, dataFormat } = update;
25
+ metadata.dataFormat = dataFormat; // add the data format to the metadata
26
+ const { hash, id } = metadata;
27
+ if (id) {
28
+ fileData[id] = source;
29
+ fileMetadata[id] = metadata;
30
+ }
31
+ else {
32
+ fileData[hash] = source;
33
+ fileMetadata[hash] = metadata;
34
+ }
35
+ }
36
+ reactComponents = updates.length;
37
+ allFiles.push({
38
+ fileName: TEMPLATE_FILE_NAME,
39
+ content: JSON.stringify(fileData),
40
+ fileFormat: 'GTJSON',
41
+ formatMetadata: fileMetadata,
42
+ fileId: TEMPLATE_FILE_ID,
43
+ versionId: hashStringSync(JSON.stringify(Object.keys(fileData).sort())),
44
+ locale: settings.defaultLocale,
45
+ });
46
+ }
47
+ }
48
+ return { files: allFiles, reactComponents };
49
+ }
@@ -0,0 +1,15 @@
1
+ import { FileToUpload } from 'generaltranslation/types';
2
+ import { FileTranslationData } from '../../workflows/download.js';
3
+ /**
4
+ * Convert files to a file version data object
5
+ * @param files - The files to get the version data for
6
+ * @returns The version data for each file
7
+ *
8
+ * @example
9
+ * const { allFiles } = await collectFiles(options, settings, library);
10
+ * if (allFiles.length > 0) {
11
+ * const fileVersionData = getFileVersionData(allFiles);
12
+ * console.log(fileVersionData);
13
+ * }
14
+ */
15
+ export declare function convertToFileTranslationData(files: FileToUpload[]): FileTranslationData;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Convert files to a file version data object
3
+ * @param files - The files to get the version data for
4
+ * @returns The version data for each file
5
+ *
6
+ * @example
7
+ * const { allFiles } = await collectFiles(options, settings, library);
8
+ * if (allFiles.length > 0) {
9
+ * const fileVersionData = getFileVersionData(allFiles);
10
+ * console.log(fileVersionData);
11
+ * }
12
+ */
13
+ export function convertToFileTranslationData(files) {
14
+ return Object.fromEntries(files.map((file) => [
15
+ file.fileId,
16
+ {
17
+ versionId: file.versionId,
18
+ fileName: file.fileName,
19
+ },
20
+ ]));
21
+ }
@@ -0,0 +1,11 @@
1
+ import { ResolvedFiles, TransformFiles } from '../../types/index.js';
2
+ import { FileMapping } from '../../types/files.js';
3
+ /**
4
+ * Creates a mapping between source files and their translated counterparts for each locale
5
+ * @param filePaths - Resolved file paths for different file types
6
+ * @param placeholderPaths - Placeholder paths for translated files
7
+ * @param transformPaths - Transform paths for file naming
8
+ * @param locales - List of locales to create a mapping for
9
+ * @returns A mapping between source files and their translated counterparts for each locale, in the form of relative paths
10
+ */
11
+ export declare function createFileMapping(filePaths: ResolvedFiles, placeholderPaths: ResolvedFiles, transformPaths: TransformFiles, targetLocales: string[], defaultLocale: string): FileMapping;
@@ -0,0 +1,115 @@
1
+ import { SUPPORTED_FILE_EXTENSIONS } from '../files/supportedFiles.js';
2
+ import { resolveLocaleFiles } from '../../fs/config/parseFilesConfig.js';
3
+ import path from 'node:path';
4
+ import { getRelative } from '../../fs/findFilepath.js';
5
+ import { getLocaleProperties } from 'generaltranslation';
6
+ import { replaceLocalePlaceholders } from '../utils.js';
7
+ import { TEMPLATE_FILE_NAME } from '../../utils/constants.js';
8
+ /**
9
+ * Creates a mapping between source files and their translated counterparts for each locale
10
+ * @param filePaths - Resolved file paths for different file types
11
+ * @param placeholderPaths - Placeholder paths for translated files
12
+ * @param transformPaths - Transform paths for file naming
13
+ * @param locales - List of locales to create a mapping for
14
+ * @returns A mapping between source files and their translated counterparts for each locale, in the form of relative paths
15
+ */
16
+ export function createFileMapping(filePaths, placeholderPaths, transformPaths, targetLocales, defaultLocale) {
17
+ const fileMapping = {};
18
+ for (const locale of targetLocales) {
19
+ const translatedPaths = resolveLocaleFiles(placeholderPaths, locale);
20
+ const localeMapping = {};
21
+ // Process each file type
22
+ // Start with GTJSON Template files
23
+ if (translatedPaths.gt) {
24
+ const filepath = translatedPaths.gt;
25
+ localeMapping[TEMPLATE_FILE_NAME] = filepath;
26
+ }
27
+ for (const typeIndex of SUPPORTED_FILE_EXTENSIONS) {
28
+ if (!filePaths[typeIndex] || !translatedPaths[typeIndex])
29
+ continue;
30
+ const sourcePaths = filePaths[typeIndex];
31
+ let translatedFiles = translatedPaths[typeIndex];
32
+ if (!translatedFiles)
33
+ continue;
34
+ const transformPath = transformPaths[typeIndex];
35
+ if (transformPath) {
36
+ if (typeof transformPath === 'string') {
37
+ translatedFiles = translatedFiles.map((filePath) => {
38
+ const directory = path.dirname(filePath);
39
+ const fileName = path.basename(filePath);
40
+ const baseName = fileName.split('.')[0];
41
+ const transformedFileName = transformPath
42
+ .replace('*', baseName)
43
+ .replace('[locale]', locale);
44
+ return path.join(directory, transformedFileName);
45
+ });
46
+ }
47
+ else if (Array.isArray(transformPath)) {
48
+ // transformPath is an array of TransformOption objects
49
+ const targetLocaleProperties = getLocaleProperties(locale);
50
+ const defaultLocaleProperties = getLocaleProperties(defaultLocale);
51
+ translatedFiles = translatedFiles.map((filePath) => {
52
+ const relativePath = getRelative(filePath);
53
+ // Try each transform in order until one matches
54
+ for (const transform of transformPath) {
55
+ if (!transform.replace || typeof transform.replace !== 'string') {
56
+ continue;
57
+ }
58
+ // Replace all locale property placeholders in the replace string
59
+ const replaceString = replaceLocalePlaceholders(transform.replace, targetLocaleProperties);
60
+ if (transform.match && typeof transform.match === 'string') {
61
+ // Replace locale placeholders in the match string using defaultLocale properties
62
+ let matchString = transform.match;
63
+ matchString = replaceLocalePlaceholders(matchString, defaultLocaleProperties);
64
+ const regex = new RegExp(matchString);
65
+ if (regex.test(relativePath)) {
66
+ // This transform matches, apply it and break
67
+ const transformedPath = relativePath.replace(new RegExp(matchString, 'g'), replaceString);
68
+ return path.resolve(transformedPath);
69
+ }
70
+ }
71
+ else {
72
+ // No match provided: treat as a direct replacement (override)
73
+ return path.resolve(replaceString);
74
+ }
75
+ }
76
+ // If no transforms matched, return the original path
77
+ return filePath;
78
+ });
79
+ }
80
+ else {
81
+ // transformPath is an object
82
+ const targetLocaleProperties = getLocaleProperties(locale);
83
+ const defaultLocaleProperties = getLocaleProperties(defaultLocale);
84
+ if (!transformPath.replace ||
85
+ typeof transformPath.replace !== 'string') {
86
+ continue;
87
+ }
88
+ // Replace all locale property placeholders
89
+ const replaceString = replaceLocalePlaceholders(transformPath.replace, targetLocaleProperties);
90
+ translatedFiles = translatedFiles.map((filePath) => {
91
+ let relativePath = getRelative(filePath);
92
+ if (transformPath.match &&
93
+ typeof transformPath.match === 'string') {
94
+ // Replace locale placeholders in the match string using defaultLocale properties
95
+ let matchString = transformPath.match;
96
+ matchString = replaceLocalePlaceholders(matchString, defaultLocaleProperties);
97
+ relativePath = relativePath.replace(new RegExp(matchString, 'g'), replaceString);
98
+ }
99
+ else {
100
+ relativePath = replaceString;
101
+ }
102
+ return path.resolve(relativePath);
103
+ });
104
+ }
105
+ }
106
+ for (let i = 0; i < sourcePaths.length; i++) {
107
+ const sourceFile = getRelative(sourcePaths[i]);
108
+ const translatedFile = getRelative(translatedFiles[i]);
109
+ localeMapping[sourceFile] = translatedFile;
110
+ }
111
+ }
112
+ fileMapping[locale] = localeMapping;
113
+ }
114
+ return fileMapping;
115
+ }
@@ -0,0 +1,6 @@
1
+ import { Settings } from '../../../types/index.js';
2
+ /**
3
+ * Runs MDX-specific preprocessing. Returns a skip reason if the file
4
+ * should be skipped, or null if validation passed.
5
+ */
6
+ export declare function preprocessMdx(content: string, filePath: string, settings: Settings): string | null;
@@ -0,0 +1,14 @@
1
+ import { isValidMdx } from '../../../utils/validateMdx.js';
2
+ /**
3
+ * Runs MDX-specific preprocessing. Returns a skip reason if the file
4
+ * should be skipped, or null if validation passed.
5
+ */
6
+ export function preprocessMdx(content, filePath, settings) {
7
+ if (!settings.options?.skipFileValidation?.mdx) {
8
+ const validation = isValidMdx(content, filePath);
9
+ if (!validation.isValid) {
10
+ return `MDX file is not AST parsable${validation.error ? `: ${validation.error}` : ''}`;
11
+ }
12
+ }
13
+ return null;
14
+ }
@@ -0,0 +1,5 @@
1
+ import { Settings } from '../../../types/index.js';
2
+ /**
3
+ * Runs all Mintlify-specific preprocessing on file content.
4
+ */
5
+ export declare function preprocessMintlify(content: string, filePath: string, fileType: string, settings: Settings): string;
@@ -0,0 +1,15 @@
1
+ import { applyMintlifyTitleFallback } from '../../../utils/mintlifyTitleFallback.js';
2
+ import wrapPlainUrls from '../../../utils/wrapPlainUrls.js';
3
+ /**
4
+ * Runs all Mintlify-specific preprocessing on file content.
5
+ */
6
+ export function preprocessMintlify(content, filePath, fileType, settings) {
7
+ if (fileType !== 'mdx')
8
+ return content;
9
+ let result = content;
10
+ if (settings.options?.mintlify?.inferTitleFromFilename) {
11
+ result = applyMintlifyTitleFallback(result, filePath, settings.defaultLocale).content;
12
+ }
13
+ result = wrapPlainUrls(result);
14
+ return result;
15
+ }
@@ -0,0 +1,8 @@
1
+ import { Settings } from '../../types/index.js';
2
+ /**
3
+ * Preprocesses file content before upload. Returns the processed content,
4
+ * or { skip: reason } if the file should be skipped.
5
+ */
6
+ export declare function preprocessContent(content: string, filePath: string, fileType: string, settings: Settings): string | {
7
+ skip: string;
8
+ };
@@ -0,0 +1,23 @@
1
+ import { preprocessMdx } from './preprocess/mdx.js';
2
+ import { preprocessMintlify } from './preprocess/mintlify.js';
3
+ import sanitizeFileContent from '../../utils/sanitizeFileContent.js';
4
+ /**
5
+ * Preprocesses file content before upload. Returns the processed content,
6
+ * or { skip: reason } if the file should be skipped.
7
+ */
8
+ export function preprocessContent(content, filePath, fileType, settings) {
9
+ let result = content;
10
+ // File-type-specific
11
+ if (fileType === 'mdx') {
12
+ const skipReason = preprocessMdx(result, filePath, settings);
13
+ if (skipReason)
14
+ return { skip: skipReason };
15
+ }
16
+ // Framework-specific
17
+ if (settings.framework === 'mintlify') {
18
+ result = preprocessMintlify(result, filePath, fileType, settings);
19
+ }
20
+ // Universal
21
+ result = sanitizeFileContent(result);
22
+ return result;
23
+ }
@@ -0,0 +1,5 @@
1
+ import { DataFormat } from '../../types/data.js';
2
+ /**
3
+ * Saves translated MDX/MD file content to the appropriate location
4
+ */
5
+ export declare function saveTranslatedFile(translatedContent: string, outputDir: string, fileName: string, dataFormat: DataFormat, locales: string[]): Promise<void>;
@@ -0,0 +1,17 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'node:path';
3
+ import { logger } from '../../console/logger.js';
4
+ /**
5
+ * Saves translated MDX/MD file content to the appropriate location
6
+ */
7
+ export async function saveTranslatedFile(translatedContent, outputDir, fileName, dataFormat, locales) {
8
+ // Create locale-specific directories if they don't exist
9
+ for (const locale of locales) {
10
+ const localeDir = path.join(outputDir, locale);
11
+ await fs.mkdir(localeDir, { recursive: true });
12
+ // Save the translated file with the appropriate extension
13
+ const outputPath = path.join(localeDir, fileName);
14
+ await fs.writeFile(outputPath, translatedContent);
15
+ logger.success(`Saved translated ${dataFormat} file to: ${outputPath}`);
16
+ }
17
+ }
@@ -0,0 +1,11 @@
1
+ export declare const SUPPORTED_FILE_EXTENSIONS: readonly ["json", "mdx", "md", "ts", "js", "yaml", "html", "txt"];
2
+ export declare const FILE_EXT_TO_EXT_LABEL: {
3
+ json: string;
4
+ mdx: string;
5
+ md: string;
6
+ ts: string;
7
+ js: string;
8
+ yaml: string;
9
+ html: string;
10
+ txt: string;
11
+ };
@@ -0,0 +1,20 @@
1
+ export const SUPPORTED_FILE_EXTENSIONS = [
2
+ 'json',
3
+ 'mdx',
4
+ 'md',
5
+ 'ts',
6
+ 'js',
7
+ 'yaml',
8
+ 'html',
9
+ 'txt',
10
+ ];
11
+ export const FILE_EXT_TO_EXT_LABEL = {
12
+ json: 'JSON',
13
+ mdx: 'MDX',
14
+ md: 'Markdown',
15
+ ts: 'TypeScript',
16
+ js: 'JavaScript',
17
+ yaml: 'YAML',
18
+ html: 'HTML',
19
+ txt: 'Text',
20
+ };
@@ -0,0 +1,15 @@
1
+ import { AdditionalOptions } from '../../types/index.js';
2
+ /**
3
+ * Extracts translated values from a full JSON file back into composite JSON format.
4
+ * This is the inverse of mergeJson - it takes a merged/reconstructed JSON file
5
+ * and extracts the values for a specific locale into the composite structure
6
+ * that the server expects.
7
+ *
8
+ * @param localContent - The full JSON content from the user's local file
9
+ * @param inputPath - The path to the file (used for matching jsonSchema)
10
+ * @param options - Additional options containing jsonSchema config
11
+ * @param targetLocale - The locale to extract values for
12
+ * @param defaultLocale - The default/source locale
13
+ * @returns The composite JSON string, or null if no extraction needed
14
+ */
15
+ export declare function extractJson(localContent: string, inputPath: string, options: AdditionalOptions, targetLocale: string, defaultLocale: string): string | null;
@@ -0,0 +1,101 @@
1
+ import { logger } from '../../console/logger.js';
2
+ import { findMatchingItemArray, findMatchingItemObject, generateSourceObjectPointers, validateJsonSchema, } from './utils.js';
3
+ import { flattenJsonWithStringFilter } from './flattenJson.js';
4
+ import { gt } from '../../utils/gt.js';
5
+ /**
6
+ * Extracts translated values from a full JSON file back into composite JSON format.
7
+ * This is the inverse of mergeJson - it takes a merged/reconstructed JSON file
8
+ * and extracts the values for a specific locale into the composite structure
9
+ * that the server expects.
10
+ *
11
+ * @param localContent - The full JSON content from the user's local file
12
+ * @param inputPath - The path to the file (used for matching jsonSchema)
13
+ * @param options - Additional options containing jsonSchema config
14
+ * @param targetLocale - The locale to extract values for
15
+ * @param defaultLocale - The default/source locale
16
+ * @returns The composite JSON string, or null if no extraction needed
17
+ */
18
+ export function extractJson(localContent, inputPath, options, targetLocale, defaultLocale) {
19
+ const jsonSchema = validateJsonSchema(options, inputPath);
20
+ if (!jsonSchema) {
21
+ // No schema
22
+ return null;
23
+ }
24
+ let localJson;
25
+ try {
26
+ localJson = JSON.parse(localContent);
27
+ }
28
+ catch {
29
+ logger.error(`Invalid JSON file: ${inputPath}`);
30
+ return null;
31
+ }
32
+ const useCanonicalLocaleKeys = options?.experimentalCanonicalLocaleKeys ?? false;
33
+ const canonicalTargetLocale = useCanonicalLocaleKeys
34
+ ? gt.resolveCanonicalLocale(targetLocale)
35
+ : targetLocale;
36
+ const canonicalDefaultLocale = useCanonicalLocaleKeys
37
+ ? gt.resolveCanonicalLocale(defaultLocale)
38
+ : defaultLocale;
39
+ // Handle include-style schemas (simple path-based extraction)
40
+ if (jsonSchema.include) {
41
+ const extracted = flattenJsonWithStringFilter(localJson, jsonSchema.include);
42
+ return JSON.stringify(extracted, null, 2);
43
+ }
44
+ if (!jsonSchema.composite) {
45
+ logger.error('No include or composite property found in JSON schema');
46
+ return null;
47
+ }
48
+ // Handle composite schemas
49
+ const compositeResult = {};
50
+ // Generate source object pointers from the local JSON
51
+ const sourceObjectPointers = generateSourceObjectPointers(jsonSchema.composite, localJson);
52
+ for (const [sourceObjectPointer, { sourceObjectValue, sourceObjectOptions },] of Object.entries(sourceObjectPointers)) {
53
+ if (sourceObjectOptions.type === 'array') {
54
+ if (!Array.isArray(sourceObjectValue)) {
55
+ logger.warn(`Source object value is not an array at path: ${sourceObjectPointer}`);
56
+ continue;
57
+ }
58
+ // Find the matching items for the target locale
59
+ const matchingTargetLocaleItems = findMatchingItemArray(canonicalTargetLocale, sourceObjectOptions, sourceObjectPointer, sourceObjectValue);
60
+ if (!Object.keys(matchingTargetLocaleItems).length) {
61
+ logger.warn(`No matching items found for locale ${targetLocale} at path: ${sourceObjectPointer}`);
62
+ continue;
63
+ }
64
+ // Also find default locale items
65
+ const matchingDefaultLocaleItems = findMatchingItemArray(canonicalDefaultLocale, sourceObjectOptions, sourceObjectPointer, sourceObjectValue);
66
+ const defaultKeys = Object.keys(matchingDefaultLocaleItems);
67
+ const targetEntries = Object.entries(matchingTargetLocaleItems);
68
+ // Initialize the nested structure for this source object pointer
69
+ if (!compositeResult[sourceObjectPointer]) {
70
+ compositeResult[sourceObjectPointer] = {};
71
+ }
72
+ // For each target item, use the default locale's key position
73
+ for (let i = 0; i < targetEntries.length; i++) {
74
+ const [, { sourceItem }] = targetEntries[i];
75
+ // Extract values at the include paths
76
+ const extractedValues = flattenJsonWithStringFilter(sourceItem, sourceObjectOptions.include);
77
+ // Use default locale key
78
+ const outputKey = i < defaultKeys.length ? defaultKeys[i] : targetEntries[i][0];
79
+ compositeResult[sourceObjectPointer][outputKey] = extractedValues;
80
+ }
81
+ }
82
+ else {
83
+ // Object type
84
+ if (typeof sourceObjectValue !== 'object' || sourceObjectValue === null) {
85
+ logger.warn(`Source object value is not an object at path: ${sourceObjectPointer}`);
86
+ continue;
87
+ }
88
+ // Find the matching item for the target locale
89
+ const matchingTargetItem = findMatchingItemObject(canonicalTargetLocale, sourceObjectPointer, sourceObjectOptions, sourceObjectValue);
90
+ if (!matchingTargetItem.sourceItem) {
91
+ logger.warn(`No matching item found for locale ${targetLocale} at path: ${sourceObjectPointer}`);
92
+ continue;
93
+ }
94
+ // Extract values at the include paths
95
+ const extractedValues = flattenJsonWithStringFilter(matchingTargetItem.sourceItem, sourceObjectOptions.include);
96
+ // Store the extracted values
97
+ compositeResult[sourceObjectPointer] = extractedValues;
98
+ }
99
+ }
100
+ return JSON.stringify(compositeResult, null, 2);
101
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Flattens a JSON object according to a list of JSON paths.
3
+ * @param json - The JSON object to flatten
4
+ * @param jsonPaths - The list of JSON paths to flatten
5
+ * @returns A mapping of json pointers to their values
6
+ */
7
+ export declare function flattenJson(json: any, jsonPaths: string[]): Record<string, any>;
8
+ /**
9
+ * Flattens a JSON object according to a list of JSON paths, only including strings
10
+ * @param json - The JSON object to flatten
11
+ * @param jsonPaths - The list of JSON paths to flatten
12
+ * @returns A mapping of json pointers to their values
13
+ */
14
+ export declare function flattenJsonWithStringFilter(json: any, jsonPaths: string[]): Record<string, any>;