@optima-chat/commerce-cli 1.17.1 → 1.18.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 (118) hide show
  1. package/.claude/skills/commerce-storefront/SKILL.md +54 -132
  2. package/dist/commands/homepage/patch-settings.d.ts.map +1 -1
  3. package/dist/commands/homepage/patch-settings.js +3 -0
  4. package/dist/commands/homepage/patch-settings.js.map +1 -1
  5. package/dist/commands/order/ship.d.ts.map +1 -1
  6. package/dist/commands/order/ship.js +59 -21
  7. package/dist/commands/order/ship.js.map +1 -1
  8. package/dist/commands/pdp/add.d.ts +3 -0
  9. package/dist/commands/pdp/add.d.ts.map +1 -0
  10. package/dist/commands/pdp/add.js +234 -0
  11. package/dist/commands/pdp/add.js.map +1 -0
  12. package/dist/commands/pdp/edit.d.ts +3 -0
  13. package/dist/commands/pdp/edit.d.ts.map +1 -0
  14. package/dist/commands/pdp/edit.js +258 -0
  15. package/dist/commands/pdp/edit.js.map +1 -0
  16. package/dist/commands/pdp/hide.d.ts +3 -0
  17. package/dist/commands/pdp/hide.d.ts.map +1 -0
  18. package/dist/commands/pdp/hide.js +191 -0
  19. package/dist/commands/pdp/hide.js.map +1 -0
  20. package/dist/commands/pdp/index.d.ts +4 -0
  21. package/dist/commands/pdp/index.d.ts.map +1 -0
  22. package/dist/commands/pdp/index.js +19 -0
  23. package/dist/commands/pdp/index.js.map +1 -0
  24. package/dist/commands/pdp/reorder.d.ts +3 -0
  25. package/dist/commands/pdp/reorder.d.ts.map +1 -0
  26. package/dist/commands/pdp/reorder.js +117 -0
  27. package/dist/commands/pdp/reorder.js.map +1 -0
  28. package/dist/commands/pdp/reset.d.ts +3 -0
  29. package/dist/commands/pdp/reset.d.ts.map +1 -0
  30. package/dist/commands/pdp/reset.js +123 -0
  31. package/dist/commands/pdp/reset.js.map +1 -0
  32. package/dist/commands/pdp/show.d.ts +3 -0
  33. package/dist/commands/pdp/show.d.ts.map +1 -0
  34. package/dist/commands/pdp/show.js +225 -0
  35. package/dist/commands/pdp/show.js.map +1 -0
  36. package/dist/commands/pdp/translate.d.ts +3 -0
  37. package/dist/commands/pdp/translate.d.ts.map +1 -0
  38. package/dist/commands/pdp/translate.js +258 -0
  39. package/dist/commands/pdp/translate.js.map +1 -0
  40. package/dist/commands/pdp/utils.d.ts +34 -0
  41. package/dist/commands/pdp/utils.d.ts.map +1 -0
  42. package/dist/commands/pdp/utils.js +85 -0
  43. package/dist/commands/pdp/utils.js.map +1 -0
  44. package/dist/index.js +2 -2
  45. package/dist/index.js.map +1 -1
  46. package/package.json +1 -1
  47. package/dist/commands/product-page/create.d.ts +0 -3
  48. package/dist/commands/product-page/create.d.ts.map +0 -1
  49. package/dist/commands/product-page/create.js +0 -218
  50. package/dist/commands/product-page/create.js.map +0 -1
  51. package/dist/commands/product-page/delete.d.ts +0 -3
  52. package/dist/commands/product-page/delete.d.ts.map +0 -1
  53. package/dist/commands/product-page/delete.js +0 -86
  54. package/dist/commands/product-page/delete.js.map +0 -1
  55. package/dist/commands/product-page/hide.d.ts +0 -3
  56. package/dist/commands/product-page/hide.d.ts.map +0 -1
  57. package/dist/commands/product-page/hide.js +0 -82
  58. package/dist/commands/product-page/hide.js.map +0 -1
  59. package/dist/commands/product-page/index.d.ts +0 -4
  60. package/dist/commands/product-page/index.d.ts.map +0 -1
  61. package/dist/commands/product-page/index.js +0 -23
  62. package/dist/commands/product-page/index.js.map +0 -1
  63. package/dist/commands/product-page/list.d.ts +0 -3
  64. package/dist/commands/product-page/list.d.ts.map +0 -1
  65. package/dist/commands/product-page/list.js +0 -164
  66. package/dist/commands/product-page/list.js.map +0 -1
  67. package/dist/commands/product-page/product/create.d.ts +0 -3
  68. package/dist/commands/product-page/product/create.d.ts.map +0 -1
  69. package/dist/commands/product-page/product/create.js +0 -208
  70. package/dist/commands/product-page/product/create.js.map +0 -1
  71. package/dist/commands/product-page/product/delete.d.ts +0 -3
  72. package/dist/commands/product-page/product/delete.d.ts.map +0 -1
  73. package/dist/commands/product-page/product/delete.js +0 -85
  74. package/dist/commands/product-page/product/delete.js.map +0 -1
  75. package/dist/commands/product-page/product/hide.d.ts +0 -3
  76. package/dist/commands/product-page/product/hide.d.ts.map +0 -1
  77. package/dist/commands/product-page/product/hide.js +0 -78
  78. package/dist/commands/product-page/product/hide.js.map +0 -1
  79. package/dist/commands/product-page/product/index.d.ts +0 -4
  80. package/dist/commands/product-page/product/index.d.ts.map +0 -1
  81. package/dist/commands/product-page/product/index.js +0 -17
  82. package/dist/commands/product-page/product/index.js.map +0 -1
  83. package/dist/commands/product-page/product/list.d.ts +0 -3
  84. package/dist/commands/product-page/product/list.d.ts.map +0 -1
  85. package/dist/commands/product-page/product/list.js +0 -157
  86. package/dist/commands/product-page/product/list.js.map +0 -1
  87. package/dist/commands/product-page/product/reorder.d.ts +0 -3
  88. package/dist/commands/product-page/product/reorder.d.ts.map +0 -1
  89. package/dist/commands/product-page/product/reorder.js +0 -110
  90. package/dist/commands/product-page/product/reorder.js.map +0 -1
  91. package/dist/commands/product-page/product/update.d.ts +0 -3
  92. package/dist/commands/product-page/product/update.d.ts.map +0 -1
  93. package/dist/commands/product-page/product/update.js +0 -127
  94. package/dist/commands/product-page/product/update.js.map +0 -1
  95. package/dist/commands/product-page/reorder.d.ts +0 -3
  96. package/dist/commands/product-page/reorder.d.ts.map +0 -1
  97. package/dist/commands/product-page/reorder.js +0 -111
  98. package/dist/commands/product-page/reorder.js.map +0 -1
  99. package/dist/commands/product-page/translation/delete.d.ts +0 -3
  100. package/dist/commands/product-page/translation/delete.d.ts.map +0 -1
  101. package/dist/commands/product-page/translation/delete.js +0 -97
  102. package/dist/commands/product-page/translation/delete.js.map +0 -1
  103. package/dist/commands/product-page/translation/index.d.ts +0 -4
  104. package/dist/commands/product-page/translation/index.d.ts.map +0 -1
  105. package/dist/commands/product-page/translation/index.js +0 -11
  106. package/dist/commands/product-page/translation/index.js.map +0 -1
  107. package/dist/commands/product-page/translation/list.d.ts +0 -3
  108. package/dist/commands/product-page/translation/list.d.ts.map +0 -1
  109. package/dist/commands/product-page/translation/list.js +0 -104
  110. package/dist/commands/product-page/translation/list.js.map +0 -1
  111. package/dist/commands/product-page/translation/set.d.ts +0 -3
  112. package/dist/commands/product-page/translation/set.d.ts.map +0 -1
  113. package/dist/commands/product-page/translation/set.js +0 -151
  114. package/dist/commands/product-page/translation/set.js.map +0 -1
  115. package/dist/commands/product-page/update.d.ts +0 -3
  116. package/dist/commands/product-page/update.d.ts.map +0 -1
  117. package/dist/commands/product-page/update.js +0 -137
  118. package/dist/commands/product-page/update.js.map +0 -1
@@ -0,0 +1,225 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import { commerceApi } from '../../api/rest/commerce.js';
4
+ import { handleError, createApiError } from '../../utils/error.js';
5
+ import { output } from '../../utils/output.js';
6
+ import { addEnhancedHelp } from '../../utils/helpText.js';
7
+ import { resolveProductId } from './utils.js';
8
+ const cmd = new Command('show')
9
+ .description('Display PDP section configuration (merchant-level or product-level)')
10
+ .option('--product <identifier>', 'Product ID or handle — show product-level sections')
11
+ .option('--handle <handle>', 'Filter to a specific section by handle')
12
+ .option('--raw', 'Show only customizations without system defaults')
13
+ .action(async (options) => {
14
+ try {
15
+ await showSections(options);
16
+ }
17
+ catch (error) {
18
+ handleError(error);
19
+ }
20
+ });
21
+ addEnhancedHelp(cmd, {
22
+ examples: [
23
+ '# Show all sections (merged/resolved view — recommended)',
24
+ '$ commerce pdp show',
25
+ '',
26
+ '# Show only merchant customizations (raw, no system defaults)',
27
+ '$ commerce pdp show --raw',
28
+ '',
29
+ '# Show sections for a specific product (resolved)',
30
+ '$ commerce pdp show --product my-product-handle',
31
+ '',
32
+ '# Show a specific section by handle',
33
+ '$ commerce pdp show --handle highlights',
34
+ '',
35
+ '# Show raw product-level overrides',
36
+ '$ commerce pdp show --product prod-123 --raw',
37
+ ],
38
+ output: {
39
+ example: JSON.stringify({
40
+ success: true,
41
+ data: {
42
+ sections: [
43
+ {
44
+ handle: 'highlights',
45
+ source: 'system',
46
+ type: 'static',
47
+ position: 1,
48
+ is_hidden: false,
49
+ content: '',
50
+ translations: {
51
+ 'en-US': { title: 'Highlights', content: '' },
52
+ 'zh-CN': { title: '产品亮点', content: '' },
53
+ },
54
+ },
55
+ {
56
+ handle: 'care',
57
+ source: 'merchant',
58
+ type: 'collapsible',
59
+ position: 4,
60
+ is_hidden: false,
61
+ content: 'Custom care instructions...',
62
+ translations: {},
63
+ },
64
+ ],
65
+ available_languages: ['en-US', 'zh-CN', 'ja-JP'],
66
+ },
67
+ }, null, 2),
68
+ },
69
+ relatedCommands: [
70
+ { command: 'pdp add', description: 'Add a new section' },
71
+ { command: 'pdp edit', description: 'Edit an existing section' },
72
+ { command: 'pdp hide', description: 'Hide a section' },
73
+ { command: 'pdp reorder', description: 'Reorder sections' },
74
+ ],
75
+ notes: [
76
+ 'Default (no --raw): shows resolved/merged view with System + Merchant layers (recommended)',
77
+ 'With --raw: shows only customizations (merchant-level or product-level overrides)',
78
+ '--handle filtering is client-side: fetches all sections, then filters by handle',
79
+ '--product accepts a product ID (UUID) or handle',
80
+ 'source field indicates origin: system | merchant | product',
81
+ ],
82
+ });
83
+ export const showCommand = cmd;
84
+ async function showSections(options) {
85
+ const hasProduct = !!options.product;
86
+ const isRaw = !!options.raw;
87
+ const spinnerMsg = hasProduct
88
+ ? '正在获取商品级区块配置...'
89
+ : '正在获取商户级区块配置...';
90
+ const spinner = output.spinner(spinnerMsg);
91
+ try {
92
+ if (hasProduct) {
93
+ const productId = await resolveProductId(options.product);
94
+ if (isRaw) {
95
+ // --product + --raw: product-level customizations only
96
+ const sections = await commerceApi.productSections.product.list(productId);
97
+ spinner.succeed('商品级自定义获取成功');
98
+ displayRawSections(sections, options.handle, 'product');
99
+ }
100
+ else {
101
+ // --product, no --raw: product-level resolved
102
+ const result = await commerceApi.productSections.product.listResolved(productId);
103
+ spinner.succeed('商品级区块配置获取成功');
104
+ displayResolvedSections(result, options.handle);
105
+ }
106
+ }
107
+ else {
108
+ if (isRaw) {
109
+ // no --product + --raw: merchant-level customizations only
110
+ const sections = await commerceApi.productSections.merchant.list();
111
+ spinner.succeed('商户自定义获取成功');
112
+ displayRawSections(sections, options.handle, 'merchant');
113
+ }
114
+ else {
115
+ // no --product, no --raw: merchant-level resolved (default)
116
+ const result = await commerceApi.productSections.merchant.listResolved();
117
+ spinner.succeed('区块配置获取成功');
118
+ displayResolvedSections(result, options.handle);
119
+ }
120
+ }
121
+ }
122
+ catch (error) {
123
+ spinner.fail('获取区块配置失败');
124
+ throw createApiError(error);
125
+ }
126
+ }
127
+ function displayResolvedSections(result, handleFilter) {
128
+ let sections = result.sections || [];
129
+ if (handleFilter) {
130
+ sections = sections.filter((s) => s.handle === handleFilter);
131
+ }
132
+ if (sections.length === 0) {
133
+ if (output.isJson()) {
134
+ output.success({ sections: [], available_languages: result.available_languages || [] }, handleFilter ? `未找到 handle="${handleFilter}" 的区块` : '暂无区块配置');
135
+ }
136
+ else {
137
+ if (handleFilter) {
138
+ console.log(chalk.yellow(`\n未找到 handle="${handleFilter}" 的区块\n`));
139
+ }
140
+ else {
141
+ console.log(chalk.yellow('\n暂无区块配置\n'));
142
+ }
143
+ }
144
+ return;
145
+ }
146
+ if (output.isJson()) {
147
+ output.success({ sections, available_languages: result.available_languages || [] });
148
+ }
149
+ else {
150
+ console.log();
151
+ console.log(chalk.bold('商品页区块配置(合并视图):\n'));
152
+ sections.forEach((section, index) => {
153
+ const sourceColor = section.source === 'system' ? chalk.gray : section.source === 'merchant' ? chalk.cyan : chalk.green;
154
+ const hiddenBadge = section.is_hidden ? chalk.red(' [已隐藏]') : '';
155
+ console.log(chalk.white(`${index + 1}. ${section.handle}`) + hiddenBadge);
156
+ console.log(chalk.gray(` 来源: `) + sourceColor(section.source));
157
+ console.log(chalk.gray(` 类型: ${section.type}`));
158
+ console.log(chalk.gray(` 位置: ${section.position}`));
159
+ if (section.tab_group) {
160
+ console.log(chalk.gray(` Tab分组: ${section.tab_group}`));
161
+ }
162
+ if (section.content) {
163
+ const preview = section.content.length > 50 ? section.content.substring(0, 50) + '...' : section.content;
164
+ console.log(chalk.gray(` 内容: ${preview}`));
165
+ }
166
+ const langCount = Object.keys(section.translations || {}).length;
167
+ if (langCount > 0) {
168
+ console.log(chalk.gray(` 翻译: ${langCount} 种语言`));
169
+ }
170
+ console.log();
171
+ });
172
+ console.log(chalk.gray(`共 ${sections.length} 个区块`));
173
+ if (result.available_languages && result.available_languages.length > 0) {
174
+ console.log(chalk.gray(`支持语言: ${result.available_languages.join(', ')}`));
175
+ }
176
+ console.log();
177
+ }
178
+ }
179
+ function displayRawSections(sections, handleFilter, level = 'merchant') {
180
+ if (handleFilter) {
181
+ sections = sections.filter((s) => s.handle === handleFilter);
182
+ }
183
+ if (!sections || sections.length === 0) {
184
+ if (output.isJson()) {
185
+ output.success({ sections: [] }, handleFilter
186
+ ? `未找到 handle="${handleFilter}" 的自定义`
187
+ : `暂无${level === 'merchant' ? '商户' : '商品'}级自定义`);
188
+ }
189
+ else {
190
+ if (handleFilter) {
191
+ console.log(chalk.yellow(`\n未找到 handle="${handleFilter}" 的自定义\n`));
192
+ }
193
+ else {
194
+ console.log(chalk.yellow(`\n暂无${level === 'merchant' ? '商户' : '商品'}级自定义`));
195
+ console.log(chalk.gray('提示: 不使用 --raw 可查看合并后的完整视图\n'));
196
+ }
197
+ }
198
+ return;
199
+ }
200
+ if (output.isJson()) {
201
+ output.success({ sections });
202
+ }
203
+ else {
204
+ console.log();
205
+ console.log(chalk.bold(`${level === 'merchant' ? '商户' : '商品'}级自定义区块:\n`));
206
+ sections.forEach((section, index) => {
207
+ console.log(chalk.cyan(`${index + 1}. ${section.handle}`));
208
+ console.log(chalk.gray(` ID: ${section.id}`));
209
+ console.log(chalk.gray(` 操作类型: ${section.operation_type}`));
210
+ console.log(chalk.gray(` 区块类型: ${section.type}`));
211
+ console.log(chalk.gray(` 位置: ${section.position}`));
212
+ if (section.tab_group) {
213
+ console.log(chalk.gray(` Tab分组: ${section.tab_group}`));
214
+ }
215
+ if (section.content) {
216
+ const preview = section.content.length > 50 ? section.content.substring(0, 50) + '...' : section.content;
217
+ console.log(chalk.gray(` 内容: ${preview}`));
218
+ }
219
+ console.log();
220
+ });
221
+ console.log(chalk.gray(`共 ${sections.length} 个自定义`));
222
+ console.log(chalk.gray('提示: 不使用 --raw 可查看合并后的完整视图\n'));
223
+ }
224
+ }
225
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/pdp/show.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const translateCommand: Command;
3
+ //# sourceMappingURL=translate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../../src/commands/pdp/translate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsFpC,eAAO,MAAM,gBAAgB,SAAM,CAAC"}
@@ -0,0 +1,258 @@
1
+ import { Command } from 'commander';
2
+ import chalk from 'chalk';
3
+ import inquirer from 'inquirer';
4
+ import { commerceApi } from '../../api/rest/commerce.js';
5
+ import { handleError, createApiError, ValidationError } from '../../utils/error.js';
6
+ import { output } from '../../utils/output.js';
7
+ import { addEnhancedHelp } from '../../utils/helpText.js';
8
+ import { isInteractiveEnvironment } from '../../utils/interactive.js';
9
+ import { resolveProductId, resolveTranslateMode } from './utils.js';
10
+ const cmd = new Command('translate')
11
+ .description('Manage section translations (set, list, delete)')
12
+ .requiredOption('--handle <handle>', 'Section handle (required)')
13
+ .option('--lang <code>', 'BCP 47 language code (e.g., zh-CN, en-US, ja-JP)')
14
+ .option('--title <title>', 'Translated title')
15
+ .option('--content <content>', 'Translated content')
16
+ .option('--list', 'List all translations for the section')
17
+ .option('--delete', 'Delete a translation (requires --lang)')
18
+ .option('--product <identifier>', 'Product ID or handle (product-level if specified)')
19
+ .option('-y, --yes', 'Skip confirmation for delete')
20
+ .action(async (options) => {
21
+ try {
22
+ await translateSection(options);
23
+ }
24
+ catch (error) {
25
+ handleError(error);
26
+ }
27
+ });
28
+ addEnhancedHelp(cmd, {
29
+ examples: [
30
+ '# List all translations for a section',
31
+ '$ commerce pdp translate --handle highlights --list',
32
+ '',
33
+ '# Set a translation (creates or updates)',
34
+ '$ commerce pdp translate --handle highlights --lang zh-CN --title "产品亮点" --content "这里是亮点内容"',
35
+ '',
36
+ '# Set a translation without content',
37
+ '$ commerce pdp translate --handle care --lang ja-JP --title "ケア方法"',
38
+ '',
39
+ '# Delete a translation',
40
+ '$ commerce pdp translate --handle highlights --lang zh-CN --delete --yes',
41
+ '',
42
+ '# Product-level translations',
43
+ '$ commerce pdp translate --handle specs --product my-product --list',
44
+ '$ commerce pdp translate --handle specs --product my-product --lang en-US --title "Specifications"',
45
+ ],
46
+ output: {
47
+ example: JSON.stringify({
48
+ success: true,
49
+ data: [
50
+ { language_code: 'zh-CN', title: '产品亮点', content: '这里是亮点内容' },
51
+ { language_code: 'ja-JP', title: '製品のハイライト', content: '' },
52
+ ],
53
+ }, null, 2),
54
+ },
55
+ relatedCommands: [
56
+ { command: 'pdp show', description: 'View all sections with translation counts' },
57
+ { command: 'pdp add', description: 'Add a new section' },
58
+ { command: 'pdp edit', description: 'Edit an existing section' },
59
+ ],
60
+ notes: [
61
+ '--handle is required to identify the section',
62
+ 'Use --list to view all translations for a section',
63
+ 'Use --lang + --title to set (create/update) a translation',
64
+ 'Use --lang + --delete to remove a translation',
65
+ '--content is optional when setting; defaults to empty string',
66
+ '--product accepts a product ID (UUID) or handle for product-level translations',
67
+ 'Language codes should be BCP 47 format (e.g., en-US, zh-CN, ja-JP)',
68
+ ],
69
+ });
70
+ export const translateCommand = cmd;
71
+ async function translateSection(options) {
72
+ const { handle } = options;
73
+ // Resolve mode (will throw ValidationError for invalid combos)
74
+ const mode = resolveTranslateMode({ ...options });
75
+ // Resolve product ID if provided
76
+ let productId;
77
+ if (options.product) {
78
+ productId = await resolveProductId(options.product);
79
+ }
80
+ const isProductLevel = !!productId;
81
+ switch (mode) {
82
+ case 'list':
83
+ await listTranslations(handle, productId, isProductLevel);
84
+ break;
85
+ case 'set':
86
+ await setTranslation(handle, options.lang, options.title, options.content ?? '', productId, isProductLevel);
87
+ break;
88
+ case 'delete':
89
+ await deleteTranslation(handle, options.lang, productId, isProductLevel, options.yes);
90
+ break;
91
+ }
92
+ }
93
+ async function listTranslations(handle, productId, isProductLevel) {
94
+ const spinnerMsg = isProductLevel ? '正在获取商品级区块翻译...' : '正在获取商户级区块翻译...';
95
+ const spinner = output.spinner(spinnerMsg);
96
+ try {
97
+ let translations;
98
+ if (isProductLevel) {
99
+ translations = await commerceApi.productSections.product.translations.list(productId, handle);
100
+ }
101
+ else {
102
+ translations = await commerceApi.productSections.merchant.translations.list(handle);
103
+ }
104
+ spinner.succeed('翻译获取成功');
105
+ if (output.isJson()) {
106
+ output.success(translations);
107
+ }
108
+ else {
109
+ if (!translations || translations.length === 0) {
110
+ console.log();
111
+ console.log(chalk.yellow(`No translations found for section "${handle}".`));
112
+ console.log(chalk.gray(`Hint: Use 'commerce pdp translate --handle ${handle} --lang <code> --title <title>' to add one.`));
113
+ console.log();
114
+ return;
115
+ }
116
+ console.log();
117
+ console.log(chalk.bold(`Translations for section "${handle}":\n`));
118
+ translations.forEach((t, index) => {
119
+ console.log(chalk.cyan(`${index + 1}. ${t.language_code}`));
120
+ console.log(chalk.gray(' Title: ') + chalk.white(t.title || '(empty)'));
121
+ if (t.content) {
122
+ const preview = t.content.length > 60 ? t.content.substring(0, 60) + '...' : t.content;
123
+ console.log(chalk.gray(' Content: ') + chalk.white(preview));
124
+ }
125
+ else {
126
+ console.log(chalk.gray(' Content: ') + chalk.gray('(empty)'));
127
+ }
128
+ console.log();
129
+ });
130
+ console.log(chalk.gray(`Total: ${translations.length} translation(s)`));
131
+ console.log();
132
+ }
133
+ }
134
+ catch (error) {
135
+ const status = error?.response?.status || error?.statusCode;
136
+ if (status === 404) {
137
+ spinner.stop();
138
+ show404NoCustomization(handle);
139
+ return;
140
+ }
141
+ spinner.fail('获取翻译失败');
142
+ throw createApiError(error);
143
+ }
144
+ }
145
+ async function setTranslation(handle, lang, title, content, productId, isProductLevel) {
146
+ const spinnerMsg = isProductLevel ? '正在设置商品级区块翻译...' : '正在设置商户级区块翻译...';
147
+ const spinner = output.spinner(spinnerMsg);
148
+ try {
149
+ let result;
150
+ const data = { title, content };
151
+ if (isProductLevel) {
152
+ result = await commerceApi.productSections.product.translations.set(productId, handle, lang, data);
153
+ }
154
+ else {
155
+ result = await commerceApi.productSections.merchant.translations.set(handle, lang, data);
156
+ }
157
+ spinner.succeed('翻译已设置');
158
+ if (output.isJson()) {
159
+ output.success(result, 'Translation set');
160
+ }
161
+ else {
162
+ console.log();
163
+ console.log(chalk.green(`\u2713 Translation set for section "${handle}"`));
164
+ console.log(chalk.gray('Language: ') + chalk.cyan(result.language_code || lang));
165
+ console.log(chalk.gray('Title: ') + chalk.white(result.title || title));
166
+ if (result.content || content) {
167
+ const c = result.content || content;
168
+ const preview = c.length > 60 ? c.substring(0, 60) + '...' : c;
169
+ console.log(chalk.gray('Content: ') + chalk.white(preview));
170
+ }
171
+ if (isProductLevel) {
172
+ console.log(chalk.gray('Level: ') + chalk.white('product'));
173
+ }
174
+ console.log();
175
+ }
176
+ }
177
+ catch (error) {
178
+ const status = error?.response?.status || error?.statusCode;
179
+ if (status === 404) {
180
+ spinner.stop();
181
+ show404NoCustomization(handle);
182
+ return;
183
+ }
184
+ spinner.fail('设置翻译失败');
185
+ throw createApiError(error);
186
+ }
187
+ }
188
+ async function deleteTranslation(handle, lang, productId, isProductLevel, yes) {
189
+ // Confirmation required
190
+ if (!isInteractiveEnvironment() && !yes) {
191
+ throw new ValidationError(`Confirmation required. Use --yes to confirm deletion of "${lang}" translation for section "${handle}".`, 'yes');
192
+ }
193
+ if (!yes) {
194
+ const { confirm } = await inquirer.prompt([
195
+ {
196
+ type: 'confirm',
197
+ name: 'confirm',
198
+ message: `Delete the "${lang}" translation for section "${handle}"?`,
199
+ default: false,
200
+ },
201
+ ]);
202
+ if (!confirm) {
203
+ console.log(chalk.yellow('Operation cancelled.'));
204
+ return;
205
+ }
206
+ }
207
+ const spinnerMsg = isProductLevel ? '正在删除商品级区块翻译...' : '正在删除商户级区块翻译...';
208
+ const spinner = output.spinner(spinnerMsg);
209
+ try {
210
+ if (isProductLevel) {
211
+ await commerceApi.productSections.product.translations.delete(productId, handle, lang);
212
+ }
213
+ else {
214
+ await commerceApi.productSections.merchant.translations.delete(handle, lang);
215
+ }
216
+ spinner.succeed('翻译已删除');
217
+ if (output.isJson()) {
218
+ output.success({}, `Translation "${lang}" deleted for section "${handle}"`);
219
+ }
220
+ else {
221
+ console.log();
222
+ console.log(chalk.green(`\u2713 Translation "${lang}" deleted for section "${handle}"`));
223
+ if (isProductLevel) {
224
+ console.log(chalk.gray('Level: ') + chalk.white('product'));
225
+ }
226
+ console.log();
227
+ }
228
+ }
229
+ catch (error) {
230
+ const status = error?.response?.status || error?.statusCode;
231
+ if (status === 404) {
232
+ spinner.stop();
233
+ if (output.isJson()) {
234
+ output.success({}, `No ${lang} translation found for section "${handle}". Nothing to delete.`);
235
+ }
236
+ else {
237
+ console.log();
238
+ console.log(chalk.yellow(`No ${lang} translation found for section "${handle}". Nothing to delete.`));
239
+ console.log();
240
+ }
241
+ return;
242
+ }
243
+ spinner.fail('删除翻译失败');
244
+ throw createApiError(error);
245
+ }
246
+ }
247
+ function show404NoCustomization(handle) {
248
+ const msg = `No customization found for section "${handle}" at this level. Create or edit the section first with 'commerce pdp add/edit'.`;
249
+ if (output.isJson()) {
250
+ output.success({}, msg);
251
+ }
252
+ else {
253
+ console.log();
254
+ console.log(chalk.yellow(msg));
255
+ console.log();
256
+ }
257
+ }
258
+ //# sourceMappingURL=translate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translate.js","sourceRoot":"","sources":["../../../src/commands/pdp/translate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Shared utilities for PDP (Product Detail Page) commands.
3
+ *
4
+ * - resolveProductId: Resolve a product identifier (UUID or handle) to an ID
5
+ * - parseReorderArgs: Parse handle:position pairs for section reordering
6
+ * - resolveTranslateMode: Determine translate operation from CLI options
7
+ */
8
+ /**
9
+ * Resolves a product identifier (UUID or handle) to a product ID.
10
+ *
11
+ * - If the value matches a UUID v4 prefix pattern, return as-is.
12
+ * - Otherwise, look up by handle via the products list API.
13
+ */
14
+ export declare function resolveProductId(identifier: string): Promise<string>;
15
+ /**
16
+ * Parses handle:position pairs for section reordering.
17
+ *
18
+ * Each argument must match `^[a-z0-9-]+:\d+$` with position >= 1.
19
+ */
20
+ export declare function parseReorderArgs(args: string[]): Array<{
21
+ handle: string;
22
+ position: number;
23
+ }>;
24
+ /**
25
+ * Determines the translate operation mode from CLI options.
26
+ */
27
+ export declare function resolveTranslateMode(options: {
28
+ list?: boolean;
29
+ delete?: boolean;
30
+ lang?: string;
31
+ title?: string;
32
+ [key: string]: unknown;
33
+ }): 'list' | 'set' | 'delete';
34
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/commands/pdp/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EAAE,GACb,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B7C;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CA0C5B"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Shared utilities for PDP (Product Detail Page) commands.
3
+ *
4
+ * - resolveProductId: Resolve a product identifier (UUID or handle) to an ID
5
+ * - parseReorderArgs: Parse handle:position pairs for section reordering
6
+ * - resolveTranslateMode: Determine translate operation from CLI options
7
+ */
8
+ import { commerceApi } from '../../api/rest/commerce.js';
9
+ import { ValidationError } from '../../utils/error.js';
10
+ const UUID_PREFIX = /^[0-9a-f]{8}-[0-9a-f]{4}-/i;
11
+ /**
12
+ * Resolves a product identifier (UUID or handle) to a product ID.
13
+ *
14
+ * - If the value matches a UUID v4 prefix pattern, return as-is.
15
+ * - Otherwise, look up by handle via the products list API.
16
+ */
17
+ export async function resolveProductId(identifier) {
18
+ if (UUID_PREFIX.test(identifier)) {
19
+ return identifier;
20
+ }
21
+ const response = await commerceApi.products.list({ per_page: 100 });
22
+ const products = response.products || response.items || [];
23
+ const matches = products.filter((p) => p.handle === identifier);
24
+ if (matches.length === 0) {
25
+ throw new ValidationError(`Product "${identifier}" not found. Use 'commerce product list' to see available products.`, 'product');
26
+ }
27
+ if (matches.length > 1) {
28
+ throw new ValidationError(`Multiple products match "${identifier}". Please use the product ID instead.`, 'product');
29
+ }
30
+ return matches[0].id || matches[0].product_id;
31
+ }
32
+ /**
33
+ * Parses handle:position pairs for section reordering.
34
+ *
35
+ * Each argument must match `^[a-z0-9-]+:\d+$` with position >= 1.
36
+ */
37
+ export function parseReorderArgs(args) {
38
+ if (args.length === 0) {
39
+ throw new ValidationError('At least one handle:position pair is required.', 'args');
40
+ }
41
+ const pattern = /^[a-z0-9-]+:\d+$/;
42
+ return args.map((arg) => {
43
+ if (!pattern.test(arg)) {
44
+ throw new ValidationError(`Invalid format "${arg}". Expected handle:position (e.g., care:3).`, 'args');
45
+ }
46
+ const [handle, posStr] = arg.split(':');
47
+ const position = parseInt(posStr, 10);
48
+ if (position < 1) {
49
+ throw new ValidationError(`Invalid format "${arg}". Position must be >= 1.`, 'args');
50
+ }
51
+ return { handle, position };
52
+ });
53
+ }
54
+ /**
55
+ * Determines the translate operation mode from CLI options.
56
+ */
57
+ export function resolveTranslateMode(options) {
58
+ // 1. --list and --delete both set → error
59
+ if (options.list && options.delete) {
60
+ throw new ValidationError('--list and --delete cannot be used together.', 'options');
61
+ }
62
+ // 2. --list → return 'list'
63
+ if (options.list) {
64
+ return 'list';
65
+ }
66
+ // 3. --delete without --lang → error
67
+ if (options.delete && !options.lang) {
68
+ throw new ValidationError('--delete requires --lang.', 'options');
69
+ }
70
+ // 4. --delete with --lang → return 'delete'
71
+ if (options.delete && options.lang) {
72
+ return 'delete';
73
+ }
74
+ // 5. --lang + --title → return 'set'
75
+ if (options.lang && options.title) {
76
+ return 'set';
77
+ }
78
+ // 6. --lang alone → error
79
+ if (options.lang) {
80
+ throw new ValidationError('--lang requires either --title (to set) or --delete (to remove).', 'options');
81
+ }
82
+ // 7. Nothing → error
83
+ throw new ValidationError('Specify an action: --list, --lang with --title (set), or --lang with --delete.', 'options');
84
+ }
85
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/pdp/utils.ts"],"names":[],"mappings":"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"}