@tiledev/sdk-shopify 0.4.1 → 0.7.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.
- package/README.md +114 -1
- package/dist/blogs.d.ts.map +1 -1
- package/dist/blogs.js +3 -3
- package/dist/blogs.js.map +1 -1
- package/dist/cart.d.ts +7 -1
- package/dist/cart.d.ts.map +1 -1
- package/dist/cart.js +49 -24
- package/dist/cart.js.map +1 -1
- package/dist/client.d.ts +20 -2
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +80 -19
- package/dist/client.js.map +1 -1
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +8 -5
- package/dist/collections.js.map +1 -1
- package/dist/customer.d.ts.map +1 -1
- package/dist/customer.js +3 -3
- package/dist/customer.js.map +1 -1
- package/dist/deviceStore.d.ts +9 -0
- package/dist/deviceStore.d.ts.map +1 -0
- package/dist/deviceStore.js +77 -0
- package/dist/deviceStore.js.map +1 -0
- package/dist/deviceStore.native.d.ts +14 -0
- package/dist/deviceStore.native.d.ts.map +1 -0
- package/dist/deviceStore.native.js +47 -0
- package/dist/deviceStore.native.js.map +1 -0
- package/dist/deviceStoreCore.d.ts +24 -0
- package/dist/deviceStoreCore.d.ts.map +1 -0
- package/dist/deviceStoreCore.js +40 -0
- package/dist/deviceStoreCore.js.map +1 -0
- package/dist/filters.d.ts +32 -0
- package/dist/filters.d.ts.map +1 -0
- package/dist/filters.js +67 -0
- package/dist/filters.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -1
- package/dist/productStore.d.ts +43 -0
- package/dist/productStore.d.ts.map +1 -0
- package/dist/productStore.js +309 -0
- package/dist/productStore.js.map +1 -0
- package/dist/products.d.ts.map +1 -1
- package/dist/products.js +28 -19
- package/dist/products.js.map +1 -1
- package/dist/queries.d.ts +24 -24
- package/dist/queries.d.ts.map +1 -1
- package/dist/queries.js +5 -3
- package/dist/queries.js.map +1 -1
- package/dist/react/ShopifyProvider.d.ts +8 -0
- package/dist/react/ShopifyProvider.d.ts.map +1 -1
- package/dist/react/ShopifyProvider.js +134 -3
- package/dist/react/ShopifyProvider.js.map +1 -1
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +9 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react/useCollectionProducts.d.ts +12 -20
- package/dist/react/useCollectionProducts.d.ts.map +1 -1
- package/dist/react/useCollectionProducts.js +36 -137
- package/dist/react/useCollectionProducts.js.map +1 -1
- package/dist/react/useProduct.d.ts +36 -0
- package/dist/react/useProduct.d.ts.map +1 -0
- package/dist/react/useProduct.js +126 -0
- package/dist/react/useProduct.js.map +1 -0
- package/dist/react/useProductFeed.d.ts +57 -0
- package/dist/react/useProductFeed.d.ts.map +1 -0
- package/dist/react/useProductFeed.js +231 -0
- package/dist/react/useProductFeed.js.map +1 -0
- package/dist/react/useSearch.d.ts +30 -0
- package/dist/react/useSearch.d.ts.map +1 -0
- package/dist/react/useSearch.js +61 -0
- package/dist/react/useSearch.js.map +1 -0
- package/dist/requestCache.d.ts +48 -0
- package/dist/requestCache.d.ts.map +1 -0
- package/dist/requestCache.js +173 -0
- package/dist/requestCache.js.map +1 -0
- package/dist/types.d.ts +80 -21
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -1
- package/dist/types.js.map +1 -1
- package/dist/variants.js +1 -1
- package/dist/variants.js.map +1 -1
- package/dist/wishlist.d.ts.map +1 -1
- package/dist/wishlist.js +4 -1
- package/dist/wishlist.js.map +1 -1
- package/package.json +9 -3
package/README.md
CHANGED
|
@@ -107,12 +107,125 @@ Then read from the context:
|
|
|
107
107
|
```tsx
|
|
108
108
|
const { ready, error, cart, wishlist, customer, checkout } = useShopify();
|
|
109
109
|
const { addLine, itemCount, cart } = useCart();
|
|
110
|
-
const { items, count, toggle, has } = useWishlist();
|
|
110
|
+
const { items, ids, count, toggle, has } = useWishlist(); // ids: product ids, e.g. a grid's favourites
|
|
111
111
|
const { loggedIn, login, logout } = useCustomer();
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
`react` is an **optional** peer dep — install it only if you use the `/react` subpath.
|
|
115
115
|
|
|
116
|
+
### Collection feed with filters
|
|
117
|
+
|
|
118
|
+
`useCollectionProducts` pages one collection by cursor and holds the shopper's filter selection:
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
const feed = useCollectionProducts({ handle: 'new-arrivals', pageSize: 12 });
|
|
122
|
+
|
|
123
|
+
feed.products; // appended page by page; feed.loadMore() when the list nears its end
|
|
124
|
+
feed.availableFilters; // Shopify's facets for this collection, values carry an `input` string
|
|
125
|
+
feed.setFilters(inputs); // the `input` strings the shopper picked; the hook parses and refetches
|
|
126
|
+
feed.selectedFilters; // those inputs, for the sheet's checkboxes
|
|
127
|
+
feed.filterActive; // at least one selected
|
|
128
|
+
feed.clearFilters();
|
|
129
|
+
feed.refresh(); // pull-to-refresh (retry is the same call, for an error state)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
- Pass `filters` for anything the app always applies (e.g. in stock only). The shopper's selection
|
|
133
|
+
goes on top.
|
|
134
|
+
- A selection belongs to its collection: a new `handle` starts with none, and its first read never
|
|
135
|
+
carries the old filters.
|
|
136
|
+
- An input that isn't a Shopify filter (unparseable JSON) is dropped rather than sent.
|
|
137
|
+
- **Price** is the one facet whose input the app builds. `priceRange(facet)` reads a
|
|
138
|
+
`PRICE_RANGE` facet's bounds, and `priceFilterInput(min, max, range)` encodes the shopper's range
|
|
139
|
+
(`{"price":{"min":20,"max":100}}`), or returns null when it wouldn't narrow anything. Pass it to
|
|
140
|
+
`setFilters` with the other inputs; `parsePriceFilterInput` reads one back to pre-fill fields.
|
|
141
|
+
- Scrolling, navigation and the sheet's open state stay in the app; the hook only knows Shopify.
|
|
142
|
+
|
|
143
|
+
### One network call per identical read
|
|
144
|
+
|
|
145
|
+
Every Storefront read goes through one `request()`, which now shares work:
|
|
146
|
+
|
|
147
|
+
- **In flight:** identical queries fired together share one call. Six grids on the same collection
|
|
148
|
+
make one request, not six. This covers every query, including cart and customer ones.
|
|
149
|
+
Mutations are never shared.
|
|
150
|
+
- **Recent answers:** catalogue reads are reused from memory for a short time (`DEFAULT_CACHE_TTL_MS`):
|
|
151
|
+
shop info 30 min, collections and blogs 10 min, recommendations 5 min, collection pages, products
|
|
152
|
+
and wishlist items 1 min, search 30 s. Cart, customer, orders and variant stock are never reused.
|
|
153
|
+
- Each caller gets its own parsed copy, so mutating a result can't change another caller's.
|
|
154
|
+
Failed calls and GraphQL errors are never kept.
|
|
155
|
+
- The key includes the store, token, market (`@inContext`), metafields and variables, so markets
|
|
156
|
+
and stores never mix. Memory only: nothing is persisted, and `init` starts it empty.
|
|
157
|
+
|
|
158
|
+
```ts
|
|
159
|
+
shopify.init({ ...config, cache: { ttl: { CollectionProducts: 0 }, maxEntries: 50 } }); // tune
|
|
160
|
+
shopify.init({ ...config, cache: false }); // no reuse; in-flight sharing stays
|
|
161
|
+
shopify.collections.products(handle, { fresh: true }); // skip a recent answer
|
|
162
|
+
clearRequestCache(); // forget everything
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
`useCollectionProducts`' `refresh()` and `retry()` read fresh; other grids on the same collection
|
|
166
|
+
keep what they have.
|
|
167
|
+
|
|
168
|
+
### Image transforms
|
|
169
|
+
|
|
170
|
+
Every call that returns images takes an optional `imageTransform`, Shopify's server-side
|
|
171
|
+
`Image.url(transform:)`: the CDN resizes, crops and converts, so each screen downloads the size it
|
|
172
|
+
shows. **Omitted, URLs are the originals, exactly as before.**
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
shopify.collections.products(handle, { first: 12, imageTransform: { maxWidth: 330, scale: 2, preferredContentType: 'WEBP' } });
|
|
176
|
+
shopify.products.byHandle(handle, { imageTransform: { maxWidth: 1080 } });
|
|
177
|
+
useCollectionProducts({ handle, imageTransform: { maxWidth: 330, scale: 2 } });
|
|
178
|
+
useSearch(term, { imageTransform: { maxWidth: 200, scale: 2 } });
|
|
179
|
+
useProduct(handle, { imageTransform: { maxWidth: 1080 } });
|
|
180
|
+
// e.g. …/photo_330x@2x.jpg.webp, …/photo_100x100_crop_center.jpg
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
- Fields: `maxWidth`, `maxHeight`, `crop` (`CENTER` | `TOP` | `BOTTOM` | `LEFT` | `RIGHT`),
|
|
184
|
+
`scale` (1–3), `preferredContentType` (`WEBP` | `JPG` | `PNG`). Never upscales past the original.
|
|
185
|
+
`width`/`height` on an image stay the original's.
|
|
186
|
+
- Applies to every image in the answer: product images, featured image, media, variant images,
|
|
187
|
+
collection images, cart line images, order line images, article images.
|
|
188
|
+
- **Provider-run reads** (the cart `ShopifyProvider` keeps, the wishlist it rehydrates) take a default
|
|
189
|
+
from the config: `imageTransforms: { cart: { maxWidth: 160, scale: 2 }, wishlist: … }`. A
|
|
190
|
+
transform passed to a call directly wins.
|
|
191
|
+
- Each transform is its own cache entry. A product page's first-render `preview` uses the image the
|
|
192
|
+
grid fetched, so the image on screen is already in the image cache.
|
|
193
|
+
|
|
194
|
+
### Cache-first pages: `useProduct`, `useCollectionProducts`, `useSearch`
|
|
195
|
+
|
|
196
|
+
Each hook renders what this device already knows **on its first render**, then reads the network in
|
|
197
|
+
the background and updates in place (`refreshing` is true meanwhile; no spinner needed). A copy
|
|
198
|
+
younger than a minute (`REVALIDATE_AFTER_MS`) isn't re-read. `refresh()` always goes to the network.
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
// Product page: opens with title, image and price from whichever grid or search showed it.
|
|
202
|
+
const { preview, product, level, loading, refreshing, notFound, refresh } = useProduct(handle);
|
|
203
|
+
// preview: the base keys, render now. product: full (variants, media), render the picker when set.
|
|
204
|
+
|
|
205
|
+
// Listing page / search page: the last first page paints immediately, even after a cold start.
|
|
206
|
+
const feed = useCollectionProducts({ handle, pageSize: 12 });
|
|
207
|
+
const results = useSearch(term, { debounceMs: 300 }); // results.query is the debounced term
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
- **Every product read records its base keys** (`PRODUCT_BASE_KEYS`: `id`, `handle`, `title`,
|
|
211
|
+
`featuredImage`, `priceRange`, `compareAtPriceRange`): collections, search, recommendations, lists,
|
|
212
|
+
`byIds`, the wishlist. `byHandle`/`byId` record the full product. So a product tapped anywhere
|
|
213
|
+
opens instantly, and a product page seen before opens complete.
|
|
214
|
+
- **Kept on the device** across cold starts, one small key per product, read only when something
|
|
215
|
+
asks (nothing is loaded in bulk at launch). Caps: 2,500 base entries, 30 full products, 20 first
|
|
216
|
+
pages; anything older than 7 days is dropped. Keys carry a schema version and the store, market,
|
|
217
|
+
API version and metafields, so nothing mismatched is ever shown. Catalogue data only: never cart,
|
|
218
|
+
customer, orders or wallet.
|
|
219
|
+
- **Storage:** on iOS/Android, **MMKV 3** (synchronous, read in microseconds inside a render). List
|
|
220
|
+
it in the app so its native code is compiled in: `npm i react-native-mmkv@^3` (needs the New
|
|
221
|
+
Architecture, on by default from RN 0.76 / Expo 52). Without it in the binary the SDK keeps
|
|
222
|
+
everything in memory only and nothing breaks. On web and the editor preview: `localStorage`.
|
|
223
|
+
- `peekProduct(handleOrId)` reads the store directly (e.g. to prefetch on `onPressIn`);
|
|
224
|
+
`forgetProduct(id)` drops one (e.g. after `cart:outOfStock`); `clearProductStore()` drops all.
|
|
225
|
+
- `cache: false` in the config turns all of this off, along with the request cache.
|
|
226
|
+
- The provider sets the config on its first render, so these reads start at once instead of waiting
|
|
227
|
+
for its own startup (cart, wishlist, customer).
|
|
228
|
+
|
|
116
229
|
## Alerts & Toasts
|
|
117
230
|
|
|
118
231
|
The editor's Settings panel configures the copy for 13 shopper-facing alerts. The
|
package/dist/blogs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blogs.d.ts","sourceRoot":"","sources":["../src/blogs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAMV,eAAe,
|
|
1
|
+
{"version":3,"file":"blogs.d.ts","sourceRoot":"","sources":["../src/blogs.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAMV,eAAe,EAEhB,MAAM,SAAS,CAAC;AAsCjB,eAAO,MAAM,KAAK,EAAE,eA0CnB,CAAC"}
|
package/dist/blogs.js
CHANGED
|
@@ -50,7 +50,7 @@ exports.blogs = {
|
|
|
50
50
|
after: opts === null || opts === void 0 ? void 0 : opts.after,
|
|
51
51
|
sortKey: opts === null || opts === void 0 ? void 0 : opts.sortKey,
|
|
52
52
|
reverse: (_b = opts === null || opts === void 0 ? void 0 : opts.reverse) !== null && _b !== void 0 ? _b : false,
|
|
53
|
-
});
|
|
53
|
+
}, { imageTransform: opts === null || opts === void 0 ? void 0 : opts.imageTransform });
|
|
54
54
|
if (!data.blog) {
|
|
55
55
|
return { nodes: [], pageInfo: { hasNextPage: false, hasPreviousPage: false, startCursor: null, endCursor: null } };
|
|
56
56
|
}
|
|
@@ -59,11 +59,11 @@ exports.blogs = {
|
|
|
59
59
|
pageInfo: data.blog.articles.pageInfo,
|
|
60
60
|
};
|
|
61
61
|
},
|
|
62
|
-
async articleByHandle(blogHandle, articleHandle) {
|
|
62
|
+
async articleByHandle(blogHandle, articleHandle, opts) {
|
|
63
63
|
const data = await (0, client_1.request)(queries_1.BLOG_ARTICLE_BY_HANDLE_QUERY, {
|
|
64
64
|
blogHandle,
|
|
65
65
|
articleHandle,
|
|
66
|
-
});
|
|
66
|
+
}, { imageTransform: opts === null || opts === void 0 ? void 0 : opts.imageTransform });
|
|
67
67
|
if (!data.blog || !data.blog.articleByHandle)
|
|
68
68
|
return null;
|
|
69
69
|
return normalizeArticle(data.blog.articleByHandle);
|
package/dist/blogs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blogs.js","sourceRoot":"","sources":["../src/blogs.ts"],"names":[],"mappings":";;;AAAA,qCAAmC;AACnC,uCAKmB;
|
|
1
|
+
{"version":3,"file":"blogs.js","sourceRoot":"","sources":["../src/blogs.ts"],"names":[],"mappings":"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"}
|
package/dist/cart.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
import type { ShopifyCartAPI } from './types';
|
|
1
|
+
import type { Cart, CartLineSnapshot, ShopifyCartAPI } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* The lines of `cart` in the shape a new cart can be created from. Shopify has no copy-cart API
|
|
4
|
+
* and an expired cart cannot be read, so this is the only way its lines outlive it. Attributes are
|
|
5
|
+
* copied verbatim: other apps' tags ride on them.
|
|
6
|
+
*/
|
|
7
|
+
export declare function toLineSnapshot(cart: Cart): CartLineSnapshot[];
|
|
2
8
|
export declare const cart: ShopifyCartAPI;
|
|
3
9
|
//# sourceMappingURL=cart.d.ts.map
|
package/dist/cart.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../src/cart.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"cart.d.ts","sourceRoot":"","sources":["../src/cart.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,IAAI,EAEJ,gBAAgB,EAEhB,cAAc,EAIf,MAAM,SAAS,CAAC;AA6CjB;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,EAAE,CAS7D;AAOD,eAAO,MAAM,IAAI,EAAE,cAyGlB,CAAC"}
|
package/dist/cart.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.cart = void 0;
|
|
4
|
+
exports.toLineSnapshot = toLineSnapshot;
|
|
4
5
|
const client_1 = require("./client");
|
|
5
6
|
const queries_1 = require("./queries");
|
|
6
7
|
function normalize(c) {
|
|
@@ -19,13 +20,14 @@ function normalize(c) {
|
|
|
19
20
|
phone: (_g = (_f = c.buyerIdentity) === null || _f === void 0 ? void 0 : _f.phone) !== null && _g !== void 0 ? _g : null,
|
|
20
21
|
},
|
|
21
22
|
lines: ((_j = (_h = c.lines) === null || _h === void 0 ? void 0 : _h.nodes) !== null && _j !== void 0 ? _j : []).map((line) => {
|
|
22
|
-
var _a, _b, _c;
|
|
23
|
+
var _a, _b, _c, _d, _e, _f;
|
|
23
24
|
return ({
|
|
24
25
|
id: line.id,
|
|
25
26
|
quantity: line.quantity,
|
|
26
27
|
attributes: (_a = line.attributes) !== null && _a !== void 0 ? _a : [],
|
|
28
|
+
sellingPlanId: (_d = (_c = (_b = line.sellingPlanAllocation) === null || _b === void 0 ? void 0 : _b.sellingPlan) === null || _c === void 0 ? void 0 : _c.id) !== null && _d !== void 0 ? _d : null,
|
|
27
29
|
merchandise: line.merchandise,
|
|
28
|
-
product: (
|
|
30
|
+
product: (_f = (_e = line.merchandise) === null || _e === void 0 ? void 0 : _e.product) !== null && _f !== void 0 ? _f : null,
|
|
29
31
|
cost: line.cost,
|
|
30
32
|
});
|
|
31
33
|
}),
|
|
@@ -36,8 +38,31 @@ function normalize(c) {
|
|
|
36
38
|
updatedAt: c.updatedAt,
|
|
37
39
|
};
|
|
38
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* The lines of `cart` in the shape a new cart can be created from. Shopify has no copy-cart API
|
|
43
|
+
* and an expired cart cannot be read, so this is the only way its lines outlive it. Attributes are
|
|
44
|
+
* copied verbatim: other apps' tags ride on them.
|
|
45
|
+
*/
|
|
46
|
+
function toLineSnapshot(cart) {
|
|
47
|
+
return cart.lines
|
|
48
|
+
.filter((line) => { var _a; return !!((_a = line.merchandise) === null || _a === void 0 ? void 0 : _a.id); })
|
|
49
|
+
.map((line) => {
|
|
50
|
+
var _a;
|
|
51
|
+
return ({
|
|
52
|
+
merchandiseId: line.merchandise.id,
|
|
53
|
+
quantity: line.quantity,
|
|
54
|
+
sellingPlanId: (_a = line.sellingPlanId) !== null && _a !== void 0 ? _a : null,
|
|
55
|
+
attributes: line.attributes.map(({ key, value }) => ({ key, value })),
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** A cart's line-image transform: the call's own, else the provider-wide `imageTransforms.cart`. */
|
|
60
|
+
function cartImages(opts) {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
return { imageTransform: (_a = opts === null || opts === void 0 ? void 0 : opts.imageTransform) !== null && _a !== void 0 ? _a : (_b = (0, client_1.getConfig)().imageTransforms) === null || _b === void 0 ? void 0 : _b.cart };
|
|
63
|
+
}
|
|
39
64
|
exports.cart = {
|
|
40
|
-
async create(input) {
|
|
65
|
+
async create(input, opts) {
|
|
41
66
|
/**
|
|
42
67
|
* Built key by key rather than spreading `input`, so an unknown field cannot reach Shopify and
|
|
43
68
|
* fail the whole mutation — but every key `CartInput` accepts and a caller can set belongs
|
|
@@ -52,38 +77,38 @@ exports.cart = {
|
|
|
52
77
|
attributes: input === null || input === void 0 ? void 0 : input.attributes,
|
|
53
78
|
buyerIdentity: input === null || input === void 0 ? void 0 : input.buyerIdentity,
|
|
54
79
|
};
|
|
55
|
-
const data = await (0, client_1.request)(queries_1.CART_CREATE_MUTATION, { input: payload });
|
|
80
|
+
const data = await (0, client_1.request)(queries_1.CART_CREATE_MUTATION, { input: payload }, cartImages(opts));
|
|
56
81
|
(0, client_1.assertNoUserErrors)('cartCreate', data.cartCreate.userErrors);
|
|
57
82
|
return normalize(data.cartCreate.cart);
|
|
58
83
|
},
|
|
59
|
-
async get(cartId) {
|
|
60
|
-
const data = await (0, client_1.request)(queries_1.CART_GET_QUERY, { id: cartId });
|
|
84
|
+
async get(cartId, opts) {
|
|
85
|
+
const data = await (0, client_1.request)(queries_1.CART_GET_QUERY, { id: cartId }, cartImages(opts));
|
|
61
86
|
return data.cart ? normalize(data.cart) : null;
|
|
62
87
|
},
|
|
63
|
-
async addLines(cartId, lines) {
|
|
64
|
-
const data = await (0, client_1.request)(queries_1.CART_LINES_ADD_MUTATION, { cartId, lines });
|
|
88
|
+
async addLines(cartId, lines, opts) {
|
|
89
|
+
const data = await (0, client_1.request)(queries_1.CART_LINES_ADD_MUTATION, { cartId, lines }, cartImages(opts));
|
|
65
90
|
(0, client_1.assertNoUserErrors)('cartLinesAdd', data.cartLinesAdd.userErrors);
|
|
66
91
|
return normalize(data.cartLinesAdd.cart);
|
|
67
92
|
},
|
|
68
|
-
async updateLines(cartId, lines) {
|
|
69
|
-
const data = await (0, client_1.request)(queries_1.CART_LINES_UPDATE_MUTATION, { cartId, lines });
|
|
93
|
+
async updateLines(cartId, lines, opts) {
|
|
94
|
+
const data = await (0, client_1.request)(queries_1.CART_LINES_UPDATE_MUTATION, { cartId, lines }, cartImages(opts));
|
|
70
95
|
(0, client_1.assertNoUserErrors)('cartLinesUpdate', data.cartLinesUpdate.userErrors);
|
|
71
96
|
return normalize(data.cartLinesUpdate.cart);
|
|
72
97
|
},
|
|
73
|
-
async removeLines(cartId, lineIds) {
|
|
74
|
-
const data = await (0, client_1.request)(queries_1.CART_LINES_REMOVE_MUTATION, { cartId, lineIds });
|
|
98
|
+
async removeLines(cartId, lineIds, opts) {
|
|
99
|
+
const data = await (0, client_1.request)(queries_1.CART_LINES_REMOVE_MUTATION, { cartId, lineIds }, cartImages(opts));
|
|
75
100
|
(0, client_1.assertNoUserErrors)('cartLinesRemove', data.cartLinesRemove.userErrors);
|
|
76
101
|
return normalize(data.cartLinesRemove.cart);
|
|
77
102
|
},
|
|
78
|
-
async applyDiscountCodes(cartId, codes) {
|
|
103
|
+
async applyDiscountCodes(cartId, codes, opts) {
|
|
79
104
|
const data = await (0, client_1.request)(queries_1.CART_DISCOUNT_CODES_UPDATE_MUTATION, {
|
|
80
105
|
cartId,
|
|
81
106
|
discountCodes: codes,
|
|
82
|
-
});
|
|
107
|
+
}, cartImages(opts));
|
|
83
108
|
(0, client_1.assertNoUserErrors)('cartDiscountCodesUpdate', data.cartDiscountCodesUpdate.userErrors);
|
|
84
109
|
return normalize(data.cartDiscountCodesUpdate.cart);
|
|
85
110
|
},
|
|
86
|
-
async setBuyerIdentity(cartId, identity) {
|
|
111
|
+
async setBuyerIdentity(cartId, identity, opts) {
|
|
87
112
|
const data = await (0, client_1.request)(queries_1.CART_BUYER_IDENTITY_UPDATE_MUTATION, {
|
|
88
113
|
cartId,
|
|
89
114
|
buyerIdentity: {
|
|
@@ -91,15 +116,15 @@ exports.cart = {
|
|
|
91
116
|
countryCode: identity.countryCode,
|
|
92
117
|
customerAccessToken: identity.customerAccessToken,
|
|
93
118
|
},
|
|
94
|
-
});
|
|
119
|
+
}, cartImages(opts));
|
|
95
120
|
(0, client_1.assertNoUserErrors)('cartBuyerIdentityUpdate', data.cartBuyerIdentityUpdate.userErrors);
|
|
96
121
|
return normalize(data.cartBuyerIdentityUpdate.cart);
|
|
97
122
|
},
|
|
98
|
-
async applyGiftCardCodes(cartId, codes) {
|
|
123
|
+
async applyGiftCardCodes(cartId, codes, opts) {
|
|
99
124
|
const data = await (0, client_1.request)(queries_1.CART_GIFT_CARD_CODES_UPDATE_MUTATION, {
|
|
100
125
|
cartId,
|
|
101
126
|
giftCardCodes: codes,
|
|
102
|
-
});
|
|
127
|
+
}, cartImages(opts));
|
|
103
128
|
(0, client_1.assertNoUserErrors)('cartGiftCardCodesUpdate', data.cartGiftCardCodesUpdate.userErrors);
|
|
104
129
|
return normalize(data.cartGiftCardCodesUpdate.cart);
|
|
105
130
|
},
|
|
@@ -109,25 +134,25 @@ exports.cart = {
|
|
|
109
134
|
* Its own mutation rather than a cart attribute: attributes are key/value metadata for the app's
|
|
110
135
|
* own bookkeeping (Cart Hold's expiry stamp is one), while the note is content the shopper wrote.
|
|
111
136
|
*/
|
|
112
|
-
async updateNote(cartId, note) {
|
|
137
|
+
async updateNote(cartId, note, opts) {
|
|
113
138
|
// `?? ''` is load-bearing: the argument is `String!`, so a null variable fails the whole
|
|
114
139
|
// mutation rather than clearing the note.
|
|
115
|
-
const data = await (0, client_1.request)(queries_1.CART_NOTE_UPDATE_MUTATION, { cartId, note: note !== null && note !== void 0 ? note : '' });
|
|
140
|
+
const data = await (0, client_1.request)(queries_1.CART_NOTE_UPDATE_MUTATION, { cartId, note: note !== null && note !== void 0 ? note : '' }, cartImages(opts));
|
|
116
141
|
(0, client_1.assertNoUserErrors)('cartNoteUpdate', data.cartNoteUpdate.userErrors);
|
|
117
142
|
return normalize(data.cartNoteUpdate.cart);
|
|
118
143
|
},
|
|
119
|
-
async updateAttributes(cartId, attributes) {
|
|
144
|
+
async updateAttributes(cartId, attributes, opts) {
|
|
120
145
|
// Shopify replaces the set wholesale, so this is a write of the final list, not a merge into
|
|
121
146
|
// the existing one. Callers holding a cart should send its current attributes plus theirs.
|
|
122
|
-
const data = await (0, client_1.request)(queries_1.CART_ATTRIBUTES_UPDATE_MUTATION, { cartId, attributes });
|
|
147
|
+
const data = await (0, client_1.request)(queries_1.CART_ATTRIBUTES_UPDATE_MUTATION, { cartId, attributes }, cartImages(opts));
|
|
123
148
|
(0, client_1.assertNoUserErrors)('cartAttributesUpdate', data.cartAttributesUpdate.userErrors);
|
|
124
149
|
return normalize(data.cartAttributesUpdate.cart);
|
|
125
150
|
},
|
|
126
|
-
async removeGiftCardCodes(cartId, appliedGiftCardIds) {
|
|
151
|
+
async removeGiftCardCodes(cartId, appliedGiftCardIds, opts) {
|
|
127
152
|
const data = await (0, client_1.request)(queries_1.CART_GIFT_CARD_CODES_REMOVE_MUTATION, {
|
|
128
153
|
cartId,
|
|
129
154
|
appliedGiftCardIds,
|
|
130
|
-
});
|
|
155
|
+
}, cartImages(opts));
|
|
131
156
|
(0, client_1.assertNoUserErrors)('cartGiftCardCodesRemove', data.cartGiftCardCodesRemove.userErrors);
|
|
132
157
|
return normalize(data.cartGiftCardCodesRemove.cart);
|
|
133
158
|
},
|
package/dist/cart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cart.js","sourceRoot":"","sources":["../src/cart.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"cart.js","sourceRoot":"","sources":["../src/cart.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ShopifyConfig, UserError } from './types';
|
|
1
|
+
import { ImageTransform, ShopifyConfig, UserError } from './types';
|
|
2
2
|
export declare function setShopInfo(info: {
|
|
3
3
|
moneyFormat?: string | null;
|
|
4
4
|
currencyCode?: string | null;
|
|
@@ -9,7 +9,25 @@ export declare function getCurrencyCode(): string | null;
|
|
|
9
9
|
export declare function setConfig(config: ShopifyConfig): void;
|
|
10
10
|
export declare function getConfig(): ShopifyConfig;
|
|
11
11
|
export declare function isConfigured(): boolean;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Declares `$imageTransform` on an operation whose fragments use it (`ImageFields`, media URLs).
|
|
14
|
+
* GraphQL requires every operation to declare the variables its fragments use; doing it here means
|
|
15
|
+
* no query can forget, and any operation that returns images accepts a transform. An operation that
|
|
16
|
+
* uses no image URL is returned untouched. Runs before `withContext`, while the operation's
|
|
17
|
+
* argument list still directly follows its name.
|
|
18
|
+
*/
|
|
19
|
+
export declare function withImageTransform(operation: string): string;
|
|
20
|
+
export interface RequestOptions {
|
|
21
|
+
/** Skip a recent cached answer and go to the network (pull-to-refresh). */
|
|
22
|
+
fresh?: boolean;
|
|
23
|
+
/** Resize/convert the answer's images on Shopify's CDN. Omitted or null: original URLs. */
|
|
24
|
+
imageTransform?: ImageTransform | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* One Storefront call. Identical queries share one network request, and catalogue reads reuse a
|
|
28
|
+
* recent answer (see `requestCache.ts`); mutations always go to the network.
|
|
29
|
+
*/
|
|
30
|
+
export declare function request<T>(operation: string, variables?: Record<string, unknown>, options?: RequestOptions): Promise<T>;
|
|
13
31
|
/** Throws if a Shopify mutation payload contains userErrors. */
|
|
14
32
|
export declare function assertNoUserErrors(label: string, errors: UserError[] | null | undefined): void;
|
|
15
33
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAgB,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAgB,SAAS,EAAE,MAAM,SAAS,CAAC;AAajF,wBAAgB,WAAW,CAAC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,CAGrG;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAID,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CASrD;AAeD,wBAAgB,SAAS,IAAI,aAAa,CAGzC;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAyGD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,CAAC,CAAC,CAgDZ;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAO9F"}
|
package/dist/client.js
CHANGED
|
@@ -6,10 +6,12 @@ exports.getCurrencyCode = getCurrencyCode;
|
|
|
6
6
|
exports.setConfig = setConfig;
|
|
7
7
|
exports.getConfig = getConfig;
|
|
8
8
|
exports.isConfigured = isConfigured;
|
|
9
|
+
exports.withImageTransform = withImageTransform;
|
|
9
10
|
exports.request = request;
|
|
10
11
|
exports.assertNoUserErrors = assertNoUserErrors;
|
|
11
12
|
const types_1 = require("./types");
|
|
12
13
|
const metafields_1 = require("./metafields");
|
|
14
|
+
const requestCache_1 = require("./requestCache");
|
|
13
15
|
const state = { config: null, moneyFormat: null, currencyCode: null };
|
|
14
16
|
function setShopInfo(info) {
|
|
15
17
|
if (info.moneyFormat)
|
|
@@ -30,8 +32,26 @@ function setConfig(config) {
|
|
|
30
32
|
throw new Error('shopify.init: storeDomain is required');
|
|
31
33
|
if (!config.storefrontAccessToken)
|
|
32
34
|
throw new Error('shopify.init: storefrontAccessToken is required');
|
|
35
|
+
const changed = !state.config || signature(state.config) !== signature(config);
|
|
33
36
|
state.config = config;
|
|
34
37
|
(0, metafields_1.setProductMetafields)(config.productMetafields);
|
|
38
|
+
// Only a real change resets the request cache: `ShopifyProvider` sets the config on its first
|
|
39
|
+
// render and `init` sets it again, and that second call must not drop requests already started.
|
|
40
|
+
if (changed)
|
|
41
|
+
(0, requestCache_1.configureRequestCache)(config.cache);
|
|
42
|
+
}
|
|
43
|
+
/** Everything in a config that changes what a request returns, or how the cache behaves. */
|
|
44
|
+
function signature(c) {
|
|
45
|
+
var _a, _b, _c, _d, _e;
|
|
46
|
+
return JSON.stringify([
|
|
47
|
+
c.storeDomain,
|
|
48
|
+
c.storefrontAccessToken,
|
|
49
|
+
(_a = c.apiVersion) !== null && _a !== void 0 ? _a : null,
|
|
50
|
+
(_b = c.country) !== null && _b !== void 0 ? _b : null,
|
|
51
|
+
(_c = c.language) !== null && _c !== void 0 ? _c : null,
|
|
52
|
+
(_d = c.productMetafields) !== null && _d !== void 0 ? _d : null,
|
|
53
|
+
(_e = c.cache) !== null && _e !== void 0 ? _e : null,
|
|
54
|
+
]);
|
|
35
55
|
}
|
|
36
56
|
function getConfig() {
|
|
37
57
|
if (!state.config)
|
|
@@ -136,28 +156,69 @@ function withContext(operation) {
|
|
|
136
156
|
return operation;
|
|
137
157
|
return `${operation.slice(0, braceAt)}query ${directive} ${operation.slice(braceAt)}`;
|
|
138
158
|
}
|
|
139
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Declares `$imageTransform` on an operation whose fragments use it (`ImageFields`, media URLs).
|
|
161
|
+
* GraphQL requires every operation to declare the variables its fragments use; doing it here means
|
|
162
|
+
* no query can forget, and any operation that returns images accepts a transform. An operation that
|
|
163
|
+
* uses no image URL is returned untouched. Runs before `withContext`, while the operation's
|
|
164
|
+
* argument list still directly follows its name.
|
|
165
|
+
*/
|
|
166
|
+
function withImageTransform(operation) {
|
|
167
|
+
var _a, _b;
|
|
168
|
+
if (!/\$imageTransform\b/.test(operation) || /\$imageTransform\s*:/.test(operation))
|
|
169
|
+
return operation;
|
|
170
|
+
const decl = '$imageTransform: ImageTransformInput';
|
|
171
|
+
const opMatch = operation.match(/(^|\n)([ \t]*(?:query|mutation)\b[ \t]*[A-Za-z_][A-Za-z0-9_]*[ \t]*)(\(([\s\S]*?)\))?/);
|
|
172
|
+
if (!opMatch)
|
|
173
|
+
return operation;
|
|
174
|
+
const at = opMatch.index + opMatch[1].length;
|
|
175
|
+
const head = opMatch[2];
|
|
176
|
+
const replaced = opMatch[3] !== undefined ? `${head}(${opMatch[4].replace(/\s*$/, '')}, ${decl})` : `${head.replace(/\s*$/, '')}(${decl}) `;
|
|
177
|
+
return operation.slice(0, at) + replaced + operation.slice(at + head.length + ((_b = (_a = opMatch[3]) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0));
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* One Storefront call. Identical queries share one network request, and catalogue reads reuse a
|
|
181
|
+
* recent answer (see `requestCache.ts`); mutations always go to the network.
|
|
182
|
+
*/
|
|
183
|
+
async function request(operation, variables, options) {
|
|
140
184
|
const c = getConfig();
|
|
141
|
-
const query = withContext(deduplicateFragments(operation));
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
185
|
+
const query = withContext(withImageTransform(deduplicateFragments(operation)));
|
|
186
|
+
// Sent only when set: an absent variable is a null transform, and keeping it out of the variables
|
|
187
|
+
// keeps the cache key of an untransformed read what it always was.
|
|
188
|
+
const vars = (options === null || options === void 0 ? void 0 : options.imageTransform) && /\$imageTransform\s*:/.test(query)
|
|
189
|
+
? { ...(variables !== null && variables !== void 0 ? variables : {}), imageTransform: options.imageTransform }
|
|
190
|
+
: variables;
|
|
191
|
+
const url = endpoint();
|
|
192
|
+
const text = await (0, requestCache_1.readThrough)(`${url}\n${c.storefrontAccessToken}`, query, vars, (options === null || options === void 0 ? void 0 : options.fresh) === true, async () => {
|
|
193
|
+
const res = await fetch(url, {
|
|
194
|
+
method: 'POST',
|
|
195
|
+
headers: {
|
|
196
|
+
'Content-Type': 'application/json',
|
|
197
|
+
'X-Shopify-Storefront-Access-Token': c.storefrontAccessToken,
|
|
198
|
+
'Accept': 'application/json',
|
|
199
|
+
'Accept-Language': c.language || 'en',
|
|
200
|
+
},
|
|
201
|
+
body: JSON.stringify({ query, variables: vars !== null && vars !== void 0 ? vars : {} }),
|
|
202
|
+
});
|
|
203
|
+
if (!res.ok) {
|
|
204
|
+
let bodyText = '';
|
|
205
|
+
try {
|
|
206
|
+
bodyText = await res.text();
|
|
207
|
+
}
|
|
208
|
+
catch { /* ignore */ }
|
|
209
|
+
throw new types_1.ShopifyError(`Shopify Storefront API HTTP ${res.status}: ${res.statusText}${bodyText ? ` — ${bodyText.slice(0, 200)}` : ''}`);
|
|
156
210
|
}
|
|
157
|
-
|
|
158
|
-
|
|
211
|
+
// Real responses have text(); some test mocks of fetch only implement json().
|
|
212
|
+
return typeof res.text === 'function' ? res.text() : JSON.stringify(await res.json());
|
|
213
|
+
});
|
|
214
|
+
// Parsed per caller: callers sharing one response each get their own objects.
|
|
215
|
+
let json;
|
|
216
|
+
try {
|
|
217
|
+
json = JSON.parse(text);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
throw new types_1.ShopifyError('Shopify Storefront API returned a response that is not JSON');
|
|
159
221
|
}
|
|
160
|
-
const json = (await res.json());
|
|
161
222
|
if (json.errors && json.errors.length > 0) {
|
|
162
223
|
throw new types_1.ShopifyError(`GraphQL error: ${json.errors.map((e) => e.message).join('; ')}`);
|
|
163
224
|
}
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"collections.d.ts","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAOV,qBAAqB,EAEtB,MAAM,SAAS,CAAC;AAcjB,eAAO,MAAM,WAAW,EAAE,qBAsCzB,CAAC"}
|
package/dist/collections.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.collections = void 0;
|
|
4
4
|
const client_1 = require("./client");
|
|
5
5
|
const products_1 = require("./products");
|
|
6
|
+
const productStore_1 = require("./productStore");
|
|
6
7
|
const queries_1 = require("./queries");
|
|
7
8
|
exports.collections = {
|
|
8
9
|
async list(opts) {
|
|
@@ -13,11 +14,11 @@ exports.collections = {
|
|
|
13
14
|
query: opts === null || opts === void 0 ? void 0 : opts.query,
|
|
14
15
|
sortKey: opts === null || opts === void 0 ? void 0 : opts.sortKey,
|
|
15
16
|
reverse: (_b = opts === null || opts === void 0 ? void 0 : opts.reverse) !== null && _b !== void 0 ? _b : false,
|
|
16
|
-
});
|
|
17
|
+
}, { imageTransform: opts === null || opts === void 0 ? void 0 : opts.imageTransform });
|
|
17
18
|
return data.collections;
|
|
18
19
|
},
|
|
19
|
-
async byHandle(handle) {
|
|
20
|
-
const data = await (0, client_1.request)(queries_1.COLLECTION_BY_HANDLE_QUERY, { handle });
|
|
20
|
+
async byHandle(handle, opts) {
|
|
21
|
+
const data = await (0, client_1.request)(queries_1.COLLECTION_BY_HANDLE_QUERY, { handle }, { imageTransform: opts === null || opts === void 0 ? void 0 : opts.imageTransform });
|
|
21
22
|
return data.collection;
|
|
22
23
|
},
|
|
23
24
|
async products(handle, opts) {
|
|
@@ -29,12 +30,14 @@ exports.collections = {
|
|
|
29
30
|
sortKey: opts === null || opts === void 0 ? void 0 : opts.sortKey,
|
|
30
31
|
reverse: (_b = opts === null || opts === void 0 ? void 0 : opts.reverse) !== null && _b !== void 0 ? _b : false,
|
|
31
32
|
filters: opts === null || opts === void 0 ? void 0 : opts.filters,
|
|
32
|
-
});
|
|
33
|
+
}, { fresh: opts === null || opts === void 0 ? void 0 : opts.fresh, imageTransform: opts === null || opts === void 0 ? void 0 : opts.imageTransform });
|
|
33
34
|
if (!data.collection) {
|
|
34
35
|
return { nodes: [], pageInfo: { hasNextPage: false, hasPreviousPage: false, startCursor: null, endCursor: null }, filters: [] };
|
|
35
36
|
}
|
|
37
|
+
const nodes = data.collection.products.nodes.map(products_1.normalizeProduct);
|
|
38
|
+
(0, productStore_1.rememberProducts)(nodes, 'base');
|
|
36
39
|
return {
|
|
37
|
-
nodes
|
|
40
|
+
nodes,
|
|
38
41
|
pageInfo: data.collection.products.pageInfo,
|
|
39
42
|
filters: (_c = data.collection.products.filters) !== null && _c !== void 0 ? _c : [],
|
|
40
43
|
collection: { handle: data.collection.handle, title: data.collection.title },
|