prompsit-cli 26.225.1206 → 26.227.2006

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 (361) hide show
  1. package/README.md +10 -4
  2. package/dist/api/auth-session.d.ts +11 -11
  3. package/dist/api/auth-session.d.ts.map +1 -1
  4. package/dist/api/auth-session.js +21 -17
  5. package/dist/api/auth-session.js.map +1 -1
  6. package/dist/api/client.d.ts +4 -4
  7. package/dist/api/client.d.ts.map +1 -1
  8. package/dist/api/client.js +8 -8
  9. package/dist/api/client.js.map +1 -1
  10. package/dist/api/curl.d.ts +30 -0
  11. package/dist/api/curl.d.ts.map +1 -0
  12. package/dist/api/curl.js +115 -0
  13. package/dist/api/curl.js.map +1 -0
  14. package/dist/api/errors.d.ts +2 -3
  15. package/dist/api/errors.d.ts.map +1 -1
  16. package/dist/api/errors.js +4 -2
  17. package/dist/api/errors.js.map +1 -1
  18. package/dist/api/http-utils.d.ts +5 -0
  19. package/dist/api/http-utils.d.ts.map +1 -0
  20. package/dist/api/http-utils.js +19 -0
  21. package/dist/api/http-utils.js.map +1 -0
  22. package/dist/api/models.d.ts +135 -89
  23. package/dist/api/models.d.ts.map +1 -1
  24. package/dist/api/models.js +62 -72
  25. package/dist/api/models.js.map +1 -1
  26. package/dist/api/resources/data.d.ts +3 -5
  27. package/dist/api/resources/data.d.ts.map +1 -1
  28. package/dist/api/resources/data.js +11 -12
  29. package/dist/api/resources/data.js.map +1 -1
  30. package/dist/api/resources/discovery.d.ts +26 -0
  31. package/dist/api/resources/discovery.d.ts.map +1 -0
  32. package/dist/api/resources/discovery.js +46 -0
  33. package/dist/api/resources/discovery.js.map +1 -0
  34. package/dist/api/resources/evaluation.d.ts +9 -12
  35. package/dist/api/resources/evaluation.d.ts.map +1 -1
  36. package/dist/api/resources/evaluation.js +45 -20
  37. package/dist/api/resources/evaluation.js.map +1 -1
  38. package/dist/api/resources/formats.d.ts +1 -1
  39. package/dist/api/resources/formats.js +2 -2
  40. package/dist/api/resources/formats.js.map +1 -1
  41. package/dist/api/resources/jobs.d.ts +7 -8
  42. package/dist/api/resources/jobs.d.ts.map +1 -1
  43. package/dist/api/resources/jobs.js +10 -49
  44. package/dist/api/resources/jobs.js.map +1 -1
  45. package/dist/api/resources/languages.d.ts +25 -0
  46. package/dist/api/resources/languages.d.ts.map +1 -0
  47. package/dist/api/resources/languages.js +44 -0
  48. package/dist/api/resources/languages.js.map +1 -0
  49. package/dist/api/resources/translation.d.ts +8 -16
  50. package/dist/api/resources/translation.d.ts.map +1 -1
  51. package/dist/api/resources/translation.js +11 -15
  52. package/dist/api/resources/translation.js.map +1 -1
  53. package/dist/api/sse-client.d.ts +10 -16
  54. package/dist/api/sse-client.d.ts.map +1 -1
  55. package/dist/api/sse-client.js +158 -197
  56. package/dist/api/sse-client.js.map +1 -1
  57. package/dist/api/sse-models.js +1 -1
  58. package/dist/api/sse-models.js.map +1 -1
  59. package/dist/api/trace.js +1 -1
  60. package/dist/api/trace.js.map +1 -1
  61. package/dist/api/transport.d.ts +28 -1
  62. package/dist/api/transport.d.ts.map +1 -1
  63. package/dist/api/transport.js +89 -17
  64. package/dist/api/transport.js.map +1 -1
  65. package/dist/cli/arg-order.d.ts +2 -0
  66. package/dist/cli/arg-order.d.ts.map +1 -1
  67. package/dist/cli/arg-order.js +2 -0
  68. package/dist/cli/arg-order.js.map +1 -1
  69. package/dist/cli/exit-codes.d.ts +0 -2
  70. package/dist/cli/exit-codes.d.ts.map +1 -1
  71. package/dist/cli/exit-codes.js +0 -2
  72. package/dist/cli/exit-codes.js.map +1 -1
  73. package/dist/cli/exit.d.ts +4 -4
  74. package/dist/cli/exit.d.ts.map +1 -1
  75. package/dist/cli/exit.js +4 -4
  76. package/dist/cli/exit.js.map +1 -1
  77. package/dist/cli/prompts.d.ts +0 -2
  78. package/dist/cli/prompts.d.ts.map +1 -1
  79. package/dist/cli/prompts.js +1 -1
  80. package/dist/cli/prompts.js.map +1 -1
  81. package/dist/commands/auth.d.ts.map +1 -1
  82. package/dist/commands/auth.js +0 -1
  83. package/dist/commands/auth.js.map +1 -1
  84. package/dist/commands/batch-processor.d.ts +38 -0
  85. package/dist/commands/batch-processor.d.ts.map +1 -0
  86. package/dist/commands/batch-processor.js +73 -0
  87. package/dist/commands/batch-processor.js.map +1 -0
  88. package/dist/commands/config/api-url.d.ts.map +1 -1
  89. package/dist/commands/config/api-url.js +4 -1
  90. package/dist/commands/config/api-url.js.map +1 -1
  91. package/dist/commands/config/command.d.ts.map +1 -1
  92. package/dist/commands/config/command.js +3 -2
  93. package/dist/commands/config/command.js.map +1 -1
  94. package/dist/commands/config/language.d.ts.map +1 -1
  95. package/dist/commands/config/language.js.map +1 -1
  96. package/dist/commands/config/reset.d.ts.map +1 -1
  97. package/dist/commands/config/reset.js.map +1 -1
  98. package/dist/commands/config/shared.js +3 -3
  99. package/dist/commands/config/shared.js.map +1 -1
  100. package/dist/commands/config/show.d.ts.map +1 -1
  101. package/dist/commands/config/show.js +0 -13
  102. package/dist/commands/config/show.js.map +1 -1
  103. package/dist/commands/data.d.ts.map +1 -1
  104. package/dist/commands/data.js +241 -68
  105. package/dist/commands/data.js.map +1 -1
  106. package/dist/commands/evaluate.d.ts.map +1 -1
  107. package/dist/commands/evaluate.js +111 -29
  108. package/dist/commands/evaluate.js.map +1 -1
  109. package/dist/commands/formats.d.ts +1 -1
  110. package/dist/commands/formats.d.ts.map +1 -1
  111. package/dist/commands/formats.js +5 -12
  112. package/dist/commands/formats.js.map +1 -1
  113. package/dist/commands/health.d.ts +1 -1
  114. package/dist/commands/health.d.ts.map +1 -1
  115. package/dist/commands/health.js +3 -10
  116. package/dist/commands/health.js.map +1 -1
  117. package/dist/commands/job-tracking.d.ts +13 -5
  118. package/dist/commands/job-tracking.d.ts.map +1 -1
  119. package/dist/commands/job-tracking.js +25 -18
  120. package/dist/commands/job-tracking.js.map +1 -1
  121. package/dist/commands/languages.d.ts +12 -0
  122. package/dist/commands/languages.d.ts.map +1 -0
  123. package/dist/commands/languages.js +48 -0
  124. package/dist/commands/languages.js.map +1 -0
  125. package/dist/commands/mappers.d.ts +15 -3
  126. package/dist/commands/mappers.d.ts.map +1 -1
  127. package/dist/commands/mappers.js +38 -18
  128. package/dist/commands/mappers.js.map +1 -1
  129. package/dist/commands/progress-animator.d.ts +2 -1
  130. package/dist/commands/progress-animator.d.ts.map +1 -1
  131. package/dist/commands/progress-animator.js +4 -2
  132. package/dist/commands/progress-animator.js.map +1 -1
  133. package/dist/commands/translate.d.ts.map +1 -1
  134. package/dist/commands/translate.js +149 -87
  135. package/dist/commands/translate.js.map +1 -1
  136. package/dist/config/credentials.d.ts +11 -87
  137. package/dist/config/credentials.d.ts.map +1 -1
  138. package/dist/config/credentials.js +28 -87
  139. package/dist/config/credentials.js.map +1 -1
  140. package/dist/config/env-parser.d.ts.map +1 -1
  141. package/dist/config/env-parser.js +3 -2
  142. package/dist/config/env-parser.js.map +1 -1
  143. package/dist/config/file-utils.js +1 -1
  144. package/dist/config/file-utils.js.map +1 -1
  145. package/dist/config/index.d.ts +4 -7
  146. package/dist/config/index.d.ts.map +1 -1
  147. package/dist/config/index.js +6 -12
  148. package/dist/config/index.js.map +1 -1
  149. package/dist/config/schemas.d.ts +4 -33
  150. package/dist/config/schemas.d.ts.map +1 -1
  151. package/dist/config/schemas.js +14 -19
  152. package/dist/config/schemas.js.map +1 -1
  153. package/dist/config/settings.d.ts +4 -4
  154. package/dist/config/settings.d.ts.map +1 -1
  155. package/dist/config/settings.js +16 -21
  156. package/dist/config/settings.js.map +1 -1
  157. package/dist/config/toml-io.js +1 -1
  158. package/dist/config/toml-io.js.map +1 -1
  159. package/dist/constants.d.ts +10 -9
  160. package/dist/constants.d.ts.map +1 -1
  161. package/dist/constants.js +10 -9
  162. package/dist/constants.js.map +1 -1
  163. package/dist/errors/catalog.d.ts.map +1 -1
  164. package/dist/errors/catalog.js +6 -8
  165. package/dist/errors/catalog.js.map +1 -1
  166. package/dist/errors/contracts.d.ts.map +1 -1
  167. package/dist/errors/contracts.js +2 -3
  168. package/dist/errors/contracts.js.map +1 -1
  169. package/dist/i18n/cache.d.ts +0 -2
  170. package/dist/i18n/cache.d.ts.map +1 -1
  171. package/dist/i18n/cache.js +4 -4
  172. package/dist/i18n/cache.js.map +1 -1
  173. package/dist/i18n/catalog.d.ts +34 -37
  174. package/dist/i18n/catalog.d.ts.map +1 -1
  175. package/dist/i18n/catalog.js +38 -40
  176. package/dist/i18n/catalog.js.map +1 -1
  177. package/dist/i18n/index.d.ts +0 -1
  178. package/dist/i18n/index.d.ts.map +1 -1
  179. package/dist/i18n/index.js +0 -3
  180. package/dist/i18n/index.js.map +1 -1
  181. package/dist/i18n/translator-adapter.js +1 -1
  182. package/dist/i18n/translator-adapter.js.map +1 -1
  183. package/dist/i18n/translator.d.ts.map +1 -1
  184. package/dist/i18n/translator.js +1 -0
  185. package/dist/i18n/translator.js.map +1 -1
  186. package/dist/index.d.ts +1 -2
  187. package/dist/index.d.ts.map +1 -1
  188. package/dist/index.js +2 -3
  189. package/dist/index.js.map +1 -1
  190. package/dist/logging/console-handler.js +1 -1
  191. package/dist/logging/console-handler.js.map +1 -1
  192. package/dist/logging/file-handler.d.ts.map +1 -1
  193. package/dist/logging/file-handler.js +4 -5
  194. package/dist/logging/file-handler.js.map +1 -1
  195. package/dist/logging/index.d.ts +2 -2
  196. package/dist/logging/index.d.ts.map +1 -1
  197. package/dist/logging/index.js +1 -1
  198. package/dist/logging/index.js.map +1 -1
  199. package/dist/logging/logger.d.ts +18 -22
  200. package/dist/logging/logger.d.ts.map +1 -1
  201. package/dist/logging/logger.js +38 -64
  202. package/dist/logging/logger.js.map +1 -1
  203. package/dist/logging/loki-handler.js +1 -1
  204. package/dist/logging/loki-handler.js.map +1 -1
  205. package/dist/logging/setup.d.ts +4 -3
  206. package/dist/logging/setup.d.ts.map +1 -1
  207. package/dist/logging/setup.js +136 -33
  208. package/dist/logging/setup.js.map +1 -1
  209. package/dist/output/ansi-utils.d.ts +13 -0
  210. package/dist/output/ansi-utils.d.ts.map +1 -0
  211. package/dist/output/ansi-utils.js +37 -0
  212. package/dist/output/ansi-utils.js.map +1 -0
  213. package/dist/output/index.d.ts +2 -5
  214. package/dist/output/index.d.ts.map +1 -1
  215. package/dist/output/index.js +3 -2
  216. package/dist/output/index.js.map +1 -1
  217. package/dist/output/output-events.d.ts +0 -1
  218. package/dist/output/output-events.d.ts.map +1 -1
  219. package/dist/output/tables/catalog.d.ts +5 -2
  220. package/dist/output/tables/catalog.d.ts.map +1 -1
  221. package/dist/output/tables/catalog.js +65 -9
  222. package/dist/output/tables/catalog.js.map +1 -1
  223. package/dist/output/tables/evaluation.d.ts.map +1 -1
  224. package/dist/output/tables/evaluation.js +3 -0
  225. package/dist/output/tables/evaluation.js.map +1 -1
  226. package/dist/output/tables/health-status.d.ts.map +1 -1
  227. package/dist/output/tables/health-status.js +11 -7
  228. package/dist/output/tables/health-status.js.map +1 -1
  229. package/dist/output/tables/index.d.ts +3 -3
  230. package/dist/output/tables/index.d.ts.map +1 -1
  231. package/dist/output/tables/index.js +2 -2
  232. package/dist/output/tables/index.js.map +1 -1
  233. package/dist/output/tables/render.d.ts.map +1 -1
  234. package/dist/output/tables/render.js +2 -10
  235. package/dist/output/tables/render.js.map +1 -1
  236. package/dist/output/terminal.d.ts +1 -5
  237. package/dist/output/terminal.d.ts.map +1 -1
  238. package/dist/output/terminal.js +25 -24
  239. package/dist/output/terminal.js.map +1 -1
  240. package/dist/output/view-models.d.ts +28 -2
  241. package/dist/output/view-models.d.ts.map +1 -1
  242. package/dist/program.d.ts.map +1 -1
  243. package/dist/program.js +21 -29
  244. package/dist/program.js.map +1 -1
  245. package/dist/repl/controller.d.ts.map +1 -1
  246. package/dist/repl/controller.js +82 -47
  247. package/dist/repl/controller.js.map +1 -1
  248. package/dist/repl/core/output-bridge.d.ts.map +1 -1
  249. package/dist/repl/core/output-bridge.js +6 -4
  250. package/dist/repl/core/output-bridge.js.map +1 -1
  251. package/dist/repl/core/progress-types.d.ts +1 -1
  252. package/dist/repl/core/progress-types.d.ts.map +1 -1
  253. package/dist/repl/core/progress-types.js +1 -1
  254. package/dist/repl/core/progress-types.js.map +1 -1
  255. package/dist/repl/examples.d.ts +5 -7
  256. package/dist/repl/examples.d.ts.map +1 -1
  257. package/dist/repl/examples.js +27 -14
  258. package/dist/repl/examples.js.map +1 -1
  259. package/dist/repl/executor.d.ts +2 -4
  260. package/dist/repl/executor.d.ts.map +1 -1
  261. package/dist/repl/executor.js +69 -58
  262. package/dist/repl/executor.js.map +1 -1
  263. package/dist/repl/help.d.ts +10 -3
  264. package/dist/repl/help.d.ts.map +1 -1
  265. package/dist/repl/help.js +31 -4
  266. package/dist/repl/help.js.map +1 -1
  267. package/dist/repl/history/command-history.js +5 -5
  268. package/dist/repl/history/command-history.js.map +1 -1
  269. package/dist/repl/history/output-render.d.ts +1 -3
  270. package/dist/repl/history/output-render.d.ts.map +1 -1
  271. package/dist/repl/history/output-render.js +4 -6
  272. package/dist/repl/history/output-render.js.map +1 -1
  273. package/dist/repl/history/output-store.d.ts.map +1 -1
  274. package/dist/repl/history/output-store.js +6 -3
  275. package/dist/repl/history/output-store.js.map +1 -1
  276. package/dist/repl/input/autocomplete-provider.d.ts.map +1 -1
  277. package/dist/repl/input/autocomplete-provider.js +1 -2
  278. package/dist/repl/input/autocomplete-provider.js.map +1 -1
  279. package/dist/repl/input/completer.d.ts +0 -2
  280. package/dist/repl/input/completer.d.ts.map +1 -1
  281. package/dist/repl/input/completer.js +9 -7
  282. package/dist/repl/input/completer.js.map +1 -1
  283. package/dist/repl/input/ghost-text.d.ts +1 -1
  284. package/dist/repl/input/ghost-text.d.ts.map +1 -1
  285. package/dist/repl/input/ghost-text.js +1 -1
  286. package/dist/repl/input/ghost-text.js.map +1 -1
  287. package/dist/repl/input/input-handler.d.ts.map +1 -1
  288. package/dist/repl/input/input-handler.js +21 -15
  289. package/dist/repl/input/input-handler.js.map +1 -1
  290. package/dist/repl/input/keybindings.d.ts +0 -5
  291. package/dist/repl/input/keybindings.d.ts.map +1 -1
  292. package/dist/repl/input/keybindings.js +0 -65
  293. package/dist/repl/input/keybindings.js.map +1 -1
  294. package/dist/repl/loop.d.ts +1 -2
  295. package/dist/repl/loop.d.ts.map +1 -1
  296. package/dist/repl/loop.js +14 -14
  297. package/dist/repl/loop.js.map +1 -1
  298. package/dist/repl/registry.d.ts +28 -20
  299. package/dist/repl/registry.d.ts.map +1 -1
  300. package/dist/repl/registry.js +229 -171
  301. package/dist/repl/registry.js.map +1 -1
  302. package/dist/repl/service.d.ts +1 -10
  303. package/dist/repl/service.d.ts.map +1 -1
  304. package/dist/repl/service.js +15 -26
  305. package/dist/repl/service.js.map +1 -1
  306. package/dist/repl/ui/components/curl-panel.js +4 -4
  307. package/dist/repl/ui/components/curl-panel.js.map +1 -1
  308. package/dist/repl/ui/components/ghost-text-editor.d.ts +4 -0
  309. package/dist/repl/ui/components/ghost-text-editor.d.ts.map +1 -1
  310. package/dist/repl/ui/components/ghost-text-editor.js +17 -6
  311. package/dist/repl/ui/components/ghost-text-editor.js.map +1 -1
  312. package/dist/repl/ui/components/history-component.d.ts.map +1 -1
  313. package/dist/repl/ui/components/history-component.js +7 -69
  314. package/dist/repl/ui/components/history-component.js.map +1 -1
  315. package/dist/repl/ui/components/progress-bar.js.map +1 -1
  316. package/dist/repl/ui/components/status-bar-line.js +1 -1
  317. package/dist/repl/ui/components/status-bar-line.js.map +1 -1
  318. package/dist/repl/ui/data.js +3 -3
  319. package/dist/repl/ui/data.js.map +1 -1
  320. package/dist/repl/ui/hint-state.d.ts +0 -1
  321. package/dist/repl/ui/hint-state.d.ts.map +1 -1
  322. package/dist/repl/ui/hint-state.js +1 -1
  323. package/dist/repl/ui/hint-state.js.map +1 -1
  324. package/dist/repl/ui/selection-utils.d.ts +28 -0
  325. package/dist/repl/ui/selection-utils.d.ts.map +1 -0
  326. package/dist/repl/ui/selection-utils.js +70 -0
  327. package/dist/repl/ui/selection-utils.js.map +1 -0
  328. package/dist/repl/ui/status-bar.d.ts +1 -4
  329. package/dist/repl/ui/status-bar.d.ts.map +1 -1
  330. package/dist/repl/ui/status-bar.js +6 -33
  331. package/dist/repl/ui/status-bar.js.map +1 -1
  332. package/dist/runtime/async-utils.d.ts +16 -0
  333. package/dist/runtime/async-utils.d.ts.map +1 -0
  334. package/dist/runtime/async-utils.js +40 -0
  335. package/dist/runtime/async-utils.js.map +1 -0
  336. package/dist/runtime/clipboard-win32.d.ts.map +1 -1
  337. package/dist/runtime/clipboard-win32.js +2 -1
  338. package/dist/runtime/clipboard-win32.js.map +1 -1
  339. package/dist/runtime/clipboard.d.ts.map +1 -1
  340. package/dist/runtime/clipboard.js +6 -2
  341. package/dist/runtime/clipboard.js.map +1 -1
  342. package/dist/runtime/external-transport.d.ts.map +1 -1
  343. package/dist/runtime/external-transport.js +1 -1
  344. package/dist/runtime/external-transport.js.map +1 -1
  345. package/dist/runtime/file-args.d.ts +38 -0
  346. package/dist/runtime/file-args.d.ts.map +1 -0
  347. package/dist/runtime/file-args.js +133 -0
  348. package/dist/runtime/file-args.js.map +1 -0
  349. package/dist/runtime/platform.d.ts +0 -2
  350. package/dist/runtime/platform.d.ts.map +1 -1
  351. package/dist/runtime/platform.js +0 -6
  352. package/dist/runtime/platform.js.map +1 -1
  353. package/dist/tui/settings-screen.d.ts +1 -13
  354. package/dist/tui/settings-screen.d.ts.map +1 -1
  355. package/dist/tui/settings-screen.js +46 -34
  356. package/dist/tui/settings-screen.js.map +1 -1
  357. package/dist/version.d.ts.map +1 -1
  358. package/dist/version.js +3 -2
  359. package/dist/version.js.map +1 -1
  360. package/examples/sample.tmx +6 -0
  361. package/package.json +18 -7
@@ -0,0 +1,48 @@
1
+ // Languages command - list available language pairs via GET /v1/translation/languages
2
+ import { Command } from "@commander-js/extra-typings";
3
+ import { getApiClient } from "../api/client.js";
4
+ import { terminal, createLanguagesTableModel } from "../output/index.js";
5
+ import { toLanguagePairVMList } from "./mappers.js";
6
+ import { t } from "../i18n/index.js";
7
+ import { getLogger } from "../logging/index.js";
8
+ import { handleCommandError } from "./error-handler.js";
9
+ const log = getLogger(import.meta.url);
10
+ /**
11
+ * Languages command.
12
+ *
13
+ * Calls GET /v1/translation/languages, displays table or JSON.
14
+ * Supports optional source/target language pair filter.
15
+ */
16
+ export const languagesCommand = new Command("languages")
17
+ .description("List available language pairs")
18
+ .option("-s, --source <lang>", "Filter by source language")
19
+ .option("-t, --target <lang>", "Filter by target language")
20
+ .action(async (opts) => {
21
+ const startMs = Date.now();
22
+ log.info("Command started", { command: "languages" });
23
+ try {
24
+ const pairs = await getApiClient().languages.list(opts.source, opts.target);
25
+ log.info("Command completed", {
26
+ command: "languages",
27
+ duration_ms: String(Date.now() - startMs),
28
+ });
29
+ const vmList = toLanguagePairVMList(pairs);
30
+ if (vmList.length === 0) {
31
+ terminal.info(t("languages.no_results"));
32
+ if (opts.source || opts.target) {
33
+ terminal.info(t("languages.filters", { source: opts.source ?? "*", target: opts.target ?? "*" }));
34
+ }
35
+ }
36
+ else {
37
+ terminal.table(createLanguagesTableModel(vmList));
38
+ terminal.info(`\n${t("languages.total", { count: String(vmList.length) })}`);
39
+ }
40
+ }
41
+ catch (error) {
42
+ handleCommandError(log, error, {
43
+ command: "languages",
44
+ duration_ms: String(Date.now() - startMs),
45
+ });
46
+ }
47
+ });
48
+ //# sourceMappingURL=languages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languages.js","sourceRoot":"","sources":["../../src/commands/languages.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5E,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC5B,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;SAC1C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,QAAQ,CAAC,IAAI,CACX,CAAC,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CACnF,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC;YAClD,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE;YAC7B,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -1,9 +1,21 @@
1
- import type { Engine, EvaluationResponse, FormatInfo, HealthResponse, TranslationResponse } from "../api/models.ts";
2
- import type { EnginePairVM, EvaluationResponseVM, FormatInfoVM, HealthResponseVM, TranslationResponseVM } from "../output/view-models.ts";
1
+ import type { EvaluationResponse, FormatInfo, QeFormatInfo, DataFormatInfo, AnnotateOptionsResponse, HealthResponse, LanguagePairDetail, TranslationResponse } from "../api/models.ts";
2
+ import type { EvaluationResponseVM, FormatInfoVM, QeFormatInfoVM, DataFormatInfoVM, AnnotateOptionsVM, HealthResponseVM, LanguagePairVM, TranslationResponseVM } from "../output/view-models.ts";
3
+ /** Map API health check response to display-layer view model. */
3
4
  export declare function toHealthResponseVM(input: HealthResponse): HealthResponseVM;
5
+ /** Map API translation response to display-layer view model, flattening nested items. */
4
6
  export declare function toTranslationResponseVM(input: TranslationResponse): TranslationResponseVM;
7
+ /** Map API evaluation response to display-layer view model. */
5
8
  export declare function toEvaluationResponseVM(input: EvaluationResponse): EvaluationResponseVM;
6
- export declare function toEnginePairVMList(engines: Engine[]): EnginePairVM[];
9
+ /** Map API language pair details to display-layer view models, joining engine lists. */
10
+ export declare function toLanguagePairVMList(pairs: LanguagePairDetail[]): LanguagePairVM[];
11
+ /** Map API format info to display-layer view model, copying mutable arrays. */
7
12
  export declare function toFormatInfoVM(input: FormatInfo): FormatInfoVM;
13
+ /** Map array of API format info items to display-layer view models. */
8
14
  export declare function toFormatInfoVMList(input: FormatInfo[]): FormatInfoVM[];
15
+ /** Map QE format info to VM list. */
16
+ export declare function toQeFormatInfoVMList(input: QeFormatInfo[]): QeFormatInfoVM[];
17
+ /** Map data format info (score/annotate) to VM list. */
18
+ export declare function toDataFormatInfoVMList(input: DataFormatInfo[]): DataFormatInfoVM[];
19
+ /** Map annotate options response to VM. */
20
+ export declare function toAnnotateOptionsVM(input: AnnotateOptionsResponse): AnnotateOptionsVM;
9
21
  //# sourceMappingURL=mappers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../src/commands/mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,kBAAkB,EAClB,UAAU,EACV,cAAc,EACd,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAS1E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,qBAAqB,CAYzF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,oBAAoB,CAItF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,CAkBpE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAO9D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAEtE"}
1
+ {"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../../src/commands/mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACtB,MAAM,0BAA0B,CAAC;AAElC,iEAAiE;AACjE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,gBAAgB,CAS1E;AAED,yFAAyF;AACzF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,GAAG,qBAAqB,CAYzF;AAED,+DAA+D;AAC/D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,oBAAoB,CAItF;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,kBAAkB,EAAE,GAAG,cAAc,EAAE,CAQlF;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAO9D;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE,CAEtE;AAED,qCAAqC;AACrC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAO5E;AAED,wDAAwD;AACxD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAMlF;AAED,2CAA2C;AAC3C,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,uBAAuB,GAAG,iBAAiB,CAMrF"}
@@ -1,3 +1,4 @@
1
+ /** Map API health check response to display-layer view model. */
1
2
  export function toHealthResponseVM(input) {
2
3
  return {
3
4
  status: input.status,
@@ -8,6 +9,7 @@ export function toHealthResponseVM(input) {
8
9
  timestamp: input.timestamp,
9
10
  };
10
11
  }
12
+ /** Map API translation response to display-layer view model, flattening nested items. */
11
13
  export function toTranslationResponseVM(input) {
12
14
  return {
13
15
  source_lang: input.source_lang,
@@ -21,31 +23,23 @@ export function toTranslationResponseVM(input) {
21
23
  })),
22
24
  };
23
25
  }
26
+ /** Map API evaluation response to display-layer view model. */
24
27
  export function toEvaluationResponseVM(input) {
25
28
  return {
26
29
  corpus_scores: input.corpus_scores,
27
30
  };
28
31
  }
29
- export function toEnginePairVMList(engines) {
30
- const grouped = new Map();
31
- for (const engine of engines) {
32
- for (const pair of engine.supported_pairs) {
33
- const key = `${pair.source}\0${pair.target}`;
34
- const entry = grouped.get(key);
35
- if (entry) {
36
- entry.engines.push(engine.name);
37
- }
38
- else {
39
- grouped.set(key, { source: pair.source, target: pair.target, engines: [engine.name] });
40
- }
41
- }
42
- }
43
- return [...grouped.values()].map((g) => ({
44
- source: g.source,
45
- target: g.target,
46
- engine: g.engines.join(", "),
32
+ /** Map API language pair details to display-layer view models, joining engine lists. */
33
+ export function toLanguagePairVMList(pairs) {
34
+ return pairs.map((p) => ({
35
+ source: p.source,
36
+ source_name: p.source_name,
37
+ target: p.target,
38
+ target_name: p.target_name,
39
+ engines: p.engines.join(", "),
47
40
  }));
48
41
  }
42
+ /** Map API format info to display-layer view model, copying mutable arrays. */
49
43
  export function toFormatInfoVM(input) {
50
44
  return {
51
45
  name: input.name,
@@ -54,7 +48,33 @@ export function toFormatInfoVM(input) {
54
48
  conversions_to: [...input.conversions_to],
55
49
  };
56
50
  }
51
+ /** Map array of API format info items to display-layer view models. */
57
52
  export function toFormatInfoVMList(input) {
58
53
  return input.map(toFormatInfoVM);
59
54
  }
55
+ /** Map QE format info to VM list. */
56
+ export function toQeFormatInfoVMList(input) {
57
+ return input.map((f) => ({
58
+ name: f.name,
59
+ extensions: [...f.extensions],
60
+ description: f.description,
61
+ scoring_metrics: [...f.scoring_metrics],
62
+ }));
63
+ }
64
+ /** Map data format info (score/annotate) to VM list. */
65
+ export function toDataFormatInfoVMList(input) {
66
+ return input.map((f) => ({
67
+ name: f.name,
68
+ extensions: [...f.extensions],
69
+ description: f.description,
70
+ }));
71
+ }
72
+ /** Map annotate options response to VM. */
73
+ export function toAnnotateOptionsVM(input) {
74
+ return {
75
+ pipeline_stages: input.pipeline_stages.map((s) => ({ ...s })),
76
+ lid_models: input.lid_models.map((m) => ({ ...m })),
77
+ filter_defaults: { ...input.filter_defaults },
78
+ };
79
+ }
60
80
  //# sourceMappingURL=mappers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/commands/mappers.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,kBAAkB,CAAC,KAAqB;IACtD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA0B;IAChE,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAyB;IAC9D,OAAO;QACL,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAiB;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiE,CAAC;IACzF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC1C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvC,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;KAC7B,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC;QACjC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"mappers.js","sourceRoot":"","sources":["../../src/commands/mappers.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import type { OnProgress } from "./job-tracking.ts";
1
+ /** Callback for progress updates (percentage 0-100, current step or null). */
2
+ export type OnProgress = (percentage: number, step: string | null) => void;
2
3
  /**
3
4
  * Animates progress between sparse API updates.
4
5
  *
@@ -1 +1 @@
1
- {"version":3,"file":"progress-animator.d.ts","sourceRoot":"","sources":["../../src/commands/progress-animator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAQpD;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,UAAU,EAAE,UAAU,EAAE,MAAM,SAAkB;IAK5D,gDAAgD;IAChD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQrD,4DAA4D;IAC5D,QAAQ,IAAI,IAAI;IAMhB,mEAAmE;IACnE,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,IAAI;IAmBZ,yDAAyD;IACzD,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,UAAU;CAMnB"}
1
+ {"version":3,"file":"progress-animator.d.ts","sourceRoot":"","sources":["../../src/commands/progress-animator.ts"],"names":[],"mappings":"AAIA,8EAA8E;AAC9E,MAAM,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AAQ3E;;;;;;GAMG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,UAAU,EAAE,UAAU,EAAE,MAAM,SAAkB;IAO5D,gDAAgD;IAChD,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQrD,4DAA4D;IAC5D,QAAQ,IAAI,IAAI;IAMhB,mEAAmE;IACnE,IAAI,IAAI,IAAI;IAIZ,OAAO,CAAC,IAAI;IAmBZ,yDAAyD;IACzD,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,UAAU;CAMnB"}
@@ -21,7 +21,9 @@ export class ProgressAnimator {
21
21
  downstream;
22
22
  constructor(downstream, tickMs = DEFAULT_TICK_MS) {
23
23
  this.downstream = downstream;
24
- this.timer = setInterval(() => { this.tick(); }, tickMs);
24
+ this.timer = setInterval(() => {
25
+ this.tick();
26
+ }, tickMs);
25
27
  }
26
28
  /** Called by SSE/polling with real API data. */
27
29
  setTarget(percent, step) {
@@ -63,7 +65,7 @@ export class ProgressAnimator {
63
65
  /** NProgress-inspired diminishing trickle increments. */
64
66
  getTrickleIncrement(current) {
65
67
  if (current < 20)
66
- return 1.0;
68
+ return 1;
67
69
  if (current < 50)
68
70
  return 0.5;
69
71
  if (current < 80)
@@ -1 +1 @@
1
- {"version":3,"file":"progress-animator.js","sourceRoot":"","sources":["../../src/commands/progress-animator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"progress-animator.js","sourceRoot":"","sources":["../../src/commands/progress-animator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAsBtD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,qBAGR,CAAC"}
1
+ {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAwCtD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,qBAGR,CAAC"}
@@ -1,21 +1,36 @@
1
1
  // See API-473, API-497: Translate commands - text (sync) + file (async document)
2
2
  // Command group: translate -> text (sync), file (async upload + track + download).
3
3
  import { Command } from "@commander-js/extra-typings";
4
- import { accessSync, constants as fsConstants } from "node:fs";
5
- import { basename, dirname, extname, join, resolve } from "node:path";
4
+ import { basename } from "node:path";
6
5
  import { getApiClient } from "../api/client.js";
7
- import { isJsonMode } from "../cli/options.js";
8
- import { terminal, createTranslationTableModel, } from "../output/index.js";
9
- import { toTranslationResponseVM } from "./mappers.js";
6
+ import { terminal, createTranslationTableModel, createFormatsTableModel, createLanguagesTableModel, } from "../output/index.js";
7
+ import { toTranslationResponseVM, toFormatInfoVMList, toLanguagePairVMList } from "./mappers.js";
10
8
  import { trackJob } from "./job-tracking.js";
9
+ import { runBatch } from "./batch-processor.js";
11
10
  import { t } from "../i18n/index.js";
12
11
  import { ErrorCode } from "../errors/codes.js";
13
12
  import { getLogger } from "../logging/index.js";
14
13
  import { failCommand, handleCommandError } from "./error-handler.js";
15
14
  import { validateArgOptionOrder } from "../cli/arg-order.js";
15
+ import { expandFileArgs, resolveOutputPaths, FileArgError } from "../runtime/file-args.js";
16
+ import { getCurrentAbortSignal } from "../runtime/request-context.js";
16
17
  const log = getLogger(import.meta.url);
17
18
  // Boolean flags for translate text (don't consume next token as value)
18
- const TEXT_BOOL_FLAGS = new Set(["--qe"]);
19
+ const TEXT_BOOL_FLAGS = new Set(["--qe", "--languages", "-l"]);
20
+ /** Show available language pairs (shared by text + file subcommands). */
21
+ async function showLanguages(source, target) {
22
+ const pairs = await getApiClient().languages.list(source, target);
23
+ const vmList = toLanguagePairVMList(pairs);
24
+ if (vmList.length === 0) {
25
+ terminal.info(t("languages.no_results"));
26
+ if (source || target)
27
+ terminal.info(t("languages.filters", { source: source ?? "*", target: target ?? "*" }));
28
+ }
29
+ else {
30
+ terminal.table(createLanguagesTableModel(vmList));
31
+ terminal.info(`\n${t("languages.total", { count: String(vmList.length) })}`);
32
+ }
33
+ }
19
34
  /**
20
35
  * Translate command group.
21
36
  *
@@ -25,25 +40,6 @@ export const translateCommand = new Command("translate")
25
40
  .summary("Translate text or documents (translate text|file)")
26
41
  .description("Translation commands")
27
42
  .helpCommand(false);
28
- /**
29
- * Build JSON output structure matching Python reference.
30
- *
31
- * Enriches API response with source texts for each translation item.
32
- */
33
- function buildJsonOutput(response, sources) {
34
- return {
35
- source_lang: response.source_lang,
36
- target_lang: response.target_lang,
37
- engine: response.engine,
38
- total_latency_ms: response.total_latency_ms,
39
- translations: response.translations.map((item, i) => ({
40
- source: sources[i] ?? "",
41
- translated_text: item.translated_text,
42
- latency_ms: item.latency_ms,
43
- quality_score: item.quality_score,
44
- })),
45
- };
46
- }
47
43
  /**
48
44
  * Text translation subcommand.
49
45
  *
@@ -53,11 +49,30 @@ function buildJsonOutput(response, sources) {
53
49
  translateCommand
54
50
  .command("text", { isDefault: true, hidden: true })
55
51
  .description("Translate text inline")
56
- .argument("<texts...>", "Text(s) to translate")
57
- .requiredOption("-s, --source <lang>", "Source language code")
58
- .requiredOption("-t, --target <lang>", "Target language code")
52
+ .argument("[texts...]", "Text(s) to translate")
53
+ .option("-s, --source <lang>", "Source language code")
54
+ .option("-t, --target <lang>", "Target language code")
59
55
  .option("--qe", "Enable quality estimation", false)
56
+ .option("-l, --languages", "Show available language pairs", false)
60
57
  .action(async (texts, opts) => {
58
+ // Early-exit: --languages shows available language pairs and returns
59
+ if (opts.languages) {
60
+ await showLanguages(opts.source, opts.target);
61
+ return;
62
+ }
63
+ // Manual validation (Commander can't enforce required args/opts with --languages)
64
+ if (texts.length === 0) {
65
+ failCommand(ErrorCode.VALIDATION, "missing required argument 'texts'");
66
+ return;
67
+ }
68
+ if (!opts.source) {
69
+ failCommand(ErrorCode.VALIDATION, "required option '-s, --source <lang>' not specified");
70
+ return;
71
+ }
72
+ if (!opts.target) {
73
+ failCommand(ErrorCode.VALIDATION, "required option '-t, --target <lang>' not specified");
74
+ return;
75
+ }
61
76
  // POSIX validation: reject interleaved positional args and options (Mikel #10)
62
77
  const textIdx = process.argv.indexOf("text");
63
78
  if (textIdx !== -1) {
@@ -71,16 +86,18 @@ translateCommand
71
86
  const startMs = Date.now();
72
87
  log.info("Command started", { command: "translate text", texts_count: String(texts.length) });
73
88
  try {
74
- const response = await getApiClient().translation.translate(texts, opts.source, opts.target, opts.qe);
89
+ const response = await getApiClient().translation.translate({
90
+ texts,
91
+ sourceLang: opts.source,
92
+ targetLang: opts.target,
93
+ enableQe: opts.qe,
94
+ });
75
95
  log.info("Command completed", {
76
96
  command: "translate text",
77
97
  duration_ms: String(Date.now() - startMs),
78
98
  });
79
- // Output routing: --json > --qe > plain
80
- if (isJsonMode()) {
81
- terminal.json(buildJsonOutput(response, texts));
82
- }
83
- else if (opts.qe) {
99
+ // Output routing: --qe > plain
100
+ if (opts.qe) {
84
101
  terminal.table(createTranslationTableModel(toTranslationResponseVM(response), texts));
85
102
  }
86
103
  else {
@@ -100,73 +117,118 @@ translateCommand
100
117
  // See API-497: File translation subcommand (upload + track + download)
101
118
  translateCommand
102
119
  .command("file")
103
- .description("Translate document file(s) (async)")
104
- .argument("<files...>", "Document file(s) to translate")
105
- .requiredOption("-s, --source <lang>", "Source language code")
106
- .requiredOption("-t, --target <lang>", "Target language code")
107
- .option("-o, --output <path>", "Output file path (single file only)")
120
+ .description("Translate document file(s)")
121
+ .argument("[files...]", "Document file(s) to translate")
122
+ .option("-s, --source <lang>", "Source language code")
123
+ .option("-t, --target <lang>", "Target language code")
124
+ .option("--out <dir>", "Output directory (default: beside input file)")
108
125
  .option("--output-format <format>", "Target format conversion (e.g. po, arb, vtt)")
126
+ .option("-f, --formats", "Show supported document formats", false)
127
+ .option("-l, --languages", "Show available language pairs", false)
109
128
  .action(async (files, opts) => {
110
- // Phase 1: Pre-validate ALL files exist before starting any uploads
111
- const resolvedFiles = [];
112
- for (const file of files) {
113
- const filePath = resolve(file);
114
- try {
115
- accessSync(filePath, fsConstants.R_OK);
116
- }
117
- catch {
118
- failCommand(ErrorCode.NETWORK, `${t("translate.file.not_found")} ${filePath}`);
129
+ // Early-exit: --formats shows supported formats and returns
130
+ if (opts.formats) {
131
+ const formats = await getApiClient().discovery.documentFormats();
132
+ terminal.table(createFormatsTableModel(toFormatInfoVMList(formats)));
133
+ terminal.info(`\n${t("discovery.total", { count: String(formats.length) })}`);
134
+ return;
135
+ }
136
+ // Early-exit: --languages shows available language pairs and returns
137
+ if (opts.languages) {
138
+ await showLanguages(opts.source, opts.target);
139
+ return;
140
+ }
141
+ // Manual validation (Commander can't enforce required args/opts with --formats/--languages)
142
+ if (files.length === 0) {
143
+ failCommand(ErrorCode.VALIDATION, "missing required argument 'files'");
144
+ return;
145
+ }
146
+ if (!opts.source) {
147
+ failCommand(ErrorCode.VALIDATION, "required option '-s, --source <lang>' not specified");
148
+ return;
149
+ }
150
+ if (!opts.target) {
151
+ failCommand(ErrorCode.VALIDATION, "required option '-t, --target <lang>' not specified");
152
+ return;
153
+ }
154
+ // Phase 1: Expand files/directories and validate read access
155
+ let resolvedFiles;
156
+ try {
157
+ resolvedFiles = expandFileArgs(files);
158
+ }
159
+ catch (error) {
160
+ if (error instanceof FileArgError) {
161
+ failCommand(ErrorCode.VALIDATION, error.message);
119
162
  return;
120
163
  }
121
- resolvedFiles.push(filePath);
164
+ throw error;
122
165
  }
123
166
  const startMs = Date.now();
124
167
  log.info("Command started", {
125
168
  command: "translate file",
126
169
  files_count: String(resolvedFiles.length),
127
170
  });
128
- const results = [];
129
171
  const client = getApiClient();
130
- for (const filePath of resolvedFiles) {
131
- try {
132
- terminal.dim(t("translate.file.upload_status"));
133
- const uploadResponse = await client.translation.uploadDocument(filePath, opts.source, opts.target, {
134
- outputFormat: opts.outputFormat,
135
- });
136
- const jobId = uploadResponse.job_id;
137
- terminal.dim(`${t("translate.file.job_created")} ${jobId}`);
138
- await trackJob(client, jobId, {
139
- description: `Translating ${basename(filePath)}`,
140
- });
141
- // Download result -o only effective for single file
142
- const inputExt = extname(filePath);
143
- const inputBase = basename(filePath, inputExt);
144
- const outputDir = dirname(filePath);
145
- const defaultOutput = join(outputDir, `${inputBase}_translated${inputExt}`);
146
- const targetPath = (resolvedFiles.length === 1 && opts.output)
147
- ? resolve(opts.output)
148
- : defaultOutput;
149
- const actualPath = await client.jobs.download(jobId, targetPath);
150
- results.push({ job_id: jobId, output_path: actualPath });
151
- if (!isJsonMode()) {
152
- terminal.success(`${t("translate.file.success")} ${actualPath}`);
153
- }
154
- }
155
- catch (error) {
156
- handleCommandError(log, error, {
157
- command: "translate file",
158
- file: basename(filePath),
159
- duration_ms: String(Date.now() - startMs),
160
- });
161
- }
162
- }
172
+ const signal = getCurrentAbortSignal();
173
+ const sourceLang = opts.source;
174
+ const targetLang = opts.target;
175
+ const suffix = `_${sourceLang}-${targetLang}`;
176
+ const targetPaths = resolveOutputPaths(resolvedFiles, suffix, opts.out, opts.outputFormat);
177
+ await (resolvedFiles.length === 1
178
+ ? translateSingleFile(client, resolvedFiles[0], targetPaths[0], { source: sourceLang, target: targetLang, outputFormat: opts.outputFormat }, signal, startMs)
179
+ : runBatch({
180
+ items: resolvedFiles,
181
+ label: (f) => basename(f),
182
+ process: async (filePath, index, onProgress) => {
183
+ const resp = await client.translation.uploadDocument({
184
+ filePath,
185
+ sourceLang,
186
+ targetLang,
187
+ outputFormat: opts.outputFormat,
188
+ });
189
+ await trackJob(client, resp.job_id, {
190
+ description: basename(filePath),
191
+ silent: true,
192
+ signal,
193
+ onProgress,
194
+ });
195
+ return client.jobs.download(resp.job_id, targetPaths[index], signal);
196
+ },
197
+ formatSuccess: (path) => `${t("translate.file.success")} ${path}`,
198
+ command: "translate file",
199
+ signal,
200
+ }));
163
201
  log.info("Command completed", {
164
202
  command: "translate file",
165
203
  duration_ms: String(Date.now() - startMs),
166
- files_completed: String(results.length),
167
204
  });
168
- if (isJsonMode()) {
169
- terminal.json(results.length === 1 ? results[0] : results);
170
- }
171
205
  });
206
+ // --- File translation helpers ---
207
+ /** Single file: detailed UX with trackJob managing its own spinner. */
208
+ async function translateSingleFile(client, filePath, targetPath, opts, signal, startMs) {
209
+ try {
210
+ terminal.dim(t("translate.file.upload_status"));
211
+ const uploadResponse = await client.translation.uploadDocument({
212
+ filePath,
213
+ sourceLang: opts.source,
214
+ targetLang: opts.target,
215
+ outputFormat: opts.outputFormat,
216
+ });
217
+ const jobId = uploadResponse.job_id;
218
+ terminal.dim(`${t("translate.file.job_created")} ${jobId}`);
219
+ await trackJob(client, jobId, {
220
+ description: `Translating ${basename(filePath)}`,
221
+ signal,
222
+ });
223
+ const actualPath = await client.jobs.download(jobId, targetPath, signal);
224
+ terminal.success(`${t("translate.file.success")} ${actualPath}`);
225
+ }
226
+ catch (error) {
227
+ handleCommandError(log, error, {
228
+ command: "translate file",
229
+ file: basename(filePath),
230
+ duration_ms: String(Date.now() - startMs),
231
+ });
232
+ }
233
+ }
172
234
  //# sourceMappingURL=translate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,mFAAmF;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,SAAS,IAAI,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EACL,QAAQ,EACR,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,CAAC,EAAE,MAAM,kBAAkB,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEvC,uEAAuE;AACvE,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC;KACrD,OAAO,CAAC,mDAAmD,CAAC;KAC5D,WAAW,CAAC,sBAAsB,CAAC;KACnC,WAAW,CAAC,KAAK,CAAC,CAAC;AAEtB;;;;GAIG;AACH,SAAS,eAAe,CACtB,QAUC,EACD,OAAiB;IAEjB,OAAO;QACL,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;QAC3C,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE;YACxB,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,gBAAgB;KACb,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClD,WAAW,CAAC,uBAAuB,CAAC;KACpC,QAAQ,CAAC,YAAY,EAAE,sBAAsB,CAAC;KAC9C,cAAc,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;KAC7D,cAAc,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;KAC7D,MAAM,CAAC,MAAM,EAAE,2BAA2B,EAAE,KAAK,CAAC;KAClD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC5B,+EAA+E;IAC/E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACnE,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,CACT,SAAS,CAAC,UAAU,EACpB,IAAI,SAAS,4FAA4F,CAC1G,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC,WAAW,CAAC,SAAS,CACzD,KAAK,EACL,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,EAAE,CACR,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC5B,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;SAC1C,CAAC,CAAC;QACH,wCAAwC;QACxC,IAAI,UAAU,EAAE,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACnB,QAAQ,CAAC,KAAK,CAAC,2BAA2B,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,2CAA2C;YAC3C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE;YAC7B,OAAO,EAAE,gBAAgB;YACzB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,uEAAuE;AACvE,gBAAgB;KACb,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,oCAAoC,CAAC;KACjD,QAAQ,CAAC,YAAY,EAAE,+BAA+B,CAAC;KACvD,cAAc,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;KAC7D,cAAc,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;KAC7D,MAAM,CAAC,qBAAqB,EAAE,qCAAqC,CAAC;KACpE,MAAM,CAAC,0BAA0B,EAAE,8CAA8C,CAAC;KAClF,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC5B,oEAAoE;IACpE,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,0BAA0B,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;QAC1B,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC;KAC1C,CAAC,CAAC;IAEH,MAAM,OAAO,GAA8C,EAAE,CAAC;IAC9D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC;YAChD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,cAAc,CAC5D,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,MAAM,EACX;gBACE,YAAY,EAAE,IAAI,CAAC,YAAY;aAChC,CACF,CAAC;YACF,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC;YACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,4BAA4B,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;YAE5D,MAAM,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE;gBAC5B,WAAW,EAAE,eAAe,QAAQ,CAAC,QAAQ,CAAC,EAAE;aACjD,CAAC,CAAC;YAEH,sDAAsD;YACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,SAAS,cAAc,QAAQ,EAAE,CAAC,CAAC;YAC5E,MAAM,UAAU,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC5D,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBACtB,CAAC,CAAC,aAAa,CAAC;YAClB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAEjE,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;gBAClB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,wBAAwB,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE;gBAC7B,OAAO,EAAE,gBAAgB;gBACzB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;gBACxB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;QAC5B,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACzC,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACxC,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE,EAAE,CAAC;QACjB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../../src/commands/translate.ts"],"names":[],"mappings":"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"}