shop-client 3.9.1 → 3.10.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.
@@ -9,8 +9,8 @@ import {
9
9
  htmlToMarkdown,
10
10
  mergeWithLLM,
11
11
  pruneBreakdownForSignals
12
- } from "../chunk-VPPCOJC3.js";
13
- import "../chunk-2MF53V33.js";
12
+ } from "../chunk-GNIBTUEK.mjs";
13
+ import "../chunk-D5MTUWFO.mjs";
14
14
  export {
15
15
  classifyProduct,
16
16
  determineStoreType,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createCheckoutOperations
3
- } from "./chunk-RR6YTQWP.js";
3
+ } from "./chunk-W4SF6W2P.mjs";
4
4
  export {
5
5
  createCheckoutOperations
6
6
  };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  rateLimitedFetch
3
- } from "./chunk-2MF53V33.js";
3
+ } from "./chunk-D5MTUWFO.mjs";
4
4
  import {
5
5
  formatPrice
6
- } from "./chunk-CN7L3BHG.js";
6
+ } from "./chunk-U3RQRBXZ.mjs";
7
7
 
8
8
  // src/collections.ts
9
9
  import { filter, isNonNullish } from "remeda";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  rateLimitedFetch
3
- } from "./chunk-2MF53V33.js";
3
+ } from "./chunk-D5MTUWFO.mjs";
4
4
  import {
5
5
  formatPrice
6
- } from "./chunk-CN7L3BHG.js";
6
+ } from "./chunk-U3RQRBXZ.mjs";
7
7
 
8
8
  // src/products.ts
9
9
  import { filter, isNonNullish } from "remeda";
@@ -253,7 +253,7 @@ function createProductOperations(baseUrl, storeDomain, fetchProducts, productsDt
253
253
  return null;
254
254
  }
255
255
  const handle = baseProduct.handle;
256
- const { enrichProduct } = await import("./ai/enrich.js");
256
+ const { enrichProduct } = await import("./ai/enrich.mjs");
257
257
  const enriched = await enrichProduct(storeDomain, handle, {
258
258
  apiKey,
259
259
  useGfm: options == null ? void 0 : options.useGfm,
@@ -302,7 +302,7 @@ function createProductOperations(baseUrl, storeDomain, fetchProducts, productsDt
302
302
  productContent = lines.join("\n");
303
303
  } catch {
304
304
  }
305
- const { classifyProduct } = await import("./ai/enrich.js");
305
+ const { classifyProduct } = await import("./ai/enrich.mjs");
306
306
  const classification = await classifyProduct(productContent, {
307
307
  apiKey,
308
308
  model: options == null ? void 0 : options.model
@@ -328,7 +328,7 @@ function createProductOperations(baseUrl, storeDomain, fetchProducts, productsDt
328
328
  price: baseProduct.price,
329
329
  tags: baseProduct.tags
330
330
  };
331
- const { generateSEOContent: generateSEOContentLLM } = await import("./ai/enrich.js");
331
+ const { generateSEOContent: generateSEOContentLLM } = await import("./ai/enrich.mjs");
332
332
  const seo = await generateSEOContentLLM(payload, {
333
333
  apiKey,
334
334
  model: options == null ? void 0 : options.model
@@ -50,7 +50,7 @@ var RateLimiter = class {
50
50
  }
51
51
  }
52
52
  };
53
- var enabled = false;
53
+ var enabled = true;
54
54
  var defaultOptions = {
55
55
  maxRequestsPerInterval: 5,
56
56
  // 5 requests
@@ -149,25 +149,38 @@ function sleep(ms) {
149
149
  return new Promise((resolve) => setTimeout(resolve, ms));
150
150
  }
151
151
  async function rateLimitedFetch(input, init) {
152
- var _a, _b, _c, _d, _e, _f, _g;
152
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
153
+ const timeoutMs = Math.max(0, (_a = init == null ? void 0 : init.timeoutMs) != null ? _a : 0);
154
+ let controller;
155
+ let timer;
156
+ const hasSignal = !!(init == null ? void 0 : init.signal);
157
+ if (timeoutMs > 0 && !hasSignal) {
158
+ controller = new AbortController();
159
+ timer = setTimeout(() => controller == null ? void 0 : controller.abort(), timeoutMs);
160
+ }
161
+ const effInit = {
162
+ ...init,
163
+ signal: hasSignal ? init == null ? void 0 : init.signal : controller == null ? void 0 : controller.signal
164
+ };
153
165
  const klass = init == null ? void 0 : init.rateLimitClass;
154
166
  const byClass = klass ? classLimiters.get(klass) : void 0;
155
167
  const byHost = getHostLimiter(getHost(input));
156
- const eff = enabled ? (_a = byClass != null ? byClass : byHost) != null ? _a : limiter : void 0;
157
- const maxRetries = Math.max(0, (_c = (_b = init == null ? void 0 : init.retry) == null ? void 0 : _b.maxRetries) != null ? _c : 2);
158
- const baseDelayMs = Math.max(0, (_e = (_d = init == null ? void 0 : init.retry) == null ? void 0 : _d.baseDelayMs) != null ? _e : 200);
159
- const retryOnStatuses = (_g = (_f = init == null ? void 0 : init.retry) == null ? void 0 : _f.retryOnStatuses) != null ? _g : [429, 503];
168
+ const eff = enabled ? (_b = byClass != null ? byClass : byHost) != null ? _b : limiter : void 0;
169
+ const maxRetries = Math.max(0, (_d = (_c = init == null ? void 0 : init.retry) == null ? void 0 : _c.maxRetries) != null ? _d : 2);
170
+ const baseDelayMs = Math.max(0, (_f = (_e = init == null ? void 0 : init.retry) == null ? void 0 : _e.baseDelayMs) != null ? _f : 200);
171
+ const retryOnStatuses = (_h = (_g = init == null ? void 0 : init.retry) == null ? void 0 : _g.retryOnStatuses) != null ? _h : [429, 503];
160
172
  let attempt = 0;
161
173
  let lastError = null;
162
174
  let response = null;
163
175
  while (attempt <= maxRetries) {
164
176
  try {
165
177
  if (eff) {
166
- response = await eff.schedule(() => fetch(input, init));
178
+ response = await eff.schedule(() => fetch(input, effInit));
167
179
  } else {
168
- response = await fetch(input, init);
180
+ response = await fetch(input, effInit);
169
181
  }
170
182
  if (!response || response.ok || !retryOnStatuses.includes(response.status)) {
183
+ if (timer) clearTimeout(timer);
171
184
  return response;
172
185
  }
173
186
  } catch (err) {
@@ -175,10 +188,23 @@ async function rateLimitedFetch(input, init) {
175
188
  }
176
189
  attempt += 1;
177
190
  if (attempt > maxRetries) break;
178
- const jitter = Math.floor(Math.random() * 100);
179
- const delay = baseDelayMs * 2 ** (attempt - 1) + jitter;
191
+ let delay = baseDelayMs * 2 ** (attempt - 1) + Math.floor(Math.random() * 100);
192
+ const retryAfter = (_i = response == null ? void 0 : response.headers) == null ? void 0 : _i.get("retry-after");
193
+ if (retryAfter) {
194
+ const asNumber = Number(retryAfter);
195
+ if (!Number.isNaN(asNumber) && asNumber >= 0) {
196
+ delay = Math.max(delay, Math.floor(asNumber * 1e3));
197
+ } else {
198
+ const parsed = Date.parse(retryAfter);
199
+ if (!Number.isNaN(parsed)) {
200
+ const until = parsed - Date.now();
201
+ if (until > 0) delay = Math.max(delay, until);
202
+ }
203
+ }
204
+ }
180
205
  await sleep(delay);
181
206
  }
207
+ if (timer) clearTimeout(timer);
182
208
  if (response) return response;
183
209
  throw lastError != null ? lastError : new Error("rateLimitedFetch failed without response");
184
210
  }
@@ -33,39 +33,31 @@ var COUNTRY_CODES = {
33
33
  "+7": "RU"
34
34
  // Russia
35
35
  };
36
- var CURRENCY_SYMBOLS = {
37
- Rs: "IN",
38
- // India
39
- "\u20B9": "IN",
40
- // India
41
- $: "US",
42
- // United States (primary, though many countries use $)
43
- CA$: "CA",
44
- // Canada
45
- A$: "AU",
46
- // Australia
47
- "\xA3": "GB",
48
- // United Kingdom
49
- "\u20AC": "EU",
50
- // European Union (not a country code, but commonly used)
51
- AED: "AE",
52
- // United Arab Emirates
53
- "\u20A9": "KR",
54
- // South Korea
55
- "\xA5": "JP"
56
- // Japan (primary, though China also uses ¥)
57
- };
58
- var CURRENCY_SYMBOL_TO_CODE = {
59
- Rs: "INR",
60
- "\u20B9": "INR",
61
- $: "USD",
62
- CA$: "CAD",
63
- A$: "AUD",
64
- "\xA3": "GBP",
65
- "\u20AC": "EUR",
66
- AED: "AED",
67
- "\u20A9": "KRW",
68
- "\xA5": "JPY"
36
+ var CURRENCY_JSON_RE = /Shopify\.currency\s*=\s*(\{[^}]*\})/i;
37
+ var CURRENCY_ACTIVE_ASSIGN_RE = /Shopify\.currency\.active\s*=\s*['"]([A-Za-z]{3})['"]/i;
38
+ var SHOPIFY_COUNTRY_RE = /Shopify\.country\s*=\s*['"]([A-Za-z]{2})['"]/i;
39
+ var JSON_LD_RE = /<script[^>]*type=["']application\/ld\+json["'][^>]*>([\s\S]*?)<\/script>/gi;
40
+ var TEL_HREF_RE = /href=["']tel:([^"']+)["']/gi;
41
+ var COUNTRY_NAME_TO_ISO = {
42
+ india: "IN",
43
+ "united states": "US",
44
+ canada: "CA",
45
+ australia: "AU",
46
+ "united kingdom": "GB",
47
+ britain: "GB",
48
+ uk: "GB",
49
+ japan: "JP",
50
+ "south korea": "KR",
51
+ korea: "KR",
52
+ germany: "DE",
53
+ france: "FR",
54
+ italy: "IT",
55
+ spain: "ES",
56
+ brazil: "BR",
57
+ russia: "RU",
58
+ singapore: "SG",
59
+ indonesia: "ID",
60
+ pakistan: "PK"
69
61
  };
70
62
  var CURRENCY_CODE_TO_COUNTRY = {
71
63
  INR: "IN",
@@ -85,56 +77,18 @@ function scoreCountry(countryScores, country, weight, reason) {
85
77
  countryScores[country].score += weight;
86
78
  countryScores[country].reasons.push(reason);
87
79
  }
80
+ function currentConfidence(countryScores) {
81
+ const sorted = Object.entries(countryScores).sort(
82
+ (a, b) => b[1].score - a[1].score
83
+ );
84
+ const best = sorted[0];
85
+ return best ? Math.min(1, best[1].score / 2) : 0;
86
+ }
88
87
  async function detectShopCountry(html) {
89
- var _a, _b;
88
+ var _a, _b, _c;
90
89
  const countryScores = {};
91
90
  let detectedCurrencyCode;
92
- const shopifyFeaturesMatch = html.match(
93
- /<script[^>]+id=["']shopify-features["'][^>]*>([\s\S]*?)<\/script>/
94
- );
95
- if (shopifyFeaturesMatch) {
96
- try {
97
- const json = shopifyFeaturesMatch[1];
98
- if (!json) {
99
- } else {
100
- const data = JSON.parse(json);
101
- if (data.country)
102
- scoreCountry(
103
- countryScores,
104
- data.country,
105
- 1,
106
- "shopify-features.country"
107
- );
108
- if ((_a = data.locale) == null ? void 0 : _a.includes("-")) {
109
- const [, localeCountry] = data.locale.split("-");
110
- if (localeCountry) {
111
- scoreCountry(
112
- countryScores,
113
- localeCountry.toUpperCase(),
114
- 0.7,
115
- "shopify-features.locale"
116
- );
117
- }
118
- }
119
- if (data.moneyFormat) {
120
- for (const symbol in CURRENCY_SYMBOLS) {
121
- if (data.moneyFormat.includes(symbol)) {
122
- const iso = CURRENCY_SYMBOLS[symbol];
123
- if (typeof iso === "string") {
124
- scoreCountry(countryScores, iso, 0.6, "moneyFormat symbol");
125
- }
126
- const code = CURRENCY_SYMBOL_TO_CODE[symbol];
127
- if (!detectedCurrencyCode && typeof code === "string") {
128
- detectedCurrencyCode = code;
129
- }
130
- }
131
- }
132
- }
133
- }
134
- } catch (_error) {
135
- }
136
- }
137
- const currencyJsonMatch = html.match(/Shopify\.currency\s*=\s*(\{[^}]*\})/);
91
+ const currencyJsonMatch = html.match(CURRENCY_JSON_RE);
138
92
  if (currencyJsonMatch) {
139
93
  try {
140
94
  const raw = currencyJsonMatch[1];
@@ -150,9 +104,7 @@ async function detectShopCountry(html) {
150
104
  } catch (_error) {
151
105
  }
152
106
  } else {
153
- const currencyActiveAssignMatch = html.match(
154
- /Shopify\.currency\.active\s*=\s*['"]([A-Za-z]{3})['"]/i
155
- );
107
+ const currencyActiveAssignMatch = html.match(CURRENCY_ACTIVE_ASSIGN_RE);
156
108
  if (currencyActiveAssignMatch) {
157
109
  const captured = currencyActiveAssignMatch[1];
158
110
  const code = typeof captured === "string" ? captured.toUpperCase() : void 0;
@@ -165,9 +117,7 @@ async function detectShopCountry(html) {
165
117
  }
166
118
  }
167
119
  }
168
- const shopifyCountryMatch = html.match(
169
- /Shopify\.country\s*=\s*['"]([A-Za-z]{2})['"]/i
170
- );
120
+ const shopifyCountryMatch = html.match(SHOPIFY_COUNTRY_RE);
171
121
  if (shopifyCountryMatch) {
172
122
  const captured = shopifyCountryMatch[1];
173
123
  const iso = typeof captured === "string" ? captured.toUpperCase() : void 0;
@@ -175,10 +125,34 @@ async function detectShopCountry(html) {
175
125
  scoreCountry(countryScores, iso, 1, "Shopify.country");
176
126
  }
177
127
  }
128
+ if (currentConfidence(countryScores) >= 0.9) {
129
+ const sorted2 = Object.entries(countryScores).sort(
130
+ (a, b) => b[1].score - a[1].score
131
+ );
132
+ const best2 = sorted2[0];
133
+ return {
134
+ country: best2[0],
135
+ confidence: Math.min(1, best2[1].score / 2),
136
+ signals: best2[1].reasons,
137
+ currencyCode: detectedCurrencyCode
138
+ };
139
+ }
140
+ const telMatches = html.matchAll(TEL_HREF_RE);
141
+ for (const m of telMatches) {
142
+ const tel = (_a = m[1]) != null ? _a : "";
143
+ const prefix = (_b = tel.match(/^\+\d{1,3}/)) == null ? void 0 : _b[0];
144
+ if (prefix && COUNTRY_CODES[prefix])
145
+ scoreCountry(
146
+ countryScores,
147
+ COUNTRY_CODES[prefix],
148
+ 0.8,
149
+ `phone prefix ${prefix}`
150
+ );
151
+ }
178
152
  const phones = html.match(/\+\d{1,3}[\s\-()0-9]{5,}/g);
179
153
  if (phones) {
180
154
  for (const phone of phones) {
181
- const prefix = (_b = phone.match(/^\+\d{1,3}/)) == null ? void 0 : _b[0];
155
+ const prefix = (_c = phone.match(/^\+\d{1,3}/)) == null ? void 0 : _c[0];
182
156
  if (prefix && COUNTRY_CODES[prefix])
183
157
  scoreCountry(
184
158
  countryScores,
@@ -188,8 +162,7 @@ async function detectShopCountry(html) {
188
162
  );
189
163
  }
190
164
  }
191
- const jsonLdRegex = /<script[^>]+application\/ld\+json[^>]*>(.*?)<\/script>/g;
192
- let jsonLdMatch = jsonLdRegex.exec(html);
165
+ let jsonLdMatch = JSON_LD_RE.exec(html);
193
166
  while (jsonLdMatch !== null) {
194
167
  try {
195
168
  const json = jsonLdMatch[1];
@@ -220,34 +193,15 @@ async function detectShopCountry(html) {
220
193
  }
221
194
  } catch (_error) {
222
195
  }
223
- jsonLdMatch = jsonLdRegex.exec(html);
196
+ if (currentConfidence(countryScores) >= 0.9)
197
+ break;
198
+ jsonLdMatch = JSON_LD_RE.exec(html);
224
199
  }
225
200
  const footerMatch = html.match(/<footer[^>]*>(.*?)<\/footer>/i);
226
201
  if (footerMatch) {
227
202
  const footerTextGroup = footerMatch[1];
228
203
  const footerText = footerTextGroup ? footerTextGroup.toLowerCase() : "";
229
- const countryNameToISO = {
230
- india: "IN",
231
- "united states": "US",
232
- canada: "CA",
233
- australia: "AU",
234
- "united kingdom": "GB",
235
- britain: "GB",
236
- uk: "GB",
237
- japan: "JP",
238
- "south korea": "KR",
239
- korea: "KR",
240
- germany: "DE",
241
- france: "FR",
242
- italy: "IT",
243
- spain: "ES",
244
- brazil: "BR",
245
- russia: "RU",
246
- singapore: "SG",
247
- indonesia: "ID",
248
- pakistan: "PK"
249
- };
250
- for (const [countryName, isoCode] of Object.entries(countryNameToISO)) {
204
+ for (const [countryName, isoCode] of Object.entries(COUNTRY_NAME_TO_ISO)) {
251
205
  if (footerText.includes(countryName))
252
206
  scoreCountry(countryScores, isoCode, 0.4, "footer mention");
253
207
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  rateLimitedFetch
3
- } from "./chunk-2MF53V33.js";
3
+ } from "./chunk-D5MTUWFO.mjs";
4
4
 
5
5
  // src/ai/enrich.ts
6
6
  import TurndownService from "turndown";
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  rateLimitedFetch
3
- } from "./chunk-2MF53V33.js";
3
+ } from "./chunk-D5MTUWFO.mjs";
4
4
  import {
5
5
  detectShopCountry
6
- } from "./chunk-ROH545KI.js";
6
+ } from "./chunk-G7OCMGA6.mjs";
7
7
  import {
8
8
  extractDomainWithoutSuffix,
9
9
  generateStoreSlug,
10
10
  sanitizeDomain
11
- } from "./chunk-CN7L3BHG.js";
11
+ } from "./chunk-U3RQRBXZ.mjs";
12
12
 
13
13
  // src/client/get-info.ts
14
14
  import { unique } from "remeda";
@@ -0,0 +1,8 @@
1
+ import {
2
+ createCollectionOperations
3
+ } from "./chunk-554O5ED6.mjs";
4
+ import "./chunk-D5MTUWFO.mjs";
5
+ import "./chunk-U3RQRBXZ.mjs";
6
+ export {
7
+ createCollectionOperations
8
+ };
@@ -1,28 +1,28 @@
1
1
  import {
2
2
  createCheckoutOperations
3
- } from "./chunk-RR6YTQWP.js";
3
+ } from "./chunk-W4SF6W2P.mjs";
4
4
  import {
5
5
  createCollectionOperations
6
- } from "./chunk-MOBWPEY4.js";
6
+ } from "./chunk-554O5ED6.mjs";
7
7
  import {
8
8
  createProductOperations
9
- } from "./chunk-CXUCPK6X.js";
9
+ } from "./chunk-CNJRHWIK.mjs";
10
10
  import {
11
11
  createStoreOperations,
12
12
  getInfoForStore
13
- } from "./chunk-V52MFQZE.js";
13
+ } from "./chunk-MSIVKUGN.mjs";
14
14
  import {
15
15
  classifyProduct,
16
16
  determineStoreType,
17
17
  generateSEOContent
18
- } from "./chunk-VPPCOJC3.js";
18
+ } from "./chunk-GNIBTUEK.mjs";
19
19
  import {
20
20
  configureRateLimit,
21
21
  rateLimitedFetch
22
- } from "./chunk-2MF53V33.js";
22
+ } from "./chunk-D5MTUWFO.mjs";
23
23
  import {
24
24
  detectShopCountry
25
- } from "./chunk-ROH545KI.js";
25
+ } from "./chunk-G7OCMGA6.mjs";
26
26
  import {
27
27
  buildVariantOptionsMap,
28
28
  calculateDiscount,
@@ -32,7 +32,7 @@ import {
32
32
  normalizeKey,
33
33
  safeParseDate,
34
34
  sanitizeDomain
35
- } from "./chunk-CN7L3BHG.js";
35
+ } from "./chunk-U3RQRBXZ.mjs";
36
36
 
37
37
  // src/ai/determine-store-type.ts
38
38
  async function determineStoreTypeForStore(args) {
@@ -0,0 +1,8 @@
1
+ import {
2
+ createProductOperations
3
+ } from "./chunk-CNJRHWIK.mjs";
4
+ import "./chunk-D5MTUWFO.mjs";
5
+ import "./chunk-U3RQRBXZ.mjs";
6
+ export {
7
+ createProductOperations
8
+ };
package/dist/store.mjs ADDED
@@ -0,0 +1,9 @@
1
+ import {
2
+ createStoreOperations
3
+ } from "./chunk-MSIVKUGN.mjs";
4
+ import "./chunk-D5MTUWFO.mjs";
5
+ import "./chunk-G7OCMGA6.mjs";
6
+ import "./chunk-U3RQRBXZ.mjs";
7
+ export {
8
+ createStoreOperations
9
+ };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  detectShopCountry
3
- } from "../chunk-ROH545KI.js";
3
+ } from "../chunk-G7OCMGA6.mjs";
4
4
  export {
5
5
  detectShopCountry
6
6
  };
@@ -9,7 +9,7 @@ import {
9
9
  normalizeKey,
10
10
  safeParseDate,
11
11
  sanitizeDomain
12
- } from "../chunk-CN7L3BHG.js";
12
+ } from "../chunk-U3RQRBXZ.mjs";
13
13
  export {
14
14
  buildVariantKey,
15
15
  buildVariantOptionsMap,
@@ -10,6 +10,7 @@ type RateLimitedRequestInit = RequestInit & {
10
10
  baseDelayMs?: number;
11
11
  retryOnStatuses?: number[];
12
12
  };
13
+ timeoutMs?: number;
13
14
  };
14
15
  declare function configureRateLimit(options: Partial<RateLimitOptions & {
15
16
  enabled: boolean;
@@ -2,7 +2,7 @@ import {
2
2
  configureRateLimit,
3
3
  getRateLimitStatus,
4
4
  rateLimitedFetch
5
- } from "../chunk-2MF53V33.js";
5
+ } from "../chunk-D5MTUWFO.mjs";
6
6
  export {
7
7
  configureRateLimit,
8
8
  getRateLimitStatus,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shop-client",
3
- "version": "3.9.1",
3
+ "version": "3.10.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.mjs",
@@ -1,8 +0,0 @@
1
- import {
2
- createCollectionOperations
3
- } from "./chunk-MOBWPEY4.js";
4
- import "./chunk-2MF53V33.js";
5
- import "./chunk-CN7L3BHG.js";
6
- export {
7
- createCollectionOperations
8
- };
package/dist/products.js DELETED
@@ -1,8 +0,0 @@
1
- import {
2
- createProductOperations
3
- } from "./chunk-CXUCPK6X.js";
4
- import "./chunk-2MF53V33.js";
5
- import "./chunk-CN7L3BHG.js";
6
- export {
7
- createProductOperations
8
- };
package/dist/store.js DELETED
@@ -1,9 +0,0 @@
1
- import {
2
- createStoreOperations
3
- } from "./chunk-V52MFQZE.js";
4
- import "./chunk-2MF53V33.js";
5
- import "./chunk-ROH545KI.js";
6
- import "./chunk-CN7L3BHG.js";
7
- export {
8
- createStoreOperations
9
- };
File without changes
File without changes