@ehrenkind/shopify-lib 0.0.5 → 0.0.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/index.cjs +86 -31
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +709 -161
- package/dist/index.d.ts +18816 -3
- package/dist/index.mjs +84 -30
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/dist/generated-api-types/2025-04/admin.generated.d.ts +0 -181
- package/dist/generated-api-types/2025-04/admin.generated.d.ts.map +0 -1
- package/dist/generated-api-types/2025-04/admin.generated.js +0 -5
- package/dist/generated-api-types/2025-04/admin.generated.js.map +0 -1
- package/dist/generated-api-types/2025-04/admin.types.d.ts +0 -57664
- package/dist/generated-api-types/2025-04/admin.types.d.ts.map +0 -1
- package/dist/generated-api-types/2025-04/admin.types.js +0 -11356
- package/dist/generated-api-types/2025-04/admin.types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts +0 -4
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.d.ts.map +0 -1
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js +0 -56
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.js.map +0 -1
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts +0 -3
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.d.ts.map +0 -1
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js +0 -11
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock.js.map +0 -1
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts +0 -2
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.d.ts.map +0 -1
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js +0 -11
- package/dist/mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.test.js.map +0 -1
- package/dist/queries/orders/getOrderByName.d.ts +0 -26
- package/dist/queries/orders/getOrderByName.d.ts.map +0 -1
- package/dist/queries/orders/getOrderByName.js +0 -117
- package/dist/queries/orders/getOrderByName.js.map +0 -1
- package/dist/queries/orders/getOrderByName.mock.d.ts +0 -21
- package/dist/queries/orders/getOrderByName.mock.d.ts.map +0 -1
- package/dist/queries/orders/getOrderByName.mock.js +0 -55
- package/dist/queries/orders/getOrderByName.mock.js.map +0 -1
- package/dist/queries/orders/getOrderByName.queries.d.ts +0 -3
- package/dist/queries/orders/getOrderByName.queries.d.ts.map +0 -1
- package/dist/queries/orders/getOrderByName.queries.js +0 -335
- package/dist/queries/orders/getOrderByName.queries.js.map +0 -1
- package/dist/queries/orders/getOrderByName.test.d.ts +0 -2
- package/dist/queries/orders/getOrderByName.test.d.ts.map +0 -1
- package/dist/queries/orders/getOrderByName.test.js +0 -28
- package/dist/queries/orders/getOrderByName.test.js.map +0 -1
- package/dist/queries/productVariants/getLeanProductVariants.d.ts +0 -21
- package/dist/queries/productVariants/getLeanProductVariants.d.ts.map +0 -1
- package/dist/queries/productVariants/getLeanProductVariants.js +0 -81
- package/dist/queries/productVariants/getLeanProductVariants.js.map +0 -1
- package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts +0 -3
- package/dist/queries/productVariants/getLeanProductVariants.mock.d.ts.map +0 -1
- package/dist/queries/productVariants/getLeanProductVariants.mock.js +0 -33
- package/dist/queries/productVariants/getLeanProductVariants.mock.js.map +0 -1
- package/dist/queries/productVariants/getLeanProductVariants.test.d.ts +0 -2
- package/dist/queries/productVariants/getLeanProductVariants.test.d.ts.map +0 -1
- package/dist/queries/productVariants/getLeanProductVariants.test.js +0 -38
- package/dist/queries/productVariants/getLeanProductVariants.test.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -11
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -50
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/mswHandlers.d.ts +0 -2
- package/dist/utils/mswHandlers.d.ts.map +0 -1
- package/dist/utils/mswHandlers.js +0 -32
- package/dist/utils/mswHandlers.js.map +0 -1
- package/dist/utils/shopifyClient.d.ts +0 -6
- package/dist/utils/shopifyClient.d.ts.map +0 -1
- package/dist/utils/shopifyClient.js +0 -82
- package/dist/utils/shopifyClient.js.map +0 -1
- package/dist/utils/shopifyClient.mock.d.ts +0 -3
- package/dist/utils/shopifyClient.mock.d.ts.map +0 -1
- package/dist/utils/shopifyClient.mock.js +0 -19
- package/dist/utils/shopifyClient.mock.js.map +0 -1
- package/dist/utils/shopifyClient.test.d.ts +0 -2
- package/dist/utils/shopifyClient.test.d.ts.map +0 -1
- package/dist/utils/shopifyClient.test.js +0 -27
- package/dist/utils/shopifyClient.test.js.map +0 -1
- package/dist/utils/shopifyFetch.d.ts +0 -19
- package/dist/utils/shopifyFetch.d.ts.map +0 -1
- package/dist/utils/shopifyFetch.js +0 -60
- package/dist/utils/shopifyFetch.js.map +0 -1
- package/dist/utils/shopifyFetch.test.d.ts +0 -2
- package/dist/utils/shopifyFetch.test.d.ts.map +0 -1
- package/dist/utils/shopifyFetch.test.js +0 -17
- package/dist/utils/shopifyFetch.test.js.map +0 -1
- package/dist/utils/test-setup.d.ts +0 -2
- package/dist/utils/test-setup.d.ts.map +0 -1
- package/dist/utils/test-setup.js +0 -13
- package/dist/utils/test-setup.js.map +0 -1
- package/dist/utils/zod.d.ts +0 -3
- package/dist/utils/zod.d.ts.map +0 -1
- package/dist/utils/zod.js +0 -19
- package/dist/utils/zod.js.map +0 -1
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import z from 'zod';
|
|
2
|
-
import { gql, logger } from '../../utils/logger.js';
|
|
3
|
-
import { fetchShopifyGraphql } from '../../utils/shopifyFetch.js';
|
|
4
|
-
import { returnOutputParsed } from '../../utils/zod.js';
|
|
5
|
-
const GetLeanProductVariantsReturn = z.array(z.object({
|
|
6
|
-
productId: z.string(),
|
|
7
|
-
productTitle: z.string(),
|
|
8
|
-
variantId: z.string(),
|
|
9
|
-
variantTitle: z.string(),
|
|
10
|
-
sku: z.string(),
|
|
11
|
-
}));
|
|
12
|
-
/**
|
|
13
|
-
* Retrieves a lean list of product variants from Shopify, optionally filtered by SKUs.
|
|
14
|
-
* Product variants are mapped to a simpler output structure.
|
|
15
|
-
* Variants missing essential properties (e.g., SKU) will be filtered out and logged.
|
|
16
|
-
*
|
|
17
|
-
* @param {string[]} [skus] - An optional array of SKUs to filter by. If provided, only variants matching these SKUs will be fetched.
|
|
18
|
-
* @returns {Promise<GetLeanProductVariantsReturnType>} A promise that resolves to an array of lean product variant data.
|
|
19
|
-
* @throws {Error} If the GraphQL query fails, returns no data, or if the `productVariants` field is missing in the response.
|
|
20
|
-
*/
|
|
21
|
-
export async function getLeanProductVariants(skus) {
|
|
22
|
-
const queryGql = gql `#graphql
|
|
23
|
-
query leanProductVariants($first: Int!, $after: String, $queryFilter: String) {
|
|
24
|
-
productVariants(first: $first, after: $after, query: $queryFilter) {
|
|
25
|
-
edges {
|
|
26
|
-
node {
|
|
27
|
-
id
|
|
28
|
-
title
|
|
29
|
-
sku
|
|
30
|
-
product {
|
|
31
|
-
id
|
|
32
|
-
title
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
pageInfo {
|
|
37
|
-
hasNextPage
|
|
38
|
-
endCursor
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
`;
|
|
43
|
-
const initialVariables = { first: 250 };
|
|
44
|
-
if (skus && skus.length > 0) {
|
|
45
|
-
initialVariables.queryFilter = skus
|
|
46
|
-
.map((sku) => `sku:${sku}`)
|
|
47
|
-
.join(' OR ');
|
|
48
|
-
}
|
|
49
|
-
const extractedNodes = await fetchShopifyGraphql({
|
|
50
|
-
query: queryGql,
|
|
51
|
-
variables: initialVariables,
|
|
52
|
-
dataExtractor: (pageData) => {
|
|
53
|
-
if (!pageData.productVariants) {
|
|
54
|
-
throw new Error("GraphQL response for product variants is missing the 'productVariants' field.");
|
|
55
|
-
}
|
|
56
|
-
const nodes = pageData.productVariants.edges.map((edge) => edge.node);
|
|
57
|
-
return {
|
|
58
|
-
nodes,
|
|
59
|
-
pageInfo: pageData.productVariants.pageInfo,
|
|
60
|
-
};
|
|
61
|
-
},
|
|
62
|
-
fetchAllPages: true,
|
|
63
|
-
});
|
|
64
|
-
const allVariants = extractedNodes.flatMap((v) => {
|
|
65
|
-
if (v.sku) {
|
|
66
|
-
return [
|
|
67
|
-
{
|
|
68
|
-
productId: v.product.id,
|
|
69
|
-
productTitle: v.product.title,
|
|
70
|
-
variantId: v.id,
|
|
71
|
-
variantTitle: v.title,
|
|
72
|
-
sku: v.sku,
|
|
73
|
-
},
|
|
74
|
-
];
|
|
75
|
-
}
|
|
76
|
-
logger.debug(`Product ${v.product.title} (ID: ${v.product.id}) has a variant (ID: ${v.id}) with no SKU. Filtering out.`);
|
|
77
|
-
return [];
|
|
78
|
-
});
|
|
79
|
-
return await returnOutputParsed(allVariants, GetLeanProductVariantsReturn);
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=getLeanProductVariants.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getLeanProductVariants.js","sourceRoot":"","sources":["../../../src/queries/productVariants/getLeanProductVariants.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAA;AAKnB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAC1C,CAAC,CAAC,MAAM,CAAC;IACP,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;CAChB,CAAC,CACH,CAAA;AAMD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAe;IAEf,MAAM,QAAQ,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;GAoBnB,CAAA;IAED,MAAM,gBAAgB,GAAsC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAA;IAC1E,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,gBAAgB,CAAC,WAAW,GAAG,IAAI;aAChC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC;aAClC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjB,CAAC;IASD,MAAM,cAAc,GAAG,MAAM,mBAAmB,CAG9C;QACA,KAAK,EAAE,QAAQ;QACf,SAAS,EAAE,gBAAgB;QAC3B,aAAa,EAAE,CAAC,QAAkC,EAAE,EAAE;YACpD,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAA;YACH,CAAC;YACD,MAAM,KAAK,GAAiB,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAC5D,CAAC,IAA0B,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAC1C,CAAA;YACD,OAAO;gBACL,KAAK;gBACL,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,QAAQ;aAC5C,CAAA;QACH,CAAC;QACD,aAAa,EAAE,IAAI;KACpB,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAExC,CAAC,CAAC,EAAE,EAAE;QACN,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;gBACL;oBACE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;oBACvB,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK;oBAC7B,SAAS,EAAE,CAAC,CAAC,EAAE;oBACf,YAAY,EAAE,CAAC,CAAC,KAAK;oBACrB,GAAG,EAAE,CAAC,CAAC,GAAG;iBACX;aACF,CAAA;QACH,CAAC;QACD,MAAM,CAAC,KAAK,CACV,WAAW,CAAC,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,+BAA+B,CAC3G,CAAA;QACD,OAAO,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,kBAAkB,CAAC,WAAW,EAAE,4BAA4B,CAAC,CAAA;AAC5E,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getLeanProductVariants.mock.d.ts","sourceRoot":"","sources":["../../../src/queries/productVariants/getLeanProductVariants.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAA;AAEjG,eAAO,MAAM,uBAAuB,EAAE,wBA+BrC,CAAA"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
export const leanProductVariantsMock = {
|
|
2
|
-
productVariants: {
|
|
3
|
-
edges: [
|
|
4
|
-
{
|
|
5
|
-
node: {
|
|
6
|
-
id: 'gid://shopify/ProductVariant/1',
|
|
7
|
-
title: 'Default Title',
|
|
8
|
-
sku: 'SKU123',
|
|
9
|
-
product: {
|
|
10
|
-
id: 'gid://shopify/Product/1',
|
|
11
|
-
title: 'Test Product 1',
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
node: {
|
|
17
|
-
id: 'gid://shopify/ProductVariant/2',
|
|
18
|
-
title: 'Another Variant',
|
|
19
|
-
sku: 'SKU456',
|
|
20
|
-
product: {
|
|
21
|
-
id: 'gid://shopify/Product/2',
|
|
22
|
-
title: 'Test Product 2',
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
],
|
|
27
|
-
pageInfo: {
|
|
28
|
-
hasNextPage: false,
|
|
29
|
-
endCursor: 'eyJsYXN0X2lkIjoxfQ==',
|
|
30
|
-
},
|
|
31
|
-
},
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=getLeanProductVariants.mock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getLeanProductVariants.mock.js","sourceRoot":"","sources":["../../../src/queries/productVariants/getLeanProductVariants.mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,eAAe,EAAE;QACf,KAAK,EAAE;YACL;gBACE,IAAI,EAAE;oBACJ,EAAE,EAAE,gCAAgC;oBACpC,KAAK,EAAE,eAAe;oBACtB,GAAG,EAAE,QAAQ;oBACb,OAAO,EAAE;wBACP,EAAE,EAAE,yBAAyB;wBAC7B,KAAK,EAAE,gBAAgB;qBACxB;iBACF;aACF;YACD;gBACE,IAAI,EAAE;oBACJ,EAAE,EAAE,gCAAgC;oBACpC,KAAK,EAAE,iBAAiB;oBACxB,GAAG,EAAE,QAAQ;oBACb,OAAO,EAAE;wBACP,EAAE,EAAE,yBAAyB;wBAC7B,KAAK,EAAE,gBAAgB;qBACxB;iBACF;aACF;SACF;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,sBAAsB;SAClC;KACF;CACF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getLeanProductVariants.test.d.ts","sourceRoot":"","sources":["../../../src/queries/productVariants/getLeanProductVariants.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { graphql, passthrough } from 'msw';
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
import { server } from '../../utils/mswHandlers';
|
|
4
|
-
import { getLeanProductVariants } from './getLeanProductVariants';
|
|
5
|
-
import { leanProductVariantsMock } from './getLeanProductVariants.mock';
|
|
6
|
-
describe('getLeanProductVariants', () => {
|
|
7
|
-
describe('Mocked', () => {
|
|
8
|
-
const skus = ['SKU123', 'SKU456'];
|
|
9
|
-
const variants = leanProductVariantsMock.productVariants.edges.map((edge) => edge.node);
|
|
10
|
-
const reformattedVariants = variants.map((variant) => ({
|
|
11
|
-
productId: variant.product.id,
|
|
12
|
-
productTitle: variant.product.title,
|
|
13
|
-
variantId: variant.id,
|
|
14
|
-
variantTitle: variant.title,
|
|
15
|
-
sku: variant.sku,
|
|
16
|
-
}));
|
|
17
|
-
it('should work with multiple SKUs', async () => {
|
|
18
|
-
const result = await getLeanProductVariants(skus);
|
|
19
|
-
expect(result).toEqual(reformattedVariants);
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
describe('Live', () => {
|
|
23
|
-
it('should return an empty array for non-existent SKUs', async () => {
|
|
24
|
-
server.use(graphql.query('leanProductVariants', () => passthrough()));
|
|
25
|
-
const result = await getLeanProductVariants(['not-a-sku']);
|
|
26
|
-
expect(result).toEqual([]);
|
|
27
|
-
});
|
|
28
|
-
it('should work without SKUs and fetch more than is on one page (250)', {
|
|
29
|
-
timeout: 20000,
|
|
30
|
-
skip: false,
|
|
31
|
-
}, async () => {
|
|
32
|
-
server.use(graphql.query('leanProductVariants', () => passthrough()));
|
|
33
|
-
const result = await getLeanProductVariants();
|
|
34
|
-
expect(result.length).toBeGreaterThan(251);
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
});
|
|
38
|
-
//# sourceMappingURL=getLeanProductVariants.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getLeanProductVariants.test.js","sourceRoot":"","sources":["../../../src/queries/productVariants/getLeanProductVariants.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,KAAK,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAA;AAEvE,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAChE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CACpB,CAAA;QACD,MAAM,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACrD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;YAC7B,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK;YACnC,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,YAAY,EAAE,OAAO,CAAC,KAAK;YAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;SACjB,CAAC,CAAC,CAAA;QAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAA;YACjD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;YACrE,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;YAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;QAEF,EAAE,CACA,mEAAmE,EACnE;YACE,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,KAAK;SACZ,EACD,KAAK,IAAI,EAAE;YACT,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;YAErE,MAAM,MAAM,GAAG,MAAM,sBAAsB,EAAE,CAAA;YAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;QAC5C,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dist/utils/logger.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const gql: (template: {
|
|
2
|
-
raw: readonly string[] | ArrayLike<string>;
|
|
3
|
-
}, ...substitutions: any[]) => string;
|
|
4
|
-
export declare const activeLogLevelName: "silent" | "error" | "warn" | "info" | "debug";
|
|
5
|
-
export declare const logger: {
|
|
6
|
-
debug: (...args: unknown[]) => void;
|
|
7
|
-
info: (...args: unknown[]) => void;
|
|
8
|
-
warn: (...args: unknown[]) => void;
|
|
9
|
-
error: (...args: unknown[]) => void;
|
|
10
|
-
};
|
|
11
|
-
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,GAAG;;qCAAa,CAAA;AA8B7B,eAAO,MAAM,kBAAkB,gDAA2C,CAAA;AAG1E,eAAO,MAAM,MAAM;qBACA,OAAO,EAAE;oBAMV,OAAO,EAAE;oBAMT,OAAO,EAAE;qBAMR,OAAO,EAAE;CAM3B,CAAA"}
|
package/dist/utils/logger.js
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
const { env } = process;
|
|
2
|
-
export const gql = String.raw;
|
|
3
|
-
const logLevels = {
|
|
4
|
-
silent: 0,
|
|
5
|
-
error: 1,
|
|
6
|
-
warn: 2,
|
|
7
|
-
info: 3,
|
|
8
|
-
debug: 4,
|
|
9
|
-
};
|
|
10
|
-
function getLogLevel(nodeEnv, logLevelEnv) {
|
|
11
|
-
if (logLevelEnv && logLevelEnv in logLevels) {
|
|
12
|
-
return logLevelEnv;
|
|
13
|
-
}
|
|
14
|
-
if (nodeEnv === 'test') {
|
|
15
|
-
return 'silent';
|
|
16
|
-
}
|
|
17
|
-
if (nodeEnv === 'production') {
|
|
18
|
-
return 'info';
|
|
19
|
-
}
|
|
20
|
-
return 'debug';
|
|
21
|
-
}
|
|
22
|
-
export const activeLogLevelName = getLogLevel(env.NODE_ENV, env.LOG_LEVEL);
|
|
23
|
-
const activeLogLevelValue = logLevels[activeLogLevelName];
|
|
24
|
-
export const logger = {
|
|
25
|
-
debug: (...args) => {
|
|
26
|
-
if (logLevels.debug <= activeLogLevelValue) {
|
|
27
|
-
// biome-ignore lint/suspicious/noConsole: <explanation>
|
|
28
|
-
console.debug(...args);
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
info: (...args) => {
|
|
32
|
-
if (logLevels.info <= activeLogLevelValue) {
|
|
33
|
-
// biome-ignore lint/suspicious/noConsole: <explanation>
|
|
34
|
-
console.info(...args);
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
warn: (...args) => {
|
|
38
|
-
if (logLevels.warn <= activeLogLevelValue) {
|
|
39
|
-
// biome-ignore lint/suspicious/noConsole: <explanation>
|
|
40
|
-
console.warn(...args);
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
error: (...args) => {
|
|
44
|
-
if (logLevels.error <= activeLogLevelValue) {
|
|
45
|
-
// biome-ignore lint/suspicious/noConsole: <explanation>
|
|
46
|
-
console.error(...args);
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;AAEvB,MAAM,CAAC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;AAE7B,MAAM,SAAS,GAAG;IAChB,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACA,CAAA;AAIV,SAAS,WAAW,CAClB,OAA2B,EAC3B,WAA+B;IAE/B,IAAI,WAAW,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;QAC5C,OAAO,WAA2B,CAAA;IACpC,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAA;IACf,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;AAC1E,MAAM,mBAAmB,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAA;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,IAAI,SAAS,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;YAC3C,wDAAwD;YACxD,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,IAAI,SAAS,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;YAC1C,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC3B,IAAI,SAAS,CAAC,IAAI,IAAI,mBAAmB,EAAE,CAAC;YAC1C,wDAAwD;YACxD,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;QAC5B,IAAI,SAAS,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;YAC3C,wDAAwD;YACxD,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;CACF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mswHandlers.d.ts","sourceRoot":"","sources":["../../src/utils/mswHandlers.ts"],"names":[],"mappings":"AAgDA,eAAO,MAAM,MAAM,mCAA2B,CAAA"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { graphql } from 'msw';
|
|
2
|
-
import { setupServer } from 'msw/node';
|
|
3
|
-
import { connectMetaObjectToProductVariantMock } from '../mutations/productVariantsBulkUpdate/connectMetaObjectToProductVariant.mock';
|
|
4
|
-
import { ordersByNameMock } from '../queries/orders/getOrderByName.mock';
|
|
5
|
-
import { leanProductVariantsMock } from '../queries/productVariants/getLeanProductVariants.mock';
|
|
6
|
-
import { logger } from './logger';
|
|
7
|
-
import { productHandlesMock } from './shopifyClient.mock';
|
|
8
|
-
const orders = [
|
|
9
|
-
graphql.query('ordersByName', createGqlResponse(ordersByNameMock)),
|
|
10
|
-
graphql.query('ordersByNameFull', createGqlResponse(ordersByNameMock)),
|
|
11
|
-
];
|
|
12
|
-
const productVariants = [
|
|
13
|
-
graphql.query('productHandles', createGqlResponse(productHandlesMock)),
|
|
14
|
-
graphql.query('leanProductVariants', createGqlResponse(leanProductVariantsMock)),
|
|
15
|
-
];
|
|
16
|
-
const productVariantsBulkUpdate = [
|
|
17
|
-
graphql.mutation('connectMetaObjectToProductVariant', createGqlResponse(connectMetaObjectToProductVariantMock)),
|
|
18
|
-
];
|
|
19
|
-
const handlers = [...orders, ...productVariants, ...productVariantsBulkUpdate];
|
|
20
|
-
function createGqlResponse(mockData) {
|
|
21
|
-
return ({ operationName, query, }) => {
|
|
22
|
-
logger.debug(`[MSW] Mocking GraphQL query: ${operationName}`);
|
|
23
|
-
logger.debug(query);
|
|
24
|
-
return new Response(JSON.stringify({ data: mockData }), {
|
|
25
|
-
headers: {
|
|
26
|
-
'Content-Type': 'application/json',
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export const server = setupServer(...handlers);
|
|
32
|
-
//# sourceMappingURL=mswHandlers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mswHandlers.js","sourceRoot":"","sources":["../../src/utils/mswHandlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,qCAAqC,EAAE,MAAM,+EAA+E,CAAA;AACrI,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wDAAwD,CAAA;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEzD,MAAM,MAAM,GAAG;IACb,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IAClE,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;CACvE,CAAA;AAED,MAAM,eAAe,GAAG;IACtB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;IACtE,OAAO,CAAC,KAAK,CACX,qBAAqB,EACrB,iBAAiB,CAAC,uBAAuB,CAAC,CAC3C;CACF,CAAA;AAED,MAAM,yBAAyB,GAAG;IAChC,OAAO,CAAC,QAAQ,CACd,mCAAmC,EACnC,iBAAiB,CAAC,qCAAqC,CAAC,CACzD;CACF,CAAA;AAED,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,eAAe,EAAE,GAAG,yBAAyB,CAAC,CAAA;AAE9E,SAAS,iBAAiB,CAAI,QAAW;IACvC,OAAO,CAAC,EACN,aAAa,EACb,KAAK,GAIN,EAAE,EAAE;QACH,MAAM,CAAC,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAA;QAC7D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACnB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;YACtD,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAA;IACJ,CAAC,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,QAAQ,CAAC,CAAA"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { ApiVersion, type GraphqlClient } from '@shopify/shopify-api';
|
|
2
|
-
import '@shopify/shopify-api/adapters/node';
|
|
3
|
-
export declare const SHOPIFY_API_VERSION = ApiVersion.April25;
|
|
4
|
-
declare let shopifyGraphqlClient: GraphqlClient;
|
|
5
|
-
export { shopifyGraphqlClient as shopifyClient };
|
|
6
|
-
//# sourceMappingURL=shopifyClient.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyClient.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,aAAa,EAInB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,oCAAoC,CAAA;AAM3C,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AAuCrD,QAAA,IAAI,oBAAoB,EAAE,aAAa,CAAA;AA2CvC,OAAO,EAAE,oBAAoB,IAAI,aAAa,EAAE,CAAA"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { ApiVersion, LogSeverity, Session, shopifyApi, } from '@shopify/shopify-api';
|
|
2
|
-
import '@shopify/shopify-api/adapters/node';
|
|
3
|
-
import dotenv from 'dotenv';
|
|
4
|
-
import { z } from 'zod';
|
|
5
|
-
import { activeLogLevelName, logger } from './logger.js';
|
|
6
|
-
// https://shopify.dev/docs/api/admin-graphql/2025-04/
|
|
7
|
-
export const SHOPIFY_API_VERSION = ApiVersion.April25;
|
|
8
|
-
dotenv.config();
|
|
9
|
-
const envSchema = z.object({
|
|
10
|
-
SHOPIFY_API_KEY: z.string({
|
|
11
|
-
error: () => ({ message: 'SHOPIFY_API_KEY is required' }),
|
|
12
|
-
}),
|
|
13
|
-
SHOPIFY_API_SECRET: z.string({
|
|
14
|
-
error: () => ({ message: 'SHOPIFY_API_SECRET is required' }),
|
|
15
|
-
}),
|
|
16
|
-
SHOPIFY_API_HOSTNAME: z.string({
|
|
17
|
-
error: () => ({ message: 'SHOPIFY_API_HOSTNAME is required' }),
|
|
18
|
-
}),
|
|
19
|
-
SHOPIFY_ACCESS_TOKEN: z.string({
|
|
20
|
-
error: () => ({ message: 'SHOPIFY_ACCESS_TOKEN is required' }),
|
|
21
|
-
}),
|
|
22
|
-
NODE_ENV: z
|
|
23
|
-
.enum(['development', 'production', 'test'])
|
|
24
|
-
.default('development'),
|
|
25
|
-
});
|
|
26
|
-
const mapLogLevelToShopifySeverity = (level) => {
|
|
27
|
-
switch (level) {
|
|
28
|
-
case 'silent':
|
|
29
|
-
return LogSeverity.Error;
|
|
30
|
-
case 'debug':
|
|
31
|
-
return LogSeverity.Debug;
|
|
32
|
-
case 'info':
|
|
33
|
-
return LogSeverity.Info;
|
|
34
|
-
case 'warn':
|
|
35
|
-
return LogSeverity.Warning;
|
|
36
|
-
case 'error':
|
|
37
|
-
return LogSeverity.Error;
|
|
38
|
-
default:
|
|
39
|
-
return LogSeverity.Info;
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
let shopifyGraphqlClient;
|
|
43
|
-
try {
|
|
44
|
-
// biome-ignore lint/nursery/noProcessEnv: <explanation>
|
|
45
|
-
const env = envSchema.parse(process.env);
|
|
46
|
-
const shopify = shopifyApi({
|
|
47
|
-
apiKey: env.SHOPIFY_API_KEY,
|
|
48
|
-
apiSecretKey: env.SHOPIFY_API_SECRET,
|
|
49
|
-
hostName: env.SHOPIFY_API_HOSTNAME,
|
|
50
|
-
apiVersion: SHOPIFY_API_VERSION,
|
|
51
|
-
isEmbeddedApp: false,
|
|
52
|
-
logger: { level: mapLogLevelToShopifySeverity(activeLogLevelName) },
|
|
53
|
-
future: {
|
|
54
|
-
customerAddressDefaultFix: true,
|
|
55
|
-
lineItemBilling: true,
|
|
56
|
-
unstable_managedPricingSupport: false,
|
|
57
|
-
},
|
|
58
|
-
});
|
|
59
|
-
const shopifySession = new Session({
|
|
60
|
-
id: `custom-session-${env.SHOPIFY_API_HOSTNAME}`,
|
|
61
|
-
shop: env.SHOPIFY_API_HOSTNAME,
|
|
62
|
-
state: 'authenticated',
|
|
63
|
-
isOnline: true,
|
|
64
|
-
accessToken: env.SHOPIFY_ACCESS_TOKEN,
|
|
65
|
-
});
|
|
66
|
-
shopifyGraphqlClient = new shopify.clients.Graphql({
|
|
67
|
-
session: shopifySession,
|
|
68
|
-
});
|
|
69
|
-
logger.info('Shopify API client initialized successfully.');
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
if (error instanceof z.ZodError) {
|
|
73
|
-
const msg = z.prettifyError(error);
|
|
74
|
-
logger.error(msg);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
logger.error('Failed to initialize Shopify API client:', error);
|
|
78
|
-
}
|
|
79
|
-
throw error;
|
|
80
|
-
}
|
|
81
|
-
export { shopifyGraphqlClient as shopifyClient };
|
|
82
|
-
//# sourceMappingURL=shopifyClient.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyClient.js","sourceRoot":"","sources":["../../src/utils/shopifyClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyClient.mock.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyClient.mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gDAAgD,CAAA;AAEzF,eAAO,MAAM,kBAAkB,EAAE,mBAiBhC,CAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export const productHandlesMock = {
|
|
2
|
-
products: {
|
|
3
|
-
edges: [
|
|
4
|
-
{
|
|
5
|
-
node: {
|
|
6
|
-
handle: 'product-1',
|
|
7
|
-
title: 'Product 1',
|
|
8
|
-
},
|
|
9
|
-
},
|
|
10
|
-
{
|
|
11
|
-
node: {
|
|
12
|
-
handle: 'product-2',
|
|
13
|
-
title: 'Product 2',
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=shopifyClient.mock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyClient.mock.js","sourceRoot":"","sources":["../../src/utils/shopifyClient.mock.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,kBAAkB,GAAwB;IACrD,QAAQ,EAAE;QACR,KAAK,EAAE;YACL;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,WAAW;iBACnB;aACF;YACD;gBACE,IAAI,EAAE;oBACJ,MAAM,EAAE,WAAW;oBACnB,KAAK,EAAE,WAAW;iBACnB;aACF;SACF;KACF;CACF,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyClient.test.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyClient.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { shopifyClient } from './shopifyClient';
|
|
3
|
-
describe('Shopify GraphQL Client', () => {
|
|
4
|
-
it('should be initialized', () => {
|
|
5
|
-
expect(shopifyClient).toBeDefined();
|
|
6
|
-
});
|
|
7
|
-
it('should fetch product handles using the request method', async () => {
|
|
8
|
-
const query = `#graphql
|
|
9
|
-
query productHandles($first: Int!) {
|
|
10
|
-
products(first: $first) {
|
|
11
|
-
edges {
|
|
12
|
-
node {
|
|
13
|
-
handle
|
|
14
|
-
title
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}`;
|
|
19
|
-
const variables = {
|
|
20
|
-
first: 10,
|
|
21
|
-
};
|
|
22
|
-
const response = await shopifyClient.request(query, { variables });
|
|
23
|
-
expect(response.data).toBeDefined();
|
|
24
|
-
expect(response.data?.products).toBeDefined();
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
//# sourceMappingURL=shopifyClient.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyClient.test.js","sourceRoot":"","sources":["../../src/utils/shopifyClient.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAE/C,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,KAAK,GAAG;;;;;;;;;;QAUV,CAAA;QAEJ,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,EAAE;SACV,CAAA;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,CAAA;QAElE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;QACnC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAC/C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export declare function convertIdIntoGid(id: bigint, type: 'Order' | 'Customer'): string;
|
|
2
|
-
interface PageInfo {
|
|
3
|
-
hasNextPage: boolean;
|
|
4
|
-
endCursor?: string | null | undefined;
|
|
5
|
-
}
|
|
6
|
-
export declare function fetchShopifyGraphql<TResultNode, TPageData>(params: {
|
|
7
|
-
query: string;
|
|
8
|
-
variables: Record<string, unknown>;
|
|
9
|
-
dataExtractor: (pageData: TPageData) => {
|
|
10
|
-
nodes: TResultNode[];
|
|
11
|
-
pageInfo?: PageInfo;
|
|
12
|
-
userErrors?: {
|
|
13
|
-
message?: string;
|
|
14
|
-
}[];
|
|
15
|
-
};
|
|
16
|
-
fetchAllPages?: boolean;
|
|
17
|
-
}): Promise<TResultNode[]>;
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=shopifyFetch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyFetch.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyFetch.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,GAAG,UAAU,GACzB,MAAM,CAER;AAED,UAAU,QAAQ;IAChB,WAAW,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;CACtC;AAOD,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,aAAa,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK;QACtC,KAAK,EAAE,WAAW,EAAE,CAAA;QACpB,QAAQ,CAAC,EAAE,QAAQ,CAAA;QACnB,UAAU,CAAC,EAAE;YAAE,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KACpC,CAAA;IACD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAsEzB"}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { logger } from './logger.js';
|
|
2
|
-
import { shopifyClient } from './shopifyClient.js';
|
|
3
|
-
export function convertIdIntoGid(id, type) {
|
|
4
|
-
return `gid://shopify/${type}/${id}`;
|
|
5
|
-
}
|
|
6
|
-
export async function fetchShopifyGraphql(params) {
|
|
7
|
-
const { query, variables: initialVariables, dataExtractor, fetchAllPages = false, } = params;
|
|
8
|
-
const allNodes = [];
|
|
9
|
-
let currentVariables = { ...initialVariables };
|
|
10
|
-
let hasNextLoop = true;
|
|
11
|
-
do {
|
|
12
|
-
const response = (await shopifyClient.request(query, {
|
|
13
|
-
variables: currentVariables,
|
|
14
|
-
}));
|
|
15
|
-
if (response.errors) {
|
|
16
|
-
let errorMessages = 'GraphQL query failed.';
|
|
17
|
-
const errors = response.errors;
|
|
18
|
-
if (Array.isArray(errors)) {
|
|
19
|
-
errorMessages = errors
|
|
20
|
-
.map((e) => e.message || JSON.stringify(e))
|
|
21
|
-
.join('\n');
|
|
22
|
-
}
|
|
23
|
-
else if (typeof errors === 'object' &&
|
|
24
|
-
errors !== null &&
|
|
25
|
-
'message' in errors) {
|
|
26
|
-
errorMessages = errors.message || JSON.stringify(errors);
|
|
27
|
-
}
|
|
28
|
-
else if (typeof errors === 'string') {
|
|
29
|
-
errorMessages = errors;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
errorMessages = JSON.stringify(errors);
|
|
33
|
-
}
|
|
34
|
-
logger.error('GraphQL query failed:', errorMessages);
|
|
35
|
-
throw new Error(`GraphQL errors: ${errorMessages}`);
|
|
36
|
-
}
|
|
37
|
-
if (!response.data) {
|
|
38
|
-
throw new Error('No data in Shopify API response');
|
|
39
|
-
}
|
|
40
|
-
const { nodes, pageInfo, userErrors } = dataExtractor(response.data);
|
|
41
|
-
// Handle Shopify mutation userErrors pattern
|
|
42
|
-
if (Array.isArray(userErrors) && userErrors.length > 0) {
|
|
43
|
-
const errorMessages = userErrors
|
|
44
|
-
.map((e) => e.message || JSON.stringify(e))
|
|
45
|
-
.join('\n');
|
|
46
|
-
logger.error('Shopify mutation userErrors:', errorMessages);
|
|
47
|
-
throw new Error(`Shopify mutation userErrors: ${errorMessages}`);
|
|
48
|
-
}
|
|
49
|
-
allNodes.push(...nodes);
|
|
50
|
-
hasNextLoop = fetchAllPages ? !!pageInfo?.hasNextPage : false;
|
|
51
|
-
if (hasNextLoop && pageInfo?.endCursor) {
|
|
52
|
-
currentVariables = {
|
|
53
|
-
...currentVariables,
|
|
54
|
-
after: pageInfo.endCursor,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
} while (hasNextLoop);
|
|
58
|
-
return allNodes;
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=shopifyFetch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyFetch.js","sourceRoot":"","sources":["../../src/utils/shopifyFetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyFetch.test.d.ts","sourceRoot":"","sources":["../../src/utils/shopifyFetch.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { convertIdIntoGid } from './shopifyFetch';
|
|
3
|
-
describe('convertIdIntoGid', () => {
|
|
4
|
-
it('should convert an Order ID to a GID', () => {
|
|
5
|
-
const id = 12345n;
|
|
6
|
-
const type = 'Order';
|
|
7
|
-
const expectedGid = 'gid://shopify/Order/12345';
|
|
8
|
-
expect(convertIdIntoGid(id, type)).toBe(expectedGid);
|
|
9
|
-
});
|
|
10
|
-
it('should convert a Customer ID to a GID', () => {
|
|
11
|
-
const id = 67890n;
|
|
12
|
-
const type = 'Customer';
|
|
13
|
-
const expectedGid = 'gid://shopify/Customer/67890';
|
|
14
|
-
expect(convertIdIntoGid(id, type)).toBe(expectedGid);
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
//# sourceMappingURL=shopifyFetch.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shopifyFetch.test.js","sourceRoot":"","sources":["../../src/utils/shopifyFetch.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,GAAG,MAAM,CAAA;QACjB,MAAM,IAAI,GAAG,OAAO,CAAA;QACpB,MAAM,WAAW,GAAG,2BAA2B,CAAA;QAC/C,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,EAAE,GAAG,MAAM,CAAA;QACjB,MAAM,IAAI,GAAG,UAAU,CAAA;QACvB,MAAM,WAAW,GAAG,8BAA8B,CAAA;QAClD,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../src/utils/test-setup.ts"],"names":[],"mappings":""}
|
package/dist/utils/test-setup.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { afterAll, afterEach, beforeAll, vi } from 'vitest';
|
|
2
|
-
import { server } from './mswHandlers';
|
|
3
|
-
beforeAll(() => {
|
|
4
|
-
server.listen();
|
|
5
|
-
});
|
|
6
|
-
afterEach(() => {
|
|
7
|
-
server.resetHandlers();
|
|
8
|
-
vi.clearAllMocks();
|
|
9
|
-
});
|
|
10
|
-
afterAll(() => {
|
|
11
|
-
server.close();
|
|
12
|
-
});
|
|
13
|
-
//# sourceMappingURL=test-setup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../../src/utils/test-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAEtC,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,MAAM,EAAE,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,SAAS,CAAC,GAAG,EAAE;IACb,MAAM,CAAC,aAAa,EAAE,CAAA;IACtB,EAAE,CAAC,aAAa,EAAE,CAAA;AACpB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,GAAG,EAAE;IACZ,MAAM,CAAC,KAAK,EAAE,CAAA;AAChB,CAAC,CAAC,CAAA"}
|