@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 CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
2
- import { EventEmitter, Weaverse, PlatformTypeEnum, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
2
+ import { Weaverse, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
3
3
  export { PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
4
4
  import { PageType, InspectorGroup, SchemaType, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
5
5
  export * from '@weaverse/schema';
@@ -17,14 +17,20 @@ type WeaverseThemeData = {
17
17
  schema?: HydrogenThemeSchema;
18
18
  publicEnv?: PublicEnv;
19
19
  };
20
- declare class ThemeSettingsStore extends EventEmitter {
20
+ declare class ThemeSettingsStore {
21
21
  settings: HydrogenThemeSettings;
22
22
  schema?: HydrogenThemeSchema;
23
23
  publicEnv?: PublicEnv;
24
+ private listeners;
25
+ private readonly MAX_LISTENERS;
26
+ private isDestroyed;
24
27
  constructor(data: WeaverseThemeData);
25
28
  updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
26
29
  getSnapshot: () => HydrogenThemeSettings;
27
30
  getServerSnapshot: () => HydrogenThemeSettings;
31
+ subscribe: (callback: () => void) => () => void;
32
+ private emit;
33
+ destroy: () => void;
28
34
  }
29
35
 
30
36
  declare class WeaverseHydrogenItem extends WeaverseItemStore {
@@ -33,7 +39,6 @@ declare class WeaverseHydrogenItem extends WeaverseItemStore {
33
39
  get Element(): HydrogenElement;
34
40
  }
35
41
  declare class WeaverseHydrogen extends Weaverse {
36
- platformType: PlatformTypeEnum;
37
42
  pageId: string;
38
43
  internal: Partial<WeaverseInternal>;
39
44
  requestInfo: WeaverseLoaderRequestInfo;
@@ -44,6 +49,7 @@ declare class WeaverseHydrogen extends Weaverse {
44
49
  weaverseVersion: string;
45
50
  isDesignMode: boolean;
46
51
  isPreviewMode: boolean;
52
+ isRevisionPreview: boolean;
47
53
  sectionType: string;
48
54
  ItemConstructor: typeof WeaverseHydrogenItem;
49
55
  data: HydrogenPageData;
@@ -55,7 +61,7 @@ declare function registerComponent(element: HydrogenElement): void;
55
61
  declare const WeaverseHydrogenRoot: React$1.MemoExoticComponent<({ components, errorComponent: ErrorComponent, }: {
56
62
  components: HydrogenComponent[];
57
63
  errorComponent?: React.FC<{
58
- error: any;
64
+ error: Error | unknown;
59
65
  }>;
60
66
  }) => react_jsx_runtime.JSX.Element>;
61
67
  declare function withWeaverse(Component: ComponentType<any>): (props: JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
@@ -162,7 +168,6 @@ declare class WeaverseClient {
162
168
  * Includes 10-second timeout to prevent hanging requests.
163
169
  */
164
170
  private readonly directFetch;
165
- private isLocalhost;
166
171
  private getApiUrl;
167
172
  fetchWithCache: <T = unknown>(url: string, options?: RequestInit & {
168
173
  strategy?: CachingStrategy;
@@ -182,10 +187,11 @@ interface RouteLoaderArgs extends LoaderFunctionArgs {
182
187
  weaverse: WeaverseClient;
183
188
  };
184
189
  }
190
+ type ComponentDataValue = string | number | boolean | undefined | null;
185
191
  interface HydrogenComponentData extends ElementData {
186
- data?: {
187
- [key: string]: any;
188
- };
192
+ id: string;
193
+ type: string;
194
+ data?: Record<string, ComponentDataValue | Record<string, unknown>>;
189
195
  children?: {
190
196
  id: string;
191
197
  }[];
@@ -250,6 +256,7 @@ interface WeaverseHydrogenParams extends Omit<WeaverseCoreParams, 'ItemConstruct
250
256
  weaverseVersion?: string;
251
257
  isDesignMode?: boolean;
252
258
  isPreviewMode?: boolean;
259
+ isRevisionPreview?: boolean;
253
260
  sectionType?: string;
254
261
  dataContext?: Record<string, unknown> | null;
255
262
  }
@@ -280,6 +287,7 @@ type WeaverseProjectConfigs = {
280
287
  weaverseVersion?: string;
281
288
  isDesignMode?: boolean;
282
289
  isPreviewMode?: boolean;
290
+ isRevisionPreview?: boolean;
283
291
  sectionType?: string;
284
292
  publicEnv?: PublicEnv;
285
293
  };
@@ -564,11 +572,18 @@ type CreateHydrogenSchemaOptions = {
564
572
  };
565
573
  declare global {
566
574
  interface Window {
567
- __weaverse: WeaverseHydrogen;
568
- __weaverses: Record<string, WeaverseHydrogen>;
569
- __weaverseThemeSettingsStore: ThemeSettingsStore;
575
+ __weaverse?: WeaverseHydrogen;
576
+ __weaverses?: Record<string, WeaverseHydrogen>;
577
+ __weaverseThemeSettingsStore?: ThemeSettingsStore;
570
578
  }
571
579
  }
580
+ interface WeaverseStudio {
581
+ init: (weaverse: WeaverseHydrogen) => void;
582
+ refreshStudio: (params: WeaverseHydrogenParams) => void;
583
+ }
584
+ declare function hasWeaverseStudio(window: Window): window is Window & {
585
+ weaverseStudio: WeaverseStudio;
586
+ };
572
587
  declare module '@shopify/remix-oxygen' {
573
588
  interface AppLoadContext {
574
589
  weaverse: WeaverseClient;
@@ -774,4 +789,4 @@ declare const IMAGES_PLACEHOLDERS: {
774
789
  product_18: string;
775
790
  };
776
791
 
777
- export { type CacheResponseValidator, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useWeaverseDataContext, withWeaverse };
792
+ export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useWeaverseDataContext, withWeaverse };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
2
- import { EventEmitter, Weaverse, PlatformTypeEnum, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
2
+ import { Weaverse, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
3
3
  export { PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
4
4
  import { PageType, InspectorGroup, SchemaType, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
5
5
  export * from '@weaverse/schema';
@@ -17,14 +17,20 @@ type WeaverseThemeData = {
17
17
  schema?: HydrogenThemeSchema;
18
18
  publicEnv?: PublicEnv;
19
19
  };
20
- declare class ThemeSettingsStore extends EventEmitter {
20
+ declare class ThemeSettingsStore {
21
21
  settings: HydrogenThemeSettings;
22
22
  schema?: HydrogenThemeSchema;
23
23
  publicEnv?: PublicEnv;
24
+ private listeners;
25
+ private readonly MAX_LISTENERS;
26
+ private isDestroyed;
24
27
  constructor(data: WeaverseThemeData);
25
28
  updateThemeSettings: (newSettings: HydrogenThemeSettings) => void;
26
29
  getSnapshot: () => HydrogenThemeSettings;
27
30
  getServerSnapshot: () => HydrogenThemeSettings;
31
+ subscribe: (callback: () => void) => () => void;
32
+ private emit;
33
+ destroy: () => void;
28
34
  }
29
35
 
30
36
  declare class WeaverseHydrogenItem extends WeaverseItemStore {
@@ -33,7 +39,6 @@ declare class WeaverseHydrogenItem extends WeaverseItemStore {
33
39
  get Element(): HydrogenElement;
34
40
  }
35
41
  declare class WeaverseHydrogen extends Weaverse {
36
- platformType: PlatformTypeEnum;
37
42
  pageId: string;
38
43
  internal: Partial<WeaverseInternal>;
39
44
  requestInfo: WeaverseLoaderRequestInfo;
@@ -44,6 +49,7 @@ declare class WeaverseHydrogen extends Weaverse {
44
49
  weaverseVersion: string;
45
50
  isDesignMode: boolean;
46
51
  isPreviewMode: boolean;
52
+ isRevisionPreview: boolean;
47
53
  sectionType: string;
48
54
  ItemConstructor: typeof WeaverseHydrogenItem;
49
55
  data: HydrogenPageData;
@@ -55,7 +61,7 @@ declare function registerComponent(element: HydrogenElement): void;
55
61
  declare const WeaverseHydrogenRoot: React$1.MemoExoticComponent<({ components, errorComponent: ErrorComponent, }: {
56
62
  components: HydrogenComponent[];
57
63
  errorComponent?: React.FC<{
58
- error: any;
64
+ error: Error | unknown;
59
65
  }>;
60
66
  }) => react_jsx_runtime.JSX.Element>;
61
67
  declare function withWeaverse(Component: ComponentType<any>): (props: JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
@@ -162,7 +168,6 @@ declare class WeaverseClient {
162
168
  * Includes 10-second timeout to prevent hanging requests.
163
169
  */
164
170
  private readonly directFetch;
165
- private isLocalhost;
166
171
  private getApiUrl;
167
172
  fetchWithCache: <T = unknown>(url: string, options?: RequestInit & {
168
173
  strategy?: CachingStrategy;
@@ -182,10 +187,11 @@ interface RouteLoaderArgs extends LoaderFunctionArgs {
182
187
  weaverse: WeaverseClient;
183
188
  };
184
189
  }
190
+ type ComponentDataValue = string | number | boolean | undefined | null;
185
191
  interface HydrogenComponentData extends ElementData {
186
- data?: {
187
- [key: string]: any;
188
- };
192
+ id: string;
193
+ type: string;
194
+ data?: Record<string, ComponentDataValue | Record<string, unknown>>;
189
195
  children?: {
190
196
  id: string;
191
197
  }[];
@@ -250,6 +256,7 @@ interface WeaverseHydrogenParams extends Omit<WeaverseCoreParams, 'ItemConstruct
250
256
  weaverseVersion?: string;
251
257
  isDesignMode?: boolean;
252
258
  isPreviewMode?: boolean;
259
+ isRevisionPreview?: boolean;
253
260
  sectionType?: string;
254
261
  dataContext?: Record<string, unknown> | null;
255
262
  }
@@ -280,6 +287,7 @@ type WeaverseProjectConfigs = {
280
287
  weaverseVersion?: string;
281
288
  isDesignMode?: boolean;
282
289
  isPreviewMode?: boolean;
290
+ isRevisionPreview?: boolean;
283
291
  sectionType?: string;
284
292
  publicEnv?: PublicEnv;
285
293
  };
@@ -564,11 +572,18 @@ type CreateHydrogenSchemaOptions = {
564
572
  };
565
573
  declare global {
566
574
  interface Window {
567
- __weaverse: WeaverseHydrogen;
568
- __weaverses: Record<string, WeaverseHydrogen>;
569
- __weaverseThemeSettingsStore: ThemeSettingsStore;
575
+ __weaverse?: WeaverseHydrogen;
576
+ __weaverses?: Record<string, WeaverseHydrogen>;
577
+ __weaverseThemeSettingsStore?: ThemeSettingsStore;
570
578
  }
571
579
  }
580
+ interface WeaverseStudio {
581
+ init: (weaverse: WeaverseHydrogen) => void;
582
+ refreshStudio: (params: WeaverseHydrogenParams) => void;
583
+ }
584
+ declare function hasWeaverseStudio(window: Window): window is Window & {
585
+ weaverseStudio: WeaverseStudio;
586
+ };
572
587
  declare module '@shopify/remix-oxygen' {
573
588
  interface AppLoadContext {
574
589
  weaverse: WeaverseClient;
@@ -774,4 +789,4 @@ declare const IMAGES_PLACEHOLDERS: {
774
789
  product_18: string;
775
790
  };
776
791
 
777
- export { type CacheResponseValidator, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useWeaverseDataContext, withWeaverse };
792
+ export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useWeaverseDataContext, withWeaverse };
package/dist/index.js CHANGED
@@ -8,18 +8,7 @@ var reactRouter = require('react-router');
8
8
  var react$1 = require('react');
9
9
  var reactErrorBoundary = require('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__ */ jsxRuntime.jsx(
@@ -38,7 +27,12 @@ var schema = schema$1.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 schema$1.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 react.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 react.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 (react.isBrowser && window.__weaverseThemeSettingsStore === this) {
359
+ window.__weaverseThemeSettingsStore = void 0;
360
+ }
361
+ };
318
362
  };
319
363
  function useThemeSettingsStore() {
320
- let data = reactRouter.useRouteLoaderData("root");
364
+ const data = reactRouter.useRouteLoaderData("root");
321
365
  if (react.isBrowser && window.__weaverseThemeSettingsStore) {
322
366
  return window.__weaverseThemeSettingsStore;
323
367
  }
@@ -331,10 +375,16 @@ function useStudio(weaverse) {
331
375
  let { pathname, search } = reactRouter.useLocation();
332
376
  let navigate = reactRouter.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
  react$1.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
  react.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
  react.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 react.WeaverseItemStore {
381
433
  };
382
434
  react.Weaverse.ItemConstructor = WeaverseHydrogenItem;
383
435
  var WeaverseHydrogen = class extends react.Weaverse {
384
- platformType = "shopify-hydrogen";
385
436
  pageId;
386
437
  internal;
387
438
  requestInfo;
@@ -392,6 +443,7 @@ var WeaverseHydrogen = class extends react.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 react.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 = react$1.memo(
461
516
  ({
462
517
  components,
463
- errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error?.message || "An unexpected error occurred" })
518
+ errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error instanceof Error ? error.message : "An unexpected error occurred" })
464
519
  }) => {
465
520
  const matches = reactRouter.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}`;
@@ -1207,6 +1259,7 @@ exports.getRequestQueries = getRequestQueries;
1207
1259
  exports.getSelectedProductOptions = getSelectedProductOptions;
1208
1260
  exports.getWeaverseConfigs = getWeaverseConfigs;
1209
1261
  exports.hasError = hasError;
1262
+ exports.hasWeaverseStudio = hasWeaverseStudio;
1210
1263
  exports.isFetchProjectPayload = isFetchProjectPayload;
1211
1264
  exports.isProjectIdFunction = isProjectIdFunction;
1212
1265
  exports.isThemeSettingsResponse = isThemeSettingsResponse;