@weaverse/hydrogen 5.8.3 → 5.8.5

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();
@@ -292,13 +289,15 @@ function getPreviewData(type, components, weaverseHost) {
292
289
  }
293
290
  };
294
291
  }
295
- var ThemeSettingsStore = class extends EventEmitter {
292
+ var ThemeSettingsStore = class {
296
293
  settings = {};
297
294
  schema;
298
295
  publicEnv;
296
+ listeners = /* @__PURE__ */ new Set();
297
+ MAX_LISTENERS = 100;
298
+ isDestroyed = false;
299
299
  constructor(data) {
300
- super();
301
- let { theme, schema: schema2, publicEnv } = data || {};
300
+ const { theme, schema: schema2, publicEnv } = data || {};
302
301
  this.settings = { ...theme };
303
302
  this.schema = schema2;
304
303
  this.publicEnv = publicEnv;
@@ -307,17 +306,59 @@ var ThemeSettingsStore = class extends EventEmitter {
307
306
  }
308
307
  }
309
308
  updateThemeSettings = (newSettings) => {
309
+ if (this.isDestroyed) {
310
+ console.warn("ThemeSettingsStore: Cannot update destroyed store");
311
+ return;
312
+ }
310
313
  this.settings = {
311
314
  ...this.settings,
312
315
  ...newSettings
313
316
  };
314
- this.emit(this.settings);
317
+ this.emit();
315
318
  };
316
319
  getSnapshot = () => this.settings;
317
320
  getServerSnapshot = () => this.settings;
321
+ subscribe = (callback) => {
322
+ if (this.isDestroyed) {
323
+ console.warn("ThemeSettingsStore: Cannot subscribe to destroyed store");
324
+ return () => {
325
+ };
326
+ }
327
+ if (this.listeners.size >= this.MAX_LISTENERS) {
328
+ console.warn(
329
+ `ThemeSettingsStore: Maximum listeners (${this.MAX_LISTENERS}) exceeded. Possible memory leak detected.`
330
+ );
331
+ return () => {
332
+ };
333
+ }
334
+ this.listeners.add(callback);
335
+ return () => {
336
+ this.listeners.delete(callback);
337
+ };
338
+ };
339
+ emit = () => {
340
+ if (this.isDestroyed) return;
341
+ const currentListeners = Array.from(this.listeners);
342
+ for (const listener of currentListeners) {
343
+ try {
344
+ listener();
345
+ } catch (error) {
346
+ console.error("ThemeSettingsStore: Listener error", error);
347
+ }
348
+ }
349
+ };
350
+ // Method to properly clean up the store
351
+ destroy = () => {
352
+ if (this.isDestroyed) return;
353
+ this.listeners.clear();
354
+ this.isDestroyed = true;
355
+ if (isBrowser && window.__weaverseThemeSettingsStore === this) {
356
+ window.__weaverseThemeSettingsStore = void 0;
357
+ }
358
+ };
318
359
  };
319
360
  function useThemeSettingsStore() {
320
- let data = useRouteLoaderData("root");
361
+ const data = useRouteLoaderData("root");
321
362
  if (isBrowser && window.__weaverseThemeSettingsStore) {
322
363
  return window.__weaverseThemeSettingsStore;
323
364
  }
@@ -332,9 +373,12 @@ function useStudio(weaverse) {
332
373
  let navigate = useNavigate();
333
374
  let themeSettingsStore = useThemeSettingsStore();
334
375
  let { isDesignMode, weaverseHost, weaverseVersion, isPreviewMode } = weaverse;
376
+ let searchParams = new URLSearchParams(search);
377
+ let revisionId = searchParams.get("__revisionId");
378
+ let isRevisionPreview = !!revisionId;
335
379
  useEffect(() => {
336
380
  if (navigation.state === "idle") {
337
- if (isPreviewMode) {
381
+ if (isRevisionPreview || isPreviewMode) {
338
382
  let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`;
339
383
  loadScript(previewSrc).catch(console.error);
340
384
  } else if (isDesignMode) {
@@ -346,7 +390,9 @@ function useStudio(weaverse) {
346
390
  };
347
391
  let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`;
348
392
  loadScript(studioSrc).then(() => {
349
- window.weaverseStudio?.init(weaverse);
393
+ if (hasWeaverseStudio(window)) {
394
+ window.weaverseStudio.init(weaverse);
395
+ }
350
396
  }).catch(console.error);
351
397
  }
352
398
  }
@@ -381,7 +427,6 @@ var WeaverseHydrogenItem = class extends WeaverseItemStore {
381
427
  };
382
428
  Weaverse.ItemConstructor = WeaverseHydrogenItem;
383
429
  var WeaverseHydrogen = class extends Weaverse {
384
- platformType = "shopify-hydrogen";
385
430
  pageId;
386
431
  internal;
387
432
  requestInfo;
@@ -421,7 +466,9 @@ function createWeaverseInstance(params) {
421
466
  }
422
467
  if (weaverse?.isDesignMode) {
423
468
  weaverse.requestInfo = params.requestInfo;
424
- window.weaverseStudio?.refreshStudio(params);
469
+ if (hasWeaverseStudio(window)) {
470
+ window.weaverseStudio.refreshStudio(params);
471
+ }
425
472
  }
426
473
  return weaverse;
427
474
  }
@@ -460,7 +507,7 @@ function registerComponent(element) {
460
507
  var WeaverseHydrogenRoot = memo(
461
508
  ({
462
509
  components,
463
- errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" })
510
+ errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsx("div", { children: error instanceof Error ? error.message : "An unexpected error occurred" })
464
511
  }) => {
465
512
  const matches = useMatches();
466
513
  const enhancedDataContext = createWeaverseDataContext(matches);
@@ -849,13 +896,8 @@ var WeaverseClient = class {
849
896
  }
850
897
  }
851
898
  };
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
899
  // Helper method for building API URLs consistently
858
- getApiUrl(endpoint, useProxy = !(this.configs.isDesignMode || this.isLocalhost())) {
900
+ getApiUrl(endpoint, useProxy = !this.configs.isDesignMode) {
859
901
  const { weaverseHost, weaverseApiBase, projectId } = this.configs;
860
902
  if (useProxy) {
861
903
  return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`;
@@ -1032,7 +1074,6 @@ var WeaverseClient = class {
1032
1074
  if (hasError(projectData)) {
1033
1075
  throw new Error(projectData.error);
1034
1076
  }
1035
- console.log("projectData", projectData);
1036
1077
  let page;
1037
1078
  let project;
1038
1079
  let pageAssignment;
@@ -1170,6 +1211,6 @@ var IMAGES_PLACEHOLDERS = {
1170
1211
  product_18: "https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg"
1171
1212
  };
1172
1213
 
1173
- 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 };
1214
+ 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 };
1174
1215
  //# sourceMappingURL=index.mjs.map
1175
1216
  //# sourceMappingURL=index.mjs.map