gtx-cli 2.6.29 → 2.6.30-alpha.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 (340) hide show
  1. package/README.md +12 -3
  2. package/dist/bin/bin-entry.js +2 -1
  3. package/dist/functions.d.ts +1 -7
  4. package/dist/functions.js +1 -6
  5. package/dist/index.d.ts +1 -4
  6. package/dist/index.js +1 -27
  7. package/dist/main.js +2 -2
  8. package/package.json +9 -60
  9. package/CHANGELOG.md +0 -1255
  10. package/dist/api/collectUserEditDiffs.d.ts +0 -9
  11. package/dist/api/collectUserEditDiffs.js +0 -159
  12. package/dist/api/downloadFileBatch.d.ts +0 -23
  13. package/dist/api/downloadFileBatch.js +0 -190
  14. package/dist/api/saveLocalEdits.d.ts +0 -6
  15. package/dist/api/saveLocalEdits.js +0 -38
  16. package/dist/cli/base.d.ts +0 -59
  17. package/dist/cli/base.js +0 -529
  18. package/dist/cli/commands/download.d.ts +0 -8
  19. package/dist/cli/commands/download.js +0 -51
  20. package/dist/cli/commands/enqueue.d.ts +0 -9
  21. package/dist/cli/commands/enqueue.js +0 -27
  22. package/dist/cli/commands/setupProject.d.ts +0 -7
  23. package/dist/cli/commands/setupProject.js +0 -37
  24. package/dist/cli/commands/stage.d.ts +0 -9
  25. package/dist/cli/commands/stage.js +0 -59
  26. package/dist/cli/commands/translate.d.ts +0 -7
  27. package/dist/cli/commands/translate.js +0 -70
  28. package/dist/cli/commands/upload.d.ts +0 -13
  29. package/dist/cli/commands/upload.js +0 -142
  30. package/dist/cli/commands/utils/validation.d.ts +0 -13
  31. package/dist/cli/commands/utils/validation.js +0 -38
  32. package/dist/cli/flags.d.ts +0 -15
  33. package/dist/cli/flags.js +0 -70
  34. package/dist/cli/inline.d.ts +0 -17
  35. package/dist/cli/inline.js +0 -135
  36. package/dist/cli/next.d.ts +0 -10
  37. package/dist/cli/next.js +0 -12
  38. package/dist/cli/node.d.ts +0 -10
  39. package/dist/cli/node.js +0 -9
  40. package/dist/cli/react.d.ts +0 -12
  41. package/dist/cli/react.js +0 -72
  42. package/dist/config/generateSettings.d.ts +0 -9
  43. package/dist/config/generateSettings.js +0 -214
  44. package/dist/config/optionPresets.d.ts +0 -3
  45. package/dist/config/optionPresets.js +0 -65
  46. package/dist/config/resolveConfig.d.ts +0 -4
  47. package/dist/config/resolveConfig.js +0 -33
  48. package/dist/config/utils.d.ts +0 -2
  49. package/dist/config/utils.js +0 -4
  50. package/dist/config/validateSettings.d.ts +0 -3
  51. package/dist/config/validateSettings.js +0 -32
  52. package/dist/console/colors.d.ts +0 -6
  53. package/dist/console/colors.js +0 -19
  54. package/dist/console/displayTranslateSummary.d.ts +0 -1
  55. package/dist/console/displayTranslateSummary.js +0 -42
  56. package/dist/console/formatting.d.ts +0 -1
  57. package/dist/console/formatting.js +0 -7
  58. package/dist/console/index.d.ts +0 -33
  59. package/dist/console/index.js +0 -44
  60. package/dist/console/logger.d.ts +0 -35
  61. package/dist/console/logger.js +0 -250
  62. package/dist/console/logging.d.ts +0 -52
  63. package/dist/console/logging.js +0 -175
  64. package/dist/formats/files/aggregateFiles.d.ts +0 -4
  65. package/dist/formats/files/aggregateFiles.js +0 -173
  66. package/dist/formats/files/collectFiles.d.ts +0 -6
  67. package/dist/formats/files/collectFiles.js +0 -49
  68. package/dist/formats/files/convertToFileTranslationData.d.ts +0 -15
  69. package/dist/formats/files/convertToFileTranslationData.js +0 -21
  70. package/dist/formats/files/fileMapping.d.ts +0 -11
  71. package/dist/formats/files/fileMapping.js +0 -115
  72. package/dist/formats/files/save.d.ts +0 -5
  73. package/dist/formats/files/save.js +0 -17
  74. package/dist/formats/files/supportedFiles.d.ts +0 -11
  75. package/dist/formats/files/supportedFiles.js +0 -20
  76. package/dist/formats/json/extractJson.d.ts +0 -15
  77. package/dist/formats/json/extractJson.js +0 -101
  78. package/dist/formats/json/flattenJson.d.ts +0 -14
  79. package/dist/formats/json/flattenJson.js +0 -64
  80. package/dist/formats/json/mergeJson.d.ts +0 -13
  81. package/dist/formats/json/mergeJson.js +0 -367
  82. package/dist/formats/json/parseJson.d.ts +0 -2
  83. package/dist/formats/json/parseJson.js +0 -109
  84. package/dist/formats/json/utils.d.ts +0 -47
  85. package/dist/formats/json/utils.js +0 -150
  86. package/dist/formats/utils.d.ts +0 -2
  87. package/dist/formats/utils.js +0 -24
  88. package/dist/formats/yaml/mergeYaml.d.ts +0 -5
  89. package/dist/formats/yaml/mergeYaml.js +0 -61
  90. package/dist/formats/yaml/parseYaml.d.ts +0 -5
  91. package/dist/formats/yaml/parseYaml.js +0 -24
  92. package/dist/formats/yaml/utils.d.ts +0 -2
  93. package/dist/formats/yaml/utils.js +0 -23
  94. package/dist/fs/clearLocaleDirs.d.ts +0 -8
  95. package/dist/fs/clearLocaleDirs.js +0 -126
  96. package/dist/fs/config/downloadedVersions.d.ts +0 -21
  97. package/dist/fs/config/downloadedVersions.js +0 -50
  98. package/dist/fs/config/loadConfig.d.ts +0 -1
  99. package/dist/fs/config/loadConfig.js +0 -9
  100. package/dist/fs/config/parseFilesConfig.d.ts +0 -27
  101. package/dist/fs/config/parseFilesConfig.js +0 -150
  102. package/dist/fs/config/setupConfig.d.ts +0 -17
  103. package/dist/fs/config/setupConfig.js +0 -50
  104. package/dist/fs/config/updateConfig.d.ts +0 -21
  105. package/dist/fs/config/updateConfig.js +0 -57
  106. package/dist/fs/config/updateVersions.d.ts +0 -11
  107. package/dist/fs/config/updateVersions.js +0 -30
  108. package/dist/fs/copyFile.d.ts +0 -7
  109. package/dist/fs/copyFile.js +0 -39
  110. package/dist/fs/createLoadTranslationsFile.d.ts +0 -1
  111. package/dist/fs/createLoadTranslationsFile.js +0 -49
  112. package/dist/fs/determineFramework.d.ts +0 -5
  113. package/dist/fs/determineFramework.js +0 -53
  114. package/dist/fs/findFilepath.d.ts +0 -36
  115. package/dist/fs/findFilepath.js +0 -90
  116. package/dist/fs/index.d.ts +0 -1
  117. package/dist/fs/index.js +0 -1
  118. package/dist/fs/loadJSON.d.ts +0 -6
  119. package/dist/fs/loadJSON.js +0 -17
  120. package/dist/fs/matchFiles.d.ts +0 -1
  121. package/dist/fs/matchFiles.js +0 -8
  122. package/dist/fs/saveJSON.d.ts +0 -1
  123. package/dist/fs/saveJSON.js +0 -7
  124. package/dist/fs/utils.d.ts +0 -1
  125. package/dist/fs/utils.js +0 -16
  126. package/dist/generated/version.d.ts +0 -1
  127. package/dist/generated/version.js +0 -2
  128. package/dist/git/branches.d.ts +0 -7
  129. package/dist/git/branches.js +0 -88
  130. package/dist/hooks/postProcess.d.ts +0 -4
  131. package/dist/hooks/postProcess.js +0 -110
  132. package/dist/locadex/setupFlow.d.ts +0 -2
  133. package/dist/locadex/setupFlow.js +0 -9
  134. package/dist/next/config/parseNextConfig.d.ts +0 -10
  135. package/dist/next/config/parseNextConfig.js +0 -53
  136. package/dist/next/jsx/utils.d.ts +0 -7
  137. package/dist/next/jsx/utils.js +0 -42
  138. package/dist/next/parse/handleInitGT.d.ts +0 -7
  139. package/dist/next/parse/handleInitGT.js +0 -157
  140. package/dist/next/parse/wrapContent.d.ts +0 -12
  141. package/dist/next/parse/wrapContent.js +0 -164
  142. package/dist/react/config/createESBuildConfig.d.ts +0 -2
  143. package/dist/react/config/createESBuildConfig.js +0 -119
  144. package/dist/react/jsx/evaluateJsx.d.ts +0 -24
  145. package/dist/react/jsx/evaluateJsx.js +0 -123
  146. package/dist/react/jsx/utils/buildImportMap.d.ts +0 -9
  147. package/dist/react/jsx/utils/buildImportMap.js +0 -30
  148. package/dist/react/jsx/utils/constants.d.ts +0 -13
  149. package/dist/react/jsx/utils/constants.js +0 -46
  150. package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +0 -9
  151. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +0 -32
  152. package/dist/react/jsx/utils/getPathsAndAliases.d.ts +0 -21
  153. package/dist/react/jsx/utils/getPathsAndAliases.js +0 -91
  154. package/dist/react/jsx/utils/isNumberLiteral.d.ts +0 -7
  155. package/dist/react/jsx/utils/isNumberLiteral.js +0 -13
  156. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +0 -9
  157. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +0 -135
  158. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +0 -6
  159. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +0 -197
  160. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +0 -13
  161. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +0 -42
  162. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +0 -5
  163. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +0 -69
  164. package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +0 -33
  165. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +0 -912
  166. package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +0 -8
  167. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +0 -65
  168. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +0 -2
  169. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +0 -61
  170. package/dist/react/jsx/utils/jsxParsing/types.d.ts +0 -48
  171. package/dist/react/jsx/utils/jsxParsing/types.js +0 -34
  172. package/dist/react/jsx/utils/mapAttributeName.d.ts +0 -11
  173. package/dist/react/jsx/utils/mapAttributeName.js +0 -12
  174. package/dist/react/jsx/utils/parseAst.d.ts +0 -31
  175. package/dist/react/jsx/utils/parseAst.js +0 -278
  176. package/dist/react/jsx/utils/parseDeclareStatic.d.ts +0 -15
  177. package/dist/react/jsx/utils/parseDeclareStatic.js +0 -540
  178. package/dist/react/jsx/utils/parseString.d.ts +0 -25
  179. package/dist/react/jsx/utils/parseString.js +0 -540
  180. package/dist/react/jsx/utils/parseStringFunction.d.ts +0 -30
  181. package/dist/react/jsx/utils/parseStringFunction.js +0 -348
  182. package/dist/react/jsx/utils/resolveImportPath.d.ts +0 -11
  183. package/dist/react/jsx/utils/resolveImportPath.js +0 -111
  184. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +0 -29
  185. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +0 -86
  186. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +0 -14
  187. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +0 -24
  188. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +0 -19
  189. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +0 -31
  190. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +0 -22
  191. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +0 -51
  192. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +0 -18
  193. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +0 -39
  194. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +0 -24
  195. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +0 -68
  196. package/dist/react/jsx/utils/stringParsing/types.d.ts +0 -41
  197. package/dist/react/jsx/utils/stringParsing/types.js +0 -1
  198. package/dist/react/jsx/utils/types.d.ts +0 -14
  199. package/dist/react/jsx/utils/types.js +0 -1
  200. package/dist/react/jsx/utils/validateStringFunction.d.ts +0 -7
  201. package/dist/react/jsx/utils/validateStringFunction.js +0 -31
  202. package/dist/react/jsx/wrapJsx.d.ts +0 -51
  203. package/dist/react/jsx/wrapJsx.js +0 -387
  204. package/dist/react/parse/addVitePlugin/index.d.ts +0 -22
  205. package/dist/react/parse/addVitePlugin/index.js +0 -41
  206. package/dist/react/parse/addVitePlugin/installCompiler.d.ts +0 -8
  207. package/dist/react/parse/addVitePlugin/installCompiler.js +0 -22
  208. package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +0 -19
  209. package/dist/react/parse/addVitePlugin/updateViteConfig.js +0 -120
  210. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +0 -9
  211. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +0 -34
  212. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +0 -11
  213. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +0 -48
  214. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +0 -15
  215. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +0 -113
  216. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +0 -12
  217. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +0 -32
  218. package/dist/react/parse/createDictionaryUpdates.d.ts +0 -3
  219. package/dist/react/parse/createDictionaryUpdates.js +0 -187
  220. package/dist/react/parse/createInlineUpdates.d.ts +0 -13
  221. package/dist/react/parse/createInlineUpdates.js +0 -161
  222. package/dist/react/parse/wrapContent.d.ts +0 -12
  223. package/dist/react/parse/wrapContent.js +0 -162
  224. package/dist/react/utils/flattenDictionary.d.ts +0 -20
  225. package/dist/react/utils/flattenDictionary.js +0 -75
  226. package/dist/react/utils/getEntryAndMetadata.d.ts +0 -5
  227. package/dist/react/utils/getEntryAndMetadata.js +0 -11
  228. package/dist/react/utils/getVariableName.d.ts +0 -25
  229. package/dist/react/utils/getVariableName.js +0 -37
  230. package/dist/setup/agentInstructions.d.ts +0 -24
  231. package/dist/setup/agentInstructions.js +0 -138
  232. package/dist/setup/detectFramework.d.ts +0 -31
  233. package/dist/setup/detectFramework.js +0 -106
  234. package/dist/setup/frameworkUtils.d.ts +0 -3
  235. package/dist/setup/frameworkUtils.js +0 -30
  236. package/dist/setup/instructions/base.md +0 -29
  237. package/dist/setup/instructions/gt-next.md +0 -107
  238. package/dist/setup/instructions/gt-react.md +0 -98
  239. package/dist/setup/userInput.d.ts +0 -4
  240. package/dist/setup/userInput.js +0 -32
  241. package/dist/setup/wizard.d.ts +0 -3
  242. package/dist/setup/wizard.js +0 -147
  243. package/dist/state/recentDownloads.d.ts +0 -12
  244. package/dist/state/recentDownloads.js +0 -18
  245. package/dist/state/translateWarnings.d.ts +0 -10
  246. package/dist/state/translateWarnings.js +0 -13
  247. package/dist/translation/parse.d.ts +0 -17
  248. package/dist/translation/parse.js +0 -77
  249. package/dist/translation/stage.d.ts +0 -3
  250. package/dist/translation/stage.js +0 -44
  251. package/dist/translation/validate.d.ts +0 -14
  252. package/dist/translation/validate.js +0 -100
  253. package/dist/types/branch.d.ts +0 -14
  254. package/dist/types/branch.js +0 -1
  255. package/dist/types/data/json.d.ts +0 -6
  256. package/dist/types/data/json.js +0 -1
  257. package/dist/types/data.d.ts +0 -37
  258. package/dist/types/data.js +0 -1
  259. package/dist/types/files.d.ts +0 -8
  260. package/dist/types/files.js +0 -1
  261. package/dist/types/index.d.ts +0 -243
  262. package/dist/types/index.js +0 -1
  263. package/dist/types/libraries.d.ts +0 -31
  264. package/dist/types/libraries.js +0 -72
  265. package/dist/types/parsing.d.ts +0 -3
  266. package/dist/types/parsing.js +0 -1
  267. package/dist/utils/addExplicitAnchorIds.d.ts +0 -24
  268. package/dist/utils/addExplicitAnchorIds.js +0 -416
  269. package/dist/utils/constants.d.ts +0 -5
  270. package/dist/utils/constants.js +0 -6
  271. package/dist/utils/credentials.d.ts +0 -12
  272. package/dist/utils/credentials.js +0 -120
  273. package/dist/utils/flattenJsonFiles.d.ts +0 -2
  274. package/dist/utils/flattenJsonFiles.js +0 -36
  275. package/dist/utils/gitDiff.d.ts +0 -8
  276. package/dist/utils/gitDiff.js +0 -34
  277. package/dist/utils/gt.d.ts +0 -2
  278. package/dist/utils/gt.js +0 -2
  279. package/dist/utils/hash.d.ts +0 -6
  280. package/dist/utils/hash.js +0 -11
  281. package/dist/utils/headers.d.ts +0 -1
  282. package/dist/utils/headers.js +0 -14
  283. package/dist/utils/installPackage.d.ts +0 -3
  284. package/dist/utils/installPackage.js +0 -77
  285. package/dist/utils/localizeRelativeAssets.d.ts +0 -8
  286. package/dist/utils/localizeRelativeAssets.js +0 -166
  287. package/dist/utils/localizeStaticImports.d.ts +0 -15
  288. package/dist/utils/localizeStaticImports.js +0 -397
  289. package/dist/utils/localizeStaticUrls.d.ts +0 -19
  290. package/dist/utils/localizeStaticUrls.js +0 -450
  291. package/dist/utils/mintlifyTitleFallback.d.ts +0 -6
  292. package/dist/utils/mintlifyTitleFallback.js +0 -80
  293. package/dist/utils/packageInfo.d.ts +0 -3
  294. package/dist/utils/packageInfo.js +0 -17
  295. package/dist/utils/packageJson.d.ts +0 -6
  296. package/dist/utils/packageJson.js +0 -68
  297. package/dist/utils/packageManager.d.ts +0 -28
  298. package/dist/utils/packageManager.js +0 -269
  299. package/dist/utils/parse/needsCJS.d.ts +0 -20
  300. package/dist/utils/parse/needsCJS.js +0 -72
  301. package/dist/utils/persistPostprocessHashes.d.ts +0 -12
  302. package/dist/utils/persistPostprocessHashes.js +0 -39
  303. package/dist/utils/processAnchorIds.d.ts +0 -6
  304. package/dist/utils/processAnchorIds.js +0 -56
  305. package/dist/utils/processOpenApi.d.ts +0 -8
  306. package/dist/utils/processOpenApi.js +0 -651
  307. package/dist/utils/sanitizeFileContent.d.ts +0 -6
  308. package/dist/utils/sanitizeFileContent.js +0 -29
  309. package/dist/utils/sharedStaticAssets.d.ts +0 -9
  310. package/dist/utils/sharedStaticAssets.js +0 -384
  311. package/dist/utils/validateMdx.d.ts +0 -10
  312. package/dist/utils/validateMdx.js +0 -25
  313. package/dist/workflows/download.d.ts +0 -32
  314. package/dist/workflows/download.js +0 -127
  315. package/dist/workflows/enqueue.d.ts +0 -17
  316. package/dist/workflows/enqueue.js +0 -59
  317. package/dist/workflows/setupProject.d.ts +0 -13
  318. package/dist/workflows/setupProject.js +0 -48
  319. package/dist/workflows/stage.d.ts +0 -18
  320. package/dist/workflows/stage.js +0 -59
  321. package/dist/workflows/steps/BranchStep.d.ts +0 -13
  322. package/dist/workflows/steps/BranchStep.js +0 -161
  323. package/dist/workflows/steps/DownloadStep.d.ts +0 -19
  324. package/dist/workflows/steps/DownloadStep.js +0 -131
  325. package/dist/workflows/steps/EnqueueStep.d.ts +0 -15
  326. package/dist/workflows/steps/EnqueueStep.js +0 -33
  327. package/dist/workflows/steps/PollJobsStep.d.ts +0 -31
  328. package/dist/workflows/steps/PollJobsStep.js +0 -288
  329. package/dist/workflows/steps/SetupStep.d.ts +0 -16
  330. package/dist/workflows/steps/SetupStep.js +0 -72
  331. package/dist/workflows/steps/UploadSourcesStep.d.ts +0 -27
  332. package/dist/workflows/steps/UploadSourcesStep.js +0 -131
  333. package/dist/workflows/steps/UploadTranslationsStep.d.ts +0 -22
  334. package/dist/workflows/steps/UploadTranslationsStep.js +0 -71
  335. package/dist/workflows/steps/UserEditDiffsStep.d.ts +0 -11
  336. package/dist/workflows/steps/UserEditDiffsStep.js +0 -30
  337. package/dist/workflows/steps/WorkflowStep.d.ts +0 -4
  338. package/dist/workflows/steps/WorkflowStep.js +0 -2
  339. package/dist/workflows/upload.d.ts +0 -15
  340. package/dist/workflows/upload.js +0 -47
@@ -1,416 +0,0 @@
1
- import { unified } from 'unified';
2
- import remarkParse from 'remark-parse';
3
- import remarkMdx from 'remark-mdx';
4
- import remarkFrontmatter from 'remark-frontmatter';
5
- import remarkStringify from 'remark-stringify';
6
- import { visit } from 'unist-util-visit';
7
- import { logger } from '../console/logger.js';
8
- import { escapeHtmlInTextNodes, normalizeCJKCharacters } from 'gt-remark';
9
- import { decode } from 'html-entities';
10
- /**
11
- * Generates a slug from heading text
12
- */
13
- function generateSlug(text) {
14
- return text
15
- .toLowerCase()
16
- .replace(/[^\w\s-]/g, '') // Remove special chars except spaces and hyphens
17
- .trim()
18
- .replace(/\s+/g, '-') // Replace spaces with hyphens
19
- .replace(/-+/g, '-') // Replace multiple hyphens with single hyphen
20
- .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
21
- }
22
- /**
23
- * Extracts text content from heading nodes
24
- */
25
- function extractHeadingText(heading) {
26
- let text = '';
27
- visit(heading, ['text', 'inlineCode'], (node) => {
28
- if ('value' in node && typeof node.value === 'string') {
29
- text += node.value;
30
- }
31
- });
32
- return text;
33
- }
34
- /**
35
- * Simple line-by-line heading extractor that skips fenced code blocks.
36
- * Used as a fallback when MDX parsing fails.
37
- */
38
- function extractHeadingsWithFallback(mdxContent) {
39
- const headings = [];
40
- const lines = mdxContent.split('\n');
41
- let position = 0;
42
- let inFence = false;
43
- let fenceChar = null;
44
- for (const line of lines) {
45
- const fenceMatch = line.match(/^(\s*)(`{3,}|~{3,})/);
46
- if (fenceMatch) {
47
- const fenceString = fenceMatch[2];
48
- if (!inFence) {
49
- inFence = true;
50
- fenceChar = fenceString;
51
- }
52
- else if (fenceChar &&
53
- fenceString[0] === fenceChar[0] &&
54
- fenceString.length >= fenceChar.length) {
55
- inFence = false;
56
- fenceChar = null;
57
- }
58
- continue;
59
- }
60
- if (inFence) {
61
- continue;
62
- }
63
- const headingMatch = line.match(/^(#{1,6})\s+(.*)$/);
64
- if (!headingMatch) {
65
- continue;
66
- }
67
- const hashes = headingMatch[1];
68
- const rawText = headingMatch[2];
69
- const { cleanedText, explicitId } = parseHeadingContent(rawText);
70
- if (cleanedText || explicitId) {
71
- headings.push({
72
- text: cleanedText,
73
- level: hashes.length,
74
- slug: explicitId ?? generateSlug(cleanedText),
75
- position: position++,
76
- });
77
- }
78
- }
79
- return headings;
80
- }
81
- function parseHeadingContent(text) {
82
- // Support both {#id} and escaped \{#id\} forms
83
- const anchorMatch = text.match(/(\\\{#([^}]+)\\\}|\{#([^}]+)\})\s*$/);
84
- if (!anchorMatch) {
85
- return { cleanedText: text };
86
- }
87
- const explicitId = anchorMatch[2] || anchorMatch[3];
88
- const cleanedText = text.replace(anchorMatch[0], '').trimEnd();
89
- return { cleanedText, explicitId };
90
- }
91
- /**
92
- * Checks if a heading is already wrapped in a div with id
93
- */
94
- function hasExplicitId(heading, ast) {
95
- const lastChild = heading.children[heading.children.length - 1];
96
- if (lastChild?.type === 'text') {
97
- return /(\{#[^}]+\}|\\\{#[^}]+\\\}|\[[^\]]+\])\s*$/.test(lastChild.value);
98
- }
99
- return false;
100
- }
101
- /**
102
- * Extracts heading information from content (read-only, no modifications)
103
- */
104
- export function extractHeadingInfo(mdxContent) {
105
- const headings = [];
106
- // Parse the MDX content into an AST
107
- let processedAst;
108
- try {
109
- const parseProcessor = unified()
110
- .use(remarkParse)
111
- .use(remarkFrontmatter, ['yaml', 'toml'])
112
- .use(remarkMdx);
113
- const ast = parseProcessor.parse(mdxContent);
114
- processedAst = parseProcessor.runSync(ast);
115
- }
116
- catch {
117
- // Fallback: line-by-line extraction skipping fenced code blocks
118
- return extractHeadingsWithFallback(mdxContent);
119
- }
120
- let position = 0;
121
- visit(processedAst, 'heading', (heading) => {
122
- const headingText = extractHeadingText(heading);
123
- const { cleanedText, explicitId } = parseHeadingContent(headingText);
124
- if (cleanedText || explicitId) {
125
- const slug = explicitId ?? generateSlug(cleanedText);
126
- headings.push({
127
- text: cleanedText,
128
- level: heading.depth,
129
- slug,
130
- position: position++,
131
- });
132
- }
133
- });
134
- return headings;
135
- }
136
- /**
137
- * Applies anchor IDs to translated content based on source heading mapping
138
- */
139
- export function addExplicitAnchorIds(translatedContent, sourceHeadingMap, settings, sourcePath, translatedPath, fileTypeHint) {
140
- const addedIds = [];
141
- const useDivWrapping = settings?.options?.experimentalAddHeaderAnchorIds === 'mintlify';
142
- // Extract headings from translated content
143
- const translatedHeadings = extractHeadingInfo(translatedContent);
144
- // Pre-processing validation: check if header counts match
145
- if (sourceHeadingMap.length !== translatedHeadings.length) {
146
- const sourceFile = sourcePath
147
- ? `Source file: ${sourcePath}`
148
- : 'Source file';
149
- const translatedFile = translatedPath
150
- ? `translated file: ${translatedPath}`
151
- : 'translated file';
152
- logger.warn(`Header count mismatch detected! ${sourceFile} has ${sourceHeadingMap.length} headers but ${translatedFile} has ${translatedHeadings.length} headers. ` +
153
- `This likely means your source file was edited after translation was requested, causing a mismatch between ` +
154
- `the number of headers in your source file vs the translated file. Please re-translate this file to resolve the issue.`);
155
- }
156
- // Create ID mapping based on positional matching
157
- const idMappings = new Map();
158
- sourceHeadingMap.forEach((sourceHeading, index) => {
159
- const translatedHeading = translatedHeadings[index];
160
- // Match by position and level for safety
161
- if (translatedHeading && translatedHeading.level === sourceHeading.level) {
162
- idMappings.set(index, sourceHeading.slug);
163
- addedIds.push({
164
- heading: translatedHeading.text,
165
- id: sourceHeading.slug,
166
- });
167
- }
168
- });
169
- if (idMappings.size === 0) {
170
- return {
171
- content: translatedContent,
172
- hasChanges: false,
173
- addedIds: [],
174
- };
175
- }
176
- const translatedIsMdx = translatedPath
177
- ? translatedPath.toLowerCase().endsWith('.mdx')
178
- : true; // default to mdx-style escaping when unknown
179
- const shouldEscapeAnchors = fileTypeHint === 'mdx'
180
- ? true
181
- : fileTypeHint === 'md'
182
- ? false
183
- : translatedIsMdx;
184
- // Apply IDs to translated content
185
- let content;
186
- if (useDivWrapping) {
187
- content = applyDivWrappedIds(translatedContent, translatedHeadings, idMappings);
188
- }
189
- else {
190
- content = applyInlineIds(translatedContent, idMappings, shouldEscapeAnchors);
191
- }
192
- return {
193
- content,
194
- hasChanges: content !== translatedContent,
195
- addedIds,
196
- };
197
- }
198
- /**
199
- * Adds inline {#id} syntax to headings (standard markdown approach)
200
- */
201
- function applyInlineIds(translatedContent, idMappings, escapeAnchors) {
202
- const escapeInlineAnchors = (content) => {
203
- if (!escapeAnchors)
204
- return content;
205
- return content.replace(/\{#([A-Za-z0-9-_]+)\}/g, (match, id, offset, str) => {
206
- if (offset > 0 && str[offset - 1] === '\\') {
207
- return match;
208
- }
209
- return `\\{#${id}\\}`;
210
- });
211
- };
212
- // Parse the translated content
213
- let processedAst;
214
- try {
215
- const parseProcessor = unified()
216
- .use(remarkParse)
217
- .use(remarkFrontmatter, ['yaml', 'toml'])
218
- .use(remarkMdx);
219
- const ast = parseProcessor.parse(translatedContent);
220
- processedAst = parseProcessor.runSync(ast);
221
- }
222
- catch {
223
- return applyInlineIdsStringFallback(translatedContent, idMappings, escapeAnchors);
224
- }
225
- // Apply IDs to headings based on position
226
- let headingIndex = 0;
227
- let actuallyModifiedContent = false;
228
- visit(processedAst, 'heading', (heading) => {
229
- const id = idMappings.get(headingIndex);
230
- if (id) {
231
- // Skip if heading already has explicit ID
232
- if (hasExplicitId(heading, processedAst)) {
233
- if (escapeAnchors) {
234
- // Normalize existing inline IDs to escaped form
235
- const lastChild = heading.children[heading.children.length - 1];
236
- if (lastChild?.type === 'text') {
237
- const match = lastChild.value.match(/\{#([^}]+)\}\s*$/);
238
- const alreadyEscaped = lastChild.value.match(/\\\{#[^}]+\\\}\s*$/);
239
- if (match && !alreadyEscaped) {
240
- const anchorId = match[1];
241
- const base = lastChild.value.replace(/\s*\{#[^}]+\}\s*$/, '');
242
- lastChild.value = `${base} \\{#${anchorId}\\}`;
243
- actuallyModifiedContent = true;
244
- }
245
- }
246
- }
247
- headingIndex++;
248
- return;
249
- }
250
- // Add the ID to the heading
251
- const lastChild = heading.children[heading.children.length - 1];
252
- if (lastChild?.type === 'text') {
253
- lastChild.value += escapeAnchors ? ` \\{#${id}\\}` : ` {#${id}}`;
254
- }
255
- else {
256
- // If last child is not text, add a new text node
257
- heading.children.push({
258
- type: 'text',
259
- value: escapeAnchors ? ` \\{#${id}\\}` : ` {#${id}}`,
260
- });
261
- }
262
- actuallyModifiedContent = true;
263
- }
264
- headingIndex++;
265
- });
266
- // If we didn't modify any headings, return original content
267
- if (!actuallyModifiedContent) {
268
- const escaped = escapeInlineAnchors(translatedContent);
269
- return escaped;
270
- }
271
- // Convert the modified AST back to MDX string
272
- try {
273
- const stringifyProcessor = unified()
274
- .use(remarkFrontmatter, ['yaml', 'toml'])
275
- .use(remarkMdx)
276
- .use(normalizeCJKCharacters)
277
- .use(escapeHtmlInTextNodes)
278
- .use(remarkStringify, {
279
- handlers: {
280
- // Custom handler to prevent escaping of {#id} syntax
281
- text(node) {
282
- return node.value;
283
- },
284
- },
285
- });
286
- const outTree = stringifyProcessor.runSync(processedAst);
287
- let content = stringifyProcessor.stringify(outTree);
288
- // Handle newline formatting to match original input
289
- if (content.endsWith('\n') && !translatedContent.endsWith('\n')) {
290
- content = content.slice(0, -1);
291
- }
292
- // Preserve leading newlines from original content
293
- if (translatedContent.startsWith('\n') && !content.startsWith('\n')) {
294
- content = '\n' + content;
295
- }
296
- return content;
297
- }
298
- catch {
299
- return translatedContent;
300
- }
301
- }
302
- /**
303
- * Fallback string-based inline ID application when AST parsing fails
304
- */
305
- function applyInlineIdsStringFallback(translatedContent, idMappings, escapeAnchors) {
306
- let headingIndex = 0;
307
- let inFence = false;
308
- let fenceChar = null;
309
- const processedLines = translatedContent.split('\n').map((line) => {
310
- const fenceMatch = line.match(/^(\s*)(`{3,}|~{3,})/);
311
- if (fenceMatch) {
312
- const fenceString = fenceMatch[2];
313
- if (!inFence) {
314
- inFence = true;
315
- fenceChar = fenceString;
316
- }
317
- else if (fenceChar &&
318
- fenceString[0] === fenceChar[0] &&
319
- fenceString.length >= fenceChar.length) {
320
- inFence = false;
321
- fenceChar = null;
322
- }
323
- return line;
324
- }
325
- if (inFence) {
326
- return line;
327
- }
328
- const headingMatch = line.match(/^(#{1,6}\s+)(.*)$/);
329
- if (!headingMatch) {
330
- return line;
331
- }
332
- const prefix = headingMatch[1];
333
- const text = headingMatch[2];
334
- const id = idMappings.get(headingIndex++);
335
- if (!id) {
336
- return line;
337
- }
338
- const hasEscaped = /\\\{#[^}]+\\\}\s*$/.test(text);
339
- const hasUnescaped = /\{#[^}]+\}\s*$/.test(text);
340
- if (hasEscaped) {
341
- return line;
342
- }
343
- if (hasUnescaped) {
344
- if (!escapeAnchors) {
345
- return line;
346
- }
347
- return `${prefix}${text.replace(/\{#([^}]+)\}\s*$/, '\\{#$1\\}')}`;
348
- }
349
- const suffix = escapeAnchors ? ` \\{#${id}\\}` : ` {#${id}}`;
350
- return `${prefix}${text}${suffix}`;
351
- });
352
- return processedLines.join('\n');
353
- }
354
- /**
355
- * Wraps headings in divs with IDs (Mintlify approach)
356
- */
357
- function applyDivWrappedIds(translatedContent, translatedHeadings, idMappings) {
358
- // Extract all heading lines from the translated markdown
359
- const lines = translatedContent.split('\n');
360
- const headingLines = [];
361
- lines.forEach((line, index) => {
362
- const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
363
- if (headingMatch) {
364
- const level = headingMatch[1].length;
365
- headingLines.push({ line, level, index });
366
- }
367
- });
368
- // Use string-based approach to wrap headings in divs
369
- let content = translatedContent;
370
- const headingsToWrap = [];
371
- // Match translated headings with their corresponding lines by position and level
372
- translatedHeadings.forEach((heading, position) => {
373
- const id = idMappings.get(position);
374
- if (id) {
375
- // Find the corresponding original line for this heading
376
- const matchingLine = headingLines.find((hl) => {
377
- // Extract clean text from the original line for comparison
378
- const lineCleanText = hl.line.replace(/^#{1,6}\s+/, '').trim();
379
- // Create a version without markdown formatting for comparison
380
- const cleanLineText = lineCleanText
381
- .replace(/\*\*(.*?)\*\*/g, '$1') // Remove bold
382
- .replace(/\*(.*?)\*/g, '$1') // Remove italic
383
- .replace(/`(.*?)`/g, '$1') // Remove inline code
384
- .replace(/\[(.*?)\]\(.*?\)/g, '$1') // Remove links, keep text
385
- .trim();
386
- const normalizedLineText = decode(cleanLineText).trim();
387
- const normalizedHeadingText = decode(heading.text).trim();
388
- return (normalizedLineText === normalizedHeadingText &&
389
- hl.level === heading.level);
390
- });
391
- if (matchingLine) {
392
- headingsToWrap.push({
393
- originalLine: matchingLine.line,
394
- id,
395
- });
396
- }
397
- }
398
- });
399
- if (headingsToWrap.length > 0) {
400
- // Process headings from longest to shortest original line to avoid partial matches
401
- const sortedHeadings = headingsToWrap.sort((a, b) => b.originalLine.length - a.originalLine.length);
402
- for (const heading of sortedHeadings) {
403
- // If already wrapped with this id, skip (idempotent)
404
- if (content.includes(`<div id="${heading.id}">`)) {
405
- continue;
406
- }
407
- // Escape the original line for use in regex
408
- const escapedLine = heading.originalLine.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
409
- const headingPattern = new RegExp(`^${escapedLine}\\s*$`, 'gm');
410
- content = content.replace(headingPattern, (match) => {
411
- return `<div id="${heading.id}">\n ${match.trim()}\n</div>\n`;
412
- });
413
- }
414
- }
415
- return content;
416
- }
@@ -1,5 +0,0 @@
1
- export declare const GT_DASHBOARD_URL = "https://dash.generaltranslation.com";
2
- export declare const GT_CONFIG_SCHEMA_URL = "https://assets.gtx.dev/config-schema.json";
3
- export declare const TEMPLATE_FILE_NAME = "__INTERNAL_GT_TEMPLATE_NAME__";
4
- export declare const TEMPLATE_FILE_ID: string;
5
- export declare const DEFAULT_GIT_REMOTE_NAME = "origin";
@@ -1,6 +0,0 @@
1
- import { hashStringSync } from './hash.js';
2
- export const GT_DASHBOARD_URL = 'https://dash.generaltranslation.com';
3
- export const GT_CONFIG_SCHEMA_URL = 'https://assets.gtx.dev/config-schema.json';
4
- export const TEMPLATE_FILE_NAME = '__INTERNAL_GT_TEMPLATE_NAME__';
5
- export const TEMPLATE_FILE_ID = hashStringSync(TEMPLATE_FILE_NAME);
6
- export const DEFAULT_GIT_REMOTE_NAME = 'origin';
@@ -1,12 +0,0 @@
1
- import { Settings, SupportedFrameworks } from '../types/index.js';
2
- type Credentials = {
3
- apiKey: string;
4
- projectId: string;
5
- };
6
- export declare function retrieveCredentials(settings: Settings, keyType: 'development' | 'production'): Promise<Credentials>;
7
- export declare function generateCredentialsSession(url: string, keyType: 'development' | 'production'): Promise<{
8
- sessionId: string;
9
- }>;
10
- export declare function areCredentialsSet(): string | undefined;
11
- export declare function setCredentials(credentials: Credentials, type: 'development' | 'production', framework?: SupportedFrameworks, cwd?: string): Promise<void>;
12
- export {};
@@ -1,120 +0,0 @@
1
- import { logErrorAndExit } from '../console/logging.js';
2
- import { logger } from '../console/logger.js';
3
- import path from 'node:path';
4
- import fs from 'node:fs';
5
- import chalk from 'chalk';
6
- // Fetches project ID and API key by opening the dashboard in the browser
7
- export async function retrieveCredentials(settings, keyType) {
8
- // Generate a session ID
9
- const { sessionId } = await generateCredentialsSession(settings.baseUrl, keyType);
10
- const urlToOpen = `${settings.dashboardUrl}/cli/wizard/${sessionId}`;
11
- await import('open').then((open) => open.default(urlToOpen, {
12
- wait: false,
13
- }));
14
- logger.message(`${chalk.dim(`If the browser window didn't open automatically, please open the following link:`)}\n\n${chalk.cyan(urlToOpen)}`);
15
- const spinner = logger.createSpinner('dots');
16
- spinner.start('Waiting for response from dashboard...');
17
- const credentials = await new Promise(async (resolve, reject) => {
18
- const interval = setInterval(async () => {
19
- // Ping the dashboard to see if the credentials are set
20
- try {
21
- const res = await fetch(`${settings.baseUrl}/cli/wizard/${sessionId}`, {
22
- method: 'GET',
23
- });
24
- if (res.status === 200) {
25
- const data = await res.json();
26
- resolve(data);
27
- clearInterval(interval);
28
- clearTimeout(timeout);
29
- fetch(`${settings.baseUrl}/cli/wizard/${sessionId}`, {
30
- method: 'DELETE',
31
- });
32
- }
33
- }
34
- catch (err) {
35
- console.error(err);
36
- }
37
- }, 2000);
38
- // timeout after 1 hour
39
- const timeout = setTimeout(() => {
40
- spinner.stop('Timed out');
41
- clearInterval(interval);
42
- logErrorAndExit('Timed out waiting for response from dashboard');
43
- }, 1000 * 60 * 60);
44
- });
45
- spinner.stop('Received credentials');
46
- return credentials;
47
- }
48
- export async function generateCredentialsSession(url, keyType) {
49
- const res = await fetch(`${url}/cli/wizard/session`, {
50
- method: 'POST',
51
- headers: {
52
- 'Content-Type': 'application/json',
53
- },
54
- body: JSON.stringify({
55
- keyType,
56
- }),
57
- });
58
- if (!res.ok) {
59
- logErrorAndExit('Failed to generate credentials session');
60
- }
61
- return await res.json();
62
- }
63
- // Checks if the credentials are set in the environment variables
64
- export function areCredentialsSet() {
65
- return process.env.GT_PROJECT_ID && process.env.GT_API_KEY;
66
- }
67
- // Sets the credentials in .env.local file
68
- export async function setCredentials(credentials, type, framework, cwd = process.cwd()) {
69
- const envFile = path.join(cwd, '.env.local');
70
- let envContent = '';
71
- // Check if .env.local exists, create it if it doesn't
72
- if (!fs.existsSync(envFile)) {
73
- // File doesn't exist, create it
74
- await fs.promises.writeFile(envFile, '', 'utf8');
75
- // Add .env.local to .gitignore if it exists
76
- const gitignoreFile = path.join(cwd, '.gitignore');
77
- if (fs.existsSync(gitignoreFile)) {
78
- const gitignoreContent = await fs.promises.readFile(gitignoreFile, 'utf8');
79
- if (!gitignoreContent.includes('.env.local')) {
80
- await fs.promises.appendFile(gitignoreFile, '\n.env.local\n', 'utf8');
81
- }
82
- }
83
- else {
84
- // Create .gitignore file with .env.local
85
- await fs.promises.writeFile(gitignoreFile, '.env.local\n', 'utf8');
86
- }
87
- }
88
- else {
89
- // Read existing content
90
- envContent = await fs.promises.readFile(envFile, 'utf8');
91
- }
92
- // Always append the credentials to the file
93
- let prefix = '';
94
- if (framework === 'next-pages') {
95
- prefix = 'NEXT_PUBLIC_';
96
- }
97
- else if (framework === 'vite') {
98
- prefix = 'VITE_';
99
- }
100
- else if (framework === 'gatsby') {
101
- prefix = 'GATSBY_';
102
- }
103
- else if (framework === 'react') {
104
- prefix = 'REACT_APP_';
105
- }
106
- else if (framework === 'redwood') {
107
- prefix = 'REDWOOD_ENV_';
108
- }
109
- envContent += `\n${prefix}GT_PROJECT_ID=${credentials.projectId}\n`;
110
- if (type === 'development') {
111
- envContent += `${prefix || ''}GT_DEV_API_KEY=${credentials.apiKey}\n`;
112
- }
113
- else {
114
- envContent += `GT_API_KEY=${credentials.apiKey}\n`;
115
- }
116
- // Ensure we don't have excessive newlines
117
- envContent = envContent.replace(/\n{3,}/g, '\n\n').trim() + '\n';
118
- // Write the updated content back to the file
119
- await fs.promises.writeFile(envFile, envContent, 'utf8');
120
- }
@@ -1,2 +0,0 @@
1
- import { Settings } from '../types/index.js';
2
- export default function flattenJsonFiles(settings: Settings, includeFiles?: Set<string>): Promise<void>;
@@ -1,36 +0,0 @@
1
- import { createFileMapping } from '../formats/files/fileMapping.js';
2
- import fs from 'node:fs';
3
- export default async function flattenJsonFiles(settings, includeFiles) {
4
- if (!settings.files ||
5
- (Object.keys(settings.files.placeholderPaths).length === 1 &&
6
- settings.files.placeholderPaths.gt)) {
7
- return;
8
- }
9
- const { resolvedPaths: sourceFiles } = settings.files;
10
- const fileMapping = createFileMapping(sourceFiles, settings.files.placeholderPaths, settings.files.transformPaths, settings.locales, settings.defaultLocale);
11
- await Promise.all(Object.values(fileMapping).map(async (filesMap) => {
12
- const targetFiles = Object.values(filesMap).filter((p) => p.endsWith('.json') && (!includeFiles || includeFiles.has(p)));
13
- await Promise.all(targetFiles.map(async (file) => {
14
- // Read each json file
15
- const json = JSON.parse(fs.readFileSync(file, 'utf8'));
16
- // Flatten the json
17
- const flattenedJson = flattenJson(json);
18
- // Write the flattened json to the target file
19
- await fs.promises.writeFile(file, JSON.stringify(flattenedJson, null, 2));
20
- return flattenedJson;
21
- }));
22
- }));
23
- }
24
- function flattenJson(json, prefix = '') {
25
- const result = {};
26
- for (const [key, value] of Object.entries(json)) {
27
- const newKey = prefix ? `${prefix}.${key}` : key;
28
- if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
29
- Object.assign(result, flattenJson(value, newKey));
30
- }
31
- else {
32
- result[newKey] = value;
33
- }
34
- }
35
- return result;
36
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Returns a unified diff using the system's git, comparing two paths even if not in a repo.
3
- * Uses `git diff --no-index` so neither path needs to be tracked by git.
4
- *
5
- * Exit codes: 0 (no changes), 1 (changes), >1 (error). We treat 0/1 as success.
6
- * Throws if git is unavailable or another error occurs.
7
- */
8
- export declare function getGitUnifiedDiff(oldPath: string, newPath: string): Promise<string>;
@@ -1,34 +0,0 @@
1
- import { execFile } from 'node:child_process';
2
- import { promisify } from 'node:util';
3
- const execFileAsync = promisify(execFile);
4
- /**
5
- * Returns a unified diff using the system's git, comparing two paths even if not in a repo.
6
- * Uses `git diff --no-index` so neither path needs to be tracked by git.
7
- *
8
- * Exit codes: 0 (no changes), 1 (changes), >1 (error). We treat 0/1 as success.
9
- * Throws if git is unavailable or another error occurs.
10
- */
11
- export async function getGitUnifiedDiff(oldPath, newPath) {
12
- try {
13
- const res = await execFileAsync('git', [
14
- 'diff',
15
- '--no-index',
16
- '--text',
17
- '--unified=3',
18
- '--no-color',
19
- '--',
20
- oldPath,
21
- newPath,
22
- ], {
23
- windowsHide: true,
24
- });
25
- return res.stdout || '';
26
- }
27
- catch (error) {
28
- // Exit code 1 means differences found; stdout contains the diff
29
- if (error && error.code === 1 && typeof error.stdout === 'string') {
30
- return error.stdout;
31
- }
32
- throw error;
33
- }
34
- }
@@ -1,2 +0,0 @@
1
- import { GT } from 'generaltranslation';
2
- export declare const gt: GT;
package/dist/utils/gt.js DELETED
@@ -1,2 +0,0 @@
1
- import { GT } from 'generaltranslation';
2
- export const gt = new GT();
@@ -1,6 +0,0 @@
1
- /**
2
- * Hashes a string using SHA-256 algorithm.
3
- * @param {string} string - The string to be hashed.
4
- * @returns {string} The hashed string.
5
- */
6
- export declare function hashStringSync(string: string): string;
@@ -1,11 +0,0 @@
1
- import crypto from 'crypto';
2
- /**
3
- * Hashes a string using SHA-256 algorithm.
4
- * @param {string} string - The string to be hashed.
5
- * @returns {string} The hashed string.
6
- */
7
- export function hashStringSync(string) {
8
- const hash = crypto.createHash('sha256');
9
- hash.update(string);
10
- return hash.digest('hex');
11
- }
@@ -1 +0,0 @@
1
- export declare function getAuthHeaders(projectId: string, apiKey: string): Record<string, string>;