@newpeak/barista-cli 0.2.256 → 0.2.261

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 (77) hide show
  1. package/dist/commands/liberica/help/feature.d.ts +3 -0
  2. package/dist/commands/liberica/help/feature.d.ts.map +1 -0
  3. package/dist/commands/liberica/help/feature.js +61 -0
  4. package/dist/commands/liberica/help/feature.js.map +1 -0
  5. package/dist/commands/liberica/help/index.d.ts +3 -0
  6. package/dist/commands/liberica/help/index.d.ts.map +1 -0
  7. package/dist/commands/liberica/help/index.js +18 -0
  8. package/dist/commands/liberica/help/index.js.map +1 -0
  9. package/dist/commands/liberica/help/shared.d.ts +23 -0
  10. package/dist/commands/liberica/help/shared.d.ts.map +1 -0
  11. package/dist/commands/liberica/help/shared.js +91 -0
  12. package/dist/commands/liberica/help/shared.js.map +1 -0
  13. package/dist/commands/liberica/help/test.d.ts +3 -0
  14. package/dist/commands/liberica/help/test.d.ts.map +1 -0
  15. package/dist/commands/liberica/help/test.js +61 -0
  16. package/dist/commands/liberica/help/test.js.map +1 -0
  17. package/dist/commands/liberica/index.d.ts.map +1 -1
  18. package/dist/commands/liberica/index.js +4 -0
  19. package/dist/commands/liberica/index.js.map +1 -1
  20. package/dist/commands/liberica/outsourcing-price/create.d.ts.map +1 -1
  21. package/dist/commands/liberica/outsourcing-price/create.js +54 -0
  22. package/dist/commands/liberica/outsourcing-price/create.js.map +1 -1
  23. package/dist/commands/liberica/outsourcing-price/list.js +1 -1
  24. package/dist/commands/liberica/outsourcing-price/list.js.map +1 -1
  25. package/dist/commands/liberica/runner/jobs/add.d.ts.map +1 -1
  26. package/dist/commands/liberica/runner/jobs/add.js +8 -12
  27. package/dist/commands/liberica/runner/jobs/add.js.map +1 -1
  28. package/dist/commands/liberica/runner/jobs/retry.d.ts.map +1 -1
  29. package/dist/commands/liberica/runner/jobs/retry.js +8 -12
  30. package/dist/commands/liberica/runner/jobs/retry.js.map +1 -1
  31. package/dist/commands/liberica/translate/create.d.ts +3 -0
  32. package/dist/commands/liberica/translate/create.d.ts.map +1 -0
  33. package/dist/commands/liberica/translate/create.js +127 -0
  34. package/dist/commands/liberica/translate/create.js.map +1 -0
  35. package/dist/commands/liberica/translate/get.d.ts +3 -0
  36. package/dist/commands/liberica/translate/get.d.ts.map +1 -0
  37. package/dist/commands/liberica/translate/get.js +78 -0
  38. package/dist/commands/liberica/translate/get.js.map +1 -0
  39. package/dist/commands/liberica/translate/index.d.ts +3 -0
  40. package/dist/commands/liberica/translate/index.d.ts.map +1 -0
  41. package/dist/commands/liberica/translate/index.js +15 -0
  42. package/dist/commands/liberica/translate/index.js.map +1 -0
  43. package/dist/commands/liberica/translate/list.d.ts +3 -0
  44. package/dist/commands/liberica/translate/list.d.ts.map +1 -0
  45. package/dist/commands/liberica/translate/list.js +103 -0
  46. package/dist/commands/liberica/translate/list.js.map +1 -0
  47. package/dist/commands/liberica/translate/update.d.ts +3 -0
  48. package/dist/commands/liberica/translate/update.d.ts.map +1 -0
  49. package/dist/commands/liberica/translate/update.js +147 -0
  50. package/dist/commands/liberica/translate/update.js.map +1 -0
  51. package/dist/commands/liberica/translate/upsert-shared.d.ts +16 -0
  52. package/dist/commands/liberica/translate/upsert-shared.d.ts.map +1 -0
  53. package/dist/commands/liberica/translate/upsert-shared.js +50 -0
  54. package/dist/commands/liberica/translate/upsert-shared.js.map +1 -0
  55. package/dist/core/api/client.d.ts +7 -0
  56. package/dist/core/api/client.d.ts.map +1 -1
  57. package/dist/core/api/client.js +110 -0
  58. package/dist/core/api/client.js.map +1 -1
  59. package/dist/types/help.d.ts +29 -0
  60. package/dist/types/help.d.ts.map +1 -0
  61. package/dist/types/help.js +2 -0
  62. package/dist/types/help.js.map +1 -0
  63. package/dist/types/index.d.ts +2 -0
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/dist/types/index.js +2 -0
  66. package/dist/types/index.js.map +1 -1
  67. package/dist/types/translate.d.ts +52 -0
  68. package/dist/types/translate.d.ts.map +1 -0
  69. package/dist/types/translate.js +13 -0
  70. package/dist/types/translate.js.map +1 -0
  71. package/dist/utils/runner-error.d.ts +33 -0
  72. package/dist/utils/runner-error.d.ts.map +1 -0
  73. package/dist/utils/runner-error.js +69 -0
  74. package/dist/utils/runner-error.js.map +1 -0
  75. package/package.json +1 -1
  76. package/skills/barista-cli/data/commands.json +42 -1
  77. package/skills/barista-cli/data/commands.yaml +29 -1
@@ -2,6 +2,7 @@ import { Command } from 'commander';
2
2
  import chalk from 'chalk';
3
3
  import { configManager } from '../../../../core/config/manager.js';
4
4
  import { apiClient } from '../../../../core/api/client.js';
5
+ import { emitRunnerJobError } from '../../../../utils/runner-error.js';
5
6
  export function createRunnerJobRetryCommand() {
6
7
  const retryCommand = new Command('retry');
7
8
  retryCommand.description('Retry a runner job (FAILED/TIMEOUT, copies original params)');
@@ -41,18 +42,13 @@ export function createRunnerJobRetryCommand() {
41
42
  }
42
43
  const response = await apiClient.retryRunnerJob(environment, tenant, id);
43
44
  if (!response.success) {
44
- const errorMsg = response.error?.message || 'Failed to retry runner job';
45
- const errorCode = response.error?.code || 'RETRY_RUNNER_JOB_ERROR';
46
- if (jsonOutput) {
47
- console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
48
- }
49
- else {
50
- console.error(chalk.red(`\n✗ Failed to retry runner job: ${errorMsg}`));
51
- if (response.error?.code)
52
- console.error(chalk.gray(` Error code: ${response.error.code}`));
53
- console.error();
54
- }
55
- process.exit(1);
45
+ emitRunnerJobError({
46
+ jsonOutput,
47
+ error: response.error,
48
+ fallbackCode: 'RETRY_RUNNER_JOB_ERROR',
49
+ fallbackMessage: 'Failed to retry runner job',
50
+ action: 'retry',
51
+ });
56
52
  }
57
53
  const job = response.data;
58
54
  if (jsonOutput) {
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/runner/jobs/retry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../../src/commands/liberica/runner/jobs/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTranslateCreateCommand(): Command;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,4BAA4B,IAAI,OAAO,CAyHtD"}
@@ -0,0 +1,127 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fs from 'node:fs';
4
+ import { configManager } from '../../../core/config/manager.js';
5
+ import { TRANSLATION_NS_ALLOWED, TRANSLATION_LANG_ALLOWED, TRANSLATION_TO_ALLOWED, } from '../../../types/translate.js';
6
+ import { upsertTranslationDegraded } from './upsert-shared.js';
7
+ function translateFail(outputJson, code, msg) {
8
+ if (outputJson) {
9
+ console.log(JSON.stringify({ success: false, error: { code, message: msg } }, null, 2));
10
+ }
11
+ else {
12
+ console.error(chalk.red(`\n\u2717 ${msg}\n`));
13
+ }
14
+ process.exit(1);
15
+ throw new Error('unreachable');
16
+ }
17
+ export function createTranslateCreateCommand() {
18
+ const createCommand = new Command('create');
19
+ createCommand.description('Create or upsert a translation entry (sys_translation and/or Tolgee)');
20
+ createCommand
21
+ .option('--ns <ns>', `Namespace: ${TRANSLATION_NS_ALLOWED.join('|')} (required)`)
22
+ .option('--key <key>', 'Translation key (required)')
23
+ .option('--lang <lang>', `Language: ${TRANSLATION_LANG_ALLOWED.join('|')} (required)`)
24
+ .option('--value <text>', 'Translation value (required unless --value-file)')
25
+ .option('--value-file <path>', 'Read translation value from file (overrides --value)')
26
+ .option('--zh <text>', 'Chinese original text (optional, for non-zh lang; backend falls back to existing zh row)')
27
+ .option('--to <sys|tolgee|both>', 'Write target: sys, tolgee or both (default: both)')
28
+ .option('--dry-run', 'Preview without writing')
29
+ .option('--json', 'Output as JSON')
30
+ .action(async (options) => {
31
+ const context = configManager.getCurrentContext();
32
+ const environment = options.env || context.environment;
33
+ const tenant = options.tenant || context.tenant;
34
+ const outputJson = options.json === true || process.argv.includes('--json');
35
+ const rawNs = String(options.ns || '').trim().toUpperCase();
36
+ const rawLang = String(options.lang || '').trim().toLowerCase();
37
+ const rawTo = String(options.to || 'both').trim().toLowerCase();
38
+ if (!rawNs) {
39
+ translateFail(outputJson, 'MISSING_NS', 'Namespace (--ns) is required.');
40
+ }
41
+ if (!TRANSLATION_NS_ALLOWED.includes(rawNs)) {
42
+ translateFail(outputJson, 'INVALID_NS', `Unsupported ns: ${rawNs}. Allowed: ${TRANSLATION_NS_ALLOWED.join(', ')} (FRONT is not manageable via CLI).`);
43
+ }
44
+ const key = String(options.key || '').trim();
45
+ if (!key) {
46
+ translateFail(outputJson, 'MISSING_KEY', 'Translation key (--key) is required.');
47
+ }
48
+ if (!rawLang) {
49
+ translateFail(outputJson, 'MISSING_LANG', 'Language (--lang) is required.');
50
+ }
51
+ if (!TRANSLATION_LANG_ALLOWED.includes(rawLang)) {
52
+ translateFail(outputJson, 'INVALID_LANG', `Unsupported lang: ${rawLang}. Allowed: ${TRANSLATION_LANG_ALLOWED.join(', ')}`);
53
+ }
54
+ if (!TRANSLATION_TO_ALLOWED.includes(rawTo)) {
55
+ translateFail(outputJson, 'INVALID_TO', `Unsupported to: ${rawTo}. Allowed: ${TRANSLATION_TO_ALLOWED.join(', ')}`);
56
+ }
57
+ let value;
58
+ if (options.valueFile) {
59
+ try {
60
+ value = fs.readFileSync(options.valueFile, 'utf-8');
61
+ }
62
+ catch {
63
+ translateFail(outputJson, 'VALUE_FILE_READ_FAILED', `Failed to read value file: ${options.valueFile}`);
64
+ }
65
+ }
66
+ else if (options.value !== undefined) {
67
+ value = String(options.value);
68
+ }
69
+ else {
70
+ translateFail(outputJson, 'MISSING_VALUE', 'Translation value (--value or --value-file) is required.');
71
+ }
72
+ const request = {
73
+ ns: rawNs,
74
+ key,
75
+ lang: rawLang,
76
+ value,
77
+ to: rawTo,
78
+ };
79
+ if (options.zh) {
80
+ request.zhText = String(options.zh);
81
+ }
82
+ if (options.dryRun) {
83
+ if (outputJson) {
84
+ console.log(JSON.stringify({ success: true, dryRun: true, data: request }, null, 2));
85
+ }
86
+ else {
87
+ console.log(chalk.bold('\n\uD83D\uDD0D Dry-Run Mode: no changes will be written\n'));
88
+ console.log(` ${chalk.gray('Namespace:')} ${request.ns}`);
89
+ console.log(` ${chalk.gray('Key:')} ${request.key}`);
90
+ console.log(` ${chalk.gray('Lang:')} ${request.lang}`);
91
+ console.log(` ${chalk.gray('To:')} ${request.to}`);
92
+ console.log(` ${chalk.gray('Value:')} ${request.value.length > 100 ? request.value.substring(0, 100) + '...' : request.value}`);
93
+ if (request.zhText) {
94
+ console.log(` ${chalk.gray('zhText:')} ${request.zhText}`);
95
+ }
96
+ console.log();
97
+ }
98
+ return;
99
+ }
100
+ const outcome = await upsertTranslationDegraded(environment, tenant, request);
101
+ if (!outcome.success) {
102
+ const code = outcome.error?.code || 'UPSERT_TRANSLATION_ERROR';
103
+ const message = outcome.error?.message || 'Failed to create/update translation';
104
+ translateFail(outputJson, code, message);
105
+ }
106
+ if (outputJson) {
107
+ const payload = { success: true, data: outcome.data };
108
+ if (outcome.note) {
109
+ payload.note = outcome.note;
110
+ }
111
+ console.log(JSON.stringify(payload, null, 2));
112
+ return;
113
+ }
114
+ if (outcome.note) {
115
+ console.error(chalk.yellow(`\n\u26A0 ${outcome.note}\n`));
116
+ }
117
+ const record = outcome.data;
118
+ console.log(chalk.green('\n\u2713 Translation saved\n'));
119
+ console.log(` ${chalk.gray('Namespace:')} ${record?.ns || request.ns}`);
120
+ console.log(` ${chalk.gray('Key:')} ${record?.key || request.key}`);
121
+ console.log(` ${chalk.gray('Lang:')} ${record?.lang || request.lang}`);
122
+ console.log(` ${chalk.gray('Value:')} ${record?.value ?? request.value}`);
123
+ console.log();
124
+ });
125
+ return createCommand;
126
+ }
127
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTranslateGetCommand(): Command;
3
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,yBAAyB,IAAI,OAAO,CAiFnD"}
@@ -0,0 +1,78 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../../core/config/manager.js';
4
+ import { apiClient } from '../../../core/api/client.js';
5
+ import { TRANSLATION_LANG_ALLOWED, TRANSLATION_STORE_ALLOWED, } from '../../../types/translate.js';
6
+ export function createTranslateGetCommand() {
7
+ const getCommand = new Command('get');
8
+ getCommand.description('Get a single translation record by key + lang');
9
+ getCommand
10
+ .option('--ns <ns>', 'Namespace (optional, informational)')
11
+ .option('--key <key>', 'Translation key (required)')
12
+ .option('--lang <lang>', `Language: ${TRANSLATION_LANG_ALLOWED.join('|')} (required)`)
13
+ .option('--store <sys|tolgee>', 'Store to query: sys or tolgee (default: sys)')
14
+ .option('--json', 'Output as JSON')
15
+ .action(async (options) => {
16
+ const outputJson = options.json === true || process.argv.includes('--json');
17
+ const context = configManager.getCurrentContext();
18
+ const environment = options.env || context.environment;
19
+ const tenant = options.tenant || context.tenant;
20
+ const fail = (code, msg) => {
21
+ if (outputJson) {
22
+ console.log(JSON.stringify({ success: false, error: { code, message: msg } }, null, 2));
23
+ }
24
+ else {
25
+ console.error(chalk.red(`\n\u2717 ${msg}\n`));
26
+ }
27
+ process.exit(1);
28
+ throw new Error('unreachable');
29
+ };
30
+ const key = String(options.key || '').trim();
31
+ if (!key) {
32
+ fail('MISSING_KEY', 'Translation key (--key) is required.');
33
+ }
34
+ const rawLang = String(options.lang || '').trim().toLowerCase();
35
+ if (!rawLang) {
36
+ fail('MISSING_LANG', 'Language (--lang) is required.');
37
+ }
38
+ if (!TRANSLATION_LANG_ALLOWED.includes(rawLang)) {
39
+ fail('INVALID_LANG', `Unsupported lang: ${rawLang}. Allowed: ${TRANSLATION_LANG_ALLOWED.join(', ')}`);
40
+ }
41
+ const rawStore = String(options.store || 'sys').trim().toLowerCase();
42
+ if (!TRANSLATION_STORE_ALLOWED.includes(rawStore)) {
43
+ fail('INVALID_STORE', `Unsupported store: ${rawStore}. Allowed: ${TRANSLATION_STORE_ALLOWED.join(', ')}`);
44
+ }
45
+ const response = await apiClient.getTranslation(environment, tenant, {
46
+ key,
47
+ lang: rawLang,
48
+ store: rawStore,
49
+ });
50
+ if (!response.success) {
51
+ const code = response.error?.code || '';
52
+ const message = response.error?.message || 'Failed to get translation';
53
+ if (code.includes('5008') || /不存在|not exist/i.test(message)) {
54
+ fail('TRANSLATION_NOT_EXIST', `Translation not found: key=${key}, lang=${rawLang} (store=${rawStore})`);
55
+ }
56
+ fail(code || 'GET_TRANSLATION_ERROR', message);
57
+ }
58
+ const record = response.data;
59
+ if (outputJson) {
60
+ console.log(JSON.stringify({ success: true, data: record }, null, 2));
61
+ return;
62
+ }
63
+ if (!record) {
64
+ fail('TRANSLATION_NOT_EXIST', `Translation not found: key=${key}, lang=${rawLang} (store=${rawStore})`);
65
+ return;
66
+ }
67
+ console.log(chalk.bold('\n\uD83C\uDF0D Translation Details\n'));
68
+ console.log(` ${chalk.gray('Namespace:')} ${record.ns || '-'}`);
69
+ console.log(` ${chalk.gray('Key:')} ${record.key}`);
70
+ console.log(` ${chalk.gray('Lang:')} ${record.lang}`);
71
+ console.log(` ${chalk.gray('Store:')} ${rawStore}`);
72
+ console.log(` ${chalk.gray('Value:')} ${record.value}`);
73
+ console.log(` ${chalk.gray('zh Text:')} ${record.zhText || '-'}`);
74
+ console.log();
75
+ });
76
+ return getCommand;
77
+ }
78
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTranslateCommand(): Command;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,sBAAsB,IAAI,OAAO,CAUhD"}
@@ -0,0 +1,15 @@
1
+ import { Command } from 'commander';
2
+ import { createTranslateCreateCommand } from './create.js';
3
+ import { createTranslateUpdateCommand } from './update.js';
4
+ import { createTranslateListCommand } from './list.js';
5
+ import { createTranslateGetCommand } from './get.js';
6
+ export function createTranslateCommand() {
7
+ const translateCommand = new Command('translate');
8
+ translateCommand.description('Manage translations (create/update/list/get)');
9
+ translateCommand.addCommand(createTranslateCreateCommand());
10
+ translateCommand.addCommand(createTranslateUpdateCommand());
11
+ translateCommand.addCommand(createTranslateListCommand());
12
+ translateCommand.addCommand(createTranslateGetCommand());
13
+ return translateCommand;
14
+ }
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,UAAU,sBAAsB;IACpC,MAAM,gBAAgB,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,gBAAgB,CAAC,WAAW,CAAC,8CAA8C,CAAC,CAAC;IAE7E,gBAAgB,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,CAAC;IAC5D,gBAAgB,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,CAAC;IAC5D,gBAAgB,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC;IAC1D,gBAAgB,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAEzD,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTranslateListCommand(): Command;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,0BAA0B,IAAI,OAAO,CAyHpD"}
@@ -0,0 +1,103 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import Table from 'cli-table3';
4
+ import { configManager } from '../../../core/config/manager.js';
5
+ import { apiClient } from '../../../core/api/client.js';
6
+ import { TRANSLATION_NS_ALLOWED, TRANSLATION_LANG_ALLOWED, TRANSLATION_STORE_ALLOWED, } from '../../../types/translate.js';
7
+ export function createTranslateListCommand() {
8
+ const listCommand = new Command('list');
9
+ listCommand.description('List translation records with filters and pagination');
10
+ listCommand
11
+ .option('--store <sys|tolgee>', 'Store to query: sys or tolgee (default: sys)')
12
+ .option('--ns <ns>', `Namespace filter: ${TRANSLATION_NS_ALLOWED.join('|')}`)
13
+ .option('--lang <lang>', `Language filter: ${TRANSLATION_LANG_ALLOWED.join('|')}`)
14
+ .option('--key <key>', 'Exact translation key filter')
15
+ .option('--keyword <text>', 'Keyword fuzzy match (key / zh text)')
16
+ .option('-p, --page <number>', 'Page number', '1')
17
+ .option('-s, --page-size <number>', 'Page size', '20')
18
+ .option('--json', 'Output as JSON')
19
+ .action(async (options) => {
20
+ const outputJson = options.json === true || process.argv.includes('--json');
21
+ const context = configManager.getCurrentContext();
22
+ const environment = options.env || context.environment;
23
+ const tenant = options.tenant || context.tenant;
24
+ const fail = (code, msg) => {
25
+ if (outputJson) {
26
+ console.log(JSON.stringify({ success: false, error: { code, message: msg } }, null, 2));
27
+ }
28
+ else {
29
+ console.error(chalk.red(`\n\u2717 ${msg}\n`));
30
+ }
31
+ process.exit(1);
32
+ throw new Error('unreachable');
33
+ };
34
+ const rawStore = String(options.store || 'sys').trim().toLowerCase();
35
+ if (!TRANSLATION_STORE_ALLOWED.includes(rawStore)) {
36
+ fail('INVALID_STORE', `Unsupported store: ${rawStore}. Allowed: ${TRANSLATION_STORE_ALLOWED.join(', ')}`);
37
+ }
38
+ const rawNs = options.ns !== undefined ? String(options.ns).trim().toUpperCase() : undefined;
39
+ if (rawNs !== undefined && rawNs !== '' && !TRANSLATION_NS_ALLOWED.includes(rawNs)) {
40
+ fail('INVALID_NS', `Unsupported ns: ${rawNs}. Allowed: ${TRANSLATION_NS_ALLOWED.join(', ')}`);
41
+ }
42
+ const rawLang = options.lang !== undefined ? String(options.lang).trim().toLowerCase() : undefined;
43
+ if (rawLang !== undefined && rawLang !== '' && !TRANSLATION_LANG_ALLOWED.includes(rawLang)) {
44
+ fail('INVALID_LANG', `Unsupported lang: ${rawLang}. Allowed: ${TRANSLATION_LANG_ALLOWED.join(', ')}`);
45
+ }
46
+ const page = parseInt(options.page, 10);
47
+ const pageSize = parseInt(options.pageSize, 10);
48
+ const response = await apiClient.listTranslations(environment, tenant, {
49
+ store: rawStore,
50
+ ns: rawNs,
51
+ lang: rawLang,
52
+ key: options.key !== undefined ? String(options.key).trim() : undefined,
53
+ keyword: options.keyword !== undefined ? String(options.keyword).trim() : undefined,
54
+ pageNo: isNaN(page) ? 1 : page,
55
+ pageSize: isNaN(pageSize) ? 20 : pageSize,
56
+ });
57
+ if (!response.success) {
58
+ fail(response.error?.code || 'LIST_TRANSLATIONS_ERROR', response.error?.message || 'Failed to list translations');
59
+ }
60
+ const data = response.data;
61
+ if (outputJson) {
62
+ console.log(JSON.stringify({
63
+ success: true,
64
+ data: {
65
+ items: data?.rows || [],
66
+ pagination: {
67
+ pageNo: data?.pageNo ?? page,
68
+ pageSize: data?.pageSize ?? pageSize,
69
+ totalRows: data?.totalRows ?? 0,
70
+ },
71
+ },
72
+ }, null, 2));
73
+ return;
74
+ }
75
+ const records = data?.rows || [];
76
+ if (records.length === 0) {
77
+ console.log(chalk.bold('\n\uD83C\uDF0D Translation List\n'));
78
+ console.log(chalk.gray(' No translations found\n'));
79
+ return;
80
+ }
81
+ console.log(chalk.bold(`\n\uD83C\uDF0D Translation List (store: ${rawStore})\n`));
82
+ const table = new Table({
83
+ head: [chalk.bold('Ns'), chalk.bold('Key'), chalk.bold('Lang'), chalk.bold('Value'), chalk.bold('zh Text')],
84
+ colWidths: [10, 34, 6, 40, 30],
85
+ style: { head: [], border: [] },
86
+ });
87
+ for (const record of records) {
88
+ table.push([
89
+ record.ns || '-',
90
+ record.key,
91
+ record.lang,
92
+ (record.value || '').length > 38 ? (record.value || '').substring(0, 38) + '...' : (record.value || ''),
93
+ (record.zhText || '').length > 28 ? (record.zhText || '').substring(0, 28) + '...' : (record.zhText || '-'),
94
+ ]);
95
+ }
96
+ console.log(table.toString());
97
+ console.log();
98
+ console.log(chalk.gray(` Total: ${data?.totalRows ?? 0} | Page: ${data?.pageNo ?? page} / ${Math.ceil((data?.totalRows ?? 0) / (data?.pageSize ?? pageSize)) || 1} | Size: ${data?.pageSize ?? pageSize}`));
99
+ console.log();
100
+ });
101
+ return listCommand;
102
+ }
103
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createTranslateUpdateCommand(): Command;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,4BAA4B,IAAI,OAAO,CAiJtD"}
@@ -0,0 +1,147 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import fs from 'node:fs';
4
+ import { configManager } from '../../../core/config/manager.js';
5
+ import { apiClient } from '../../../core/api/client.js';
6
+ import { TRANSLATION_NS_ALLOWED, TRANSLATION_LANG_ALLOWED, TRANSLATION_TO_ALLOWED, } from '../../../types/translate.js';
7
+ import { upsertTranslationDegraded } from './upsert-shared.js';
8
+ function translateFail(outputJson, code, msg) {
9
+ if (outputJson) {
10
+ console.log(JSON.stringify({ success: false, error: { code, message: msg } }, null, 2));
11
+ }
12
+ else {
13
+ console.error(chalk.red(`\n\u2717 ${msg}\n`));
14
+ }
15
+ process.exit(1);
16
+ throw new Error('unreachable');
17
+ }
18
+ export function createTranslateUpdateCommand() {
19
+ const updateCommand = new Command('update');
20
+ updateCommand.description('Update an existing translation (key+lang must exist unless --force)');
21
+ updateCommand
22
+ .option('--ns <ns>', `Namespace: ${TRANSLATION_NS_ALLOWED.join('|')} (required)`)
23
+ .option('--key <key>', 'Translation key (required)')
24
+ .option('--lang <lang>', `Language: ${TRANSLATION_LANG_ALLOWED.join('|')} (required)`)
25
+ .option('--value <text>', 'Translation value (required unless --value-file)')
26
+ .option('--value-file <path>', 'Read translation value from file (overrides --value)')
27
+ .option('--zh <text>', 'Chinese original text (optional, for non-zh lang; backend falls back to existing zh row)')
28
+ .option('--to <sys|tolgee|both>', 'Write target: sys, tolgee or both (default: both)')
29
+ .option('--force', 'Allow upsert (create) when the key+lang does not exist yet')
30
+ .option('--dry-run', 'Preview without writing')
31
+ .option('--json', 'Output as JSON')
32
+ .action(async (options) => {
33
+ const context = configManager.getCurrentContext();
34
+ const environment = options.env || context.environment;
35
+ const tenant = options.tenant || context.tenant;
36
+ const outputJson = options.json === true || process.argv.includes('--json');
37
+ const rawNs = String(options.ns || '').trim().toUpperCase();
38
+ const rawLang = String(options.lang || '').trim().toLowerCase();
39
+ const rawTo = String(options.to || 'both').trim().toLowerCase();
40
+ if (!rawNs) {
41
+ translateFail(outputJson, 'MISSING_NS', 'Namespace (--ns) is required.');
42
+ }
43
+ if (!TRANSLATION_NS_ALLOWED.includes(rawNs)) {
44
+ translateFail(outputJson, 'INVALID_NS', `Unsupported ns: ${rawNs}. Allowed: ${TRANSLATION_NS_ALLOWED.join(', ')} (FRONT is not manageable via CLI).`);
45
+ }
46
+ const key = String(options.key || '').trim();
47
+ if (!key) {
48
+ translateFail(outputJson, 'MISSING_KEY', 'Translation key (--key) is required.');
49
+ }
50
+ if (!rawLang) {
51
+ translateFail(outputJson, 'MISSING_LANG', 'Language (--lang) is required.');
52
+ }
53
+ if (!TRANSLATION_LANG_ALLOWED.includes(rawLang)) {
54
+ translateFail(outputJson, 'INVALID_LANG', `Unsupported lang: ${rawLang}. Allowed: ${TRANSLATION_LANG_ALLOWED.join(', ')}`);
55
+ }
56
+ if (!TRANSLATION_TO_ALLOWED.includes(rawTo)) {
57
+ translateFail(outputJson, 'INVALID_TO', `Unsupported to: ${rawTo}. Allowed: ${TRANSLATION_TO_ALLOWED.join(', ')}`);
58
+ }
59
+ let value;
60
+ if (options.valueFile) {
61
+ try {
62
+ value = fs.readFileSync(options.valueFile, 'utf-8');
63
+ }
64
+ catch {
65
+ translateFail(outputJson, 'VALUE_FILE_READ_FAILED', `Failed to read value file: ${options.valueFile}`);
66
+ }
67
+ }
68
+ else if (options.value !== undefined) {
69
+ value = String(options.value);
70
+ }
71
+ else {
72
+ translateFail(outputJson, 'MISSING_VALUE', 'Translation value (--value or --value-file) is required.');
73
+ }
74
+ const request = {
75
+ ns: rawNs,
76
+ key,
77
+ lang: rawLang,
78
+ value,
79
+ to: rawTo,
80
+ };
81
+ if (options.zh) {
82
+ request.zhText = String(options.zh);
83
+ }
84
+ if (options.dryRun) {
85
+ if (outputJson) {
86
+ console.log(JSON.stringify({ success: true, dryRun: true, data: request }, null, 2));
87
+ }
88
+ else {
89
+ console.log(chalk.bold('\n\uD83D\uDD0D Dry-Run Mode: no changes will be written\n'));
90
+ console.log(` ${chalk.gray('Namespace:')} ${request.ns}`);
91
+ console.log(` ${chalk.gray('Key:')} ${request.key}`);
92
+ console.log(` ${chalk.gray('Lang:')} ${request.lang}`);
93
+ console.log(` ${chalk.gray('To:')} ${request.to}`);
94
+ console.log(` ${chalk.gray('Value:')} ${request.value.length > 100 ? request.value.substring(0, 100) + '...' : request.value}`);
95
+ if (request.zhText) {
96
+ console.log(` ${chalk.gray('zhText:')} ${request.zhText}`);
97
+ }
98
+ console.log();
99
+ }
100
+ return;
101
+ }
102
+ const force = options.force === true || process.argv.includes('--force');
103
+ if (!force) {
104
+ const checkStore = rawTo === 'tolgee' ? 'tolgee' : 'sys';
105
+ const checkResponse = await apiClient.getTranslation(environment, tenant, {
106
+ key,
107
+ lang: rawLang,
108
+ store: checkStore,
109
+ });
110
+ if (!checkResponse.success) {
111
+ const checkCode = checkResponse.error?.code || '';
112
+ const checkMessage = checkResponse.error?.message || '';
113
+ const notExist = checkCode.includes('5008') || /不存在|not exist/i.test(checkMessage);
114
+ if (notExist) {
115
+ translateFail(outputJson, 'TRANSLATION_NOT_EXIST', `Translation not found: key=${key}, lang=${rawLang} (store=${checkStore}). Use --force to allow upsert (create).`);
116
+ }
117
+ translateFail(outputJson, checkCode || 'CHECK_TRANSLATION_ERROR', checkMessage);
118
+ }
119
+ }
120
+ const outcome = await upsertTranslationDegraded(environment, tenant, request);
121
+ if (!outcome.success) {
122
+ const code = outcome.error?.code || 'UPDATE_TRANSLATION_ERROR';
123
+ const message = outcome.error?.message || 'Failed to update translation';
124
+ translateFail(outputJson, code, message);
125
+ }
126
+ if (outputJson) {
127
+ const payload = { success: true, data: outcome.data };
128
+ if (outcome.note) {
129
+ payload.note = outcome.note;
130
+ }
131
+ console.log(JSON.stringify(payload, null, 2));
132
+ return;
133
+ }
134
+ if (outcome.note) {
135
+ console.error(chalk.yellow(`\n\u26A0 ${outcome.note}\n`));
136
+ }
137
+ const record = outcome.data;
138
+ console.log(chalk.green('\n\u2713 Translation updated\n'));
139
+ console.log(` ${chalk.gray('Namespace:')} ${record?.ns || request.ns}`);
140
+ console.log(` ${chalk.gray('Key:')} ${record?.key || request.key}`);
141
+ console.log(` ${chalk.gray('Lang:')} ${record?.lang || request.lang}`);
142
+ console.log(` ${chalk.gray('Value:')} ${record?.value ?? request.value}`);
143
+ console.log();
144
+ });
145
+ return updateCommand;
146
+ }
147
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../../src/commands/liberica/translate/update.ts"],"names":[],"mappings":"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"}