@weaverse/hydrogen 5.15.0 → 5.15.2
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.js +106 -18
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +106 -18
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.mjs
CHANGED
|
@@ -529,8 +529,8 @@ function getQueriesFromSearch(search) {
|
|
|
529
529
|
}
|
|
530
530
|
return queries;
|
|
531
531
|
}
|
|
532
|
-
function
|
|
533
|
-
if (!
|
|
532
|
+
function normalizeRequestInfo(params, browserLocation = getBrowserLocation()) {
|
|
533
|
+
if (!browserLocation) {
|
|
534
534
|
return params;
|
|
535
535
|
}
|
|
536
536
|
let { pathname, search } = browserLocation;
|
|
@@ -547,6 +547,53 @@ function normalizeDesignModeRequestInfo(params, browserLocation = getBrowserLoca
|
|
|
547
547
|
}
|
|
548
548
|
};
|
|
549
549
|
}
|
|
550
|
+
|
|
551
|
+
// src/utils/sync-reused-instance.ts
|
|
552
|
+
function syncReusedInstance(weaverse, params) {
|
|
553
|
+
weaverse.requestInfo = params.requestInfo;
|
|
554
|
+
weaverse.internal = params.internal;
|
|
555
|
+
let dataChanged = JSON.stringify(weaverse.data) !== JSON.stringify(params.data);
|
|
556
|
+
let contextChanged = JSON.stringify(weaverse.dataContext ?? null) !== JSON.stringify(params.dataContext ?? null);
|
|
557
|
+
if (contextChanged) {
|
|
558
|
+
weaverse.dataContext = params.dataContext ?? null;
|
|
559
|
+
}
|
|
560
|
+
if (dataChanged) {
|
|
561
|
+
weaverse.setProjectData(params.data);
|
|
562
|
+
} else if (contextChanged) {
|
|
563
|
+
for (const { id } of params.data?.items || []) {
|
|
564
|
+
weaverse.itemInstances.get(id)?.setData({});
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
if (dataChanged || contextChanged) {
|
|
568
|
+
weaverse.triggerUpdate();
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// src/utils/pixel.ts
|
|
573
|
+
var currentNavigationKey = null;
|
|
574
|
+
var firedPageIds = /* @__PURE__ */ new Set();
|
|
575
|
+
var mountedInstances = 0;
|
|
576
|
+
function shouldFirePixel(navigationKey, pageId) {
|
|
577
|
+
if (navigationKey !== currentNavigationKey) {
|
|
578
|
+
currentNavigationKey = navigationKey;
|
|
579
|
+
firedPageIds.clear();
|
|
580
|
+
}
|
|
581
|
+
if (firedPageIds.has(pageId)) {
|
|
582
|
+
return false;
|
|
583
|
+
}
|
|
584
|
+
firedPageIds.add(pageId);
|
|
585
|
+
return true;
|
|
586
|
+
}
|
|
587
|
+
function registerPixelInstance() {
|
|
588
|
+
mountedInstances += 1;
|
|
589
|
+
return () => {
|
|
590
|
+
mountedInstances -= 1;
|
|
591
|
+
if (mountedInstances === 0) {
|
|
592
|
+
currentNavigationKey = null;
|
|
593
|
+
firedPageIds.clear();
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
}
|
|
550
597
|
var ThemeSettingsStore = class {
|
|
551
598
|
settings = {};
|
|
552
599
|
schema;
|
|
@@ -651,6 +698,24 @@ function useThemeSettingsStore() {
|
|
|
651
698
|
}
|
|
652
699
|
|
|
653
700
|
// src/utils/use-studio.ts
|
|
701
|
+
var STUDIO_READY_POLL_MS = 50;
|
|
702
|
+
var STUDIO_READY_TIMEOUT_MS = 5e3;
|
|
703
|
+
function waitForStudio() {
|
|
704
|
+
return new Promise((resolve) => {
|
|
705
|
+
let startedAt = Date.now();
|
|
706
|
+
function check() {
|
|
707
|
+
if (hasWeaverseStudio(window)) {
|
|
708
|
+
return resolve(window.weaverseStudio);
|
|
709
|
+
}
|
|
710
|
+
if (Date.now() - startedAt >= STUDIO_READY_TIMEOUT_MS) {
|
|
711
|
+
console.warn("[Weaverse] Studio script did not initialize in time");
|
|
712
|
+
return resolve(null);
|
|
713
|
+
}
|
|
714
|
+
setTimeout(check, STUDIO_READY_POLL_MS);
|
|
715
|
+
}
|
|
716
|
+
check();
|
|
717
|
+
});
|
|
718
|
+
}
|
|
654
719
|
function useStudio(weaverse) {
|
|
655
720
|
let { revalidate } = useRevalidator();
|
|
656
721
|
let navigation = useNavigation();
|
|
@@ -680,11 +745,7 @@ function useStudio(weaverse) {
|
|
|
680
745
|
themeTextStore
|
|
681
746
|
};
|
|
682
747
|
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
683
|
-
loadScript(studioSrc).then(() =>
|
|
684
|
-
if (hasWeaverseStudio(window)) {
|
|
685
|
-
window.weaverseStudio.init(weaverse);
|
|
686
|
-
}
|
|
687
|
-
}).catch(console.error);
|
|
748
|
+
loadScript(studioSrc).then(waitForStudio).then((studio) => studio?.init(weaverse)).catch(console.error);
|
|
688
749
|
}
|
|
689
750
|
}
|
|
690
751
|
}, [pathname, search, navigation.state]);
|
|
@@ -692,13 +753,18 @@ function useStudio(weaverse) {
|
|
|
692
753
|
}
|
|
693
754
|
function usePixel(context) {
|
|
694
755
|
let { projectId, pageId, isDesignMode, weaverseHost } = context;
|
|
756
|
+
let { key: navigationKey } = useLocation();
|
|
695
757
|
useEffect(() => {
|
|
696
758
|
if (!(projectId && pageId) || isDesignMode) {
|
|
697
759
|
return;
|
|
698
760
|
}
|
|
699
|
-
let
|
|
700
|
-
|
|
701
|
-
|
|
761
|
+
let unregister = registerPixelInstance();
|
|
762
|
+
if (shouldFirePixel(navigationKey, pageId)) {
|
|
763
|
+
let img = new Image();
|
|
764
|
+
img.onload = () => img.remove();
|
|
765
|
+
img.src = `${weaverseHost}/api/public/px?projectId=${projectId}&pageId=${pageId}`;
|
|
766
|
+
}
|
|
767
|
+
return unregister;
|
|
702
768
|
}, []);
|
|
703
769
|
}
|
|
704
770
|
var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
@@ -866,19 +932,20 @@ var WeaverseHydrogen = class extends Weaverse {
|
|
|
866
932
|
};
|
|
867
933
|
};
|
|
868
934
|
function createWeaverseInstance(params) {
|
|
869
|
-
const normalizedParams =
|
|
935
|
+
const normalizedParams = normalizeRequestInfo(params);
|
|
870
936
|
if (isBrowser) {
|
|
871
937
|
window.__weaverses = window.__weaverses || {};
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
if (weaverse?.isDesignMode) {
|
|
938
|
+
const existing = window.__weaverses[normalizedParams.pageId];
|
|
939
|
+
const isReused = existing?.requestInfo?.pathname === normalizedParams.requestInfo.pathname && existing?.requestInfo?.search === normalizedParams.requestInfo.search;
|
|
940
|
+
const weaverse = isReused ? existing : new WeaverseHydrogen(normalizedParams);
|
|
941
|
+
window.__weaverses[normalizedParams.pageId] = weaverse;
|
|
942
|
+
if (weaverse.isDesignMode) {
|
|
878
943
|
weaverse.requestInfo = normalizedParams.requestInfo;
|
|
879
944
|
if (hasWeaverseStudio(window)) {
|
|
880
945
|
window.weaverseStudio.refreshStudio(normalizedParams);
|
|
881
946
|
}
|
|
947
|
+
} else if (isReused) {
|
|
948
|
+
syncReusedInstance(weaverse, normalizedParams);
|
|
882
949
|
}
|
|
883
950
|
return weaverse;
|
|
884
951
|
}
|
|
@@ -994,6 +1061,25 @@ function useThemeSettings() {
|
|
|
994
1061
|
);
|
|
995
1062
|
return settings;
|
|
996
1063
|
}
|
|
1064
|
+
|
|
1065
|
+
// src/utils/normalize-page-url.ts
|
|
1066
|
+
var KEPT_PARAM_RE = /^(?:__revisionId|isDesignMode|weaverse)/;
|
|
1067
|
+
function normalizePageUrl(url) {
|
|
1068
|
+
let parsed;
|
|
1069
|
+
try {
|
|
1070
|
+
parsed = new URL(url);
|
|
1071
|
+
} catch {
|
|
1072
|
+
return url;
|
|
1073
|
+
}
|
|
1074
|
+
const kept = [...parsed.searchParams].filter(
|
|
1075
|
+
([key]) => KEPT_PARAM_RE.test(key)
|
|
1076
|
+
);
|
|
1077
|
+
kept.sort(([a], [b]) => a.localeCompare(b));
|
|
1078
|
+
const search = new URLSearchParams(kept).toString();
|
|
1079
|
+
return `${parsed.origin}${parsed.pathname}${search ? `?${search}` : ""}`;
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
// src/weaverse-client.ts
|
|
997
1083
|
var CACHE_DURATIONS = {
|
|
998
1084
|
/** Short browser freshness for content that can change in Builder */
|
|
999
1085
|
SHORT: 60,
|
|
@@ -1661,7 +1747,9 @@ var WeaverseClient = class {
|
|
|
1661
1747
|
projectId: effectiveProjectId,
|
|
1662
1748
|
// Use effective (potentially overridden) projectId
|
|
1663
1749
|
params: pageLoadParams,
|
|
1664
|
-
|
|
1750
|
+
// Stripped to pathname + Weaverse params — tracking params would
|
|
1751
|
+
// fragment the subrequest cache key (see normalizePageUrl).
|
|
1752
|
+
url: normalizePageUrl(request.url)
|
|
1665
1753
|
};
|
|
1666
1754
|
const reqInit = {
|
|
1667
1755
|
method: "POST",
|