ecomcoder-cli 1.3.1 → 1.3.3

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 (73) hide show
  1. package/dist/cli.js +21 -2
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/discount/create-basic.d.ts +6 -0
  4. package/dist/commands/discount/create-basic.d.ts.map +1 -0
  5. package/dist/commands/discount/create-basic.js +156 -0
  6. package/dist/commands/discount/create-basic.js.map +1 -0
  7. package/dist/commands/discount/create-bxgy.d.ts +17 -0
  8. package/dist/commands/discount/create-bxgy.d.ts.map +1 -0
  9. package/dist/commands/discount/create-bxgy.js +230 -0
  10. package/dist/commands/discount/create-bxgy.js.map +1 -0
  11. package/dist/commands/discount/create-shipping.d.ts +17 -0
  12. package/dist/commands/discount/create-shipping.d.ts.map +1 -0
  13. package/dist/commands/discount/create-shipping.js +170 -0
  14. package/dist/commands/discount/create-shipping.js.map +1 -0
  15. package/dist/commands/discount/delete.d.ts +6 -0
  16. package/dist/commands/discount/delete.d.ts.map +1 -0
  17. package/dist/commands/discount/delete.js +45 -0
  18. package/dist/commands/discount/delete.js.map +1 -0
  19. package/dist/commands/discount/index.d.ts +10 -0
  20. package/dist/commands/discount/index.d.ts.map +1 -0
  21. package/dist/commands/discount/index.js +98 -0
  22. package/dist/commands/discount/index.js.map +1 -0
  23. package/dist/commands/discount/list.d.ts +6 -0
  24. package/dist/commands/discount/list.d.ts.map +1 -0
  25. package/dist/commands/discount/list.js +84 -0
  26. package/dist/commands/discount/list.js.map +1 -0
  27. package/dist/commands/discount/queries.d.ts +14 -0
  28. package/dist/commands/discount/queries.d.ts.map +1 -0
  29. package/dist/commands/discount/queries.js +574 -0
  30. package/dist/commands/discount/queries.js.map +1 -0
  31. package/dist/commands/discount/service.d.ts +31 -0
  32. package/dist/commands/discount/service.d.ts.map +1 -0
  33. package/dist/commands/discount/service.js +684 -0
  34. package/dist/commands/discount/service.js.map +1 -0
  35. package/dist/commands/discount/types.d.ts +228 -0
  36. package/dist/commands/discount/types.d.ts.map +1 -0
  37. package/dist/commands/discount/types.js +5 -0
  38. package/dist/commands/discount/types.js.map +1 -0
  39. package/dist/commands/discount/utils.d.ts +51 -0
  40. package/dist/commands/discount/utils.d.ts.map +1 -0
  41. package/dist/commands/discount/utils.js +153 -0
  42. package/dist/commands/discount/utils.js.map +1 -0
  43. package/dist/commands/product/__tests__/update-description.test.js +1 -0
  44. package/dist/commands/product/__tests__/update-description.test.js.map +1 -1
  45. package/dist/commands/product/create-variants.d.ts +8 -0
  46. package/dist/commands/product/create-variants.d.ts.map +1 -0
  47. package/dist/commands/product/create-variants.js +160 -0
  48. package/dist/commands/product/create-variants.js.map +1 -0
  49. package/dist/commands/product/delete-variants.d.ts +8 -0
  50. package/dist/commands/product/delete-variants.d.ts.map +1 -0
  51. package/dist/commands/product/delete-variants.js +105 -0
  52. package/dist/commands/product/delete-variants.js.map +1 -0
  53. package/dist/commands/product/index.d.ts.map +1 -1
  54. package/dist/commands/product/index.js +30 -0
  55. package/dist/commands/product/index.js.map +1 -1
  56. package/dist/commands/product/queries.d.ts +12 -2
  57. package/dist/commands/product/queries.d.ts.map +1 -1
  58. package/dist/commands/product/queries.js +62 -0
  59. package/dist/commands/product/queries.js.map +1 -1
  60. package/dist/commands/product/service.d.ts +41 -1
  61. package/dist/commands/product/service.d.ts.map +1 -1
  62. package/dist/commands/product/service.js +159 -1
  63. package/dist/commands/product/service.js.map +1 -1
  64. package/dist/commands/product/types.d.ts +78 -0
  65. package/dist/commands/product/types.d.ts.map +1 -1
  66. package/dist/commands/product/update-title.d.ts +8 -0
  67. package/dist/commands/product/update-title.d.ts.map +1 -0
  68. package/dist/commands/product/update-title.js +94 -0
  69. package/dist/commands/product/update-title.js.map +1 -0
  70. package/dist/commands/product/utils.d.ts.map +1 -1
  71. package/dist/commands/product/utils.js +1 -0
  72. package/dist/commands/product/utils.js.map +1 -1
  73. package/package.json +2 -1
package/dist/cli.js CHANGED
@@ -17,11 +17,13 @@ import { registerProductCommands } from './commands/product/index.js';
17
17
  import { registerMetafieldCommands } from './commands/metafield/index.js';
18
18
  import { registerProductsCommands } from './commands/products/index.js';
19
19
  import { registerDocsCommands } from './commands/docs/index.js';
20
+ import { registerDiscountCommands } from './commands/discount/index.js';
20
21
  // Initialize registry
21
22
  registerProductCommands();
22
23
  registerMetafieldCommands();
23
24
  registerProductsCommands();
24
25
  registerDocsCommands();
26
+ registerDiscountCommands();
25
27
  function showMainHelp() {
26
28
  console.log(`
27
29
  EcomCoder CLI - Shopify Development Utilities
@@ -34,9 +36,17 @@ COMMANDS:
34
36
  products list List products in your Shopify store
35
37
  products set-rating Set rating metafields on a product
36
38
  product get Get detailed product data
39
+ product update-title Update product title
37
40
  product update-description Update product description
38
41
  product update-price Update product price and compare-at price
39
42
  product update-template Change product template assignment
43
+ product create-variants Create product variants (bulk operation)
44
+ product delete-variants Delete product variants (bulk operation)
45
+ discount create-basic Create basic discount (percentage or fixed amount)
46
+ discount create-bxgy Create BXGY (Buy X Get Y) discount
47
+ discount create-shipping Create free shipping discount
48
+ discount list List all discounts with filtering
49
+ discount delete Delete a discount by ID
40
50
  metafield create Create metafield definition
41
51
  metafield get Get metafield definition(s)
42
52
  docs search Search Shopify theme documentation
@@ -66,15 +76,24 @@ EXAMPLES:
66
76
  ecomcoder product get --id=123456789
67
77
  ecomcoder product get --title="Blue T-Shirt"
68
78
 
79
+ # Update product title
80
+ ecomcoder product update-title --id=123 --title="Premium Hair Serum"
81
+
69
82
  # Update product description
70
83
  ecomcoder product update-description --id=123 --description="Premium cotton t-shirt"
71
84
 
72
- # Update product price
73
- ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99
85
+ # Update product price (all variants)
86
+ ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99 --all-variants
74
87
 
75
88
  # Change product template
76
89
  ecomcoder product update-template --id=123 --template=premium
77
90
 
91
+ # Create product variants
92
+ ecomcoder product create-variants --product-id=123 --variants='[{"price":"29.99","inventoryItem":{"sku":"TEST-001"}}]'
93
+
94
+ # Delete product variants
95
+ ecomcoder product delete-variants --product-id=123 --variant-ids="456,789"
96
+
78
97
  # Create product-level metafield
79
98
  ecomcoder metafield create --name="Rating" --key=rating --type=number_decimal --owner-type=PRODUCT
80
99
 
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Command: discount create-basic
3
+ * Create a basic discount (percentage or fixed amount off)
4
+ */
5
+ export declare function run(cliArgs: string[]): Promise<void>;
6
+ //# sourceMappingURL=create-basic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-basic.d.ts","sourceRoot":"","sources":["../../../src/commands/discount/create-basic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwEH,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,iBA2G1C"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Command: discount create-basic
3
+ * Create a basic discount (percentage or fixed amount off)
4
+ */
5
+ import { parseArgs } from '../../lib/args-parser.js';
6
+ import { getCredentials } from '../../lib/api-client.js';
7
+ import { createBasicDiscount } from './service.js';
8
+ const HELP_TEXT = `
9
+ Create a basic discount (percentage or fixed amount off)
10
+
11
+ Usage:
12
+ ecomcoder discount create-basic [options]
13
+
14
+ Options:
15
+ --title <string> Discount title (required)
16
+ --code <string> Discount code (required for code discounts)
17
+ --automatic Create automatic discount (no code required)
18
+ --type <type> Discount type: percentage | fixed_amount (required)
19
+ --value <number> Discount value (0.00-1.00 for percentage, amount for fixed) (required)
20
+ --starts-at <datetime> Start date/time in ISO 8601 format (required)
21
+ --ends-at <datetime> End date/time in ISO 8601 format (optional)
22
+ --target <target> Target: all | collections | products (default: all)
23
+ --target-ids <ids> Comma-separated GIDs (required for collections/products target)
24
+ --min-subtotal <amount> Minimum subtotal required (optional)
25
+ --min-quantity <number> Minimum quantity required (optional)
26
+ --segments <ids> Comma-separated customer segment GIDs (optional)
27
+ --combine-order Allow combination with order discounts (default: true)
28
+ --combine-product Allow combination with product discounts (default: true)
29
+ --combine-shipping Allow combination with shipping discounts (default: true)
30
+ --usage-limit <number> Maximum number of uses (optional, code discounts only)
31
+ --once-per-customer Limit to one use per customer (code discounts only)
32
+
33
+ Examples:
34
+ # Percentage discount with code
35
+ ecomcoder discount create-basic \\
36
+ --title="Summer Sale" \\
37
+ --code="SUMMER25" \\
38
+ --type=percentage \\
39
+ --value=0.25 \\
40
+ --starts-at="2026-06-01T00:00:00Z" \\
41
+ --ends-at="2026-08-31T23:59:59Z"
42
+
43
+ # Fixed amount discount with minimum subtotal
44
+ ecomcoder discount create-basic \\
45
+ --title="$10 Off Orders Over $50" \\
46
+ --code="SAVE10" \\
47
+ --type=fixed_amount \\
48
+ --value=10.00 \\
49
+ --min-subtotal=50.00 \\
50
+ --starts-at="2026-06-01T00:00:00Z"
51
+
52
+ # Automatic discount on specific collections
53
+ ecomcoder discount create-basic \\
54
+ --title="VIP Collection Discount" \\
55
+ --automatic \\
56
+ --type=percentage \\
57
+ --value=0.15 \\
58
+ --target=collections \\
59
+ --target-ids="gid://shopify/Collection/123,gid://shopify/Collection/456" \\
60
+ --starts-at="2026-06-01T00:00:00Z"
61
+
62
+ # Discount with usage limit
63
+ ecomcoder discount create-basic \\
64
+ --title="Limited Offer" \\
65
+ --code="LIMITED100" \\
66
+ --type=percentage \\
67
+ --value=0.20 \\
68
+ --usage-limit=100 \\
69
+ --once-per-customer \\
70
+ --starts-at="2026-06-01T00:00:00Z"
71
+ `;
72
+ export async function run(cliArgs) {
73
+ const args = parseArgs(cliArgs);
74
+ if (args.help === 'true') {
75
+ console.log(HELP_TEXT);
76
+ return;
77
+ }
78
+ // Validate required arguments
79
+ if (!args.title) {
80
+ console.log(JSON.stringify({
81
+ success: false,
82
+ error: 'Missing required argument: --title'
83
+ }));
84
+ return;
85
+ }
86
+ if (!args.type) {
87
+ console.log(JSON.stringify({
88
+ success: false,
89
+ error: 'Missing required argument: --type (percentage | fixed_amount)'
90
+ }));
91
+ return;
92
+ }
93
+ if (!args.value) {
94
+ console.log(JSON.stringify({
95
+ success: false,
96
+ error: 'Missing required argument: --value'
97
+ }));
98
+ return;
99
+ }
100
+ if (!args.startsAt) {
101
+ console.log(JSON.stringify({
102
+ success: false,
103
+ error: 'Missing required argument: --starts-at (ISO 8601 format)'
104
+ }));
105
+ return;
106
+ }
107
+ const isAutomatic = args.automatic === 'true';
108
+ if (!isAutomatic && !args.code) {
109
+ console.log(JSON.stringify({
110
+ success: false,
111
+ error: 'Missing required argument: --code (required for code discounts, or use --automatic)'
112
+ }));
113
+ return;
114
+ }
115
+ // Parse target IDs if provided
116
+ let targetIds;
117
+ if (args.targetIds) {
118
+ targetIds = args.targetIds.split(',').map((id) => id.trim());
119
+ }
120
+ // Parse customer segments if provided
121
+ let customerSegments;
122
+ if (args.segments) {
123
+ customerSegments = args.segments.split(',').map((id) => id.trim());
124
+ }
125
+ // Build combinesWith object
126
+ const combinesWith = {
127
+ orderDiscounts: args.combineOrder !== 'false',
128
+ productDiscounts: args.combineProduct !== 'false',
129
+ shippingDiscounts: args.combineShipping !== 'false'
130
+ };
131
+ // Build input
132
+ const input = {
133
+ title: args.title,
134
+ code: args.code,
135
+ automatic: isAutomatic,
136
+ type: args.type,
137
+ value: args.value,
138
+ startsAt: args.startsAt,
139
+ endsAt: args.endsAt,
140
+ target: (args.target || 'all'),
141
+ targetIds,
142
+ minSubtotal: args.minSubtotal,
143
+ minQuantity: args.minQuantity,
144
+ customerSegments,
145
+ combinesWith,
146
+ usageLimit: args.usageLimit ? parseInt(args.usageLimit) : undefined,
147
+ appliesOncePerCustomer: args.oncePerCustomer === 'true'
148
+ };
149
+ // Get credentials
150
+ const sessionId = process.env.SESSION_ID || 'default';
151
+ const credentials = await getCredentials(sessionId);
152
+ // Create discount
153
+ const result = await createBasicDiscount(input, credentials);
154
+ console.log(JSON.stringify(result, null, 2));
155
+ }
156
+ //# sourceMappingURL=create-basic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-basic.js","sourceRoot":"","sources":["../../../src/commands/discount/create-basic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Create BXGY (Buy X Get Y) Discount Command
3
+ *
4
+ * Design Pattern: Command Pattern
5
+ * - Thin orchestration layer
6
+ * - Delegates business logic to service layer
7
+ * - Single Responsibility: Parse args, validate, call service, format output
8
+ */
9
+ /**
10
+ * Parse and execute create-bxgy command
11
+ *
12
+ * Following SOLID principles:
13
+ * - Single Responsibility: Parse args and orchestrate service call
14
+ * - Dependency Inversion: Depends on service abstraction
15
+ */
16
+ export declare function run(cliArgs: string[]): Promise<void>;
17
+ //# sourceMappingURL=create-bxgy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-bxgy.d.ts","sourceRoot":"","sources":["../../../src/commands/discount/create-bxgy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0HH;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyI1D"}
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Create BXGY (Buy X Get Y) Discount Command
3
+ *
4
+ * Design Pattern: Command Pattern
5
+ * - Thin orchestration layer
6
+ * - Delegates business logic to service layer
7
+ * - Single Responsibility: Parse args, validate, call service, format output
8
+ */
9
+ import { parseArgs } from '../../lib/args-parser.js';
10
+ import { getCredentials } from '../../lib/api-client.js';
11
+ import { createBxgyDiscount } from './service.js';
12
+ /**
13
+ * Show help for create-bxgy command
14
+ */
15
+ function showHelp() {
16
+ console.log(`
17
+ Create BXGY (Buy X Get Y) Discount
18
+
19
+ USAGE:
20
+ ecomcoder discount create-bxgy [options]
21
+
22
+ REQUIRED OPTIONS:
23
+ --title <text> Discount title
24
+ --gets-quantity <number> Number of items customer gets discounted
25
+ --gets-percentage <0.0-1.0> Percentage off items (e.g., 0.50 for 50% off, 1.0 for free)
26
+ --starts-at <ISO8601> When discount becomes active
27
+
28
+ CUSTOMER BUYS (choose quantity OR amount):
29
+ --buys-quantity <number> Minimum quantity to purchase
30
+ --buys-amount <amount> Minimum spend amount (e.g., "50.00")
31
+
32
+ CUSTOMER BUYS TARGETING (required, choose one):
33
+ --buys-products <ids> Comma-separated product GIDs
34
+ --buys-collections <ids> Comma-separated collection GIDs
35
+
36
+ CUSTOMER GETS TARGETING (required, choose one):
37
+ --gets-products <ids> Comma-separated product GIDs customer gets discount on
38
+ --gets-collections <ids> Comma-separated collection GIDs customer gets discount on
39
+
40
+ DISCOUNT TYPE:
41
+ --code <CODE> Create code-based discount (default)
42
+ --automatic Create automatic discount (no code required)
43
+
44
+ DATE/TIME OPTIONS:
45
+ --ends-at <ISO8601> When discount expires (optional)
46
+
47
+ USAGE LIMITS:
48
+ --uses-per-order-limit <n> Max times discount applies per order
49
+
50
+ COMBINATION RULES:
51
+ --combines-with-orders Allow combining with order discounts
52
+ --combines-with-products Allow combining with product discounts
53
+ --combines-with-shipping Allow combining with shipping discounts
54
+
55
+ EXAMPLES:
56
+ # Buy 2 get 1 free (same product)
57
+ ecomcoder discount create-bxgy \\
58
+ --title="Buy 2 Get 1 Free" \\
59
+ --code="BUY2GET1" \\
60
+ --buys-quantity=2 \\
61
+ --buys-products="gid://shopify/Product/123" \\
62
+ --gets-quantity=1 \\
63
+ --gets-percentage=1.0 \\
64
+ --gets-products="gid://shopify/Product/123" \\
65
+ --starts-at="2026-06-01T00:00:00Z"
66
+
67
+ # Spend $50, get 50% off accessories
68
+ ecomcoder discount create-bxgy \\
69
+ --title="Spend $50, Get 50% Off Accessories" \\
70
+ --automatic \\
71
+ --buys-amount=50.00 \\
72
+ --buys-products="gid://shopify/Product/456" \\
73
+ --gets-quantity=1 \\
74
+ --gets-percentage=0.50 \\
75
+ --gets-collections="gid://shopify/Collection/123" \\
76
+ --starts-at="2026-06-01T00:00:00Z"
77
+
78
+ # Buy 3 shirts, get 1 pair of pants free
79
+ ecomcoder discount create-bxgy \\
80
+ --title="Buy 3 Shirts Get Free Pants" \\
81
+ --code="SHIRTS3" \\
82
+ --buys-quantity=3 \\
83
+ --buys-collections="gid://shopify/Collection/456" \\
84
+ --gets-quantity=1 \\
85
+ --gets-percentage=1.0 \\
86
+ --gets-collections="gid://shopify/Collection/789" \\
87
+ --starts-at="2026-06-01T00:00:00Z" \\
88
+ --uses-per-order-limit=1
89
+
90
+ NOTES:
91
+ - Use ISO 8601 format for dates: YYYY-MM-DDTHH:mm:ssZ
92
+ - Percentage values: 0.25 = 25% off, 0.50 = 50% off, 1.0 = 100% off (free)
93
+ - Must specify either --buys-quantity OR --buys-amount (not both)
94
+ - BXGY requires specific products/collections (cannot use "all items")
95
+ - Must specify what customer buys (--buys-products OR --buys-collections)
96
+ - Must specify what customer gets (--gets-products OR --gets-collections)
97
+ - BXGY discounts apply to line items (not order total)
98
+ `);
99
+ }
100
+ /**
101
+ * Parse and execute create-bxgy command
102
+ *
103
+ * Following SOLID principles:
104
+ * - Single Responsibility: Parse args and orchestrate service call
105
+ * - Dependency Inversion: Depends on service abstraction
106
+ */
107
+ export async function run(cliArgs) {
108
+ const args = parseArgs(cliArgs);
109
+ if (args.help) {
110
+ showHelp();
111
+ return;
112
+ }
113
+ // Validate required arguments
114
+ if (!args.title) {
115
+ console.error('Error: --title is required');
116
+ process.exit(1);
117
+ }
118
+ if (!args.getsQuantity) {
119
+ console.error('Error: --gets-quantity is required');
120
+ process.exit(1);
121
+ }
122
+ if (!args.getsPercentage) {
123
+ console.error('Error: --gets-percentage is required');
124
+ process.exit(1);
125
+ }
126
+ if (!args.startsAt) {
127
+ console.error('Error: --starts-at is required');
128
+ process.exit(1);
129
+ }
130
+ // Validate discount type
131
+ if (!args.automatic && !args.code) {
132
+ console.error('Error: --code is required for code-based discounts (or use --automatic)');
133
+ process.exit(1);
134
+ }
135
+ if (args.automatic && args.code) {
136
+ console.error('Error: Automatic discounts cannot have codes');
137
+ process.exit(1);
138
+ }
139
+ // Validate customerBuys requirements
140
+ const hasBuysQuantity = args.buysQuantity !== undefined;
141
+ const hasBuysAmount = args.buysAmount !== undefined;
142
+ if (!hasBuysQuantity && !hasBuysAmount) {
143
+ console.error('Error: Must specify either --buys-quantity OR --buys-amount');
144
+ process.exit(1);
145
+ }
146
+ if (hasBuysQuantity && hasBuysAmount) {
147
+ console.error('Error: Cannot specify both --buys-quantity AND --buys-amount - choose one');
148
+ process.exit(1);
149
+ }
150
+ // Validate customerGets targeting
151
+ if (!args.getsProducts && !args.getsCollections) {
152
+ console.error('Error: Must specify what customer gets (--gets-products OR --gets-collections)');
153
+ process.exit(1);
154
+ }
155
+ // Build customerBuys input
156
+ const customerBuys = {
157
+ items: {},
158
+ value: {}
159
+ };
160
+ if (args.buysAll) {
161
+ customerBuys.items.all = true;
162
+ }
163
+ else if (args.buysProducts) {
164
+ customerBuys.items.products = {
165
+ productsToAdd: args.buysProducts.split(',').map(id => id.trim())
166
+ };
167
+ }
168
+ else if (args.buysCollections) {
169
+ customerBuys.items.collections = {
170
+ collectionsToAdd: args.buysCollections.split(',').map(id => id.trim())
171
+ };
172
+ }
173
+ else {
174
+ customerBuys.items.all = true; // Default to all products
175
+ }
176
+ if (hasBuysQuantity) {
177
+ customerBuys.value.quantity = args.buysQuantity;
178
+ }
179
+ else {
180
+ customerBuys.value.amount = args.buysAmount;
181
+ }
182
+ // Build customerGets input
183
+ const percentage = parseFloat(args.getsPercentage);
184
+ if (isNaN(percentage) || percentage < 0 || percentage > 1.0) {
185
+ console.error('Error: --gets-percentage must be between 0.0 and 1.0 (e.g., 0.50 for 50% off)');
186
+ process.exit(1);
187
+ }
188
+ const customerGets = {
189
+ items: {},
190
+ value: {
191
+ discountOnQuantity: {
192
+ quantity: args.getsQuantity,
193
+ effect: {
194
+ percentage
195
+ }
196
+ }
197
+ }
198
+ };
199
+ if (args.getsProducts) {
200
+ const productsToAdd = args.getsProducts.split(',').map(id => id.trim());
201
+ customerGets.items.products = { productsToAdd };
202
+ }
203
+ else if (args.getsCollections) {
204
+ const collectionsToAdd = args.getsCollections.split(',').map(id => id.trim());
205
+ customerGets.items.collections = { collectionsToAdd };
206
+ }
207
+ // Build input
208
+ const input = {
209
+ title: args.title,
210
+ code: args.code,
211
+ automatic: args.automatic,
212
+ customerBuys,
213
+ customerGets,
214
+ startsAt: args.startsAt,
215
+ endsAt: args.endsAt,
216
+ usesPerOrderLimit: args.usesPerOrderLimit ? parseInt(args.usesPerOrderLimit) : undefined,
217
+ combinesWith: {
218
+ orderDiscounts: args.combinesWithOrders || false,
219
+ productDiscounts: args.combinesWithProducts || false,
220
+ shippingDiscounts: args.combinesWithShipping || false
221
+ }
222
+ };
223
+ // Get credentials
224
+ const sessionId = process.env.SESSION_ID || 'default';
225
+ const credentials = await getCredentials(sessionId);
226
+ // Create discount
227
+ const result = await createBxgyDiscount(input, credentials);
228
+ console.log(JSON.stringify(result, null, 2));
229
+ }
230
+ //# sourceMappingURL=create-bxgy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-bxgy.js","sourceRoot":"","sources":["../../../src/commands/discount/create-bxgy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Create Free Shipping Discount Command
3
+ *
4
+ * Design Pattern: Command Pattern
5
+ * - Thin orchestration layer
6
+ * - Delegates business logic to service layer
7
+ * - Single Responsibility: Parse args, validate, call service, format output
8
+ */
9
+ /**
10
+ * Parse and execute create-shipping command
11
+ *
12
+ * Following SOLID principles:
13
+ * - Single Responsibility: Parse args and orchestrate service call
14
+ * - Dependency Inversion: Depends on service abstraction
15
+ */
16
+ export declare function run(cliArgs: string[]): Promise<void>;
17
+ //# sourceMappingURL=create-shipping.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-shipping.d.ts","sourceRoot":"","sources":["../../../src/commands/discount/create-shipping.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoGH;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF1D"}