ecomcoder-cli 1.3.3 → 1.3.5

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 (80) hide show
  1. package/README.md +0 -23
  2. package/dist/cli.js +4 -84
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/discount/index.d.ts.map +1 -1
  5. package/dist/commands/discount/index.js +10 -49
  6. package/dist/commands/discount/index.js.map +1 -1
  7. package/dist/commands/docs/index.d.ts.map +1 -1
  8. package/dist/commands/docs/index.js +4 -18
  9. package/dist/commands/docs/index.js.map +1 -1
  10. package/dist/commands/metafield/index.d.ts.map +1 -1
  11. package/dist/commands/metafield/index.js +6 -24
  12. package/dist/commands/metafield/index.js.map +1 -1
  13. package/dist/commands/product/create.d.ts +8 -0
  14. package/dist/commands/product/create.d.ts.map +1 -0
  15. package/dist/commands/product/create.js +166 -0
  16. package/dist/commands/product/create.js.map +1 -0
  17. package/dist/commands/product/get-metafield.d.ts +8 -0
  18. package/dist/commands/product/get-metafield.d.ts.map +1 -0
  19. package/dist/commands/product/get-metafield.js +131 -0
  20. package/dist/commands/product/get-metafield.js.map +1 -0
  21. package/dist/commands/product/index.d.ts.map +1 -1
  22. package/dist/commands/product/index.js +42 -42
  23. package/dist/commands/product/index.js.map +1 -1
  24. package/dist/commands/product/queries.d.ts +19 -0
  25. package/dist/commands/product/queries.d.ts.map +1 -1
  26. package/dist/commands/product/queries.js +122 -0
  27. package/dist/commands/product/queries.js.map +1 -1
  28. package/dist/commands/product/service.d.ts +35 -1
  29. package/dist/commands/product/service.d.ts.map +1 -1
  30. package/dist/commands/product/service.js +241 -1
  31. package/dist/commands/product/service.js.map +1 -1
  32. package/dist/commands/product/set-metafield.d.ts +8 -0
  33. package/dist/commands/product/set-metafield.d.ts.map +1 -0
  34. package/dist/commands/product/set-metafield.js +174 -0
  35. package/dist/commands/product/set-metafield.js.map +1 -0
  36. package/dist/commands/product/types.d.ts +88 -0
  37. package/dist/commands/product/types.d.ts.map +1 -1
  38. package/dist/commands/product/update-status.d.ts +8 -0
  39. package/dist/commands/product/update-status.d.ts.map +1 -0
  40. package/dist/commands/product/update-status.js +105 -0
  41. package/dist/commands/product/update-status.js.map +1 -0
  42. package/dist/commands/products/index.d.ts.map +1 -1
  43. package/dist/commands/products/index.js +5 -31
  44. package/dist/commands/products/index.js.map +1 -1
  45. package/dist/commands/shop/get-metafield.d.ts +8 -0
  46. package/dist/commands/shop/get-metafield.d.ts.map +1 -0
  47. package/dist/commands/shop/get-metafield.js +117 -0
  48. package/dist/commands/shop/get-metafield.js.map +1 -0
  49. package/dist/commands/shop/index.d.ts +10 -0
  50. package/dist/commands/shop/index.d.ts.map +1 -0
  51. package/dist/commands/shop/index.js +38 -0
  52. package/dist/commands/shop/index.js.map +1 -0
  53. package/dist/commands/shop/queries.d.ts +24 -0
  54. package/dist/commands/shop/queries.d.ts.map +1 -0
  55. package/dist/commands/shop/queries.js +83 -0
  56. package/dist/commands/shop/queries.js.map +1 -0
  57. package/dist/commands/shop/service.d.ts +30 -0
  58. package/dist/commands/shop/service.d.ts.map +1 -0
  59. package/dist/commands/shop/service.js +131 -0
  60. package/dist/commands/shop/service.js.map +1 -0
  61. package/dist/commands/shop/set-metafield.d.ts +8 -0
  62. package/dist/commands/shop/set-metafield.d.ts.map +1 -0
  63. package/dist/commands/shop/set-metafield.js +174 -0
  64. package/dist/commands/shop/set-metafield.js.map +1 -0
  65. package/dist/commands/shop/types.d.ts +84 -0
  66. package/dist/commands/shop/types.d.ts.map +1 -0
  67. package/dist/commands/shop/types.js +6 -0
  68. package/dist/commands/shop/types.js.map +1 -0
  69. package/dist/lib/command-registry.d.ts +2 -0
  70. package/dist/lib/command-registry.d.ts.map +1 -1
  71. package/dist/lib/command-registry.js.map +1 -1
  72. package/dist/lib/help-generator.d.ts +28 -0
  73. package/dist/lib/help-generator.d.ts.map +1 -0
  74. package/dist/lib/help-generator.js +131 -0
  75. package/dist/lib/help-generator.js.map +1 -0
  76. package/dist/lib/help-utils.d.ts +17 -0
  77. package/dist/lib/help-utils.d.ts.map +1 -0
  78. package/dist/lib/help-utils.js +24 -0
  79. package/dist/lib/help-utils.js.map +1 -0
  80. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/commands/shop/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Set Shop Metafield Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ShopService
6
+ */
7
+ export declare function run(argv?: string[]): Promise<void>;
8
+ //# sourceMappingURL=set-metafield.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-metafield.d.ts","sourceRoot":"","sources":["../../../src/commands/shop/set-metafield.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmIH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA6C/D"}
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Set Shop Metafield Command
3
+ *
4
+ * Following Command Pattern - thin orchestration layer
5
+ * Delegates business logic to ShopService
6
+ */
7
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
8
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
9
+ import { ShopService } from './service.js';
10
+ function showHelp() {
11
+ console.log(`
12
+ Set Shop Metafield
13
+
14
+ USAGE:
15
+ ecomcoder shop set-metafield [OPTIONS]
16
+
17
+ REQUIRED OPTIONS:
18
+ --namespace <namespace> Metafield namespace (e.g., 'custom', 'app')
19
+ --key <key> Metafield key/identifier
20
+ --value <value> Metafield value (format depends on type)
21
+ --type <type> Metafield type (see list below)
22
+
23
+ OPTIONAL:
24
+ --session-id Session ID (auto-provided via SESSION_ID env var)
25
+ --help, -h Show this help message
26
+
27
+ SUPPORTED TYPES:
28
+ Text:
29
+ single_line_text_field Single line of text
30
+ multi_line_text_field Multiple lines of text
31
+ rich_text_field Rich text with formatting
32
+
33
+ Numbers:
34
+ number_integer Whole numbers
35
+ number_decimal Decimal numbers
36
+ rating Rating on a scale
37
+
38
+ Boolean:
39
+ boolean True or false value
40
+
41
+ Dates:
42
+ date ISO 8601 date (YYYY-MM-DD)
43
+ date_time ISO 8601 timestamp
44
+
45
+ Measurements:
46
+ dimension Length with unit
47
+ volume Volume with unit
48
+ weight Weight with unit
49
+
50
+ Commerce:
51
+ money Amount with currency
52
+ color Hexadecimal color code
53
+
54
+ References (Links to Shopify Resources):
55
+ product_reference Link to a product
56
+ variant_reference Link to a variant
57
+ collection_reference Link to a collection
58
+ page_reference Link to a page
59
+ file_reference Link to uploaded file
60
+
61
+ Other:
62
+ url URL (https, http, mailto, sms, tel)
63
+ json JSON-serializable value
64
+ link Text and URL pairing
65
+
66
+ Lists (prefix with 'list.'):
67
+ list.single_line_text_field
68
+ list.number_integer
69
+ list.product_reference
70
+ list.color
71
+ (etc. - all types support lists)
72
+
73
+ EXAMPLES:
74
+ # Store-wide announcement
75
+ ecomcoder shop set-metafield \\
76
+ --namespace=custom \\
77
+ --key=announcement \\
78
+ --value="Black Friday Sale!" \\
79
+ --type=single_line_text_field
80
+
81
+ # Free shipping minimum
82
+ ecomcoder shop set-metafield \\
83
+ --namespace=custom \\
84
+ --key=free_shipping_min \\
85
+ --value="50.00" \\
86
+ --type=number_decimal
87
+
88
+ # Featured products (global)
89
+ ecomcoder shop set-metafield \\
90
+ --namespace=custom \\
91
+ --key=featured_products \\
92
+ --value='["gid://shopify/Product/123","gid://shopify/Product/456"]' \\
93
+ --type=list.product_reference
94
+
95
+ # Store settings as JSON
96
+ ecomcoder shop set-metafield \\
97
+ --namespace=custom \\
98
+ --key=settings \\
99
+ --value='{"theme":"dark","currency":"USD"}' \\
100
+ --type=json
101
+
102
+ # Enable feature flag
103
+ ecomcoder shop set-metafield \\
104
+ --namespace=features \\
105
+ --key=show_reviews \\
106
+ --value="true" \\
107
+ --type=boolean
108
+
109
+ OUTPUT FORMAT:
110
+ {
111
+ "success": true,
112
+ "data": {
113
+ "metafield": {
114
+ "id": "gid://shopify/Metafield/123",
115
+ "namespace": "custom",
116
+ "key": "announcement",
117
+ "value": "Black Friday Sale!",
118
+ "type": "single_line_text_field",
119
+ "createdAt": "2024-01-20T10:30:00Z",
120
+ "updatedAt": "2024-01-20T15:45:00Z"
121
+ }
122
+ }
123
+ }
124
+
125
+ NOTES:
126
+ - Maximum 25 metafields per request
127
+ - Maximum 10MB total payload size
128
+ - All values stored as strings (validated by type)
129
+ - Reference types use GID format: gid://shopify/Resource/ID
130
+ - List values must be valid JSON arrays
131
+ `);
132
+ process.exit(0);
133
+ }
134
+ export async function run(argv = process.argv.slice(2)) {
135
+ if (hasHelpFlag(argv)) {
136
+ showHelp();
137
+ }
138
+ const args = parseArgs(argv);
139
+ // Validate required arguments
140
+ const requiredArgs = ['namespace', 'key', 'value', 'type'];
141
+ const missing = requiredArgs.filter(arg => !args[arg]);
142
+ if (missing.length > 0) {
143
+ console.error(JSON.stringify({
144
+ success: false,
145
+ error: `Missing required arguments: ${missing.map(a => `--${a}`).join(', ')}`
146
+ }));
147
+ process.exit(1);
148
+ }
149
+ try {
150
+ // Get credentials
151
+ const sessionId = getSessionId(args.sessionId);
152
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
153
+ // Execute set metafield via service
154
+ const result = await ShopService.setMetafield(credentials, {
155
+ namespace: args.namespace,
156
+ key: args.key,
157
+ value: args.value,
158
+ type: args.type
159
+ });
160
+ // Output result
161
+ console.log(JSON.stringify(result, null, 2));
162
+ if (!result.success) {
163
+ process.exit(1);
164
+ }
165
+ }
166
+ catch (error) {
167
+ console.error(JSON.stringify({
168
+ success: false,
169
+ error: error.message || 'Unknown error occurred'
170
+ }));
171
+ process.exit(1);
172
+ }
173
+ }
174
+ //# sourceMappingURL=set-metafield.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-metafield.js","sourceRoot":"","sources":["../../../src/commands/shop/set-metafield.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwHb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAE7B,8BAA8B;IAC9B,MAAM,YAAY,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAEvD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,+BAA+B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC9E,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,kBAAkB;QAClB,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAE/E,oCAAoC;QACpC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC,WAAW,EAAE;YACzD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,wBAAwB;SACjD,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Shop Command Types
3
+ * Type definitions for shop-related commands
4
+ */
5
+ /**
6
+ * Shop metafield operations
7
+ */
8
+ export interface SetShopMetafieldInput {
9
+ namespace: string;
10
+ key: string;
11
+ value: string;
12
+ type: string;
13
+ }
14
+ export interface GetShopMetafieldInput {
15
+ namespace?: string;
16
+ key?: string;
17
+ }
18
+ /**
19
+ * Shopify GraphQL response types
20
+ */
21
+ export interface ShopMetafieldResponse {
22
+ shop: {
23
+ id: string;
24
+ metafield: {
25
+ id: string;
26
+ namespace: string;
27
+ key: string;
28
+ value: string;
29
+ type: string;
30
+ createdAt: string;
31
+ updatedAt: string;
32
+ } | null;
33
+ } | null;
34
+ }
35
+ export interface ShopMetafieldsResponse {
36
+ shop: {
37
+ id: string;
38
+ metafields: {
39
+ edges: Array<{
40
+ node: {
41
+ id: string;
42
+ namespace: string;
43
+ key: string;
44
+ value: string;
45
+ type: string;
46
+ createdAt: string;
47
+ updatedAt: string;
48
+ };
49
+ }>;
50
+ };
51
+ } | null;
52
+ }
53
+ export interface MetafieldsSetResponse {
54
+ metafieldsSet: {
55
+ metafields: Array<{
56
+ id: string;
57
+ namespace: string;
58
+ key: string;
59
+ value: string;
60
+ type: string;
61
+ createdAt: string;
62
+ updatedAt: string;
63
+ }>;
64
+ userErrors: Array<{
65
+ field: string[] | null;
66
+ message: string;
67
+ code?: string;
68
+ }>;
69
+ };
70
+ }
71
+ export interface ShopIdResponse {
72
+ shop: {
73
+ id: string;
74
+ };
75
+ }
76
+ /**
77
+ * CLI command result types
78
+ */
79
+ export interface CommandResult<T = any> {
80
+ success: boolean;
81
+ data?: T;
82
+ error?: string;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/shop/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE;YACT,EAAE,EAAE,MAAM,CAAC;YACX,SAAS,EAAE,MAAM,CAAC;YAClB,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SACnB,GAAG,IAAI,CAAC;KACV,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE;YACV,KAAK,EAAE,KAAK,CAAC;gBACX,IAAI,EAAE;oBACJ,EAAE,EAAE,MAAM,CAAC;oBACX,SAAS,EAAE,MAAM,CAAC;oBAClB,GAAG,EAAE,MAAM,CAAC;oBACZ,KAAK,EAAE,MAAM,CAAC;oBACd,IAAI,EAAE,MAAM,CAAC;oBACb,SAAS,EAAE,MAAM,CAAC;oBAClB,SAAS,EAAE,MAAM,CAAC;iBACnB,CAAC;aACH,CAAC,CAAC;SACJ,CAAC;KACH,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE;QACb,UAAU,EAAE,KAAK,CAAC;YAChB,EAAE,EAAE,MAAM,CAAC;YACX,SAAS,EAAE,MAAM,CAAC;YAClB,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC,CAAC;QACH,UAAU,EAAE,KAAK,CAAC;YAChB,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;YACvB,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,MAAM,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shop Command Types
3
+ * Type definitions for shop-related commands
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/shop/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -16,6 +16,8 @@ export interface CommandMetadata {
16
16
  command: string;
17
17
  subcommand?: string;
18
18
  description: string;
19
+ category?: string;
20
+ quickExample?: string;
19
21
  handler: () => Promise<CommandHandler>;
20
22
  }
21
23
  export interface CommandGroupMetadata {
@@ -1 +1 @@
1
- {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,aAAa,CAA2C;IAEhE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAQzC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAInD;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAW/E;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IAKlD;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE;IAKtD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAI3D;;OAEG;IACH,YAAY,IAAI,oBAAoB,EAAE;IAItC;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;CAK3B;AAGD,eAAO,MAAM,QAAQ,iBAAwB,CAAC"}
1
+ {"version":3,"file":"command-registry.d.ts","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,cAAM,eAAe;IACnB,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,aAAa,CAA2C;IAEhE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAQzC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAInD;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAW/E;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO;IAKlD;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE;IAKtD;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAI3D;;OAEG;IACH,YAAY,IAAI,oBAAoB,EAAE;IAItC;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;CAK3B;AAGD,eAAO,MAAM,QAAQ,iBAAwB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmBH,MAAM,eAAe;IACX,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC9C,aAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEhE;;OAEG;IACH,QAAQ,CAAC,QAAyB;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU;YAC7B,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE;YAC9C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAA8B;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,UAAmB;QAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,OAAe,EAAE,UAAmB;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAe;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACtC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAC3D,CAAC,CAAC;IACL,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"command-registry.js","sourceRoot":"","sources":["../../src/lib/command-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAqBH,MAAM,eAAe;IACX,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC9C,aAAa,GAAG,IAAI,GAAG,EAAgC,CAAC;IAEhE;;OAEG;IACH,QAAQ,CAAC,QAAyB;QAChC,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU;YAC7B,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU,EAAE;YAC9C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,QAA8B;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,UAAmB;QAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,OAAe,EAAE,UAAmB;QACtC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAe;QAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;aACtC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAe;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAC3D,CAAC,CAAC;IACL,CAAC;CACF;AAED,qBAAqB;AACrB,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Help Generator
3
+ *
4
+ * Generates help text dynamically from command metadata
5
+ * Implements three-tier hierarchical help system
6
+ */
7
+ import type { CommandMetadata } from './command-registry.js';
8
+ export declare class HelpGenerator {
9
+ /**
10
+ * Generate Level 1: Main Help
11
+ * Shows only command groups, ~28 lines total
12
+ */
13
+ static generateMainHelp(): string;
14
+ /**
15
+ * Generate Level 2: Group Help
16
+ * Shows commands in a group, categorized, ~35 lines
17
+ */
18
+ static generateGroupHelp(command: string): string;
19
+ /**
20
+ * Categorize commands by their category field
21
+ */
22
+ static categorizeCommands(commands: CommandMetadata[]): Map<string, CommandMetadata[]>;
23
+ /**
24
+ * Capitalize first letter
25
+ */
26
+ private static capitalizeFirst;
27
+ }
28
+ //# sourceMappingURL=help-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-generator.d.ts","sourceRoot":"","sources":["../../src/lib/help-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAwB,MAAM,uBAAuB,CAAC;AAEnF,qBAAa,aAAa;IACxB;;;OAGG;IACH,MAAM,CAAC,gBAAgB,IAAI,MAAM;IA8CjC;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IA4DjD;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;IAmBtF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;CAG/B"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Help Generator
3
+ *
4
+ * Generates help text dynamically from command metadata
5
+ * Implements three-tier hierarchical help system
6
+ */
7
+ import { registry } from './command-registry.js';
8
+ export class HelpGenerator {
9
+ /**
10
+ * Generate Level 1: Main Help
11
+ * Shows only command groups, ~28 lines total
12
+ */
13
+ static generateMainHelp() {
14
+ const groups = registry.getAllGroups();
15
+ const sortedGroups = groups.sort((a, b) => a.command.localeCompare(b.command));
16
+ // Count commands per group
17
+ const groupCounts = new Map();
18
+ sortedGroups.forEach(group => {
19
+ const commands = registry.getCommandsInGroup(group.command);
20
+ groupCounts.set(group.command, commands.length);
21
+ });
22
+ const lines = [];
23
+ lines.push(`
24
+ EcomCoder CLI - Shopify Development Utilities
25
+
26
+ USAGE:
27
+ ecomcoder <command> <subcommand> [options]
28
+ ecomcoder <command> --help View commands in a group
29
+
30
+ COMMAND GROUPS:`);
31
+ // Show each group with command count
32
+ sortedGroups.forEach(group => {
33
+ const count = groupCounts.get(group.command) || 0;
34
+ const countText = count === 1 ? '1 command' : `${count} commands`;
35
+ const padding = ' '.repeat(Math.max(1, 13 - group.command.length));
36
+ lines.push(` ${group.command}${padding}${group.description} (${countText})`);
37
+ });
38
+ lines.push(`
39
+ GLOBAL OPTIONS:
40
+ --session-id <id> Session ID (auto-provided via env)
41
+ --help, -h Show help information
42
+
43
+ GETTING STARTED:
44
+ ecomcoder product --help List all product commands
45
+ ecomcoder shop --help List all shop commands
46
+ ecomcoder discount --help List all discount commands
47
+
48
+ For detailed help: ecomcoder <command> <subcommand> --help
49
+ `);
50
+ return lines.join('\n');
51
+ }
52
+ /**
53
+ * Generate Level 2: Group Help
54
+ * Shows commands in a group, categorized, ~35 lines
55
+ */
56
+ static generateGroupHelp(command) {
57
+ const group = registry.getGroup(command);
58
+ if (!group) {
59
+ return `Unknown command group: ${command}`;
60
+ }
61
+ const commands = registry.getCommandsInGroup(command);
62
+ if (commands.length === 0) {
63
+ return `No commands found for: ${command}`;
64
+ }
65
+ const lines = [];
66
+ // Header
67
+ lines.push(`
68
+ ${this.capitalizeFirst(command)} Commands - ${group.description}
69
+
70
+ USAGE:
71
+ ecomcoder ${command} <subcommand> [options]
72
+
73
+ COMMANDS:`);
74
+ // Categorize and display commands
75
+ const categorized = this.categorizeCommands(commands);
76
+ // Display uncategorized commands first
77
+ if (categorized.has('')) {
78
+ const uncategorized = categorized.get('') || [];
79
+ uncategorized.forEach(cmd => {
80
+ const padding = ' '.repeat(Math.max(1, 23 - (cmd.subcommand?.length || 0)));
81
+ lines.push(` ${cmd.subcommand}${padding}${cmd.description}`);
82
+ });
83
+ }
84
+ // Display categorized commands
85
+ const categories = Array.from(categorized.keys()).filter(cat => cat !== '').sort();
86
+ categories.forEach(category => {
87
+ const cmds = categorized.get(category) || [];
88
+ lines.push(`\n ${category}:`);
89
+ cmds.forEach(cmd => {
90
+ const padding = ' '.repeat(Math.max(1, 21 - (cmd.subcommand?.length || 0)));
91
+ lines.push(` ${cmd.subcommand}${padding}${cmd.description}`);
92
+ });
93
+ });
94
+ // Add quick examples if available
95
+ const exampleCommands = commands.filter(cmd => cmd.quickExample);
96
+ if (exampleCommands.length > 0) {
97
+ lines.push(`\nQUICK EXAMPLES:`);
98
+ exampleCommands.slice(0, 3).forEach(cmd => {
99
+ lines.push(` ${cmd.quickExample}`);
100
+ });
101
+ }
102
+ lines.push(`\nFor detailed help: ecomcoder ${command} <subcommand> --help`);
103
+ lines.push('');
104
+ return lines.join('\n');
105
+ }
106
+ /**
107
+ * Categorize commands by their category field
108
+ */
109
+ static categorizeCommands(commands) {
110
+ const categorized = new Map();
111
+ commands.forEach(cmd => {
112
+ const category = cmd.category || '';
113
+ if (!categorized.has(category)) {
114
+ categorized.set(category, []);
115
+ }
116
+ categorized.get(category).push(cmd);
117
+ });
118
+ // Sort commands within each category
119
+ categorized.forEach((cmds, category) => {
120
+ cmds.sort((a, b) => (a.subcommand || '').localeCompare(b.subcommand || ''));
121
+ });
122
+ return categorized;
123
+ }
124
+ /**
125
+ * Capitalize first letter
126
+ */
127
+ static capitalizeFirst(str) {
128
+ return str.charAt(0).toUpperCase() + str.slice(1);
129
+ }
130
+ }
131
+ //# sourceMappingURL=help-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-generator.js","sourceRoot":"","sources":["../../src/lib/help-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Help Utilities
3
+ *
4
+ * Shared utilities for consistent help flag handling across all commands
5
+ */
6
+ /**
7
+ * Check if help flag is present in arguments
8
+ */
9
+ export declare function hasHelpFlag(argv: string[]): boolean;
10
+ /**
11
+ * Handle help flag - show help and exit if flag is present
12
+ *
13
+ * @param argv - Command line arguments
14
+ * @param helpFunction - Function that displays help text
15
+ */
16
+ export declare function handleHelpFlag(argv: string[], helpFunction: () => void): void;
17
+ //# sourceMappingURL=help-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-utils.d.ts","sourceRoot":"","sources":["../../src/lib/help-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAEnD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,IAAI,GAAG,IAAI,CAK7E"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Help Utilities
3
+ *
4
+ * Shared utilities for consistent help flag handling across all commands
5
+ */
6
+ /**
7
+ * Check if help flag is present in arguments
8
+ */
9
+ export function hasHelpFlag(argv) {
10
+ return argv.includes('--help') || argv.includes('-h');
11
+ }
12
+ /**
13
+ * Handle help flag - show help and exit if flag is present
14
+ *
15
+ * @param argv - Command line arguments
16
+ * @param helpFunction - Function that displays help text
17
+ */
18
+ export function handleHelpFlag(argv, helpFunction) {
19
+ if (hasHelpFlag(argv)) {
20
+ helpFunction();
21
+ process.exit(0);
22
+ }
23
+ }
24
+ //# sourceMappingURL=help-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help-utils.js","sourceRoot":"","sources":["../../src/lib/help-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,YAAwB;IACrE,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecomcoder-cli",
3
- "version": "1.3.3",
3
+ "version": "1.3.5",
4
4
  "type": "module",
5
5
  "description": "CLI tools for EcomCoder - Shopify development utilities",
6
6
  "main": "./dist/index.js",