@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.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, EventEmitter, useSafeExternalStore } from '@weaverse/react';
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
- var __defProp = Object.defineProperty;
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 = [main_exports];
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 extends EventEmitter {
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
- super();
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(this.settings);
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
- let data = useRouteLoaderData("root");
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 { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
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.weaverseStudio?.init(weaverse);
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.weaverseStudio?.refreshStudio(params);
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?.message || "An unexpected error occurred" })
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 = !(this.configs.isDesignMode || this.isLocalhost())) {
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