gtx-cli 2.6.31 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/CHANGELOG.md +4 -1261
  2. package/README.md +12 -3
  3. package/dist/bin/bin-entry.js +2 -1
  4. package/dist/config/generateSettings.d.ts +1 -9
  5. package/dist/config/generateSettings.js +1 -214
  6. package/dist/config/resolveConfig.d.ts +1 -4
  7. package/dist/config/resolveConfig.js +1 -33
  8. package/dist/fs/config/setupConfig.d.ts +1 -17
  9. package/dist/fs/config/setupConfig.js +1 -50
  10. package/dist/fs/matchFiles.d.ts +1 -1
  11. package/dist/fs/matchFiles.js +1 -8
  12. package/dist/functions.d.ts +1 -7
  13. package/dist/functions.js +1 -6
  14. package/dist/index.d.ts +1 -4
  15. package/dist/index.js +1 -27
  16. package/dist/main.js +2 -2
  17. package/dist/next/parse/handleInitGT.d.ts +1 -7
  18. package/dist/next/parse/handleInitGT.js +1 -157
  19. package/dist/next/parse/wrapContent.d.ts +1 -12
  20. package/dist/next/parse/wrapContent.js +1 -164
  21. package/dist/react/parse/wrapContent.d.ts +1 -12
  22. package/dist/react/parse/wrapContent.js +1 -162
  23. package/dist/types/index.d.ts +1 -243
  24. package/dist/types/index.js +1 -1
  25. package/dist/utils/installPackage.d.ts +1 -3
  26. package/dist/utils/installPackage.js +1 -77
  27. package/dist/utils/packageInfo.d.ts +1 -3
  28. package/dist/utils/packageInfo.js +1 -17
  29. package/dist/utils/packageJson.d.ts +1 -6
  30. package/dist/utils/packageJson.js +1 -68
  31. package/dist/utils/packageManager.d.ts +1 -28
  32. package/dist/utils/packageManager.js +1 -269
  33. package/package.json +11 -97
  34. package/dist/api/collectUserEditDiffs.d.ts +0 -9
  35. package/dist/api/collectUserEditDiffs.js +0 -159
  36. package/dist/api/downloadFileBatch.d.ts +0 -23
  37. package/dist/api/downloadFileBatch.js +0 -190
  38. package/dist/api/saveLocalEdits.d.ts +0 -6
  39. package/dist/api/saveLocalEdits.js +0 -38
  40. package/dist/cli/base.d.ts +0 -59
  41. package/dist/cli/base.js +0 -529
  42. package/dist/cli/commands/download.d.ts +0 -8
  43. package/dist/cli/commands/download.js +0 -51
  44. package/dist/cli/commands/enqueue.d.ts +0 -9
  45. package/dist/cli/commands/enqueue.js +0 -27
  46. package/dist/cli/commands/setupProject.d.ts +0 -7
  47. package/dist/cli/commands/setupProject.js +0 -37
  48. package/dist/cli/commands/stage.d.ts +0 -9
  49. package/dist/cli/commands/stage.js +0 -59
  50. package/dist/cli/commands/translate.d.ts +0 -7
  51. package/dist/cli/commands/translate.js +0 -70
  52. package/dist/cli/commands/upload.d.ts +0 -13
  53. package/dist/cli/commands/upload.js +0 -142
  54. package/dist/cli/commands/utils/validation.d.ts +0 -13
  55. package/dist/cli/commands/utils/validation.js +0 -38
  56. package/dist/cli/flags.d.ts +0 -15
  57. package/dist/cli/flags.js +0 -70
  58. package/dist/cli/inline.d.ts +0 -17
  59. package/dist/cli/inline.js +0 -135
  60. package/dist/cli/next.d.ts +0 -10
  61. package/dist/cli/next.js +0 -12
  62. package/dist/cli/node.d.ts +0 -10
  63. package/dist/cli/node.js +0 -9
  64. package/dist/cli/react.d.ts +0 -12
  65. package/dist/cli/react.js +0 -72
  66. package/dist/config/optionPresets.d.ts +0 -3
  67. package/dist/config/optionPresets.js +0 -65
  68. package/dist/config/utils.d.ts +0 -2
  69. package/dist/config/utils.js +0 -4
  70. package/dist/config/validateSettings.d.ts +0 -3
  71. package/dist/config/validateSettings.js +0 -32
  72. package/dist/console/colors.d.ts +0 -6
  73. package/dist/console/colors.js +0 -19
  74. package/dist/console/displayTranslateSummary.d.ts +0 -1
  75. package/dist/console/displayTranslateSummary.js +0 -42
  76. package/dist/console/formatting.d.ts +0 -1
  77. package/dist/console/formatting.js +0 -7
  78. package/dist/console/index.d.ts +0 -34
  79. package/dist/console/index.js +0 -46
  80. package/dist/console/logger.d.ts +0 -35
  81. package/dist/console/logger.js +0 -250
  82. package/dist/console/logging.d.ts +0 -52
  83. package/dist/console/logging.js +0 -175
  84. package/dist/formats/files/aggregateFiles.d.ts +0 -4
  85. package/dist/formats/files/aggregateFiles.js +0 -156
  86. package/dist/formats/files/collectFiles.d.ts +0 -6
  87. package/dist/formats/files/collectFiles.js +0 -49
  88. package/dist/formats/files/convertToFileTranslationData.d.ts +0 -15
  89. package/dist/formats/files/convertToFileTranslationData.js +0 -21
  90. package/dist/formats/files/fileMapping.d.ts +0 -11
  91. package/dist/formats/files/fileMapping.js +0 -115
  92. package/dist/formats/files/preprocess/mdx.d.ts +0 -6
  93. package/dist/formats/files/preprocess/mdx.js +0 -14
  94. package/dist/formats/files/preprocess/mintlify.d.ts +0 -5
  95. package/dist/formats/files/preprocess/mintlify.js +0 -15
  96. package/dist/formats/files/preprocessContent.d.ts +0 -8
  97. package/dist/formats/files/preprocessContent.js +0 -23
  98. package/dist/formats/files/save.d.ts +0 -5
  99. package/dist/formats/files/save.js +0 -17
  100. package/dist/formats/files/supportedFiles.d.ts +0 -11
  101. package/dist/formats/files/supportedFiles.js +0 -20
  102. package/dist/formats/json/extractJson.d.ts +0 -15
  103. package/dist/formats/json/extractJson.js +0 -101
  104. package/dist/formats/json/flattenJson.d.ts +0 -14
  105. package/dist/formats/json/flattenJson.js +0 -64
  106. package/dist/formats/json/mergeJson.d.ts +0 -13
  107. package/dist/formats/json/mergeJson.js +0 -367
  108. package/dist/formats/json/parseJson.d.ts +0 -2
  109. package/dist/formats/json/parseJson.js +0 -109
  110. package/dist/formats/json/utils.d.ts +0 -47
  111. package/dist/formats/json/utils.js +0 -150
  112. package/dist/formats/utils.d.ts +0 -2
  113. package/dist/formats/utils.js +0 -24
  114. package/dist/formats/yaml/mergeYaml.d.ts +0 -5
  115. package/dist/formats/yaml/mergeYaml.js +0 -61
  116. package/dist/formats/yaml/parseYaml.d.ts +0 -5
  117. package/dist/formats/yaml/parseYaml.js +0 -24
  118. package/dist/formats/yaml/utils.d.ts +0 -2
  119. package/dist/formats/yaml/utils.js +0 -23
  120. package/dist/fs/clearLocaleDirs.d.ts +0 -8
  121. package/dist/fs/clearLocaleDirs.js +0 -126
  122. package/dist/fs/config/downloadedVersions.d.ts +0 -21
  123. package/dist/fs/config/downloadedVersions.js +0 -50
  124. package/dist/fs/config/loadConfig.d.ts +0 -1
  125. package/dist/fs/config/loadConfig.js +0 -9
  126. package/dist/fs/config/parseFilesConfig.d.ts +0 -27
  127. package/dist/fs/config/parseFilesConfig.js +0 -150
  128. package/dist/fs/config/updateConfig.d.ts +0 -21
  129. package/dist/fs/config/updateConfig.js +0 -57
  130. package/dist/fs/config/updateVersions.d.ts +0 -11
  131. package/dist/fs/config/updateVersions.js +0 -30
  132. package/dist/fs/copyFile.d.ts +0 -7
  133. package/dist/fs/copyFile.js +0 -39
  134. package/dist/fs/createLoadTranslationsFile.d.ts +0 -1
  135. package/dist/fs/createLoadTranslationsFile.js +0 -49
  136. package/dist/fs/determineFramework.d.ts +0 -5
  137. package/dist/fs/determineFramework.js +0 -53
  138. package/dist/fs/findFilepath.d.ts +0 -36
  139. package/dist/fs/findFilepath.js +0 -90
  140. package/dist/fs/index.d.ts +0 -1
  141. package/dist/fs/index.js +0 -1
  142. package/dist/fs/loadJSON.d.ts +0 -6
  143. package/dist/fs/loadJSON.js +0 -17
  144. package/dist/fs/saveJSON.d.ts +0 -1
  145. package/dist/fs/saveJSON.js +0 -7
  146. package/dist/fs/utils.d.ts +0 -1
  147. package/dist/fs/utils.js +0 -16
  148. package/dist/generated/version.d.ts +0 -1
  149. package/dist/generated/version.js +0 -2
  150. package/dist/git/branches.d.ts +0 -7
  151. package/dist/git/branches.js +0 -88
  152. package/dist/hooks/postProcess.d.ts +0 -4
  153. package/dist/hooks/postProcess.js +0 -110
  154. package/dist/locadex/setupFlow.d.ts +0 -2
  155. package/dist/locadex/setupFlow.js +0 -9
  156. package/dist/next/config/parseNextConfig.d.ts +0 -10
  157. package/dist/next/config/parseNextConfig.js +0 -53
  158. package/dist/next/jsx/utils.d.ts +0 -7
  159. package/dist/next/jsx/utils.js +0 -42
  160. package/dist/react/config/createESBuildConfig.d.ts +0 -2
  161. package/dist/react/config/createESBuildConfig.js +0 -119
  162. package/dist/react/jsx/evaluateJsx.d.ts +0 -24
  163. package/dist/react/jsx/evaluateJsx.js +0 -123
  164. package/dist/react/jsx/utils/buildImportMap.d.ts +0 -9
  165. package/dist/react/jsx/utils/buildImportMap.js +0 -30
  166. package/dist/react/jsx/utils/constants.d.ts +0 -15
  167. package/dist/react/jsx/utils/constants.js +0 -49
  168. package/dist/react/jsx/utils/getCalleeNameFromExpression.d.ts +0 -9
  169. package/dist/react/jsx/utils/getCalleeNameFromExpression.js +0 -32
  170. package/dist/react/jsx/utils/getPathsAndAliases.d.ts +0 -21
  171. package/dist/react/jsx/utils/getPathsAndAliases.js +0 -91
  172. package/dist/react/jsx/utils/isNumberLiteral.d.ts +0 -7
  173. package/dist/react/jsx/utils/isNumberLiteral.js +0 -13
  174. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.d.ts +0 -9
  175. package/dist/react/jsx/utils/jsxParsing/addGTIdentifierToSyntaxTree.js +0 -138
  176. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.d.ts +0 -6
  177. package/dist/react/jsx/utils/jsxParsing/handleChildrenWhitespace.js +0 -197
  178. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.d.ts +0 -13
  179. package/dist/react/jsx/utils/jsxParsing/multiplication/findMultiplicationNode.js +0 -42
  180. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.d.ts +0 -5
  181. package/dist/react/jsx/utils/jsxParsing/multiplication/multiplyJsxTree.js +0 -69
  182. package/dist/react/jsx/utils/jsxParsing/parseJsx.d.ts +0 -33
  183. package/dist/react/jsx/utils/jsxParsing/parseJsx.js +0 -918
  184. package/dist/react/jsx/utils/jsxParsing/parseTProps.d.ts +0 -8
  185. package/dist/react/jsx/utils/jsxParsing/parseTProps.js +0 -65
  186. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.d.ts +0 -2
  187. package/dist/react/jsx/utils/jsxParsing/removeNullChildrenFields.js +0 -61
  188. package/dist/react/jsx/utils/jsxParsing/types.d.ts +0 -48
  189. package/dist/react/jsx/utils/jsxParsing/types.js +0 -34
  190. package/dist/react/jsx/utils/mapAttributeName.d.ts +0 -11
  191. package/dist/react/jsx/utils/mapAttributeName.js +0 -12
  192. package/dist/react/jsx/utils/parseAst.d.ts +0 -31
  193. package/dist/react/jsx/utils/parseAst.js +0 -278
  194. package/dist/react/jsx/utils/parseDeclareStatic.d.ts +0 -15
  195. package/dist/react/jsx/utils/parseDeclareStatic.js +0 -540
  196. package/dist/react/jsx/utils/parseString.d.ts +0 -25
  197. package/dist/react/jsx/utils/parseString.js +0 -540
  198. package/dist/react/jsx/utils/parseStringFunction.d.ts +0 -30
  199. package/dist/react/jsx/utils/parseStringFunction.js +0 -348
  200. package/dist/react/jsx/utils/resolveImportPath.d.ts +0 -11
  201. package/dist/react/jsx/utils/resolveImportPath.js +0 -111
  202. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.d.ts +0 -29
  203. package/dist/react/jsx/utils/stringParsing/processTranslationCall/extractStringEntryMetadata.js +0 -86
  204. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.d.ts +0 -14
  205. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleInvalidTranslationCall.js +0 -24
  206. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.d.ts +0 -19
  207. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleLiteralTranslationCall.js +0 -31
  208. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.d.ts +0 -22
  209. package/dist/react/jsx/utils/stringParsing/processTranslationCall/handleStaticTranslationCall.js +0 -51
  210. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.d.ts +0 -18
  211. package/dist/react/jsx/utils/stringParsing/processTranslationCall/index.js +0 -39
  212. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.d.ts +0 -24
  213. package/dist/react/jsx/utils/stringParsing/processTranslationCall/routeTranslationCall.js +0 -68
  214. package/dist/react/jsx/utils/stringParsing/types.d.ts +0 -41
  215. package/dist/react/jsx/utils/stringParsing/types.js +0 -1
  216. package/dist/react/jsx/utils/types.d.ts +0 -14
  217. package/dist/react/jsx/utils/types.js +0 -1
  218. package/dist/react/jsx/utils/validateStringFunction.d.ts +0 -7
  219. package/dist/react/jsx/utils/validateStringFunction.js +0 -31
  220. package/dist/react/jsx/wrapJsx.d.ts +0 -51
  221. package/dist/react/jsx/wrapJsx.js +0 -387
  222. package/dist/react/parse/addVitePlugin/index.d.ts +0 -22
  223. package/dist/react/parse/addVitePlugin/index.js +0 -41
  224. package/dist/react/parse/addVitePlugin/installCompiler.d.ts +0 -8
  225. package/dist/react/parse/addVitePlugin/installCompiler.js +0 -22
  226. package/dist/react/parse/addVitePlugin/updateViteConfig.d.ts +0 -19
  227. package/dist/react/parse/addVitePlugin/updateViteConfig.js +0 -120
  228. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.d.ts +0 -9
  229. package/dist/react/parse/addVitePlugin/utils/addCompilerImport.js +0 -34
  230. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.d.ts +0 -11
  231. package/dist/react/parse/addVitePlugin/utils/addPluginInvocation.js +0 -48
  232. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.d.ts +0 -15
  233. package/dist/react/parse/addVitePlugin/utils/checkCompilerImport.js +0 -113
  234. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.d.ts +0 -12
  235. package/dist/react/parse/addVitePlugin/utils/checkPluginInvocation.js +0 -32
  236. package/dist/react/parse/createDictionaryUpdates.d.ts +0 -3
  237. package/dist/react/parse/createDictionaryUpdates.js +0 -187
  238. package/dist/react/parse/createInlineUpdates.d.ts +0 -13
  239. package/dist/react/parse/createInlineUpdates.js +0 -161
  240. package/dist/react/utils/flattenDictionary.d.ts +0 -20
  241. package/dist/react/utils/flattenDictionary.js +0 -75
  242. package/dist/react/utils/getEntryAndMetadata.d.ts +0 -5
  243. package/dist/react/utils/getEntryAndMetadata.js +0 -11
  244. package/dist/react/utils/getVariableName.d.ts +0 -25
  245. package/dist/react/utils/getVariableName.js +0 -37
  246. package/dist/setup/agentInstructions.d.ts +0 -24
  247. package/dist/setup/agentInstructions.js +0 -138
  248. package/dist/setup/detectFramework.d.ts +0 -31
  249. package/dist/setup/detectFramework.js +0 -106
  250. package/dist/setup/frameworkUtils.d.ts +0 -3
  251. package/dist/setup/frameworkUtils.js +0 -30
  252. package/dist/setup/instructions/base.md +0 -29
  253. package/dist/setup/instructions/gt-next.md +0 -107
  254. package/dist/setup/instructions/gt-react.md +0 -98
  255. package/dist/setup/userInput.d.ts +0 -4
  256. package/dist/setup/userInput.js +0 -32
  257. package/dist/setup/wizard.d.ts +0 -3
  258. package/dist/setup/wizard.js +0 -147
  259. package/dist/state/recentDownloads.d.ts +0 -12
  260. package/dist/state/recentDownloads.js +0 -18
  261. package/dist/state/translateWarnings.d.ts +0 -10
  262. package/dist/state/translateWarnings.js +0 -13
  263. package/dist/translation/parse.d.ts +0 -17
  264. package/dist/translation/parse.js +0 -77
  265. package/dist/translation/stage.d.ts +0 -3
  266. package/dist/translation/stage.js +0 -44
  267. package/dist/translation/validate.d.ts +0 -14
  268. package/dist/translation/validate.js +0 -100
  269. package/dist/types/branch.d.ts +0 -14
  270. package/dist/types/branch.js +0 -1
  271. package/dist/types/data/json.d.ts +0 -6
  272. package/dist/types/data/json.js +0 -1
  273. package/dist/types/data.d.ts +0 -37
  274. package/dist/types/data.js +0 -1
  275. package/dist/types/files.d.ts +0 -8
  276. package/dist/types/files.js +0 -1
  277. package/dist/types/libraries.d.ts +0 -31
  278. package/dist/types/libraries.js +0 -72
  279. package/dist/types/parsing.d.ts +0 -3
  280. package/dist/types/parsing.js +0 -1
  281. package/dist/utils/addExplicitAnchorIds.d.ts +0 -24
  282. package/dist/utils/addExplicitAnchorIds.js +0 -416
  283. package/dist/utils/constants.d.ts +0 -5
  284. package/dist/utils/constants.js +0 -6
  285. package/dist/utils/credentials.d.ts +0 -12
  286. package/dist/utils/credentials.js +0 -120
  287. package/dist/utils/flattenJsonFiles.d.ts +0 -2
  288. package/dist/utils/flattenJsonFiles.js +0 -36
  289. package/dist/utils/gitDiff.d.ts +0 -8
  290. package/dist/utils/gitDiff.js +0 -34
  291. package/dist/utils/gt.d.ts +0 -2
  292. package/dist/utils/gt.js +0 -2
  293. package/dist/utils/hash.d.ts +0 -6
  294. package/dist/utils/hash.js +0 -11
  295. package/dist/utils/headers.d.ts +0 -1
  296. package/dist/utils/headers.js +0 -14
  297. package/dist/utils/localizeRelativeAssets.d.ts +0 -8
  298. package/dist/utils/localizeRelativeAssets.js +0 -166
  299. package/dist/utils/localizeStaticImports.d.ts +0 -15
  300. package/dist/utils/localizeStaticImports.js +0 -397
  301. package/dist/utils/localizeStaticUrls.d.ts +0 -19
  302. package/dist/utils/localizeStaticUrls.js +0 -450
  303. package/dist/utils/mintlifyTitleFallback.d.ts +0 -6
  304. package/dist/utils/mintlifyTitleFallback.js +0 -80
  305. package/dist/utils/parse/needsCJS.d.ts +0 -20
  306. package/dist/utils/parse/needsCJS.js +0 -72
  307. package/dist/utils/persistPostprocessHashes.d.ts +0 -12
  308. package/dist/utils/persistPostprocessHashes.js +0 -39
  309. package/dist/utils/processAnchorIds.d.ts +0 -6
  310. package/dist/utils/processAnchorIds.js +0 -56
  311. package/dist/utils/processOpenApi.d.ts +0 -8
  312. package/dist/utils/processOpenApi.js +0 -651
  313. package/dist/utils/sanitizeFileContent.d.ts +0 -6
  314. package/dist/utils/sanitizeFileContent.js +0 -29
  315. package/dist/utils/sharedStaticAssets.d.ts +0 -9
  316. package/dist/utils/sharedStaticAssets.js +0 -384
  317. package/dist/utils/validateMdx.d.ts +0 -10
  318. package/dist/utils/validateMdx.js +0 -25
  319. package/dist/utils/wrapPlainUrls.d.ts +0 -8
  320. package/dist/utils/wrapPlainUrls.js +0 -72
  321. package/dist/workflows/download.d.ts +0 -32
  322. package/dist/workflows/download.js +0 -131
  323. package/dist/workflows/enqueue.d.ts +0 -17
  324. package/dist/workflows/enqueue.js +0 -59
  325. package/dist/workflows/setupProject.d.ts +0 -13
  326. package/dist/workflows/setupProject.js +0 -48
  327. package/dist/workflows/stage.d.ts +0 -18
  328. package/dist/workflows/stage.js +0 -59
  329. package/dist/workflows/steps/BranchStep.d.ts +0 -13
  330. package/dist/workflows/steps/BranchStep.js +0 -161
  331. package/dist/workflows/steps/DownloadStep.d.ts +0 -19
  332. package/dist/workflows/steps/DownloadStep.js +0 -131
  333. package/dist/workflows/steps/EnqueueStep.d.ts +0 -15
  334. package/dist/workflows/steps/EnqueueStep.js +0 -33
  335. package/dist/workflows/steps/PollJobsStep.d.ts +0 -31
  336. package/dist/workflows/steps/PollJobsStep.js +0 -288
  337. package/dist/workflows/steps/SetupStep.d.ts +0 -16
  338. package/dist/workflows/steps/SetupStep.js +0 -72
  339. package/dist/workflows/steps/UploadSourcesStep.d.ts +0 -27
  340. package/dist/workflows/steps/UploadSourcesStep.js +0 -131
  341. package/dist/workflows/steps/UploadTranslationsStep.d.ts +0 -22
  342. package/dist/workflows/steps/UploadTranslationsStep.js +0 -71
  343. package/dist/workflows/steps/UserEditDiffsStep.d.ts +0 -11
  344. package/dist/workflows/steps/UserEditDiffsStep.js +0 -30
  345. package/dist/workflows/steps/WorkflowStep.d.ts +0 -4
  346. package/dist/workflows/steps/WorkflowStep.js +0 -2
  347. package/dist/workflows/upload.d.ts +0 -15
  348. package/dist/workflows/upload.js +0 -47
@@ -1,30 +0,0 @@
1
- import fs from 'node:fs';
2
- import { displayUpdatedVersionsFile } from '../../console/logging.js';
3
- import { logger } from '../../console/logger.js';
4
- import path from 'node:path';
5
- const STAGED_VERSIONS_FILE = 'staged-versions.json';
6
- // Update the versions.json file with the new version ids
7
- // of the translations that were sent to the API
8
- export async function updateVersions({ configDirectory, versionData, }) {
9
- const versionFilepath = path.join(configDirectory, STAGED_VERSIONS_FILE);
10
- try {
11
- fs.mkdirSync(configDirectory, { recursive: true });
12
- fs.writeFileSync(versionFilepath, JSON.stringify(versionData, null, 2));
13
- // show update in console
14
- displayUpdatedVersionsFile(versionFilepath);
15
- }
16
- catch (error) {
17
- logger.error(`An error occurred while updating ${versionFilepath}: ${error}`);
18
- }
19
- }
20
- export async function getStagedVersions(configDirectory) {
21
- try {
22
- const versionFilepath = path.join(configDirectory, STAGED_VERSIONS_FILE);
23
- const versionData = JSON.parse(fs.readFileSync(versionFilepath, 'utf8'));
24
- return versionData;
25
- }
26
- catch (error) {
27
- logger.error(`An error occurred while getting staged versions: ${error}`);
28
- return {};
29
- }
30
- }
@@ -1,7 +0,0 @@
1
- import { Settings } from '../types/index.js';
2
- /**
3
- * Copy a file to target locale without translation
4
- *
5
- * This is a naive approach, does not allow for wild cards
6
- */
7
- export default function copyFile(settings: Settings): Promise<void>;
@@ -1,39 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- import { logger } from '../console/logger.js';
4
- /**
5
- * Copy a file to target locale without translation
6
- *
7
- * This is a naive approach, does not allow for wild cards
8
- */
9
- export default async function copyFile(settings) {
10
- if (!settings.options?.copyFiles || settings.options.copyFiles.length === 0) {
11
- return;
12
- }
13
- // Construct a map of source paths to target paths
14
- const copyFiles = settings.options.copyFiles.reduce((paths, filePathTemplate) => {
15
- const sourcePath = path.join(process.cwd(), filePathTemplate.replace('[locale]', settings.defaultLocale));
16
- if (!fs.existsSync(sourcePath)) {
17
- logger.error(`Failed to copy files: File path does not exist: ${sourcePath}`);
18
- return paths;
19
- }
20
- paths[sourcePath] = [];
21
- for (const locale of settings.locales) {
22
- if (locale === settings.defaultLocale)
23
- continue;
24
- const targetPath = path.join(process.cwd(), filePathTemplate.replace('[locale]', locale));
25
- paths[sourcePath].push(targetPath);
26
- }
27
- return paths;
28
- }, {});
29
- // Copy each file to the target locale
30
- for (const sourcePath in copyFiles) {
31
- for (const targetPath of copyFiles[sourcePath]) {
32
- // Ensure the target directory exists
33
- const targetDir = path.dirname(targetPath);
34
- await fs.promises.mkdir(targetDir, { recursive: true });
35
- // Copy the file
36
- await fs.promises.copyFile(sourcePath, targetPath);
37
- }
38
- }
39
- }
@@ -1 +0,0 @@
1
- export declare function createLoadTranslationsFile(appDirectory: string, translationsDir: string | undefined, locales: string[]): Promise<void>;
@@ -1,49 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { logger } from '../console/logger.js';
4
- import chalk from 'chalk';
5
- export async function createLoadTranslationsFile(appDirectory, translationsDir = './public/_gt', locales) {
6
- const usingSrcDirectory = fs.existsSync(path.join(appDirectory, 'src'));
7
- // Calculate the relative path from the loadTranslations.js location to the translations directory
8
- const loadTranslationsDir = usingSrcDirectory
9
- ? path.join(appDirectory, 'src')
10
- : appDirectory;
11
- const relativePath = path.relative(loadTranslationsDir, path.resolve(appDirectory, translationsDir));
12
- const publicPath = relativePath ? `${relativePath}/` : './';
13
- const filePath = usingSrcDirectory
14
- ? path.join(appDirectory, 'src', 'loadTranslations.js')
15
- : path.join(appDirectory, 'loadTranslations.js');
16
- if (!fs.existsSync(filePath)) {
17
- const loadTranslationsContent = `
18
- export default async function loadTranslations(locale) {
19
- try {
20
- // Load translations from ${translationsDir} directory
21
- // This matches the GT config files.gt.output path
22
- const t = await import(\`${publicPath}\${locale}.json\`);
23
- return t.default;
24
- } catch (error) {
25
- console.warn(\`Failed to load translations for locale \${locale}:\`, error);
26
- return {};
27
- }
28
- }
29
- `;
30
- await fs.promises.writeFile(filePath, loadTranslationsContent);
31
- logger.info(`Created ${chalk.cyan('loadTranslations.js')} file at ${chalk.cyan(filePath)}.`);
32
- try {
33
- await fs.promises.mkdir(translationsDir, { recursive: true });
34
- // Create empty JSON files
35
- for (const locale of locales) {
36
- if (fs.existsSync(path.join(translationsDir, `${locale}.json`))) {
37
- continue;
38
- }
39
- await fs.promises.writeFile(path.join(translationsDir, `${locale}.json`), '{}');
40
- }
41
- }
42
- catch (error) {
43
- logger.error(`Failed to create translations directory: ${error}`);
44
- }
45
- }
46
- else {
47
- logger.info(`Found ${chalk.cyan('loadTranslations.js')} file at ${chalk.cyan(filePath)}. Skipping creation...`);
48
- }
49
- }
@@ -1,5 +0,0 @@
1
- import { SupportedLibraries } from '../types/index.js';
2
- export declare function determineLibrary(): {
3
- library: SupportedLibraries;
4
- additionalModules: SupportedLibraries[];
5
- };
@@ -1,53 +0,0 @@
1
- import chalk from 'chalk';
2
- import path from 'node:path';
3
- import fs from 'node:fs';
4
- import { logger } from '../console/logger.js';
5
- import { Libraries } from '../types/libraries.js';
6
- export function determineLibrary() {
7
- let library = 'base';
8
- const additionalModules = [];
9
- try {
10
- // Get the current working directory (where the CLI is being run)
11
- const cwd = process.cwd();
12
- const packageJsonPath = path.join(cwd, 'package.json');
13
- // Check if package.json exists
14
- if (!fs.existsSync(packageJsonPath)) {
15
- logger.warn(chalk.yellow('No package.json found in the current directory. Please run this command from the root of your project.'));
16
- return { library: 'base', additionalModules: [] };
17
- }
18
- // Read and parse package.json
19
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
20
- const dependencies = {
21
- ...packageJson.dependencies,
22
- ...packageJson.devDependencies,
23
- };
24
- // Check for gt-next or gt-react in dependencies
25
- if (dependencies[Libraries.GT_NEXT]) {
26
- library = Libraries.GT_NEXT;
27
- }
28
- else if (dependencies[Libraries.GT_REACT]) {
29
- library = Libraries.GT_REACT;
30
- }
31
- else if (dependencies[Libraries.GT_REACT_NATIVE]) {
32
- library = Libraries.GT_REACT_NATIVE;
33
- }
34
- else if (dependencies[Libraries.GT_NODE]) {
35
- library = Libraries.GT_NODE;
36
- }
37
- else if (dependencies['next-intl']) {
38
- library = 'next-intl';
39
- }
40
- else if (dependencies['i18next']) {
41
- library = 'i18next';
42
- }
43
- if (dependencies['i18next-icu']) {
44
- additionalModules.push('i18next-icu');
45
- }
46
- // Fallback to base if neither is found
47
- return { library, additionalModules };
48
- }
49
- catch (error) {
50
- logger.error('Error determining framework: ' + String(error));
51
- return { library: 'base', additionalModules: [] };
52
- }
53
- }
@@ -1,36 +0,0 @@
1
- /**
2
- * Resolve the file path from the given file path or default paths.
3
- * @param {string} filePath - The file path to resolve.
4
- * @param {string[]} defaultPaths - The default paths to check.
5
- * @returns {string} - The resolved file path.
6
- */
7
- export default function findFilepath(paths: string[], errorMessage?: string): string;
8
- /**
9
- * Resolve the file paths from the given file paths or default paths.
10
- * @param {string[]} paths - The file paths to resolve.
11
- * @param {string} errorMessage - The error message to throw if no paths are found.
12
- * @returns {string[]} - The resolved file paths.
13
- */
14
- export declare function findFilepaths(paths: string[], errorMessage?: string): string[];
15
- export declare function getRelativePath(file: string, srcDirectory: string): string;
16
- /**
17
- * Find a file in a directory based on a wildcard pattern.
18
- * @param {string} filePattern - The wildcard pattern to search for.
19
- * @param {string} file - The file to search for.
20
- * @returns {string} - The path to the file.
21
- */
22
- export declare function findFile(filePattern: string, file: string): string;
23
- /**
24
- * Read a file and return the contents.
25
- * @param {string} filePath - The path to the file to read.
26
- * @returns {string} - The contents of the file.
27
- */
28
- export declare function readFile(filePath: string): string;
29
- /**
30
- * Find a file in a directory.
31
- * @param {string} dir - The directory to search in.
32
- * @param {string} file - The file to search for.
33
- * @returns {string} - The path to the file.
34
- */
35
- export declare function findFileInDir(dir: string, file: string): string;
36
- export declare function getRelative(absolutePath: string): string;
@@ -1,90 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- import { logger } from '../console/logger.js';
4
- import { exitSync } from '../console/logging.js';
5
- /**
6
- * Resolve the file path from the given file path or default paths.
7
- * @param {string} filePath - The file path to resolve.
8
- * @param {string[]} defaultPaths - The default paths to check.
9
- * @returns {string} - The resolved file path.
10
- */
11
- export default function findFilepath(paths, errorMessage = '') {
12
- return findFilepaths(paths, errorMessage)?.[0] || '';
13
- }
14
- /**
15
- * Resolve the file paths from the given file paths or default paths.
16
- * @param {string[]} paths - The file paths to resolve.
17
- * @param {string} errorMessage - The error message to throw if no paths are found.
18
- * @returns {string[]} - The resolved file paths.
19
- */
20
- export function findFilepaths(paths, errorMessage = '') {
21
- const resolvedPaths = [];
22
- for (const possiblePath of paths) {
23
- if (fs.existsSync(possiblePath)) {
24
- resolvedPaths.push(possiblePath);
25
- }
26
- }
27
- if (errorMessage) {
28
- logger.error(errorMessage);
29
- exitSync(1);
30
- }
31
- return resolvedPaths;
32
- }
33
- export function getRelativePath(file, srcDirectory) {
34
- // Create relative path from src directory and remove extension
35
- return path
36
- .relative(srcDirectory, file.replace(/\.[^/.]+$/, '') // Remove file extension
37
- )
38
- .replace(/\\/g, '.') // Replace Windows backslashes with dots
39
- .split(/[./]/) // Split on dots or forward slashes
40
- .filter(Boolean) // Remove empty segments that might cause extra dots
41
- .map((segment) => segment.replace(/[^a-zA-Z0-9]/g, '_').toLowerCase()) // Convert each segment to snake case
42
- .join('.'); // Rejoin with dots
43
- }
44
- /**
45
- * Find a file in a directory based on a wildcard pattern.
46
- * @param {string} filePattern - The wildcard pattern to search for.
47
- * @param {string} file - The file to search for.
48
- * @returns {string} - The path to the file.
49
- */
50
- export function findFile(filePattern, file) {
51
- // Handle wildcard pattern by replacing the wildcard with the file parameter
52
- const resolvedPath = filePattern.replace(/\*/, file);
53
- if (fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isFile()) {
54
- return fs.readFileSync(resolvedPath, 'utf8');
55
- }
56
- return '';
57
- }
58
- /**
59
- * Read a file and return the contents.
60
- * @param {string} filePath - The path to the file to read.
61
- * @returns {string} - The contents of the file.
62
- */
63
- export function readFile(filePath) {
64
- if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) {
65
- return fs.readFileSync(filePath, 'utf8');
66
- }
67
- return '';
68
- }
69
- /**
70
- * Find a file in a directory.
71
- * @param {string} dir - The directory to search in.
72
- * @param {string} file - The file to search for.
73
- * @returns {string} - The path to the file.
74
- */
75
- export function findFileInDir(dir, file) {
76
- const resolvedPath = path.join(dir, file);
77
- try {
78
- if (fs.existsSync(resolvedPath)) {
79
- return fs.readFileSync(resolvedPath, 'utf8');
80
- }
81
- }
82
- catch (error) {
83
- logger.error('Error finding file in directory: ' + String(error));
84
- }
85
- return '';
86
- }
87
- export function getRelative(absolutePath) {
88
- const path2 = path.resolve(absolutePath);
89
- return path.relative(process.cwd(), path2);
90
- }
@@ -1 +0,0 @@
1
- export {};
package/dist/fs/index.js DELETED
@@ -1 +0,0 @@
1
- export {};
@@ -1,6 +0,0 @@
1
- /**
2
- * Loads a JSON file from a given filepath, returning null if the file is not found or the JSON doesn't parse.
3
- * @param {string} filepath - The path to the JSON file.
4
- * @returns {Record<string, any> | null} - The parsed JSON object or null if an error occurs.
5
- */
6
- export default function loadJSON(filepath: string): Record<string, any> | null;
@@ -1,17 +0,0 @@
1
- import fs from 'node:fs';
2
- import path from 'node:path';
3
- /**
4
- * Loads a JSON file from a given filepath, returning null if the file is not found or the JSON doesn't parse.
5
- * @param {string} filepath - The path to the JSON file.
6
- * @returns {Record<string, any> | null} - The parsed JSON object or null if an error occurs.
7
- */
8
- export default function loadJSON(filepath) {
9
- try {
10
- const data = fs.readFileSync(path.resolve(filepath), 'utf-8');
11
- return JSON.parse(data);
12
- }
13
- catch (error) {
14
- // Return null if the file is not found or JSON parsing fails
15
- return null;
16
- }
17
- }
@@ -1 +0,0 @@
1
- export declare function saveJSON(filepath: string, data: Record<string, any>): Promise<void>;
@@ -1,7 +0,0 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs';
3
- export async function saveJSON(filepath, data) {
4
- // Ensure directory exists
5
- await fs.promises.mkdir(path.dirname(filepath), { recursive: true });
6
- await fs.promises.writeFile(filepath, JSON.stringify(data, null, 2));
7
- }
@@ -1 +0,0 @@
1
- export declare function resolveProjectId(): string | undefined;
package/dist/fs/utils.js DELETED
@@ -1,16 +0,0 @@
1
- export function resolveProjectId() {
2
- const CANDIDATES = [
3
- process.env.GT_PROJECT_ID, // any server side, Remix
4
- process.env.NEXT_PUBLIC_GT_PROJECT_ID, // Next.js
5
- process.env.VITE_GT_PROJECT_ID, // Vite
6
- process.env.REACT_APP_GT_PROJECT_ID, // Create React App
7
- process.env.REDWOOD_ENV_GT_PROJECT_ID, // RedwoodJS
8
- process.env.GATSBY_GT_PROJECT_ID, // Gatsby
9
- process.env.EXPO_PUBLIC_GT_PROJECT_ID, // Expo (React Native)
10
- process.env.RAZZLE_GT_PROJECT_ID, // Razzle
11
- process.env.UMI_GT_PROJECT_ID, // UmiJS
12
- process.env.BLITZ_PUBLIC_GT_PROJECT_ID, // Blitz.js
13
- process.env.PUBLIC_GT_PROJECT_ID, // WMR, Qwik (general "public" convention)
14
- ];
15
- return CANDIDATES.find((projectId) => projectId !== undefined);
16
- }
@@ -1 +0,0 @@
1
- export declare const PACKAGE_VERSION = "2.6.31";
@@ -1,2 +0,0 @@
1
- // This file is auto-generated. Do not edit manually.
2
- export const PACKAGE_VERSION = '2.6.31';
@@ -1,7 +0,0 @@
1
- export declare function getCurrentBranch(remoteName: string): Promise<{
2
- currentBranchName: string;
3
- defaultBranch: boolean;
4
- defaultBranchName: string;
5
- } | null>;
6
- export declare function getIncomingBranches(remoteName: string): Promise<string[]>;
7
- export declare function getCheckedOutBranches(remoteName: string): Promise<string[]>;
@@ -1,88 +0,0 @@
1
- import { execFile } from 'child_process';
2
- import { promisify } from 'util';
3
- const execAsync = promisify(execFile);
4
- const MAX_BRANCHES = 5;
5
- export async function getCurrentBranch(remoteName) {
6
- try {
7
- const { stdout } = await execAsync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {
8
- encoding: 'utf8',
9
- windowsHide: true,
10
- });
11
- const currentBranchName = stdout.trim();
12
- // Get the default branch (usually main or master)
13
- const { stdout: defaultBranchRef } = await execAsync('git', ['symbolic-ref', `refs/remotes/${remoteName}/HEAD`], { encoding: 'utf8', windowsHide: true });
14
- const defaultBranchName = defaultBranchRef
15
- .trim()
16
- .replace(`refs/remotes/${remoteName}/`, '');
17
- const defaultBranch = currentBranchName === defaultBranchName;
18
- return { currentBranchName, defaultBranch, defaultBranchName };
19
- }
20
- catch {
21
- return null;
22
- }
23
- }
24
- export async function getIncomingBranches(remoteName) {
25
- try {
26
- // Get merge commits into the current branch
27
- const { stdout } = await execAsync('git', [
28
- 'log',
29
- '--merges',
30
- '--first-parent',
31
- '--pretty=format:%s',
32
- `-${MAX_BRANCHES}`,
33
- ], {
34
- encoding: 'utf8',
35
- windowsHide: true,
36
- });
37
- if (!stdout.trim()) {
38
- return [];
39
- }
40
- const branches = [];
41
- const lines = stdout.trim().split('\n');
42
- for (const line of lines) {
43
- // Parse merge commit messages:
44
- // - "Merge branch 'feature-name'" or "Merge branch 'feature-name' into main"
45
- // - "Merge pull request #123 from user/branch-name"
46
- const branchMatch = line.match(/Merge branch '([^']+)'/);
47
- const prMatch = line.match(/Merge pull request #\d+ from [^/]+\/(.+)/);
48
- if (branchMatch && branchMatch[1]) {
49
- branches.push(branchMatch[1]);
50
- }
51
- else if (prMatch && prMatch[1]) {
52
- branches.push(prMatch[1]);
53
- }
54
- }
55
- return branches.slice(0, MAX_BRANCHES);
56
- }
57
- catch {
58
- // If log fails or no merges found, return empty array
59
- return [];
60
- }
61
- }
62
- export async function getCheckedOutBranches(remoteName) {
63
- try {
64
- // Get current branch
65
- const currentBranchResult = await getCurrentBranch(remoteName);
66
- if (!currentBranchResult) {
67
- return [];
68
- }
69
- // If we're already on the default branch, return empty
70
- if (currentBranchResult.defaultBranch) {
71
- return [];
72
- }
73
- // Check if there's a merge-base (common ancestor) between default branch and current
74
- // This means the branch was at some point checked out from the default branch
75
- try {
76
- await execAsync('git', ['merge-base', currentBranchResult.defaultBranchName, 'HEAD'], { encoding: 'utf8', windowsHide: true });
77
- // If merge-base exists, the branch shares history with default branch
78
- return [currentBranchResult.defaultBranchName];
79
- }
80
- catch {
81
- // No common ancestor found
82
- return [];
83
- }
84
- }
85
- catch {
86
- return [];
87
- }
88
- }
@@ -1,4 +0,0 @@
1
- type Formatter = 'prettier' | 'biome' | 'eslint';
2
- export declare function detectFormatter(): Promise<Formatter | null>;
3
- export declare function formatFiles(filesUpdated: string[], formatter?: Formatter): Promise<void>;
4
- export {};
@@ -1,110 +0,0 @@
1
- import fs from 'node:fs';
2
- import { spawn } from 'node:child_process';
3
- import chalk from 'chalk';
4
- import { logger } from '../console/logger.js';
5
- export async function detectFormatter() {
6
- // Try Prettier
7
- try {
8
- await import('prettier');
9
- return 'prettier';
10
- }
11
- catch { }
12
- // Try ESLint
13
- try {
14
- await import('eslint');
15
- return 'eslint';
16
- }
17
- catch { }
18
- // Try Biome
19
- try {
20
- return await new Promise((resolve, reject) => {
21
- const child = spawn('npx', ['@biomejs/biome', '--version'], {
22
- stdio: 'ignore',
23
- });
24
- child.on('error', () => {
25
- resolve(null);
26
- });
27
- child.on('close', (code) => {
28
- if (code === 0) {
29
- resolve('biome');
30
- }
31
- else {
32
- resolve(null);
33
- }
34
- });
35
- });
36
- }
37
- catch { }
38
- return null;
39
- }
40
- export async function formatFiles(filesUpdated, formatter) {
41
- if (filesUpdated.length === 0)
42
- return;
43
- try {
44
- const detectedFormatter = formatter || (await detectFormatter());
45
- if (!detectedFormatter) {
46
- logger.warn(chalk.yellow('No supported formatter detected'));
47
- return;
48
- }
49
- if (detectedFormatter === 'prettier') {
50
- logger.message(chalk.dim('Cleaning up with prettier...'));
51
- const prettier = await import('prettier');
52
- for (const file of filesUpdated) {
53
- const config = await prettier.resolveConfig(file);
54
- const content = await fs.promises.readFile(file, 'utf-8');
55
- const formatted = await prettier.format(content, {
56
- ...config,
57
- filepath: file,
58
- });
59
- await fs.promises.writeFile(file, formatted);
60
- }
61
- return;
62
- }
63
- if (detectedFormatter === 'biome') {
64
- logger.message(chalk.dim('Cleaning up with biome...'));
65
- try {
66
- await new Promise((resolve, reject) => {
67
- const args = [
68
- '@biomejs/biome',
69
- 'format',
70
- '--write',
71
- ...filesUpdated.map((file) => file),
72
- ];
73
- const child = spawn('npx', args, {
74
- stdio: ['ignore', 'inherit', 'inherit'],
75
- });
76
- child.on('error', (error) => {
77
- logger.warn(chalk.yellow('Biome formatting failed: ' + error.message));
78
- resolve();
79
- });
80
- child.on('close', (code) => {
81
- if (code !== 0) {
82
- logger.warn(chalk.yellow(`Biome formatting failed with exit code ${code}`));
83
- }
84
- resolve();
85
- });
86
- });
87
- }
88
- catch (error) {
89
- logger.warn(chalk.yellow('Biome formatting failed: ' + String(error)));
90
- }
91
- return;
92
- }
93
- if (detectedFormatter === 'eslint') {
94
- logger.message(chalk.dim('Cleaning up with eslint...'));
95
- const { ESLint } = await import('eslint');
96
- const eslint = new ESLint({
97
- fix: true,
98
- overrideConfigFile: undefined, // Will use project's .eslintrc
99
- });
100
- for (const file of filesUpdated) {
101
- const results = await eslint.lintFiles([file]);
102
- await ESLint.outputFixes(results);
103
- }
104
- return;
105
- }
106
- }
107
- catch (e) {
108
- logger.warn(chalk.yellow('Unable to run code formatter: ' + String(e)));
109
- }
110
- }
@@ -1,2 +0,0 @@
1
- import { Settings } from '../types/index.js';
2
- export declare function setupLocadex(settings: Settings): Promise<void>;
@@ -1,9 +0,0 @@
1
- import { logger } from '../console/logger.js';
2
- import chalk from 'chalk';
3
- export async function setupLocadex(settings) {
4
- const urlToOpen = `${settings.dashboardUrl}/api/integrations/github/start?returnTo=%2Fproject%2Flocadex`;
5
- await import('open').then((open) => open.default(urlToOpen, {
6
- wait: false,
7
- }));
8
- logger.message(`${chalk.dim(`If the browser window didn't open automatically, please open the following link:`)}\n\n${chalk.cyan(urlToOpen)}`);
9
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Extracts projectId, defaultLocale, and locales from a next.config.js file.
3
- * @param {string} filePath - The path to the next.config.js file.
4
- * @returns {object|null} - An object containing the extracted values or null if none found or incorrect types.
5
- */
6
- export declare function parseNextConfig(filePath: string): Promise<{
7
- projectId?: string;
8
- defaultLocale?: string;
9
- locales?: string[];
10
- }>;