@weaverse/hydrogen 5.8.4 → 5.8.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.d.mts +27 -12
- package/dist/index.d.ts +27 -12
- package/dist/index.js +84 -31
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +85 -33
- package/dist/index.mjs.map +1 -1
- package/package.json +11 -10
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createWithCache, CacheCustom, getSelectedProductOptions as getSelectedProductOptions$1 } from '@shopify/hydrogen';
|
|
2
|
-
import { Weaverse, WeaverseItemStore, loadScript, WeaverseRoot, isBrowser,
|
|
2
|
+
import { Weaverse, WeaverseItemStore, loadScript, WeaverseRoot, isBrowser, useSafeExternalStore } from '@weaverse/react';
|
|
3
3
|
export { isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
4
4
|
import { createSchema, isValidSchema } from '@weaverse/schema';
|
|
5
5
|
export * from '@weaverse/schema';
|
|
@@ -8,18 +8,7 @@ import { useMatches, Await, useRevalidator, useNavigation, useLocation, useNavig
|
|
|
8
8
|
import { memo, useMemo, Suspense, createContext, useEffect } from 'react';
|
|
9
9
|
import { ErrorBoundary } from 'react-error-boundary';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
var __export = (target, all) => {
|
|
13
|
-
for (var name in all)
|
|
14
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
// src/components/main.tsx
|
|
18
|
-
var main_exports = {};
|
|
19
|
-
__export(main_exports, {
|
|
20
|
-
default: () => main_default,
|
|
21
|
-
schema: () => schema
|
|
22
|
-
});
|
|
11
|
+
// src/index.ts
|
|
23
12
|
function Main(props) {
|
|
24
13
|
let { children, dangerouslySetInnerHTML, ...rest } = props;
|
|
25
14
|
return /* @__PURE__ */ jsx(
|
|
@@ -38,7 +27,12 @@ var schema = createSchema({
|
|
|
38
27
|
});
|
|
39
28
|
|
|
40
29
|
// src/components/index.ts
|
|
41
|
-
var defaultComponents = [
|
|
30
|
+
var defaultComponents = [
|
|
31
|
+
{
|
|
32
|
+
default: main_default,
|
|
33
|
+
schema
|
|
34
|
+
}
|
|
35
|
+
];
|
|
42
36
|
function createFlatDataContext(matches) {
|
|
43
37
|
const context = {};
|
|
44
38
|
for (const match of matches) {
|
|
@@ -92,6 +86,9 @@ function isThemeSettingsResponse(data) {
|
|
|
92
86
|
function isValidHydrogenSchema(schema2) {
|
|
93
87
|
return isValidSchema(schema2);
|
|
94
88
|
}
|
|
89
|
+
function hasWeaverseStudio(window2) {
|
|
90
|
+
return "weaverseStudio" in window2 && typeof window2.weaverseStudio === "object";
|
|
91
|
+
}
|
|
95
92
|
|
|
96
93
|
// src/utils/index.ts
|
|
97
94
|
var warnedTypes = /* @__PURE__ */ new Set();
|
|
@@ -153,6 +150,8 @@ function getWeaverseConfigs(request, env) {
|
|
|
153
150
|
weaverseVersion,
|
|
154
151
|
weaverseApiKey
|
|
155
152
|
} = queries;
|
|
153
|
+
let url = new URL(request.url);
|
|
154
|
+
let isRevisionPreview = url.searchParams.has("__revisionId");
|
|
156
155
|
return {
|
|
157
156
|
projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
|
|
158
157
|
weaverseHost: weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io",
|
|
@@ -161,6 +160,7 @@ function getWeaverseConfigs(request, env) {
|
|
|
161
160
|
weaverseVersion: weaverseVersion || "",
|
|
162
161
|
isDesignMode,
|
|
163
162
|
isPreviewMode,
|
|
163
|
+
isRevisionPreview,
|
|
164
164
|
sectionType: sectionType || "",
|
|
165
165
|
publicEnv: {
|
|
166
166
|
PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || "",
|
|
@@ -292,13 +292,15 @@ function getPreviewData(type, components, weaverseHost) {
|
|
|
292
292
|
}
|
|
293
293
|
};
|
|
294
294
|
}
|
|
295
|
-
var ThemeSettingsStore = class
|
|
295
|
+
var ThemeSettingsStore = class {
|
|
296
296
|
settings = {};
|
|
297
297
|
schema;
|
|
298
298
|
publicEnv;
|
|
299
|
+
listeners = /* @__PURE__ */ new Set();
|
|
300
|
+
MAX_LISTENERS = 100;
|
|
301
|
+
isDestroyed = false;
|
|
299
302
|
constructor(data) {
|
|
300
|
-
|
|
301
|
-
let { theme, schema: schema2, publicEnv } = data || {};
|
|
303
|
+
const { theme, schema: schema2, publicEnv } = data || {};
|
|
302
304
|
this.settings = { ...theme };
|
|
303
305
|
this.schema = schema2;
|
|
304
306
|
this.publicEnv = publicEnv;
|
|
@@ -307,17 +309,59 @@ var ThemeSettingsStore = class extends EventEmitter {
|
|
|
307
309
|
}
|
|
308
310
|
}
|
|
309
311
|
updateThemeSettings = (newSettings) => {
|
|
312
|
+
if (this.isDestroyed) {
|
|
313
|
+
console.warn("ThemeSettingsStore: Cannot update destroyed store");
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
310
316
|
this.settings = {
|
|
311
317
|
...this.settings,
|
|
312
318
|
...newSettings
|
|
313
319
|
};
|
|
314
|
-
this.emit(
|
|
320
|
+
this.emit();
|
|
315
321
|
};
|
|
316
322
|
getSnapshot = () => this.settings;
|
|
317
323
|
getServerSnapshot = () => this.settings;
|
|
324
|
+
subscribe = (callback) => {
|
|
325
|
+
if (this.isDestroyed) {
|
|
326
|
+
console.warn("ThemeSettingsStore: Cannot subscribe to destroyed store");
|
|
327
|
+
return () => {
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
if (this.listeners.size >= this.MAX_LISTENERS) {
|
|
331
|
+
console.warn(
|
|
332
|
+
`ThemeSettingsStore: Maximum listeners (${this.MAX_LISTENERS}) exceeded. Possible memory leak detected.`
|
|
333
|
+
);
|
|
334
|
+
return () => {
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
this.listeners.add(callback);
|
|
338
|
+
return () => {
|
|
339
|
+
this.listeners.delete(callback);
|
|
340
|
+
};
|
|
341
|
+
};
|
|
342
|
+
emit = () => {
|
|
343
|
+
if (this.isDestroyed) return;
|
|
344
|
+
const currentListeners = Array.from(this.listeners);
|
|
345
|
+
for (const listener of currentListeners) {
|
|
346
|
+
try {
|
|
347
|
+
listener();
|
|
348
|
+
} catch (error) {
|
|
349
|
+
console.error("ThemeSettingsStore: Listener error", error);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
// Method to properly clean up the store
|
|
354
|
+
destroy = () => {
|
|
355
|
+
if (this.isDestroyed) return;
|
|
356
|
+
this.listeners.clear();
|
|
357
|
+
this.isDestroyed = true;
|
|
358
|
+
if (isBrowser && window.__weaverseThemeSettingsStore === this) {
|
|
359
|
+
window.__weaverseThemeSettingsStore = void 0;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
318
362
|
};
|
|
319
363
|
function useThemeSettingsStore() {
|
|
320
|
-
|
|
364
|
+
const data = useRouteLoaderData("root");
|
|
321
365
|
if (isBrowser && window.__weaverseThemeSettingsStore) {
|
|
322
366
|
return window.__weaverseThemeSettingsStore;
|
|
323
367
|
}
|
|
@@ -331,10 +375,16 @@ function useStudio(weaverse) {
|
|
|
331
375
|
let { pathname, search } = useLocation();
|
|
332
376
|
let navigate = useNavigate();
|
|
333
377
|
let themeSettingsStore = useThemeSettingsStore();
|
|
334
|
-
let {
|
|
378
|
+
let {
|
|
379
|
+
isDesignMode,
|
|
380
|
+
weaverseHost,
|
|
381
|
+
weaverseVersion,
|
|
382
|
+
isPreviewMode,
|
|
383
|
+
isRevisionPreview
|
|
384
|
+
} = weaverse;
|
|
335
385
|
useEffect(() => {
|
|
336
386
|
if (navigation.state === "idle") {
|
|
337
|
-
if (isPreviewMode) {
|
|
387
|
+
if (isRevisionPreview || isPreviewMode) {
|
|
338
388
|
let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
|
|
339
389
|
loadScript(previewSrc).catch(console.error);
|
|
340
390
|
} else if (isDesignMode) {
|
|
@@ -346,7 +396,9 @@ function useStudio(weaverse) {
|
|
|
346
396
|
};
|
|
347
397
|
let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
|
|
348
398
|
loadScript(studioSrc).then(() => {
|
|
349
|
-
window
|
|
399
|
+
if (hasWeaverseStudio(window)) {
|
|
400
|
+
window.weaverseStudio.init(weaverse);
|
|
401
|
+
}
|
|
350
402
|
}).catch(console.error);
|
|
351
403
|
}
|
|
352
404
|
}
|
|
@@ -381,7 +433,6 @@ var WeaverseHydrogenItem = class extends WeaverseItemStore {
|
|
|
381
433
|
};
|
|
382
434
|
Weaverse.ItemConstructor = WeaverseHydrogenItem;
|
|
383
435
|
var WeaverseHydrogen = class extends Weaverse {
|
|
384
|
-
platformType = "shopify-hydrogen";
|
|
385
436
|
pageId;
|
|
386
437
|
internal;
|
|
387
438
|
requestInfo;
|
|
@@ -392,6 +443,7 @@ var WeaverseHydrogen = class extends Weaverse {
|
|
|
392
443
|
weaverseVersion;
|
|
393
444
|
isDesignMode;
|
|
394
445
|
isPreviewMode;
|
|
446
|
+
isRevisionPreview;
|
|
395
447
|
sectionType;
|
|
396
448
|
static itemInstances;
|
|
397
449
|
static elementRegistry;
|
|
@@ -408,6 +460,7 @@ var WeaverseHydrogen = class extends Weaverse {
|
|
|
408
460
|
this.weaverseVersion = params.weaverseVersion || "";
|
|
409
461
|
this.isDesignMode = params.isDesignMode ?? false;
|
|
410
462
|
this.isPreviewMode = params.isPreviewMode ?? false;
|
|
463
|
+
this.isRevisionPreview = params.isRevisionPreview ?? false;
|
|
411
464
|
this.sectionType = params.sectionType || "";
|
|
412
465
|
}
|
|
413
466
|
};
|
|
@@ -421,7 +474,9 @@ function createWeaverseInstance(params) {
|
|
|
421
474
|
}
|
|
422
475
|
if (weaverse?.isDesignMode) {
|
|
423
476
|
weaverse.requestInfo = params.requestInfo;
|
|
424
|
-
window
|
|
477
|
+
if (hasWeaverseStudio(window)) {
|
|
478
|
+
window.weaverseStudio.refreshStudio(params);
|
|
479
|
+
}
|
|
425
480
|
}
|
|
426
481
|
return weaverse;
|
|
427
482
|
}
|
|
@@ -460,7 +515,7 @@ function registerComponent(element) {
|
|
|
460
515
|
var WeaverseHydrogenRoot = memo(
|
|
461
516
|
({
|
|
462
517
|
components,
|
|
463
|
-
errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsx("div", { children: error
|
|
518
|
+
errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsx("div", { children: error instanceof Error ? error.message : "An unexpected error occurred" })
|
|
464
519
|
}) => {
|
|
465
520
|
const matches = useMatches();
|
|
466
521
|
const enhancedDataContext = createWeaverseDataContext(matches);
|
|
@@ -615,7 +670,9 @@ var WeaverseClient = class {
|
|
|
615
670
|
weaverseApiBase: this.configs.weaverseApiBase,
|
|
616
671
|
weaverseApiKey: this.configs.weaverseApiKey,
|
|
617
672
|
weaverseVersion: this.configs.weaverseVersion,
|
|
618
|
-
isDesignMode: this.configs.isDesignMode
|
|
673
|
+
isDesignMode: this.configs.isDesignMode,
|
|
674
|
+
isPreviewMode: this.configs.isPreviewMode,
|
|
675
|
+
isRevisionPreview: this.configs.isRevisionPreview
|
|
619
676
|
};
|
|
620
677
|
this.basePageRequestBody = {
|
|
621
678
|
isDesignMode: this.configs.isDesignMode,
|
|
@@ -849,13 +906,8 @@ var WeaverseClient = class {
|
|
|
849
906
|
}
|
|
850
907
|
}
|
|
851
908
|
};
|
|
852
|
-
// Helper method to detect if request is from localhost
|
|
853
|
-
isLocalhost() {
|
|
854
|
-
const hostname = this.parsedUrl.hostname;
|
|
855
|
-
return hostname === "localhost" || hostname === "127.0.0.1";
|
|
856
|
-
}
|
|
857
909
|
// Helper method for building API URLs consistently
|
|
858
|
-
getApiUrl(endpoint, useProxy = !
|
|
910
|
+
getApiUrl(endpoint, useProxy = !this.configs.isDesignMode) {
|
|
859
911
|
const { weaverseHost, weaverseApiBase, projectId } = this.configs;
|
|
860
912
|
if (useProxy) {
|
|
861
913
|
return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`;
|
|
@@ -1169,6 +1221,6 @@ var IMAGES_PLACEHOLDERS = {
|
|
|
1169
1221
|
product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
|
|
1170
1222
|
};
|
|
1171
1223
|
|
|
1172
|
-
export { IMAGES_PLACEHOLDERS, WeaverseClient, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useWeaverseDataContext, withWeaverse };
|
|
1224
|
+
export { IMAGES_PLACEHOLDERS, WeaverseClient, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, WeaverseHydrogenRoot, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useWeaverseDataContext, withWeaverse };
|
|
1173
1225
|
//# sourceMappingURL=index.mjs.map
|
|
1174
1226
|
//# sourceMappingURL=index.mjs.map
|