@weaverse/hydrogen 5.14.0 → 5.15.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/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +87 -27
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +87 -27
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -297,7 +297,6 @@ function getWeaverseConfigs(request, env) {
|
|
|
297
297
|
WEAVERSE_PROJECT_ID,
|
|
298
298
|
WEAVERSE_API_KEY,
|
|
299
299
|
WEAVERSE_HOST,
|
|
300
|
-
WEAVERSE_API_BASE,
|
|
301
300
|
PUBLIC_STORE_DOMAIN,
|
|
302
301
|
PUBLIC_STOREFRONT_API_TOKEN
|
|
303
302
|
} = env || {};
|
|
@@ -313,10 +312,11 @@ function getWeaverseConfigs(request, env) {
|
|
|
313
312
|
} = queries;
|
|
314
313
|
let url = new URL(request.url);
|
|
315
314
|
let isRevisionPreview = url.searchParams.has("__revisionId");
|
|
315
|
+
let resolvedWeaverseHost = weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io";
|
|
316
316
|
return {
|
|
317
317
|
projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
|
|
318
|
-
weaverseHost:
|
|
319
|
-
weaverseApiBase:
|
|
318
|
+
weaverseHost: resolvedWeaverseHost,
|
|
319
|
+
weaverseApiBase: resolvedWeaverseHost,
|
|
320
320
|
weaverseApiKey: weaverseApiKey || WEAVERSE_API_KEY || envFromProcess.WEAVERSE_API_KEY || "",
|
|
321
321
|
weaverseVersion: weaverseVersion || "",
|
|
322
322
|
isDesignMode,
|
|
@@ -507,6 +507,46 @@ function hasWeaverseData(value) {
|
|
|
507
507
|
}
|
|
508
508
|
return value.weaverseData !== void 0;
|
|
509
509
|
}
|
|
510
|
+
|
|
511
|
+
// src/utils/studio-request-info.ts
|
|
512
|
+
function getBrowserLocation() {
|
|
513
|
+
if (typeof window === "undefined") {
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
return window.location;
|
|
517
|
+
}
|
|
518
|
+
function getQueriesFromSearch(search) {
|
|
519
|
+
let queries = {};
|
|
520
|
+
let params = new URLSearchParams(search);
|
|
521
|
+
for (let [key, value] of params.entries()) {
|
|
522
|
+
if (value === "true") {
|
|
523
|
+
queries[key] = true;
|
|
524
|
+
} else if (value === "false") {
|
|
525
|
+
queries[key] = false;
|
|
526
|
+
} else {
|
|
527
|
+
queries[key] = value;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
return queries;
|
|
531
|
+
}
|
|
532
|
+
function normalizeDesignModeRequestInfo(params, browserLocation = getBrowserLocation()) {
|
|
533
|
+
if (!(params.isDesignMode && browserLocation)) {
|
|
534
|
+
return params;
|
|
535
|
+
}
|
|
536
|
+
let { pathname, search } = browserLocation;
|
|
537
|
+
if (params.requestInfo.pathname === pathname && params.requestInfo.search === search) {
|
|
538
|
+
return params;
|
|
539
|
+
}
|
|
540
|
+
return {
|
|
541
|
+
...params,
|
|
542
|
+
requestInfo: {
|
|
543
|
+
...params.requestInfo,
|
|
544
|
+
pathname,
|
|
545
|
+
queries: getQueriesFromSearch(search),
|
|
546
|
+
search
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
}
|
|
510
550
|
var ThemeSettingsStore = class {
|
|
511
551
|
settings = {};
|
|
512
552
|
schema;
|
|
@@ -826,22 +866,23 @@ var WeaverseHydrogen = class extends Weaverse {
|
|
|
826
866
|
};
|
|
827
867
|
};
|
|
828
868
|
function createWeaverseInstance(params) {
|
|
869
|
+
const normalizedParams = normalizeDesignModeRequestInfo(params);
|
|
829
870
|
if (isBrowser) {
|
|
830
871
|
window.__weaverses = window.__weaverses || {};
|
|
831
|
-
let weaverse = window.__weaverses[
|
|
832
|
-
if (!weaverse || weaverse?.requestInfo?.pathname !==
|
|
833
|
-
weaverse = new WeaverseHydrogen(
|
|
834
|
-
window.__weaverses[
|
|
872
|
+
let weaverse = window.__weaverses[normalizedParams.pageId];
|
|
873
|
+
if (!weaverse || weaverse?.requestInfo?.pathname !== normalizedParams.requestInfo.pathname || weaverse?.requestInfo?.search !== normalizedParams.requestInfo.search) {
|
|
874
|
+
weaverse = new WeaverseHydrogen(normalizedParams);
|
|
875
|
+
window.__weaverses[normalizedParams.pageId] = weaverse;
|
|
835
876
|
}
|
|
836
877
|
if (weaverse?.isDesignMode) {
|
|
837
|
-
weaverse.requestInfo =
|
|
878
|
+
weaverse.requestInfo = normalizedParams.requestInfo;
|
|
838
879
|
if (hasWeaverseStudio(window)) {
|
|
839
|
-
window.weaverseStudio.refreshStudio(
|
|
880
|
+
window.weaverseStudio.refreshStudio(normalizedParams);
|
|
840
881
|
}
|
|
841
882
|
}
|
|
842
883
|
return weaverse;
|
|
843
884
|
}
|
|
844
|
-
return new WeaverseHydrogen(
|
|
885
|
+
return new WeaverseHydrogen(normalizedParams);
|
|
845
886
|
}
|
|
846
887
|
var StudioBridge = memo(({ context }) => {
|
|
847
888
|
useStudio(context);
|
|
@@ -954,19 +995,34 @@ function useThemeSettings() {
|
|
|
954
995
|
return settings;
|
|
955
996
|
}
|
|
956
997
|
var CACHE_DURATIONS = {
|
|
957
|
-
/** Short
|
|
958
|
-
SHORT:
|
|
959
|
-
/**
|
|
960
|
-
|
|
998
|
+
/** Short browser freshness for content that can change in Builder */
|
|
999
|
+
SHORT: 60,
|
|
1000
|
+
/** Shared cache freshness for anonymous storefront traffic */
|
|
1001
|
+
SHARED_SHORT: 300,
|
|
1002
|
+
/** Long stale window so slow Builder responses do not block storefront rendering */
|
|
1003
|
+
LONG: 86400,
|
|
1004
|
+
/** Extra freshness for sitemap-like index data */
|
|
1005
|
+
STATIC: 3600
|
|
961
1006
|
};
|
|
962
1007
|
var DEFAULT_FETCH_TIMEOUT_MS = 1e4;
|
|
963
1008
|
var API_PATH = "v1";
|
|
964
1009
|
var DEFAULT_CACHE_STRATEGY = {
|
|
965
1010
|
maxAge: CACHE_DURATIONS.SHORT,
|
|
966
|
-
sMaxAge: CACHE_DURATIONS.
|
|
1011
|
+
sMaxAge: CACHE_DURATIONS.SHARED_SHORT,
|
|
967
1012
|
staleWhileRevalidate: CACHE_DURATIONS.LONG,
|
|
968
1013
|
staleIfError: CACHE_DURATIONS.LONG
|
|
969
1014
|
};
|
|
1015
|
+
var SMART_CACHE_STRATEGIES = {
|
|
1016
|
+
project: DEFAULT_CACHE_STRATEGY,
|
|
1017
|
+
"theme-settings": DEFAULT_CACHE_STRATEGY,
|
|
1018
|
+
"merchant-overrides": DEFAULT_CACHE_STRATEGY,
|
|
1019
|
+
"custom-pages": {
|
|
1020
|
+
maxAge: CACHE_DURATIONS.SHORT,
|
|
1021
|
+
sMaxAge: CACHE_DURATIONS.STATIC,
|
|
1022
|
+
staleWhileRevalidate: CACHE_DURATIONS.LONG,
|
|
1023
|
+
staleIfError: CACHE_DURATIONS.LONG
|
|
1024
|
+
}
|
|
1025
|
+
};
|
|
970
1026
|
var WeaverseClient = class {
|
|
971
1027
|
API = API_PATH;
|
|
972
1028
|
basePageConfigs;
|
|
@@ -1286,11 +1342,8 @@ var WeaverseClient = class {
|
|
|
1286
1342
|
}
|
|
1287
1343
|
};
|
|
1288
1344
|
// Helper method for building API URLs consistently
|
|
1289
|
-
getApiUrl(endpoint
|
|
1290
|
-
const { weaverseHost
|
|
1291
|
-
if (useProxy) {
|
|
1292
|
-
return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`;
|
|
1293
|
-
}
|
|
1345
|
+
getApiUrl(endpoint) {
|
|
1346
|
+
const { weaverseHost } = this.configs;
|
|
1294
1347
|
return `${weaverseHost}/api/public/${endpoint}`;
|
|
1295
1348
|
}
|
|
1296
1349
|
/**
|
|
@@ -1311,19 +1364,23 @@ var WeaverseClient = class {
|
|
|
1311
1364
|
* ```
|
|
1312
1365
|
*/
|
|
1313
1366
|
fetchWithCache = async (url, options = {}) => {
|
|
1314
|
-
const strategy = options
|
|
1367
|
+
const { cacheTarget, strategy: strategyOverride, ...fetchOptions } = options;
|
|
1368
|
+
const strategy = strategyOverride || CacheCustom(
|
|
1369
|
+
cacheTarget ? SMART_CACHE_STRATEGIES[cacheTarget] : DEFAULT_CACHE_STRATEGY
|
|
1370
|
+
);
|
|
1315
1371
|
const cacheKey = [
|
|
1316
1372
|
"weaverse-fetch",
|
|
1317
1373
|
url,
|
|
1318
1374
|
options.method || "GET",
|
|
1319
|
-
|
|
1320
|
-
this.configs.projectId
|
|
1375
|
+
fetchOptions.body,
|
|
1376
|
+
this.configs.projectId,
|
|
1377
|
+
cacheTarget || "default"
|
|
1321
1378
|
];
|
|
1322
1379
|
let result;
|
|
1323
|
-
if (this.configs.isDesignMode) {
|
|
1324
|
-
result = await this.directFetch(url,
|
|
1380
|
+
if (this.configs.isDesignMode || this.configs.isRevisionPreview) {
|
|
1381
|
+
result = await this.directFetch(url, fetchOptions);
|
|
1325
1382
|
} else {
|
|
1326
|
-
result = await this.withCache.fetch(url,
|
|
1383
|
+
result = await this.withCache.fetch(url, fetchOptions, {
|
|
1327
1384
|
cacheKey,
|
|
1328
1385
|
cacheStrategy: strategy,
|
|
1329
1386
|
shouldCacheResponse: (response) => {
|
|
@@ -1360,6 +1417,7 @@ var WeaverseClient = class {
|
|
|
1360
1417
|
const [data, merchantOverrides] = await Promise.all([
|
|
1361
1418
|
this.fetchWithCache(url, {
|
|
1362
1419
|
method: "POST",
|
|
1420
|
+
cacheTarget: "theme-settings",
|
|
1363
1421
|
strategy,
|
|
1364
1422
|
body,
|
|
1365
1423
|
headers: {
|
|
@@ -1454,6 +1512,7 @@ var WeaverseClient = class {
|
|
|
1454
1512
|
url,
|
|
1455
1513
|
{
|
|
1456
1514
|
method: "GET",
|
|
1515
|
+
cacheTarget: "merchant-overrides",
|
|
1457
1516
|
strategy,
|
|
1458
1517
|
headers: {
|
|
1459
1518
|
Accept: "application/json"
|
|
@@ -1517,7 +1576,7 @@ var WeaverseClient = class {
|
|
|
1517
1576
|
const qs = params.toString();
|
|
1518
1577
|
const url = `${weaverseHost}/api/public/v1/projects/${projectId}/custom-pages${qs ? `?${qs}` : ""}`;
|
|
1519
1578
|
try {
|
|
1520
|
-
const result = await this.fetchWithCache(url);
|
|
1579
|
+
const result = await this.fetchWithCache(url, { cacheTarget: "custom-pages" });
|
|
1521
1580
|
entries.push(...result.data || []);
|
|
1522
1581
|
if (!result.nextCursor) {
|
|
1523
1582
|
return entries;
|
|
@@ -1617,6 +1676,7 @@ var WeaverseClient = class {
|
|
|
1617
1676
|
const url = this.getApiUrl("project");
|
|
1618
1677
|
const projectData = await this.fetchWithCache(url, {
|
|
1619
1678
|
...reqInit,
|
|
1679
|
+
cacheTarget: "project",
|
|
1620
1680
|
strategy
|
|
1621
1681
|
});
|
|
1622
1682
|
if (hasError(projectData)) {
|