@optima-chat/commerce-cli 1.7.4 → 1.7.6

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 (179) hide show
  1. package/dist/api/rest/commerce.d.ts +6 -2
  2. package/dist/api/rest/commerce.d.ts.map +1 -1
  3. package/dist/api/rest/commerce.js +5 -1
  4. package/dist/api/rest/commerce.js.map +1 -1
  5. package/dist/commands/product/list.js +24 -21
  6. package/dist/commands/product/list.js.map +1 -1
  7. package/dist/commands/test/smoke.js +1 -1
  8. package/dist/commands/test/smoke.js.map +1 -1
  9. package/dist/index.js +0 -0
  10. package/package.json +1 -1
  11. package/.claude/settings.local.json +0 -70
  12. package/dist/commands/address/create.d.ts +0 -3
  13. package/dist/commands/address/create.d.ts.map +0 -1
  14. package/dist/commands/address/create.js +0 -122
  15. package/dist/commands/address/create.js.map +0 -1
  16. package/dist/commands/address/delete.d.ts +0 -3
  17. package/dist/commands/address/delete.d.ts.map +0 -1
  18. package/dist/commands/address/delete.js +0 -50
  19. package/dist/commands/address/delete.js.map +0 -1
  20. package/dist/commands/address/get.d.ts +0 -3
  21. package/dist/commands/address/get.d.ts.map +0 -1
  22. package/dist/commands/address/get.js +0 -50
  23. package/dist/commands/address/get.js.map +0 -1
  24. package/dist/commands/address/index.d.ts +0 -3
  25. package/dist/commands/address/index.d.ts.map +0 -1
  26. package/dist/commands/address/index.js +0 -16
  27. package/dist/commands/address/index.js.map +0 -1
  28. package/dist/commands/address/list.d.ts +0 -3
  29. package/dist/commands/address/list.d.ts.map +0 -1
  30. package/dist/commands/address/list.js +0 -34
  31. package/dist/commands/address/list.js.map +0 -1
  32. package/dist/commands/address/set-default.d.ts +0 -3
  33. package/dist/commands/address/set-default.d.ts.map +0 -1
  34. package/dist/commands/address/set-default.js +0 -34
  35. package/dist/commands/address/set-default.js.map +0 -1
  36. package/dist/commands/address/update.d.ts +0 -3
  37. package/dist/commands/address/update.d.ts.map +0 -1
  38. package/dist/commands/address/update.js +0 -120
  39. package/dist/commands/address/update.js.map +0 -1
  40. package/dist/commands/auth/switch.d.ts +0 -3
  41. package/dist/commands/auth/switch.d.ts.map +0 -1
  42. package/dist/commands/auth/switch.js +0 -111
  43. package/dist/commands/auth/switch.js.map +0 -1
  44. package/dist/commands/auth/test-refresh.d.ts +0 -3
  45. package/dist/commands/auth/test-refresh.d.ts.map +0 -1
  46. package/dist/commands/auth/test-refresh.js +0 -43
  47. package/dist/commands/auth/test-refresh.js.map +0 -1
  48. package/dist/commands/category/create.d.ts +0 -3
  49. package/dist/commands/category/create.d.ts.map +0 -1
  50. package/dist/commands/category/create.js +0 -142
  51. package/dist/commands/category/create.js.map +0 -1
  52. package/dist/commands/category/delete.d.ts +0 -3
  53. package/dist/commands/category/delete.d.ts.map +0 -1
  54. package/dist/commands/category/delete.js +0 -98
  55. package/dist/commands/category/delete.js.map +0 -1
  56. package/dist/commands/category/get.d.ts +0 -3
  57. package/dist/commands/category/get.d.ts.map +0 -1
  58. package/dist/commands/category/get.js +0 -74
  59. package/dist/commands/category/get.js.map +0 -1
  60. package/dist/commands/category/index.d.ts +0 -3
  61. package/dist/commands/category/index.d.ts.map +0 -1
  62. package/dist/commands/category/index.js +0 -14
  63. package/dist/commands/category/index.js.map +0 -1
  64. package/dist/commands/category/list.d.ts +0 -3
  65. package/dist/commands/category/list.d.ts.map +0 -1
  66. package/dist/commands/category/list.js +0 -77
  67. package/dist/commands/category/list.js.map +0 -1
  68. package/dist/commands/category/update.d.ts +0 -3
  69. package/dist/commands/category/update.d.ts.map +0 -1
  70. package/dist/commands/category/update.js +0 -104
  71. package/dist/commands/category/update.js.map +0 -1
  72. package/dist/commands/cleanup.d.ts +0 -3
  73. package/dist/commands/cleanup.d.ts.map +0 -1
  74. package/dist/commands/cleanup.js +0 -100
  75. package/dist/commands/cleanup.js.map +0 -1
  76. package/dist/commands/i18n/category/create.d.ts +0 -3
  77. package/dist/commands/i18n/category/create.d.ts.map +0 -1
  78. package/dist/commands/i18n/category/create.js +0 -113
  79. package/dist/commands/i18n/category/create.js.map +0 -1
  80. package/dist/commands/i18n/category/delete.d.ts +0 -3
  81. package/dist/commands/i18n/category/delete.d.ts.map +0 -1
  82. package/dist/commands/i18n/category/delete.js +0 -63
  83. package/dist/commands/i18n/category/delete.js.map +0 -1
  84. package/dist/commands/i18n/category/get.d.ts +0 -3
  85. package/dist/commands/i18n/category/get.d.ts.map +0 -1
  86. package/dist/commands/i18n/category/get.js +0 -56
  87. package/dist/commands/i18n/category/get.js.map +0 -1
  88. package/dist/commands/i18n/category/index.d.ts +0 -3
  89. package/dist/commands/i18n/category/index.d.ts.map +0 -1
  90. package/dist/commands/i18n/category/index.js +0 -14
  91. package/dist/commands/i18n/category/index.js.map +0 -1
  92. package/dist/commands/i18n/category/list.d.ts +0 -3
  93. package/dist/commands/i18n/category/list.d.ts.map +0 -1
  94. package/dist/commands/i18n/category/list.js +0 -72
  95. package/dist/commands/i18n/category/list.js.map +0 -1
  96. package/dist/commands/i18n/category/update.d.ts +0 -3
  97. package/dist/commands/i18n/category/update.d.ts.map +0 -1
  98. package/dist/commands/i18n/category/update.js +0 -68
  99. package/dist/commands/i18n/category/update.js.map +0 -1
  100. package/dist/commands/i18n/merchant/get.d.ts +0 -3
  101. package/dist/commands/i18n/merchant/get.d.ts.map +0 -1
  102. package/dist/commands/i18n/merchant/get.js +0 -30
  103. package/dist/commands/i18n/merchant/get.js.map +0 -1
  104. package/dist/commands/section/create.d.ts +0 -3
  105. package/dist/commands/section/create.d.ts.map +0 -1
  106. package/dist/commands/section/create.js +0 -218
  107. package/dist/commands/section/create.js.map +0 -1
  108. package/dist/commands/section/delete.d.ts +0 -3
  109. package/dist/commands/section/delete.d.ts.map +0 -1
  110. package/dist/commands/section/delete.js +0 -86
  111. package/dist/commands/section/delete.js.map +0 -1
  112. package/dist/commands/section/hide.d.ts +0 -3
  113. package/dist/commands/section/hide.d.ts.map +0 -1
  114. package/dist/commands/section/hide.js +0 -82
  115. package/dist/commands/section/hide.js.map +0 -1
  116. package/dist/commands/section/index.d.ts +0 -4
  117. package/dist/commands/section/index.d.ts.map +0 -1
  118. package/dist/commands/section/index.js +0 -23
  119. package/dist/commands/section/index.js.map +0 -1
  120. package/dist/commands/section/list.d.ts +0 -3
  121. package/dist/commands/section/list.d.ts.map +0 -1
  122. package/dist/commands/section/list.js +0 -164
  123. package/dist/commands/section/list.js.map +0 -1
  124. package/dist/commands/section/product/create.d.ts +0 -3
  125. package/dist/commands/section/product/create.d.ts.map +0 -1
  126. package/dist/commands/section/product/create.js +0 -208
  127. package/dist/commands/section/product/create.js.map +0 -1
  128. package/dist/commands/section/product/delete.d.ts +0 -3
  129. package/dist/commands/section/product/delete.d.ts.map +0 -1
  130. package/dist/commands/section/product/delete.js +0 -85
  131. package/dist/commands/section/product/delete.js.map +0 -1
  132. package/dist/commands/section/product/hide.d.ts +0 -3
  133. package/dist/commands/section/product/hide.d.ts.map +0 -1
  134. package/dist/commands/section/product/hide.js +0 -78
  135. package/dist/commands/section/product/hide.js.map +0 -1
  136. package/dist/commands/section/product/index.d.ts +0 -4
  137. package/dist/commands/section/product/index.d.ts.map +0 -1
  138. package/dist/commands/section/product/index.js +0 -17
  139. package/dist/commands/section/product/index.js.map +0 -1
  140. package/dist/commands/section/product/list.d.ts +0 -3
  141. package/dist/commands/section/product/list.d.ts.map +0 -1
  142. package/dist/commands/section/product/list.js +0 -157
  143. package/dist/commands/section/product/list.js.map +0 -1
  144. package/dist/commands/section/product/reorder.d.ts +0 -3
  145. package/dist/commands/section/product/reorder.d.ts.map +0 -1
  146. package/dist/commands/section/product/reorder.js +0 -110
  147. package/dist/commands/section/product/reorder.js.map +0 -1
  148. package/dist/commands/section/product/update.d.ts +0 -3
  149. package/dist/commands/section/product/update.d.ts.map +0 -1
  150. package/dist/commands/section/product/update.js +0 -127
  151. package/dist/commands/section/product/update.js.map +0 -1
  152. package/dist/commands/section/reorder.d.ts +0 -3
  153. package/dist/commands/section/reorder.d.ts.map +0 -1
  154. package/dist/commands/section/reorder.js +0 -111
  155. package/dist/commands/section/reorder.js.map +0 -1
  156. package/dist/commands/section/translation/delete.d.ts +0 -3
  157. package/dist/commands/section/translation/delete.d.ts.map +0 -1
  158. package/dist/commands/section/translation/delete.js +0 -97
  159. package/dist/commands/section/translation/delete.js.map +0 -1
  160. package/dist/commands/section/translation/index.d.ts +0 -4
  161. package/dist/commands/section/translation/index.d.ts.map +0 -1
  162. package/dist/commands/section/translation/index.js +0 -11
  163. package/dist/commands/section/translation/index.js.map +0 -1
  164. package/dist/commands/section/translation/list.d.ts +0 -3
  165. package/dist/commands/section/translation/list.d.ts.map +0 -1
  166. package/dist/commands/section/translation/list.js +0 -104
  167. package/dist/commands/section/translation/list.js.map +0 -1
  168. package/dist/commands/section/translation/set.d.ts +0 -3
  169. package/dist/commands/section/translation/set.d.ts.map +0 -1
  170. package/dist/commands/section/translation/set.js +0 -151
  171. package/dist/commands/section/translation/set.js.map +0 -1
  172. package/dist/commands/section/update.d.ts +0 -3
  173. package/dist/commands/section/update.d.ts.map +0 -1
  174. package/dist/commands/section/update.js +0 -137
  175. package/dist/commands/section/update.js.map +0 -1
  176. package/dist/commands/variant/get.d.ts +0 -3
  177. package/dist/commands/variant/get.d.ts.map +0 -1
  178. package/dist/commands/variant/get.js +0 -41
  179. package/dist/commands/variant/get.js.map +0 -1
@@ -1,111 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import { setCurrentEnvironment, isAuthenticated, getUser, getCurrentEnvironment, ENV_CONFIG } from '../../utils/config.js';
4
- import { authApi } from '../../api/rest/auth.js';
5
- import { commerceApi } from '../../api/rest/commerce.js';
6
- import { output } from '../../utils/output.js';
7
- import { addEnhancedHelp } from '../../utils/helpText.js';
8
- const cmd = new Command('switch')
9
- .description('Switch to a different environment')
10
- .requiredOption('--env <environment>', 'Target environment: production, stage, or development')
11
- .action(async (options) => {
12
- try {
13
- // 验证环境参数
14
- const validEnvironments = ['production', 'stage', 'development'];
15
- if (!validEnvironments.includes(options.env)) {
16
- console.log(chalk.red(`\n❌ 无效的环境: ${options.env}`));
17
- console.log(chalk.gray(' 支持的环境: production, stage, development\n'));
18
- return;
19
- }
20
- const currentEnv = getCurrentEnvironment();
21
- // 检查是否已经是目标环境
22
- if (currentEnv === options.env) {
23
- console.log(chalk.yellow(`\n⚠️ 已经在 ${options.env} 环境\n`));
24
- return;
25
- }
26
- // 切换环境
27
- setCurrentEnvironment(options.env);
28
- // 重新初始化 API 客户端
29
- authApi.reinitialize();
30
- commerceApi.reinitialize();
31
- const envConfig = ENV_CONFIG[options.env];
32
- // 检查目标环境是否已登录
33
- const isLoggedIn = isAuthenticated();
34
- const user = isLoggedIn ? getUser() : null;
35
- if (output.isJson()) {
36
- output.success({
37
- switched: true,
38
- from: currentEnv,
39
- to: options.env,
40
- logged_in: isLoggedIn,
41
- user: user ? { email: user.email, name: user.name } : null,
42
- auth_url: envConfig.authUrl,
43
- api_url: envConfig.apiUrl
44
- });
45
- }
46
- else {
47
- console.log(chalk.green(`\n✓ 已切换到 ${options.env} 环境\n`));
48
- console.log(chalk.white('环境信息:'));
49
- console.log(chalk.gray(` Auth URL: ${envConfig.authUrl}`));
50
- console.log(chalk.gray(` API URL: ${envConfig.apiUrl}`));
51
- console.log(chalk.gray(` 店铺域名: ${envConfig.storeDomain}`));
52
- if (isLoggedIn && user) {
53
- console.log(chalk.white('\n登录状态:'));
54
- console.log(chalk.green(` ✓ 已登录`));
55
- console.log(chalk.gray(` 账号: ${user.email}`));
56
- }
57
- else {
58
- console.log(chalk.white('\n登录状态:'));
59
- console.log(chalk.yellow(` ⚠️ 未登录`));
60
- console.log(chalk.gray(' 使用 ') + chalk.cyan(`commerce auth login --env ${options.env}`) + chalk.gray(' 登录'));
61
- }
62
- console.log('');
63
- }
64
- }
65
- catch (error) {
66
- console.log(chalk.red(`\n❌ 切换环境失败: ${error.message}\n`));
67
- }
68
- });
69
- addEnhancedHelp(cmd, {
70
- examples: [
71
- '# Switch to stage environment',
72
- '$ commerce auth switch --env stage',
73
- '',
74
- '# Switch to development environment',
75
- '$ commerce auth switch --env development',
76
- '',
77
- '# Switch back to production',
78
- '$ commerce auth switch --env production',
79
- ],
80
- output: {
81
- example: JSON.stringify({
82
- success: true,
83
- data: {
84
- switched: true,
85
- from: 'production',
86
- to: 'stage',
87
- logged_in: true,
88
- user: {
89
- email: 'user@example.com',
90
- name: 'User Name'
91
- },
92
- auth_url: 'https://auth-stage.optima.shop',
93
- api_url: 'https://api-stage.optima.shop'
94
- }
95
- }, null, 2)
96
- },
97
- relatedCommands: [
98
- { command: 'auth whoami', description: 'Check current environment and login status' },
99
- { command: 'auth login', description: 'Login to an environment' },
100
- { command: 'auth logout', description: 'Logout from current or specific environment' },
101
- ],
102
- notes: [
103
- 'Switches the active environment without requiring re-login',
104
- 'Each environment maintains separate credentials',
105
- 'API clients are automatically reinitialized to use the new environment URLs',
106
- 'Use "auth whoami" to verify current environment after switching',
107
- 'If not logged in to target environment, you will need to run "auth login"',
108
- ]
109
- });
110
- export const switchCommand = cmd;
111
- //# sourceMappingURL=switch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.js","sourceRoot":"","sources":["../../../src/commands/auth/switch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const testRefreshCommand: Command;
3
- //# sourceMappingURL=test-refresh.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-refresh.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/test-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,eAAO,MAAM,kBAAkB,SA0C3B,CAAC"}
@@ -1,43 +0,0 @@
1
- import { Command } from 'commander';
2
- import chalk from 'chalk';
3
- import { isAuthenticated, getTokenExpiresAt, isTokenExpired, ensureValidToken, saveTokens, getRefreshToken } from '../../utils/config.js';
4
- export const testRefreshCommand = new Command('test-refresh')
5
- .description('测试 Token 自动刷新功能')
6
- .action(async () => {
7
- try {
8
- if (!isAuthenticated()) {
9
- console.log(chalk.yellow('\n⚠️ 未登录\n'));
10
- return;
11
- }
12
- const expiresAt = getTokenExpiresAt();
13
- const now = Date.now();
14
- const isExpired = isTokenExpired();
15
- console.log(chalk.cyan('\n📋 Token 状态\n'));
16
- console.log(chalk.white('过期时间: ') + chalk.gray(new Date(expiresAt).toLocaleString()));
17
- console.log(chalk.white('当前时间: ') + chalk.gray(new Date(now).toLocaleString()));
18
- console.log(chalk.white('剩余时间: ') + chalk.gray(`${Math.floor((expiresAt - now) / 1000)} 秒`));
19
- console.log(chalk.white('是否过期: ') + (isExpired ? chalk.red('是') : chalk.green('否')));
20
- // 强制让 token 过期(用于测试)
21
- console.log(chalk.yellow('\n⚠️ 强制让 token 过期(用于测试刷新功能)...\n'));
22
- const refreshToken = getRefreshToken();
23
- if (refreshToken) {
24
- saveTokens('expired-token', refreshToken, -100); // 设置为已过期
25
- }
26
- console.log(chalk.cyan('🔄 尝试获取有效 token(应该自动刷新)...\n'));
27
- const token = await ensureValidToken();
28
- if (token) {
29
- const newExpiresAt = getTokenExpiresAt();
30
- console.log(chalk.green('✓ Token 刷新成功!\n'));
31
- console.log(chalk.white('新 Token: ') + chalk.gray(token.substring(0, 20) + '...'));
32
- console.log(chalk.white('新过期时间: ') + chalk.gray(new Date(newExpiresAt).toLocaleString()));
33
- console.log(chalk.white('剩余时间: ') + chalk.gray(`${Math.floor((newExpiresAt - Date.now()) / 1000)} 秒\n`));
34
- }
35
- else {
36
- console.log(chalk.red('❌ Token 刷新失败\n'));
37
- }
38
- }
39
- catch (error) {
40
- console.log(chalk.red(`\n❌ 测试失败: ${error.message}\n`));
41
- }
42
- });
43
- //# sourceMappingURL=test-refresh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-refresh.js","sourceRoot":"","sources":["../../../src/commands/auth/test-refresh.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const createCategoryCommand: Command;
3
- //# sourceMappingURL=create.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/category/create.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmEpC,eAAO,MAAM,qBAAqB,SAAM,CAAC"}
@@ -1,142 +0,0 @@
1
- import { Command } from 'commander';
2
- import inquirer from 'inquirer';
3
- import { commerceApi } from '../../api/rest/commerce.js';
4
- import { handleError, createApiError, ValidationError } from '../../utils/error.js';
5
- import { formatCategory } from '../../utils/format.js';
6
- import { output } from '../../utils/output.js';
7
- import { addEnhancedHelp } from '../../utils/helpText.js';
8
- import { isInteractiveEnvironment, requireParam } from '../../utils/interactive.js';
9
- const cmd = new Command('create')
10
- .description('Create a new product category (top-level or nested)')
11
- .option('-n, --name <string>', 'Category name (required)')
12
- .option('-d, --description <string>', 'Category description')
13
- .option('-p, --parent <uuid>', 'Parent category ID (for creating subcategory)')
14
- .action(async (options) => {
15
- try {
16
- await createCategory(options);
17
- }
18
- catch (error) {
19
- handleError(error);
20
- }
21
- });
22
- addEnhancedHelp(cmd, {
23
- examples: [
24
- '# Create a top-level category',
25
- '$ optima category create --name "Electronics"',
26
- '',
27
- '# Create with description',
28
- '$ optima category create \\',
29
- ' --name "Home & Garden" \\',
30
- ' --description "Everything for your home"',
31
- '',
32
- '# Create subcategory',
33
- '$ optima category list # Get parent category ID',
34
- '$ optima category create \\',
35
- ' --name "Smartphones" \\',
36
- ' --parent abc-123-def',
37
- ],
38
- output: {
39
- example: JSON.stringify({
40
- success: true,
41
- data: {
42
- category_id: 'uuid',
43
- name: 'Electronics',
44
- description: 'Category description',
45
- parent_id: null,
46
- created_at: 'timestamp'
47
- }
48
- }, null, 2)
49
- },
50
- relatedCommands: [
51
- { command: 'category list', description: 'View all categories' },
52
- { command: 'product create', description: 'Create product with category' },
53
- ],
54
- notes: [
55
- 'Name is required (interactive prompt if not provided)',
56
- 'Use --parent to create nested categories (subcategories)',
57
- 'Categories can be used to organize products',
58
- ]
59
- });
60
- export const createCategoryCommand = cmd;
61
- async function createCategory(options) {
62
- let name;
63
- let description;
64
- let parent;
65
- // 检测环境
66
- if (isInteractiveEnvironment()) {
67
- // 交互模式:友好提示
68
- if (!options.name) {
69
- const answers = await inquirer.prompt([
70
- {
71
- type: 'input',
72
- name: 'name',
73
- message: '分类名称:',
74
- validate: (input) => (input.trim().length > 0 ? true : '分类名称不能为空'),
75
- },
76
- {
77
- type: 'input',
78
- name: 'description',
79
- message: '分类描述(可选):',
80
- default: '',
81
- },
82
- {
83
- type: 'input',
84
- name: 'parent',
85
- message: '父分类 ID(可选,留空则为顶级分类):',
86
- default: '',
87
- },
88
- ]);
89
- name = answers.name.trim();
90
- description = answers.description || undefined;
91
- parent = answers.parent || undefined;
92
- }
93
- else {
94
- // 交互环境但参数完整
95
- name = options.name.trim();
96
- description = options.description;
97
- parent = options.parent;
98
- // 验证 name
99
- if (name.length === 0) {
100
- throw new ValidationError('分类名称不能为空', 'name');
101
- }
102
- }
103
- }
104
- else {
105
- // 非交互模式:直接验证参数
106
- name = requireParam(options.name, 'name', '分类名称').trim();
107
- description = options.description;
108
- parent = options.parent;
109
- }
110
- const spinner = output.spinner('正在创建分类...');
111
- try {
112
- const categoryData = {
113
- name: name.trim(),
114
- };
115
- if (description && description.trim().length > 0) {
116
- categoryData.description = description.trim();
117
- }
118
- if (parent && parent.trim().length > 0) {
119
- categoryData.parent_id = parent.trim();
120
- }
121
- const category = await commerceApi.categories.create(categoryData);
122
- spinner.succeed('分类创建成功!');
123
- if (output.isJson()) {
124
- output.success({
125
- category_id: category.id || category.category_id,
126
- name: category.name,
127
- description: category.description,
128
- parent_id: category.parent_id
129
- });
130
- }
131
- else {
132
- // 显示分类详情
133
- console.log();
134
- console.log(formatCategory(category));
135
- }
136
- }
137
- catch (error) {
138
- spinner.fail('分类创建失败');
139
- throw createApiError(error);
140
- }
141
- }
142
- //# sourceMappingURL=create.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/category/create.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const deleteCategoryCommand: Command;
3
- //# sourceMappingURL=delete.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/category/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuDpC,eAAO,MAAM,qBAAqB,SAAM,CAAC"}
@@ -1,98 +0,0 @@
1
- import { Command } from 'commander';
2
- import inquirer from 'inquirer';
3
- import chalk from 'chalk';
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
- const cmd = new Command('delete')
10
- .description('Delete product category permanently')
11
- .option('--id <id>', 'Category ID (required)')
12
- .option('-y, --yes', 'Skip confirmation prompt (non-interactive)')
13
- .action(async (options) => {
14
- try {
15
- await deleteCategory(options);
16
- }
17
- catch (error) {
18
- handleError(error);
19
- }
20
- });
21
- addEnhancedHelp(cmd, {
22
- examples: [
23
- '# Delete category with confirmation',
24
- '$ optima category delete --id cat-123',
25
- '',
26
- '# Delete without confirmation (non-interactive)',
27
- '$ optima category delete --id cat-123 --yes',
28
- ],
29
- output: {
30
- example: JSON.stringify({
31
- success: true,
32
- data: {
33
- category_id: 'uuid',
34
- deleted: true
35
- }
36
- }, null, 2)
37
- },
38
- relatedCommands: [
39
- { command: 'category list', description: 'Find category IDs' },
40
- { command: 'category get', description: 'View details before deleting' },
41
- ],
42
- notes: [
43
- 'Category ID is required',
44
- 'This action cannot be undone',
45
- 'Requires confirmation unless --yes flag is used',
46
- 'Use --yes for non-interactive/automated operations',
47
- ]
48
- });
49
- export const deleteCategoryCommand = cmd;
50
- async function deleteCategory(options) {
51
- // 验证参数
52
- if (!options.id || options.id.trim().length === 0) {
53
- throw new ValidationError('分类 ID 不能为空', 'id');
54
- }
55
- const categoryId = options.id;
56
- // 确认删除(除非使用 --yes)
57
- if (!options.yes) {
58
- if (isInteractiveEnvironment()) {
59
- // 交互模式:显示确认提示
60
- console.log(chalk.yellow(`\n⚠️ 即将删除分类: ${categoryId}\n`));
61
- const answers = await inquirer.prompt([
62
- {
63
- type: 'confirm',
64
- name: 'confirmed',
65
- message: '确定要删除此分类吗?',
66
- default: false,
67
- },
68
- ]);
69
- if (!answers.confirmed) {
70
- console.log(chalk.gray('\n已取消删除\n'));
71
- return;
72
- }
73
- }
74
- else {
75
- // 非交互模式:要求使用 --yes 标志
76
- throw new ValidationError('非交互环境需要使用 --yes 标志确认删除操作', 'yes');
77
- }
78
- }
79
- const spinner = output.spinner('正在删除分类...');
80
- try {
81
- await commerceApi.categories.delete(categoryId);
82
- spinner.succeed('分类删除成功!');
83
- if (output.isJson()) {
84
- output.success({
85
- category_id: categoryId,
86
- deleted: true
87
- });
88
- }
89
- else {
90
- console.log();
91
- }
92
- }
93
- catch (error) {
94
- spinner.fail('分类删除失败');
95
- throw createApiError(error);
96
- }
97
- }
98
- //# sourceMappingURL=delete.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/category/delete.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const getCategoryCommand: Command;
3
- //# sourceMappingURL=get.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/category/get.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC,eAAO,MAAM,kBAAkB,SAAM,CAAC"}
@@ -1,74 +0,0 @@
1
- import { Command } from 'commander';
2
- import { commerceApi } from '../../api/rest/commerce.js';
3
- import { handleError, createApiError, ValidationError } from '../../utils/error.js';
4
- import { formatCategory } from '../../utils/format.js';
5
- import { output } from '../../utils/output.js';
6
- import { addEnhancedHelp } from '../../utils/helpText.js';
7
- const cmd = new Command('get')
8
- .description('Get category details by ID')
9
- .option('--id <id>', 'Category ID (required)')
10
- .action(async (options) => {
11
- try {
12
- await getCategory(options);
13
- }
14
- catch (error) {
15
- handleError(error);
16
- }
17
- });
18
- addEnhancedHelp(cmd, {
19
- examples: [
20
- '# Get category details',
21
- '$ optima category get --id cat-123',
22
- ],
23
- output: {
24
- description: 'Returns full category details',
25
- example: JSON.stringify({
26
- success: true,
27
- data: {
28
- category: {
29
- id: 'uuid',
30
- name: 'Electronics',
31
- description: 'Electronic devices',
32
- parent_id: null,
33
- created_at: '2025-01-01T00:00:00Z'
34
- }
35
- }
36
- }, null, 2)
37
- },
38
- relatedCommands: [
39
- { command: 'category list', description: 'Find category IDs' },
40
- { command: 'category update', description: 'Update category details' },
41
- { command: 'i18n category list', description: 'View translations' },
42
- ],
43
- notes: [
44
- 'Category ID is required',
45
- 'Use --json for structured output',
46
- ]
47
- });
48
- export const getCategoryCommand = cmd;
49
- async function getCategory(options) {
50
- // 验证参数
51
- if (!options.id || options.id.trim().length === 0) {
52
- throw new ValidationError('分类 ID 不能为空', 'id');
53
- }
54
- const categoryId = options.id;
55
- const spinner = output.spinner('正在获取分类详情...');
56
- try {
57
- const category = await commerceApi.categories.get(categoryId);
58
- spinner.succeed('分类详情获取成功');
59
- if (output.isJson()) {
60
- // JSON 模式:输出结构化数据
61
- output.success({ category });
62
- }
63
- else {
64
- // Pretty 模式:保持原有格式化输出
65
- console.log();
66
- console.log(formatCategory(category));
67
- }
68
- }
69
- catch (error) {
70
- spinner.fail('获取分类详情失败');
71
- throw createApiError(error);
72
- }
73
- }
74
- //# sourceMappingURL=get.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/category/get.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const categoryCommand: Command;
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/category/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,eAAe,SAMQ,CAAC"}
@@ -1,14 +0,0 @@
1
- import { Command } from 'commander';
2
- import { listCategoriesCommand } from './list.js';
3
- import { createCategoryCommand } from './create.js';
4
- import { getCategoryCommand } from './get.js';
5
- import { updateCategoryCommand } from './update.js';
6
- import { deleteCategoryCommand } from './delete.js';
7
- export const categoryCommand = new Command('category')
8
- .description('分类管理')
9
- .addCommand(listCategoriesCommand)
10
- .addCommand(createCategoryCommand)
11
- .addCommand(getCategoryCommand)
12
- .addCommand(updateCategoryCommand)
13
- .addCommand(deleteCategoryCommand);
14
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/category/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,MAAM,CAAC;KACnB,UAAU,CAAC,qBAAqB,CAAC;KACjC,UAAU,CAAC,qBAAqB,CAAC;KACjC,UAAU,CAAC,kBAAkB,CAAC;KAC9B,UAAU,CAAC,qBAAqB,CAAC;KACjC,UAAU,CAAC,qBAAqB,CAAC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const listCategoriesCommand: Command;
3
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/category/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsDpC,eAAO,MAAM,qBAAqB,SAAM,CAAC"}