ecomcoder-cli 1.3.4 → 1.3.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.
- package/dist/cli.js +2 -95
- package/dist/cli.js.map +1 -1
- package/dist/commands/create-metafield.d.ts.map +1 -1
- package/dist/commands/create-metafield.js +19 -25
- package/dist/commands/create-metafield.js.map +1 -1
- package/dist/commands/discount/index.d.ts.map +1 -1
- package/dist/commands/discount/index.js +10 -49
- package/dist/commands/discount/index.js.map +1 -1
- package/dist/commands/docs/index.d.ts.map +1 -1
- package/dist/commands/docs/index.js +4 -18
- package/dist/commands/docs/index.js.map +1 -1
- package/dist/commands/metafield/index.d.ts.map +1 -1
- package/dist/commands/metafield/index.js +6 -24
- package/dist/commands/metafield/index.js.map +1 -1
- package/dist/commands/product/index.d.ts.map +1 -1
- package/dist/commands/product/index.js +18 -60
- package/dist/commands/product/index.js.map +1 -1
- package/dist/commands/products/index.d.ts.map +1 -1
- package/dist/commands/products/index.js +5 -21
- package/dist/commands/products/index.js.map +1 -1
- package/dist/commands/shop/index.d.ts.map +1 -1
- package/dist/commands/shop/index.js +7 -30
- package/dist/commands/shop/index.js.map +1 -1
- package/dist/lib/command-registry.d.ts +2 -0
- package/dist/lib/command-registry.d.ts.map +1 -1
- package/dist/lib/command-registry.js.map +1 -1
- package/dist/lib/help-generator.d.ts +28 -0
- package/dist/lib/help-generator.d.ts.map +1 -0
- package/dist/lib/help-generator.js +131 -0
- package/dist/lib/help-generator.js.map +1 -0
- package/dist/lib/help-utils.d.ts +17 -0
- package/dist/lib/help-utils.d.ts.map +1 -0
- package/dist/lib/help-utils.js +24 -0
- package/dist/lib/help-utils.js.map +1 -0
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { getPositionalArgs } from './lib/args-parser.js';
|
|
14
14
|
import { registry } from './lib/command-registry.js';
|
|
15
|
+
import { HelpGenerator } from './lib/help-generator.js';
|
|
15
16
|
// Register all command groups
|
|
16
17
|
import { registerProductCommands } from './commands/product/index.js';
|
|
17
18
|
import { registerShopCommands } from './commands/shop/index.js';
|
|
@@ -27,101 +28,7 @@ registerProductsCommands();
|
|
|
27
28
|
registerDocsCommands();
|
|
28
29
|
registerDiscountCommands();
|
|
29
30
|
function showMainHelp() {
|
|
30
|
-
console.log(
|
|
31
|
-
EcomCoder CLI - Shopify Development Utilities
|
|
32
|
-
|
|
33
|
-
USAGE:
|
|
34
|
-
ecomcoder <command> <subcommand> [options]
|
|
35
|
-
|
|
36
|
-
COMMANDS:
|
|
37
|
-
products create Create dummy Shopify products for testing
|
|
38
|
-
products list List products in your Shopify store
|
|
39
|
-
product create Create a new product from scratch
|
|
40
|
-
product get Get detailed product data
|
|
41
|
-
product set-metafield Set or update product metafield values
|
|
42
|
-
product update-title Update product title
|
|
43
|
-
product update-description Update product description
|
|
44
|
-
product update-price Update product price and compare-at price
|
|
45
|
-
product update-status Update product status (ACTIVE, DRAFT, ARCHIVED)
|
|
46
|
-
product update-template Change product template assignment
|
|
47
|
-
product create-variants Create product variants (bulk operation)
|
|
48
|
-
product delete-variants Delete product variants (bulk operation)
|
|
49
|
-
shop set-metafield Set or update shop metafield values (store-wide)
|
|
50
|
-
shop get-metafield View shop metafield values (store-wide)
|
|
51
|
-
discount create-basic Create basic discount (percentage or fixed amount)
|
|
52
|
-
discount create-bxgy Create BXGY (Buy X Get Y) discount
|
|
53
|
-
discount create-shipping Create free shipping discount
|
|
54
|
-
discount list List all discounts with filtering
|
|
55
|
-
discount delete Delete a discount by ID
|
|
56
|
-
metafield create Create metafield definition
|
|
57
|
-
metafield get Get metafield definition(s)
|
|
58
|
-
docs search Search Shopify theme documentation
|
|
59
|
-
|
|
60
|
-
GLOBAL OPTIONS:
|
|
61
|
-
--session-id Session ID for authentication (auto-provided when used with Claude)
|
|
62
|
-
--help, -h Show help information
|
|
63
|
-
|
|
64
|
-
ENVIRONMENT VARIABLES:
|
|
65
|
-
SESSION_ID Session ID (auto-injected by Claude Agent SDK)
|
|
66
|
-
BACKEND_URL Orchestrator backend URL (auto-injected by agent)
|
|
67
|
-
SUPABASE_JWT Authentication token (auto-injected by agent)
|
|
68
|
-
SUPABASE_URL Supabase project URL (auto-injected by agent)
|
|
69
|
-
SUPABASE_ANON_KEY Supabase anonymous key (auto-injected by agent)
|
|
70
|
-
|
|
71
|
-
EXAMPLES:
|
|
72
|
-
# Create 10 dummy products
|
|
73
|
-
ecomcoder products create --count=10
|
|
74
|
-
|
|
75
|
-
# List 50 products
|
|
76
|
-
ecomcoder products list --limit=50
|
|
77
|
-
|
|
78
|
-
# Create a new product
|
|
79
|
-
ecomcoder product create --title="Premium Hair Serum" --price=29.99 --sku="HAIR-001"
|
|
80
|
-
|
|
81
|
-
# Get product details
|
|
82
|
-
ecomcoder product get --id=123456789
|
|
83
|
-
ecomcoder product get --title="Blue T-Shirt"
|
|
84
|
-
|
|
85
|
-
# Set product metafield (AI bundle automation)
|
|
86
|
-
ecomcoder product set-metafield --id=123 --namespace=bundles --key=products \\
|
|
87
|
-
--value='["gid://shopify/Product/456"]' --type=list.product_reference
|
|
88
|
-
|
|
89
|
-
# Update product title
|
|
90
|
-
ecomcoder product update-title --id=123 --title="Premium Hair Serum"
|
|
91
|
-
|
|
92
|
-
# Update product description
|
|
93
|
-
ecomcoder product update-description --id=123 --description="Premium cotton t-shirt"
|
|
94
|
-
|
|
95
|
-
# Update product price (all variants)
|
|
96
|
-
ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99 --all-variants
|
|
97
|
-
|
|
98
|
-
# Update product status
|
|
99
|
-
ecomcoder product update-status --id=123 --status=ACTIVE
|
|
100
|
-
|
|
101
|
-
# Change product template
|
|
102
|
-
ecomcoder product update-template --id=123 --template=premium
|
|
103
|
-
|
|
104
|
-
# Create product variants
|
|
105
|
-
ecomcoder product create-variants --product-id=123 --variants='[{"price":"29.99","inventoryItem":{"sku":"TEST-001"}}]'
|
|
106
|
-
|
|
107
|
-
# Delete product variants
|
|
108
|
-
ecomcoder product delete-variants --product-id=123 --variant-ids="456,789"
|
|
109
|
-
|
|
110
|
-
# Create product-level metafield
|
|
111
|
-
ecomcoder metafield create --name="Rating" --key=rating --type=number_decimal --owner-type=PRODUCT
|
|
112
|
-
|
|
113
|
-
# Create shop-level metafield (global)
|
|
114
|
-
ecomcoder metafield create --name="Cart Upsell" --key=cart_upsell --type=product_reference --owner-type=SHOP
|
|
115
|
-
|
|
116
|
-
# Get metafield definition
|
|
117
|
-
ecomcoder metafield get --namespace=ecomcoder --key=upsell --owner-type=PRODUCT
|
|
118
|
-
|
|
119
|
-
# Search Shopify theme docs
|
|
120
|
-
ecomcoder docs search --query="How do sections work?"
|
|
121
|
-
|
|
122
|
-
For more help on specific commands, run:
|
|
123
|
-
ecomcoder <command> <subcommand> --help
|
|
124
|
-
`);
|
|
31
|
+
console.log(HelpGenerator.generateMainHelp());
|
|
125
32
|
}
|
|
126
33
|
async function main() {
|
|
127
34
|
const args = process.argv.slice(2);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-metafield.d.ts","sourceRoot":"","sources":["../../src/commands/create-metafield.ts"],"names":[],"mappings":"AAoFA,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,
|
|
1
|
+
{"version":3,"file":"create-metafield.d.ts","sourceRoot":"","sources":["../../src/commands/create-metafield.ts"],"names":[],"mappings":"AAoFA,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBAgI/D"}
|
|
@@ -145,33 +145,27 @@ export async function run(argv = process.argv.slice(2)) {
|
|
|
145
145
|
if (!created) {
|
|
146
146
|
throw new Error('No definition returned');
|
|
147
147
|
}
|
|
148
|
-
// Create agent activity for
|
|
148
|
+
// Create agent activity for all metafield types
|
|
149
149
|
const type = created.type?.name;
|
|
150
150
|
const ownerType = created.ownerType;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
}, created.key, { name: created.name, key: created.key, owner_type: ownerType, metafield_type: type }, args.jwt || process.env.SUPABASE_JWT);
|
|
170
|
-
}
|
|
171
|
-
catch (error) {
|
|
172
|
-
// Don't fail the whole operation if activity creation fails
|
|
173
|
-
console.error('⚠️ Warning: Failed to create agent activity:', error);
|
|
174
|
-
}
|
|
151
|
+
try {
|
|
152
|
+
const isShopLevel = ownerType === 'SHOP';
|
|
153
|
+
const activityType = 'metafield_created';
|
|
154
|
+
const message = isShopLevel
|
|
155
|
+
? `Created shop-level metafield "${created.name}" (${type})`
|
|
156
|
+
: `Created ${created.name} metafield (${type})`;
|
|
157
|
+
await createAgentActivity(sessionId, activityType, message, {
|
|
158
|
+
metafield_key: created.key,
|
|
159
|
+
metafield_name: created.name,
|
|
160
|
+
metafield_id: created.id,
|
|
161
|
+
metafield_type: type,
|
|
162
|
+
owner_type: ownerType,
|
|
163
|
+
action: isShopLevel ? 'configure_shop_metafield' : 'configure_metafield'
|
|
164
|
+
}, created.key, { name: created.name, key: created.key, owner_type: ownerType, metafield_type: type }, args.jwt || process.env.SUPABASE_JWT);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
// Don't fail the whole operation if activity creation fails
|
|
168
|
+
console.error('⚠️ Warning: Failed to create agent activity:', error);
|
|
175
169
|
}
|
|
176
170
|
console.log(JSON.stringify({
|
|
177
171
|
success: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-metafield.js","sourceRoot":"","sources":["../../src/commands/create-metafield.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"create-metafield.js","sourceRoot":"","sources":["../../src/commands/create-metafield.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/discount/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/discount/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAoD/C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Following Open/Closed Principle - commands register themselves
|
|
5
5
|
*/
|
|
6
6
|
import { registry } from '../../lib/command-registry.js';
|
|
7
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Register all discount commands
|
|
9
10
|
*/
|
|
@@ -11,56 +12,9 @@ export function registerDiscountCommands() {
|
|
|
11
12
|
// Register command group
|
|
12
13
|
registry.registerGroup({
|
|
13
14
|
command: 'discount',
|
|
14
|
-
description: 'Create and manage
|
|
15
|
+
description: 'Create and manage discounts',
|
|
15
16
|
showHelp: () => {
|
|
16
|
-
console.log(
|
|
17
|
-
Discount Commands - Create and manage Shopify discounts
|
|
18
|
-
|
|
19
|
-
USAGE:
|
|
20
|
-
ecomcoder discount <subcommand> [options]
|
|
21
|
-
|
|
22
|
-
SUBCOMMANDS:
|
|
23
|
-
create-basic Create basic discount (percentage or fixed amount off)
|
|
24
|
-
create-bxgy Create BXGY (Buy X Get Y) discount
|
|
25
|
-
create-shipping Create free shipping discount
|
|
26
|
-
list List all discounts with filtering
|
|
27
|
-
delete Delete a discount by ID
|
|
28
|
-
|
|
29
|
-
EXAMPLES:
|
|
30
|
-
# Create percentage discount with code
|
|
31
|
-
ecomcoder discount create-basic \\
|
|
32
|
-
--title="Summer Sale" \\
|
|
33
|
-
--code="SUMMER25" \\
|
|
34
|
-
--type=percentage \\
|
|
35
|
-
--value=0.25 \\
|
|
36
|
-
--starts-at="2026-06-01T00:00:00Z"
|
|
37
|
-
|
|
38
|
-
# Create fixed amount discount with minimum
|
|
39
|
-
ecomcoder discount create-basic \\
|
|
40
|
-
--title="$10 Off Orders Over $50" \\
|
|
41
|
-
--code="SAVE10" \\
|
|
42
|
-
--type=fixed_amount \\
|
|
43
|
-
--value=10.00 \\
|
|
44
|
-
--min-subtotal=50.00 \\
|
|
45
|
-
--starts-at="2026-06-01T00:00:00Z"
|
|
46
|
-
|
|
47
|
-
# Create automatic discount
|
|
48
|
-
ecomcoder discount create-basic \\
|
|
49
|
-
--title="VIP Discount" \\
|
|
50
|
-
--automatic \\
|
|
51
|
-
--type=percentage \\
|
|
52
|
-
--value=0.15 \\
|
|
53
|
-
--starts-at="2026-06-01T00:00:00Z"
|
|
54
|
-
|
|
55
|
-
# List active discounts
|
|
56
|
-
ecomcoder discount list --status=active
|
|
57
|
-
|
|
58
|
-
# Delete discount
|
|
59
|
-
ecomcoder discount delete --id="gid://shopify/DiscountCodeNode/123"
|
|
60
|
-
|
|
61
|
-
For detailed help on a specific subcommand:
|
|
62
|
-
ecomcoder discount <subcommand> --help
|
|
63
|
-
`);
|
|
17
|
+
console.log(HelpGenerator.generateGroupHelp('discount'));
|
|
64
18
|
}
|
|
65
19
|
});
|
|
66
20
|
// Register individual subcommands
|
|
@@ -68,30 +22,37 @@ For detailed help on a specific subcommand:
|
|
|
68
22
|
command: 'discount',
|
|
69
23
|
subcommand: 'create-basic',
|
|
70
24
|
description: 'Create basic discount (percentage or fixed amount off)',
|
|
25
|
+
category: 'Create',
|
|
26
|
+
quickExample: 'ecomcoder discount create-basic --title="Summer Sale" --code="SUMMER25" --type=percentage --value=0.25 --starts-at="2026-06-01T00:00:00Z"',
|
|
71
27
|
handler: async () => await import('./create-basic.js')
|
|
72
28
|
});
|
|
73
29
|
registry.register({
|
|
74
30
|
command: 'discount',
|
|
75
31
|
subcommand: 'create-bxgy',
|
|
76
32
|
description: 'Create BXGY (Buy X Get Y) discount',
|
|
33
|
+
category: 'Create',
|
|
77
34
|
handler: async () => await import('./create-bxgy.js')
|
|
78
35
|
});
|
|
79
36
|
registry.register({
|
|
80
37
|
command: 'discount',
|
|
81
38
|
subcommand: 'create-shipping',
|
|
82
39
|
description: 'Create free shipping discount',
|
|
40
|
+
category: 'Create',
|
|
83
41
|
handler: async () => await import('./create-shipping.js')
|
|
84
42
|
});
|
|
85
43
|
registry.register({
|
|
86
44
|
command: 'discount',
|
|
87
45
|
subcommand: 'list',
|
|
88
46
|
description: 'List all discounts with filtering',
|
|
47
|
+
category: 'Manage',
|
|
48
|
+
quickExample: 'ecomcoder discount list --status=active',
|
|
89
49
|
handler: async () => await import('./list.js')
|
|
90
50
|
});
|
|
91
51
|
registry.register({
|
|
92
52
|
command: 'discount',
|
|
93
53
|
subcommand: 'delete',
|
|
94
54
|
description: 'Delete a discount by ID',
|
|
55
|
+
category: 'Manage',
|
|
95
56
|
handler: async () => await import('./delete.js')
|
|
96
57
|
});
|
|
97
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/discount/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/discount/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,wDAAwD;QACrE,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,2IAA2I;QACzJ,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,aAAa;QACzB,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC;KACtD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,+BAA+B;QAC5C,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC;KAC1D,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,yCAAyC;QACvD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC;KAC/C,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC;KACjD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/docs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/docs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAkB3C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Following Open/Closed Principle - commands register themselves
|
|
5
5
|
*/
|
|
6
6
|
import { registry } from '../../lib/command-registry.js';
|
|
7
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Register all docs commands
|
|
9
10
|
*/
|
|
@@ -11,25 +12,9 @@ export function registerDocsCommands() {
|
|
|
11
12
|
// Register command group
|
|
12
13
|
registry.registerGroup({
|
|
13
14
|
command: 'docs',
|
|
14
|
-
description: 'Search
|
|
15
|
+
description: 'Search theme documentation',
|
|
15
16
|
showHelp: () => {
|
|
16
|
-
console.log(
|
|
17
|
-
Docs Commands - Search Shopify theme documentation
|
|
18
|
-
|
|
19
|
-
USAGE:
|
|
20
|
-
ecomcoder docs <subcommand> [options]
|
|
21
|
-
|
|
22
|
-
SUBCOMMANDS:
|
|
23
|
-
search Search Shopify theme docs using RAG
|
|
24
|
-
|
|
25
|
-
EXAMPLES:
|
|
26
|
-
# Search Shopify theme docs
|
|
27
|
-
ecomcoder docs search --query="How do sections work?"
|
|
28
|
-
ecomcoder docs search --query="Liquid filters for dates"
|
|
29
|
-
|
|
30
|
-
For detailed help on a specific subcommand:
|
|
31
|
-
ecomcoder docs <subcommand> --help
|
|
32
|
-
`);
|
|
17
|
+
console.log(HelpGenerator.generateGroupHelp('docs'));
|
|
33
18
|
}
|
|
34
19
|
});
|
|
35
20
|
// Register individual subcommands
|
|
@@ -37,6 +22,7 @@ For detailed help on a specific subcommand:
|
|
|
37
22
|
command: 'docs',
|
|
38
23
|
subcommand: 'search',
|
|
39
24
|
description: 'Search Shopify theme documentation',
|
|
25
|
+
quickExample: 'ecomcoder docs search --query="How do sections work?"',
|
|
40
26
|
handler: async () => await import('../docs-search.js')
|
|
41
27
|
});
|
|
42
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/docs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/docs/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,oCAAoC;QACjD,YAAY,EAAE,uDAAuD;QACrE,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/metafield/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/metafield/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CA2BhD"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Following Open/Closed Principle - commands register themselves
|
|
5
5
|
*/
|
|
6
6
|
import { registry } from '../../lib/command-registry.js';
|
|
7
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Register all metafield commands
|
|
9
10
|
*/
|
|
@@ -11,31 +12,9 @@ export function registerMetafieldCommands() {
|
|
|
11
12
|
// Register command group
|
|
12
13
|
registry.registerGroup({
|
|
13
14
|
command: 'metafield',
|
|
14
|
-
description: '
|
|
15
|
+
description: 'Metafield definitions',
|
|
15
16
|
showHelp: () => {
|
|
16
|
-
console.log(
|
|
17
|
-
Metafield Commands - Manage Shopify metafield definitions
|
|
18
|
-
|
|
19
|
-
USAGE:
|
|
20
|
-
ecomcoder metafield <subcommand> [options]
|
|
21
|
-
|
|
22
|
-
SUBCOMMANDS:
|
|
23
|
-
create Create metafield definition
|
|
24
|
-
get Get metafield definition(s)
|
|
25
|
-
|
|
26
|
-
EXAMPLES:
|
|
27
|
-
# Create product-level metafield
|
|
28
|
-
ecomcoder metafield create --name="Rating" --key=rating --type=number_decimal --owner-type=PRODUCT
|
|
29
|
-
|
|
30
|
-
# Create shop-level metafield (global)
|
|
31
|
-
ecomcoder metafield create --name="Cart Upsell" --key=cart_upsell --type=product_reference --owner-type=SHOP
|
|
32
|
-
|
|
33
|
-
# Get metafield definition
|
|
34
|
-
ecomcoder metafield get --namespace=ecomcoder --key=upsell --owner-type=PRODUCT
|
|
35
|
-
|
|
36
|
-
For detailed help on a specific subcommand:
|
|
37
|
-
ecomcoder metafield <subcommand> --help
|
|
38
|
-
`);
|
|
17
|
+
console.log(HelpGenerator.generateGroupHelp('metafield'));
|
|
39
18
|
}
|
|
40
19
|
});
|
|
41
20
|
// Register individual subcommands
|
|
@@ -43,12 +22,15 @@ For detailed help on a specific subcommand:
|
|
|
43
22
|
command: 'metafield',
|
|
44
23
|
subcommand: 'create',
|
|
45
24
|
description: 'Create metafield definition',
|
|
25
|
+
category: 'Definitions',
|
|
26
|
+
quickExample: 'ecomcoder metafield create --name="Rating" --key=rating --type=number_decimal --owner-type=PRODUCT',
|
|
46
27
|
handler: async () => await import('../create-metafield.js')
|
|
47
28
|
});
|
|
48
29
|
registry.register({
|
|
49
30
|
command: 'metafield',
|
|
50
31
|
subcommand: 'get',
|
|
51
32
|
description: 'Get metafield definition(s)',
|
|
33
|
+
category: 'Definitions',
|
|
52
34
|
handler: async () => await import('../get-metafield.js')
|
|
53
35
|
});
|
|
54
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/metafield/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/metafield/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,uBAAuB;QACpC,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,WAAW;QACpB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,oGAAoG;QAClH,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,wBAAwB,CAAC;KAC5D,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,WAAW;QACpB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,aAAa;QACvB,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAsG9C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Following Open/Closed Principle - commands register themselves
|
|
5
5
|
*/
|
|
6
6
|
import { registry } from '../../lib/command-registry.js';
|
|
7
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Register all product commands
|
|
9
10
|
*/
|
|
@@ -11,67 +12,9 @@ export function registerProductCommands() {
|
|
|
11
12
|
// Register command group
|
|
12
13
|
registry.registerGroup({
|
|
13
14
|
command: 'product',
|
|
14
|
-
description: '
|
|
15
|
+
description: 'Manage individual products',
|
|
15
16
|
showHelp: () => {
|
|
16
|
-
console.log(
|
|
17
|
-
Product Commands - View and modify Shopify product data
|
|
18
|
-
|
|
19
|
-
USAGE:
|
|
20
|
-
ecomcoder product <subcommand> [options]
|
|
21
|
-
|
|
22
|
-
SUBCOMMANDS:
|
|
23
|
-
create Create a new product from scratch
|
|
24
|
-
get Get product details by ID, title, or handle
|
|
25
|
-
get-metafield View product metafield values
|
|
26
|
-
set-metafield Set or update product metafield values
|
|
27
|
-
update-title Update product title
|
|
28
|
-
update-description Update product description
|
|
29
|
-
update-price Update product price and compare-at price
|
|
30
|
-
update-status Update product status (ACTIVE, DRAFT, ARCHIVED, UNLISTED)
|
|
31
|
-
update-template Change product template assignment
|
|
32
|
-
create-variants Create product variants (bulk operation)
|
|
33
|
-
delete-variants Delete product variants (bulk operation)
|
|
34
|
-
|
|
35
|
-
EXAMPLES:
|
|
36
|
-
# Create product
|
|
37
|
-
ecomcoder product create --title="Premium Hair Serum" --price=29.99 --sku="HAIR-001"
|
|
38
|
-
|
|
39
|
-
# Get product details
|
|
40
|
-
ecomcoder product get --title="Blue T-Shirt"
|
|
41
|
-
ecomcoder product get --id=123456789
|
|
42
|
-
|
|
43
|
-
# Get metafield value
|
|
44
|
-
ecomcoder product get-metafield --id=123 --namespace=bundles --key=products
|
|
45
|
-
|
|
46
|
-
# Set metafield (AI bundle automation)
|
|
47
|
-
ecomcoder product set-metafield --id=123 --namespace=bundles --key=products \\
|
|
48
|
-
--value='["gid://shopify/Product/456","gid://shopify/Product/789"]' \\
|
|
49
|
-
--type=list.product_reference
|
|
50
|
-
|
|
51
|
-
# Update title
|
|
52
|
-
ecomcoder product update-title --id=123 --title="Premium Cotton T-Shirt"
|
|
53
|
-
|
|
54
|
-
# Update description
|
|
55
|
-
ecomcoder product update-description --id=123 --description="Premium cotton t-shirt"
|
|
56
|
-
|
|
57
|
-
# Update price
|
|
58
|
-
ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99
|
|
59
|
-
|
|
60
|
-
# Update status
|
|
61
|
-
ecomcoder product update-status --id=123 --status=ACTIVE
|
|
62
|
-
|
|
63
|
-
# Change template
|
|
64
|
-
ecomcoder product update-template --id=123 --template=premium
|
|
65
|
-
|
|
66
|
-
# Create variants
|
|
67
|
-
ecomcoder product create-variants --product-id=123 --variants='[{"price":"29.99","inventoryItem":{"sku":"TEST-001"}}]'
|
|
68
|
-
|
|
69
|
-
# Delete variants
|
|
70
|
-
ecomcoder product delete-variants --product-id=123 --variant-ids="456,789"
|
|
71
|
-
|
|
72
|
-
For detailed help on a specific subcommand:
|
|
73
|
-
ecomcoder product <subcommand> --help
|
|
74
|
-
`);
|
|
17
|
+
console.log(HelpGenerator.generateGroupHelp('product'));
|
|
75
18
|
}
|
|
76
19
|
});
|
|
77
20
|
// Register individual subcommands
|
|
@@ -79,66 +22,81 @@ For detailed help on a specific subcommand:
|
|
|
79
22
|
command: 'product',
|
|
80
23
|
subcommand: 'create',
|
|
81
24
|
description: 'Create a new product from scratch',
|
|
25
|
+
category: 'CRUD',
|
|
26
|
+
quickExample: 'ecomcoder product create --title="Premium Hair Serum" --price=29.99',
|
|
82
27
|
handler: async () => await import('./create.js')
|
|
83
28
|
});
|
|
84
29
|
registry.register({
|
|
85
30
|
command: 'product',
|
|
86
31
|
subcommand: 'get',
|
|
87
32
|
description: 'Get product details by ID, title, or handle',
|
|
33
|
+
category: 'CRUD',
|
|
34
|
+
quickExample: 'ecomcoder product get --id=123',
|
|
88
35
|
handler: async () => await import('./get.js')
|
|
89
36
|
});
|
|
90
37
|
registry.register({
|
|
91
38
|
command: 'product',
|
|
92
39
|
subcommand: 'get-metafield',
|
|
93
40
|
description: 'View product metafield values',
|
|
41
|
+
category: 'Metafields',
|
|
94
42
|
handler: async () => await import('./get-metafield.js')
|
|
95
43
|
});
|
|
96
44
|
registry.register({
|
|
97
45
|
command: 'product',
|
|
98
46
|
subcommand: 'set-metafield',
|
|
99
47
|
description: 'Set or update product metafield values',
|
|
48
|
+
category: 'Metafields',
|
|
49
|
+
quickExample: 'ecomcoder product set-metafield --id=123 --namespace=custom --key=rating --value=4.5 --type=number_decimal',
|
|
100
50
|
handler: async () => await import('./set-metafield.js')
|
|
101
51
|
});
|
|
102
52
|
registry.register({
|
|
103
53
|
command: 'product',
|
|
104
54
|
subcommand: 'update-title',
|
|
105
55
|
description: 'Update product title',
|
|
56
|
+
category: 'Updates',
|
|
106
57
|
handler: async () => await import('./update-title.js')
|
|
107
58
|
});
|
|
108
59
|
registry.register({
|
|
109
60
|
command: 'product',
|
|
110
61
|
subcommand: 'update-description',
|
|
111
62
|
description: 'Update product description',
|
|
63
|
+
category: 'Updates',
|
|
112
64
|
handler: async () => await import('./update-description.js')
|
|
113
65
|
});
|
|
114
66
|
registry.register({
|
|
115
67
|
command: 'product',
|
|
116
68
|
subcommand: 'update-price',
|
|
117
69
|
description: 'Update product price and compare-at price',
|
|
70
|
+
category: 'Updates',
|
|
71
|
+
quickExample: 'ecomcoder product update-price --id=123 --price=29.99',
|
|
118
72
|
handler: async () => await import('./update-price.js')
|
|
119
73
|
});
|
|
120
74
|
registry.register({
|
|
121
75
|
command: 'product',
|
|
122
76
|
subcommand: 'update-status',
|
|
123
77
|
description: 'Update product status (ACTIVE, DRAFT, ARCHIVED, UNLISTED)',
|
|
78
|
+
category: 'Updates',
|
|
124
79
|
handler: async () => await import('./update-status.js')
|
|
125
80
|
});
|
|
126
81
|
registry.register({
|
|
127
82
|
command: 'product',
|
|
128
83
|
subcommand: 'update-template',
|
|
129
84
|
description: 'Change product template assignment',
|
|
85
|
+
category: 'Updates',
|
|
130
86
|
handler: async () => await import('./update-template.js')
|
|
131
87
|
});
|
|
132
88
|
registry.register({
|
|
133
89
|
command: 'product',
|
|
134
90
|
subcommand: 'create-variants',
|
|
135
91
|
description: 'Create product variants (bulk operation)',
|
|
92
|
+
category: 'Variants',
|
|
136
93
|
handler: async () => await import('./create-variants.js')
|
|
137
94
|
});
|
|
138
95
|
registry.register({
|
|
139
96
|
command: 'product',
|
|
140
97
|
subcommand: 'delete-variants',
|
|
141
98
|
description: 'Delete product variants (bulk operation)',
|
|
99
|
+
category: 'Variants',
|
|
142
100
|
handler: async () => await import('./delete-variants.js')
|
|
143
101
|
});
|
|
144
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/products/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/products/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CA0B/C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Following Open/Closed Principle - commands register themselves
|
|
5
5
|
*/
|
|
6
6
|
import { registry } from '../../lib/command-registry.js';
|
|
7
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Register all products commands
|
|
9
10
|
*/
|
|
@@ -11,28 +12,9 @@ export function registerProductsCommands() {
|
|
|
11
12
|
// Register command group
|
|
12
13
|
registry.registerGroup({
|
|
13
14
|
command: 'products',
|
|
14
|
-
description: '
|
|
15
|
+
description: 'Bulk product operations',
|
|
15
16
|
showHelp: () => {
|
|
16
|
-
console.log(
|
|
17
|
-
Products Commands - Bulk product operations and utilities
|
|
18
|
-
|
|
19
|
-
USAGE:
|
|
20
|
-
ecomcoder products <subcommand> [options]
|
|
21
|
-
|
|
22
|
-
SUBCOMMANDS:
|
|
23
|
-
create Create dummy Shopify products for testing
|
|
24
|
-
list List products in your Shopify store
|
|
25
|
-
|
|
26
|
-
EXAMPLES:
|
|
27
|
-
# Create 10 dummy products
|
|
28
|
-
ecomcoder products create --count=10
|
|
29
|
-
|
|
30
|
-
# List 50 products
|
|
31
|
-
ecomcoder products list --limit=50
|
|
32
|
-
|
|
33
|
-
For detailed help on a specific subcommand:
|
|
34
|
-
ecomcoder products <subcommand> --help
|
|
35
|
-
`);
|
|
17
|
+
console.log(HelpGenerator.generateGroupHelp('products'));
|
|
36
18
|
}
|
|
37
19
|
});
|
|
38
20
|
// Register individual subcommands
|
|
@@ -40,12 +22,14 @@ For detailed help on a specific subcommand:
|
|
|
40
22
|
command: 'products',
|
|
41
23
|
subcommand: 'create',
|
|
42
24
|
description: 'Create dummy Shopify products for testing',
|
|
25
|
+
quickExample: 'ecomcoder products create --count=10',
|
|
43
26
|
handler: async () => await import('../create-dummy-products.js')
|
|
44
27
|
});
|
|
45
28
|
registry.register({
|
|
46
29
|
command: 'products',
|
|
47
30
|
subcommand: 'list',
|
|
48
31
|
description: 'List products in your Shopify store',
|
|
32
|
+
quickExample: 'ecomcoder products list --limit=50',
|
|
49
33
|
handler: async () => await import('../list-products.js')
|
|
50
34
|
});
|
|
51
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/products/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/products/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,yBAAyB;QACtC,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,QAAQ;QACpB,WAAW,EAAE,2CAA2C;QACxD,YAAY,EAAE,sCAAsC;QACpD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC;KACjE,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,UAAU;QACnB,UAAU,EAAE,MAAM;QAClB,WAAW,EAAE,qCAAqC;QAClD,YAAY,EAAE,oCAAoC;QAClD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,qBAAqB,CAAC;KACzD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/shop/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/shop/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CA4B3C"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Following Open/Closed Principle - commands register themselves
|
|
5
5
|
*/
|
|
6
6
|
import { registry } from '../../lib/command-registry.js';
|
|
7
|
+
import { HelpGenerator } from '../../lib/help-generator.js';
|
|
7
8
|
/**
|
|
8
9
|
* Register all shop commands
|
|
9
10
|
*/
|
|
@@ -11,37 +12,9 @@ export function registerShopCommands() {
|
|
|
11
12
|
// Register command group
|
|
12
13
|
registry.registerGroup({
|
|
13
14
|
command: 'shop',
|
|
14
|
-
description: '
|
|
15
|
+
description: 'Store-wide settings and metafields',
|
|
15
16
|
showHelp: () => {
|
|
16
|
-
console.log(
|
|
17
|
-
Shop Commands - Manage store-wide settings and metafields
|
|
18
|
-
|
|
19
|
-
USAGE:
|
|
20
|
-
ecomcoder shop <subcommand> [options]
|
|
21
|
-
|
|
22
|
-
SUBCOMMANDS:
|
|
23
|
-
set-metafield Set or update shop metafield values
|
|
24
|
-
get-metafield View shop metafield values
|
|
25
|
-
|
|
26
|
-
EXAMPLES:
|
|
27
|
-
# Set store-wide announcement
|
|
28
|
-
ecomcoder shop set-metafield --namespace=custom --key=announcement --value="Sale!" --type=single_line_text_field
|
|
29
|
-
|
|
30
|
-
# Get announcement metafield
|
|
31
|
-
ecomcoder shop get-metafield --namespace=custom --key=announcement
|
|
32
|
-
|
|
33
|
-
# Get all metafields in 'custom' namespace
|
|
34
|
-
ecomcoder shop get-metafield --namespace=custom
|
|
35
|
-
|
|
36
|
-
# Set free shipping threshold
|
|
37
|
-
ecomcoder shop set-metafield --namespace=shipping --key=min_amount --value="50.00" --type=number_decimal
|
|
38
|
-
|
|
39
|
-
# Set featured products (global)
|
|
40
|
-
ecomcoder shop set-metafield --namespace=products --key=featured --value='["gid://shopify/Product/123"]' --type=list.product_reference
|
|
41
|
-
|
|
42
|
-
For detailed help on a specific subcommand:
|
|
43
|
-
ecomcoder shop <subcommand> --help
|
|
44
|
-
`);
|
|
17
|
+
console.log(HelpGenerator.generateGroupHelp('shop'));
|
|
45
18
|
}
|
|
46
19
|
});
|
|
47
20
|
// Register individual subcommands
|
|
@@ -49,12 +22,16 @@ For detailed help on a specific subcommand:
|
|
|
49
22
|
command: 'shop',
|
|
50
23
|
subcommand: 'set-metafield',
|
|
51
24
|
description: 'Set or update shop metafield values',
|
|
25
|
+
category: 'Metafields',
|
|
26
|
+
quickExample: 'ecomcoder shop set-metafield --namespace=custom --key=announcement --value="Sale!" --type=single_line_text_field',
|
|
52
27
|
handler: async () => await import('./set-metafield.js')
|
|
53
28
|
});
|
|
54
29
|
registry.register({
|
|
55
30
|
command: 'shop',
|
|
56
31
|
subcommand: 'get-metafield',
|
|
57
32
|
description: 'View shop metafield values',
|
|
33
|
+
category: 'Metafields',
|
|
34
|
+
quickExample: 'ecomcoder shop get-metafield --namespace=custom --key=announcement',
|
|
58
35
|
handler: async () => await import('./get-metafield.js')
|
|
59
36
|
});
|
|
60
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/shop/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/shop/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,qCAAqC;QAClD,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,kHAAkH;QAChI,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC;KACxD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,eAAe;QAC3B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,oEAAoE;QAClF,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC;KACxD,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -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;
|
|
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"}
|