ecomcoder-cli 1.2.12 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +293 -0
  2. package/dist/__tests__/test-utils.d.ts +123 -0
  3. package/dist/__tests__/test-utils.d.ts.map +1 -0
  4. package/dist/__tests__/test-utils.js +133 -0
  5. package/dist/__tests__/test-utils.js.map +1 -0
  6. package/dist/cli.d.ts +8 -7
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +70 -65
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/docs/index.d.ts +10 -0
  11. package/dist/commands/docs/index.d.ts.map +1 -0
  12. package/dist/commands/docs/index.js +43 -0
  13. package/dist/commands/docs/index.js.map +1 -0
  14. package/dist/commands/metafield/index.d.ts +10 -0
  15. package/dist/commands/metafield/index.d.ts.map +1 -0
  16. package/dist/commands/metafield/index.js +55 -0
  17. package/dist/commands/metafield/index.js.map +1 -0
  18. package/dist/commands/product/__tests__/service.test.d.ts +7 -0
  19. package/dist/commands/product/__tests__/service.test.d.ts.map +1 -0
  20. package/dist/commands/product/__tests__/service.test.js +299 -0
  21. package/dist/commands/product/__tests__/service.test.js.map +1 -0
  22. package/dist/commands/product/__tests__/update-description.test.d.ts +5 -0
  23. package/dist/commands/product/__tests__/update-description.test.d.ts.map +1 -0
  24. package/dist/commands/product/__tests__/update-description.test.js +110 -0
  25. package/dist/commands/product/__tests__/update-description.test.js.map +1 -0
  26. package/dist/commands/product/get.d.ts +2 -0
  27. package/dist/commands/product/get.d.ts.map +1 -0
  28. package/dist/commands/product/get.js +305 -0
  29. package/dist/commands/product/get.js.map +1 -0
  30. package/dist/commands/product/index.d.ts +10 -0
  31. package/dist/commands/product/index.d.ts.map +1 -0
  32. package/dist/commands/product/index.js +73 -0
  33. package/dist/commands/product/index.js.map +1 -0
  34. package/dist/commands/product/queries.d.ts +32 -0
  35. package/dist/commands/product/queries.d.ts.map +1 -0
  36. package/dist/commands/product/queries.js +195 -0
  37. package/dist/commands/product/queries.js.map +1 -0
  38. package/dist/commands/product/service.d.ts +51 -0
  39. package/dist/commands/product/service.d.ts.map +1 -0
  40. package/dist/commands/product/service.js +237 -0
  41. package/dist/commands/product/service.js.map +1 -0
  42. package/dist/commands/product/types.d.ts +165 -0
  43. package/dist/commands/product/types.d.ts.map +1 -0
  44. package/dist/commands/product/types.js +6 -0
  45. package/dist/commands/product/types.js.map +1 -0
  46. package/dist/commands/product/update-description.d.ts +8 -0
  47. package/dist/commands/product/update-description.d.ts.map +1 -0
  48. package/dist/commands/product/update-description.js +86 -0
  49. package/dist/commands/product/update-description.js.map +1 -0
  50. package/dist/commands/product/update-price.d.ts +8 -0
  51. package/dist/commands/product/update-price.d.ts.map +1 -0
  52. package/dist/commands/product/update-price.js +101 -0
  53. package/dist/commands/product/update-price.js.map +1 -0
  54. package/dist/commands/product/update-template.d.ts +8 -0
  55. package/dist/commands/product/update-template.d.ts.map +1 -0
  56. package/dist/commands/product/update-template.js +114 -0
  57. package/dist/commands/product/update-template.js.map +1 -0
  58. package/dist/commands/product/utils.d.ts +69 -0
  59. package/dist/commands/product/utils.d.ts.map +1 -0
  60. package/dist/commands/product/utils.js +180 -0
  61. package/dist/commands/product/utils.js.map +1 -0
  62. package/dist/commands/products/index.d.ts +10 -0
  63. package/dist/commands/products/index.d.ts.map +1 -0
  64. package/dist/commands/products/index.js +62 -0
  65. package/dist/commands/products/index.js.map +1 -0
  66. package/dist/lib/api-client.d.ts.map +1 -1
  67. package/dist/lib/api-client.js +11 -0
  68. package/dist/lib/api-client.js.map +1 -1
  69. package/dist/lib/args-parser.d.ts.map +1 -1
  70. package/dist/lib/args-parser.js +2 -1
  71. package/dist/lib/args-parser.js.map +1 -1
  72. package/dist/lib/command-registry.d.ts +64 -0
  73. package/dist/lib/command-registry.d.ts.map +1 -0
  74. package/dist/lib/command-registry.js +76 -0
  75. package/dist/lib/command-registry.js.map +1 -0
  76. package/package.json +11 -3
  77. package/dist/lib/gemini-client.d.ts +0 -6
  78. package/dist/lib/gemini-client.d.ts.map +0 -1
  79. package/dist/lib/gemini-client.js +0 -27
  80. package/dist/lib/gemini-client.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.test.js","sourceRoot":"","sources":["../../../../src/commands/product/__tests__/service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Update Description Command Tests
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=update-description.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-description.test.d.ts","sourceRoot":"","sources":["../../../../src/commands/product/__tests__/update-description.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Update Description Command Tests
3
+ */
4
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
5
+ import { ProductService } from '../service.js';
6
+ import { mockCredentials } from '../../../__tests__/test-utils.js';
7
+ // Mock dependencies
8
+ vi.mock('../../../lib/api-client.js', () => ({
9
+ getCredentials: vi.fn().mockResolvedValue(mockCredentials),
10
+ getSessionId: vi.fn().mockReturnValue('test-session-id')
11
+ }));
12
+ vi.mock('../service.js', () => ({
13
+ ProductService: {
14
+ updateDescription: vi.fn()
15
+ }
16
+ }));
17
+ const mockFormattedProduct = {
18
+ id: 'gid://shopify/Product/123456789',
19
+ title: 'Test Product',
20
+ description: 'Test description',
21
+ handle: 'test-product',
22
+ status: 'ACTIVE',
23
+ productType: 'Test Type',
24
+ vendor: 'Test Vendor',
25
+ template: 'product',
26
+ tags: ['test'],
27
+ priceRange: {
28
+ min: { amount: '29.99', currencyCode: 'USD' },
29
+ max: { amount: '29.99', currencyCode: 'USD' }
30
+ },
31
+ variants: [],
32
+ images: []
33
+ };
34
+ describe('update-description command', () => {
35
+ beforeEach(() => {
36
+ vi.clearAllMocks();
37
+ });
38
+ it('should update description with plain text', async () => {
39
+ const mockResult = {
40
+ success: true,
41
+ data: {
42
+ product: mockFormattedProduct
43
+ }
44
+ };
45
+ vi.mocked(ProductService.updateDescription).mockResolvedValue(mockResult);
46
+ // Simulate command execution
47
+ const input = {
48
+ id: '123456789',
49
+ description: 'New description',
50
+ isHtml: false
51
+ };
52
+ const result = await ProductService.updateDescription(mockCredentials, input);
53
+ expect(result.success).toBe(true);
54
+ expect(ProductService.updateDescription).toHaveBeenCalledWith(mockCredentials, expect.objectContaining({
55
+ description: 'New description',
56
+ isHtml: false
57
+ }));
58
+ });
59
+ it('should update description with HTML', async () => {
60
+ const mockResult = {
61
+ success: true,
62
+ data: {
63
+ product: mockFormattedProduct
64
+ }
65
+ };
66
+ vi.mocked(ProductService.updateDescription).mockResolvedValue(mockResult);
67
+ const input = {
68
+ id: '123456789',
69
+ description: '<h1>Title</h1><p>Content</p>',
70
+ isHtml: true
71
+ };
72
+ const result = await ProductService.updateDescription(mockCredentials, input);
73
+ expect(result.success).toBe(true);
74
+ expect(ProductService.updateDescription).toHaveBeenCalledWith(mockCredentials, expect.objectContaining({
75
+ description: '<h1>Title</h1><p>Content</p>',
76
+ isHtml: true
77
+ }));
78
+ });
79
+ it('should handle empty description (clear)', async () => {
80
+ const mockResult = {
81
+ success: true,
82
+ data: {
83
+ product: { ...mockFormattedProduct, description: '' }
84
+ }
85
+ };
86
+ vi.mocked(ProductService.updateDescription).mockResolvedValue(mockResult);
87
+ const input = {
88
+ id: '123456789',
89
+ description: '',
90
+ isHtml: false
91
+ };
92
+ const result = await ProductService.updateDescription(mockCredentials, input);
93
+ expect(result.success).toBe(true);
94
+ });
95
+ it('should handle service errors', async () => {
96
+ const mockError = {
97
+ success: false,
98
+ error: 'GraphQL error: Invalid product ID'
99
+ };
100
+ vi.mocked(ProductService.updateDescription).mockResolvedValue(mockError);
101
+ const input = {
102
+ id: 'invalid-id',
103
+ description: 'Test'
104
+ };
105
+ const result = await ProductService.updateDescription(mockCredentials, input);
106
+ expect(result.success).toBe(false);
107
+ expect(result.error).toContain('GraphQL error');
108
+ });
109
+ });
110
+ //# sourceMappingURL=update-description.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-description.test.js","sourceRoot":"","sources":["../../../../src/commands/product/__tests__/update-description.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function run(argv?: string[]): Promise<void>;
2
+ //# sourceMappingURL=get.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../src/commands/product/get.ts"],"names":[],"mappings":"AA4MA,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAA0B,iBA2H/D"}
@@ -0,0 +1,305 @@
1
+ import { getCredentials, getSessionId } from '../../lib/api-client.js';
2
+ import { shopifyGraphQL } from '../../lib/shopify-client.js';
3
+ import { parseArgs, hasHelpFlag } from '../../lib/args-parser.js';
4
+ function showHelp() {
5
+ console.log(`
6
+ Get Shopify Product Data
7
+
8
+ USAGE:
9
+ ecomcoder product get [OPTIONS]
10
+
11
+ OPTIONS:
12
+ --id <id> Product ID (numeric or full GID)
13
+ --title <title> Search by product title
14
+ --handle <handle> Product handle (URL slug)
15
+ --session-id Session ID (auto-provided via SESSION_ID env var)
16
+ --help, -h Show this help message
17
+
18
+ EXAMPLES:
19
+ # Get by product ID
20
+ ecomcoder product get --id=123456789
21
+ ecomcoder product get --id=gid://shopify/Product/123456789
22
+
23
+ # Search by title
24
+ ecomcoder product get --title="Blue T-Shirt"
25
+
26
+ # Get by handle
27
+ ecomcoder product get --handle="blue-t-shirt"
28
+
29
+ NOTES:
30
+ - At least one of --id, --title, or --handle must be provided
31
+ - If --title returns multiple products, you'll see a list to choose from
32
+ - Use --id for the most precise results
33
+ `);
34
+ process.exit(0);
35
+ }
36
+ const GET_PRODUCT_BY_ID = `
37
+ query getProduct($id: ID!) {
38
+ product(id: $id) {
39
+ id
40
+ title
41
+ description
42
+ descriptionHtml
43
+ handle
44
+ productType
45
+ vendor
46
+ tags
47
+ status
48
+ templateSuffix
49
+ variants(first: 100) {
50
+ edges {
51
+ node {
52
+ id
53
+ title
54
+ sku
55
+ price
56
+ compareAtPrice
57
+ inventoryQuantity
58
+ availableForSale
59
+ }
60
+ }
61
+ }
62
+ images(first: 10) {
63
+ edges {
64
+ node {
65
+ id
66
+ url
67
+ altText
68
+ width
69
+ height
70
+ }
71
+ }
72
+ }
73
+ priceRangeV2 {
74
+ minVariantPrice {
75
+ amount
76
+ currencyCode
77
+ }
78
+ maxVariantPrice {
79
+ amount
80
+ currencyCode
81
+ }
82
+ }
83
+ }
84
+ }
85
+ `;
86
+ const SEARCH_PRODUCTS_BY_TITLE = `
87
+ query searchProducts($query: String!, $first: Int!) {
88
+ products(first: $first, query: $query) {
89
+ edges {
90
+ node {
91
+ id
92
+ title
93
+ handle
94
+ status
95
+ productType
96
+ vendor
97
+ priceRangeV2 {
98
+ minVariantPrice {
99
+ amount
100
+ currencyCode
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ `;
108
+ const GET_PRODUCT_BY_HANDLE = `
109
+ query getProductByHandle($handle: String!) {
110
+ productByHandle(handle: $handle) {
111
+ id
112
+ title
113
+ description
114
+ descriptionHtml
115
+ handle
116
+ productType
117
+ vendor
118
+ tags
119
+ status
120
+ templateSuffix
121
+ variants(first: 100) {
122
+ edges {
123
+ node {
124
+ id
125
+ title
126
+ sku
127
+ price
128
+ compareAtPrice
129
+ inventoryQuantity
130
+ availableForSale
131
+ }
132
+ }
133
+ }
134
+ images(first: 10) {
135
+ edges {
136
+ node {
137
+ id
138
+ url
139
+ altText
140
+ width
141
+ height
142
+ }
143
+ }
144
+ }
145
+ priceRangeV2 {
146
+ minVariantPrice {
147
+ amount
148
+ currencyCode
149
+ }
150
+ maxVariantPrice {
151
+ amount
152
+ currencyCode
153
+ }
154
+ }
155
+ }
156
+ }
157
+ `;
158
+ function normalizeProductId(id) {
159
+ // Accept numeric ID or full GID
160
+ if (id.startsWith('gid://shopify/Product/')) {
161
+ return id;
162
+ }
163
+ return `gid://shopify/Product/${id}`;
164
+ }
165
+ function formatProductOutput(product) {
166
+ return {
167
+ id: product.id,
168
+ title: product.title,
169
+ description: product.description,
170
+ handle: product.handle,
171
+ status: product.status,
172
+ productType: product.productType,
173
+ vendor: product.vendor,
174
+ template: product.templateSuffix ? `product.${product.templateSuffix}` : 'product',
175
+ tags: product.tags,
176
+ priceRange: {
177
+ min: product.priceRangeV2.minVariantPrice,
178
+ max: product.priceRangeV2.maxVariantPrice
179
+ },
180
+ variants: product.variants.edges.map((e) => ({
181
+ id: e.node.id,
182
+ title: e.node.title,
183
+ price: e.node.price,
184
+ compareAtPrice: e.node.compareAtPrice,
185
+ sku: e.node.sku,
186
+ inventory: e.node.inventoryQuantity,
187
+ available: e.node.availableForSale
188
+ })),
189
+ images: product.images.edges.map((e) => ({
190
+ id: e.node.id,
191
+ url: e.node.url,
192
+ altText: e.node.altText,
193
+ width: e.node.width,
194
+ height: e.node.height
195
+ }))
196
+ };
197
+ }
198
+ export async function run(argv = process.argv.slice(2)) {
199
+ if (hasHelpFlag(argv)) {
200
+ showHelp();
201
+ }
202
+ const args = parseArgs(argv);
203
+ // Validate options
204
+ if (!args.id && !args.title && !args.handle) {
205
+ console.error(JSON.stringify({
206
+ success: false,
207
+ error: 'Must provide --id, --title, or --handle'
208
+ }));
209
+ process.exit(1);
210
+ }
211
+ try {
212
+ const sessionId = getSessionId(args.sessionId);
213
+ const credentials = await getCredentials(sessionId, args.backendUrl, args.jwt);
214
+ let product = null;
215
+ if (args.id) {
216
+ // Fetch by ID
217
+ const productId = normalizeProductId(args.id);
218
+ const response = await shopifyGraphQL(credentials, GET_PRODUCT_BY_ID, { id: productId });
219
+ if (response.errors) {
220
+ throw new Error(response.errors.map((e) => e.message).join(', '));
221
+ }
222
+ product = response.data?.product;
223
+ if (!product) {
224
+ console.error(JSON.stringify({
225
+ success: false,
226
+ error: 'Product not found'
227
+ }));
228
+ process.exit(1);
229
+ }
230
+ }
231
+ else if (args.handle) {
232
+ // Fetch by handle
233
+ const response = await shopifyGraphQL(credentials, GET_PRODUCT_BY_HANDLE, { handle: args.handle });
234
+ if (response.errors) {
235
+ throw new Error(response.errors.map((e) => e.message).join(', '));
236
+ }
237
+ product = response.data?.productByHandle;
238
+ if (!product) {
239
+ console.error(JSON.stringify({
240
+ success: false,
241
+ error: `Product with handle "${args.handle}" not found`
242
+ }));
243
+ process.exit(1);
244
+ }
245
+ }
246
+ else if (args.title) {
247
+ // Search by title
248
+ const response = await shopifyGraphQL(credentials, SEARCH_PRODUCTS_BY_TITLE, {
249
+ query: `title:*${args.title}*`,
250
+ first: 10
251
+ });
252
+ if (response.errors) {
253
+ throw new Error(response.errors.map((e) => e.message).join(', '));
254
+ }
255
+ const products = response.data?.products?.edges || [];
256
+ if (products.length === 0) {
257
+ console.error(JSON.stringify({
258
+ success: false,
259
+ error: `No products found with title containing "${args.title}"`
260
+ }));
261
+ process.exit(1);
262
+ }
263
+ if (products.length > 1) {
264
+ // Multiple matches - return list
265
+ console.log(JSON.stringify({
266
+ success: true,
267
+ multiple: true,
268
+ count: products.length,
269
+ data: {
270
+ message: `Found ${products.length} products matching "${args.title}"`,
271
+ products: products.map((e) => ({
272
+ id: e.node.id,
273
+ title: e.node.title,
274
+ handle: e.node.handle,
275
+ status: e.node.status,
276
+ price: e.node.priceRangeV2.minVariantPrice
277
+ })),
278
+ hint: 'Use --id with a specific product ID to get full details'
279
+ }
280
+ }));
281
+ process.exit(0);
282
+ }
283
+ // Single match - fetch full details
284
+ const productId = products[0].node.id;
285
+ const detailResponse = await shopifyGraphQL(credentials, GET_PRODUCT_BY_ID, { id: productId });
286
+ if (detailResponse.errors) {
287
+ throw new Error(detailResponse.errors.map((e) => e.message).join(', '));
288
+ }
289
+ product = detailResponse.data?.product;
290
+ }
291
+ // Output product data
292
+ console.log(JSON.stringify({
293
+ success: true,
294
+ data: formatProductOutput(product)
295
+ }));
296
+ }
297
+ catch (error) {
298
+ console.error(JSON.stringify({
299
+ success: false,
300
+ error: error instanceof Error ? error.message : 'Unknown error'
301
+ }));
302
+ process.exit(1);
303
+ }
304
+ }
305
+ //# sourceMappingURL=get.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.js","sourceRoot":"","sources":["../../../src/commands/product/get.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Product Commands Registration
3
+ *
4
+ * Following Open/Closed Principle - commands register themselves
5
+ */
6
+ /**
7
+ * Register all product commands
8
+ */
9
+ export declare function registerProductCommands(): void;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/product/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAkE9C"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Product Commands Registration
3
+ *
4
+ * Following Open/Closed Principle - commands register themselves
5
+ */
6
+ import { registry } from '../../lib/command-registry.js';
7
+ /**
8
+ * Register all product commands
9
+ */
10
+ export function registerProductCommands() {
11
+ // Register command group
12
+ registry.registerGroup({
13
+ command: 'product',
14
+ description: 'View and modify Shopify product data',
15
+ 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
+ get Get product details by ID, title, or handle
24
+ update-description Update product description
25
+ update-price Update product price and compare-at price
26
+ update-template Change product template assignment
27
+
28
+ EXAMPLES:
29
+ # Get product details
30
+ ecomcoder product get --title="Blue T-Shirt"
31
+ ecomcoder product get --id=123456789
32
+
33
+ # Update description
34
+ ecomcoder product update-description --id=123 --description="Premium cotton t-shirt"
35
+
36
+ # Update price
37
+ ecomcoder product update-price --id=123 --price=34.99 --compare-at-price=49.99
38
+
39
+ # Change template
40
+ ecomcoder product update-template --id=123 --template=premium
41
+
42
+ For detailed help on a specific subcommand:
43
+ ecomcoder product <subcommand> --help
44
+ `);
45
+ }
46
+ });
47
+ // Register individual subcommands
48
+ registry.register({
49
+ command: 'product',
50
+ subcommand: 'get',
51
+ description: 'Get product details by ID, title, or handle',
52
+ handler: async () => await import('./get.js')
53
+ });
54
+ registry.register({
55
+ command: 'product',
56
+ subcommand: 'update-description',
57
+ description: 'Update product description',
58
+ handler: async () => await import('./update-description.js')
59
+ });
60
+ registry.register({
61
+ command: 'product',
62
+ subcommand: 'update-price',
63
+ description: 'Update product price and compare-at price',
64
+ handler: async () => await import('./update-price.js')
65
+ });
66
+ registry.register({
67
+ command: 'product',
68
+ subcommand: 'update-template',
69
+ description: 'Change product template assignment',
70
+ handler: async () => await import('./update-template.js')
71
+ });
72
+ }
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAEzD;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,yBAAyB;IACzB,QAAQ,CAAC,aAAa,CAAC;QACrB,OAAO,EAAE,SAAS;QAClB,WAAW,EAAE,sCAAsC;QACnD,QAAQ,EAAE,GAAG,EAAE;YACb,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BjB,CAAC,CAAC;QACC,CAAC;KACF,CAAC,CAAC;IAEH,kCAAkC;IAClC,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,KAAK;QACjB,WAAW,EAAE,6CAA6C;QAC1D,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC;KAC9C,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,oBAAoB;QAChC,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC;KAC7D,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,cAAc;QAC1B,WAAW,EAAE,2CAA2C;QACxD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC;KACvD,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,CAAC;QAChB,OAAO,EAAE,SAAS;QAClB,UAAU,EAAE,iBAAiB;QAC7B,WAAW,EAAE,oCAAoC;QACjD,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC;KAC1D,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * GraphQL Queries and Mutations for Product Operations
3
+ *
4
+ * Following Single Responsibility Principle - this module only contains GraphQL strings
5
+ */
6
+ /**
7
+ * Fetch product by ID with complete details
8
+ */
9
+ export declare const GET_PRODUCT_BY_ID = "\n query getProduct($id: ID!) {\n product(id: $id) {\n id\n title\n description\n descriptionHtml\n handle\n productType\n vendor\n tags\n status\n templateSuffix\n variants(first: 100) {\n edges {\n node {\n id\n title\n sku\n price\n compareAtPrice\n inventoryQuantity\n availableForSale\n }\n }\n }\n images(first: 10) {\n edges {\n node {\n id\n url\n altText\n width\n height\n }\n }\n }\n priceRangeV2 {\n minVariantPrice {\n amount\n currencyCode\n }\n maxVariantPrice {\n amount\n currencyCode\n }\n }\n }\n }\n";
10
+ /**
11
+ * Search products by title
12
+ */
13
+ export declare const SEARCH_PRODUCTS_BY_TITLE = "\n query searchProducts($query: String!, $first: Int!) {\n products(first: $first, query: $query) {\n edges {\n node {\n id\n title\n handle\n status\n productType\n vendor\n priceRangeV2 {\n minVariantPrice {\n amount\n currencyCode\n }\n }\n }\n }\n }\n }\n";
14
+ /**
15
+ * Fetch product by handle
16
+ */
17
+ export declare const GET_PRODUCT_BY_HANDLE = "\n query getProductByHandle($handle: String!) {\n productByHandle(handle: $handle) {\n id\n title\n description\n descriptionHtml\n handle\n productType\n vendor\n tags\n status\n templateSuffix\n variants(first: 100) {\n edges {\n node {\n id\n title\n sku\n price\n compareAtPrice\n inventoryQuantity\n availableForSale\n }\n }\n }\n images(first: 10) {\n edges {\n node {\n id\n url\n altText\n width\n height\n }\n }\n }\n priceRangeV2 {\n minVariantPrice {\n amount\n currencyCode\n }\n maxVariantPrice {\n amount\n currencyCode\n }\n }\n }\n }\n";
18
+ /**
19
+ * Update product fields (description, title, template, etc.)
20
+ */
21
+ export declare const UPDATE_PRODUCT = "\n mutation productUpdate($input: ProductInput!) {\n productUpdate(input: $input) {\n product {\n id\n title\n description\n descriptionHtml\n templateSuffix\n }\n userErrors {\n field\n message\n }\n }\n }\n";
22
+ /**
23
+ * Update product variant (price, compareAtPrice, inventory, etc.)
24
+ * @deprecated Use PRODUCT_VARIANTS_BULK_UPDATE instead
25
+ */
26
+ export declare const UPDATE_VARIANT = "\n mutation productVariantUpdate($input: ProductVariantInput!) {\n productVariantUpdate(input: $input) {\n productVariant {\n id\n price\n compareAtPrice\n }\n userErrors {\n field\n message\n }\n }\n }\n";
27
+ /**
28
+ * Bulk update product variants (current API for price updates)
29
+ * Replaces deprecated productVariantUpdate mutation
30
+ */
31
+ export declare const PRODUCT_VARIANTS_BULK_UPDATE = "\n mutation productVariantsBulkUpdate($productId: ID!, $variants: [ProductVariantsBulkInput!]!) {\n productVariantsBulkUpdate(productId: $productId, variants: $variants) {\n productVariants {\n id\n price\n compareAtPrice\n }\n userErrors {\n field\n message\n }\n }\n }\n";
32
+ //# sourceMappingURL=queries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.d.ts","sourceRoot":"","sources":["../../../src/commands/product/queries.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB,w2BAiD7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,gaAqBpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,w4BAiDjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,kSAgB1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,gRAc1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,oVAcxC,CAAC"}