@weaverse/hydrogen 5.8.4 → 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.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;
@@ -55,7 +60,7 @@ declare function registerComponent(element: HydrogenElement): void;
55
60
  declare const WeaverseHydrogenRoot: React$1.MemoExoticComponent<({ components, errorComponent: ErrorComponent, }: {
56
61
  components: HydrogenComponent[];
57
62
  errorComponent?: React.FC<{
58
- error: any;
63
+ error: Error | unknown;
59
64
  }>;
60
65
  }) => react_jsx_runtime.JSX.Element>;
61
66
  declare function withWeaverse(Component: ComponentType<any>): (props: JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
@@ -162,7 +167,6 @@ declare class WeaverseClient {
162
167
  * Includes 10-second timeout to prevent hanging requests.
163
168
  */
164
169
  private readonly directFetch;
165
- private isLocalhost;
166
170
  private getApiUrl;
167
171
  fetchWithCache: <T = unknown>(url: string, options?: RequestInit & {
168
172
  strategy?: CachingStrategy;
@@ -182,10 +186,11 @@ interface RouteLoaderArgs extends LoaderFunctionArgs {
182
186
  weaverse: WeaverseClient;
183
187
  };
184
188
  }
189
+ type ComponentDataValue = string | number | boolean | undefined | null;
185
190
  interface HydrogenComponentData extends ElementData {
186
- data?: {
187
- [key: string]: any;
188
- };
191
+ id: string;
192
+ type: string;
193
+ data?: Record<string, ComponentDataValue | Record<string, unknown>>;
189
194
  children?: {
190
195
  id: string;
191
196
  }[];
@@ -564,11 +569,18 @@ type CreateHydrogenSchemaOptions = {
564
569
  };
565
570
  declare global {
566
571
  interface Window {
567
- __weaverse: WeaverseHydrogen;
568
- __weaverses: Record<string, WeaverseHydrogen>;
569
- __weaverseThemeSettingsStore: ThemeSettingsStore;
572
+ __weaverse?: WeaverseHydrogen;
573
+ __weaverses?: Record<string, WeaverseHydrogen>;
574
+ __weaverseThemeSettingsStore?: ThemeSettingsStore;
570
575
  }
571
576
  }
577
+ interface WeaverseStudio {
578
+ init: (weaverse: WeaverseHydrogen) => void;
579
+ refreshStudio: (params: WeaverseHydrogenParams) => void;
580
+ }
581
+ declare function hasWeaverseStudio(window: Window): window is Window & {
582
+ weaverseStudio: WeaverseStudio;
583
+ };
572
584
  declare module '@shopify/remix-oxygen' {
573
585
  interface AppLoadContext {
574
586
  weaverse: WeaverseClient;
@@ -774,4 +786,4 @@ declare const IMAGES_PLACEHOLDERS: {
774
786
  product_18: string;
775
787
  };
776
788
 
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 };
789
+ 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;
@@ -55,7 +60,7 @@ declare function registerComponent(element: HydrogenElement): void;
55
60
  declare const WeaverseHydrogenRoot: React$1.MemoExoticComponent<({ components, errorComponent: ErrorComponent, }: {
56
61
  components: HydrogenComponent[];
57
62
  errorComponent?: React.FC<{
58
- error: any;
63
+ error: Error | unknown;
59
64
  }>;
60
65
  }) => react_jsx_runtime.JSX.Element>;
61
66
  declare function withWeaverse(Component: ComponentType<any>): (props: JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
@@ -162,7 +167,6 @@ declare class WeaverseClient {
162
167
  * Includes 10-second timeout to prevent hanging requests.
163
168
  */
164
169
  private readonly directFetch;
165
- private isLocalhost;
166
170
  private getApiUrl;
167
171
  fetchWithCache: <T = unknown>(url: string, options?: RequestInit & {
168
172
  strategy?: CachingStrategy;
@@ -182,10 +186,11 @@ interface RouteLoaderArgs extends LoaderFunctionArgs {
182
186
  weaverse: WeaverseClient;
183
187
  };
184
188
  }
189
+ type ComponentDataValue = string | number | boolean | undefined | null;
185
190
  interface HydrogenComponentData extends ElementData {
186
- data?: {
187
- [key: string]: any;
188
- };
191
+ id: string;
192
+ type: string;
193
+ data?: Record<string, ComponentDataValue | Record<string, unknown>>;
189
194
  children?: {
190
195
  id: string;
191
196
  }[];
@@ -564,11 +569,18 @@ type CreateHydrogenSchemaOptions = {
564
569
  };
565
570
  declare global {
566
571
  interface Window {
567
- __weaverse: WeaverseHydrogen;
568
- __weaverses: Record<string, WeaverseHydrogen>;
569
- __weaverseThemeSettingsStore: ThemeSettingsStore;
572
+ __weaverse?: WeaverseHydrogen;
573
+ __weaverses?: Record<string, WeaverseHydrogen>;
574
+ __weaverseThemeSettingsStore?: ThemeSettingsStore;
570
575
  }
571
576
  }
577
+ interface WeaverseStudio {
578
+ init: (weaverse: WeaverseHydrogen) => void;
579
+ refreshStudio: (params: WeaverseHydrogenParams) => void;
580
+ }
581
+ declare function hasWeaverseStudio(window: Window): window is Window & {
582
+ weaverseStudio: WeaverseStudio;
583
+ };
572
584
  declare module '@shopify/remix-oxygen' {
573
585
  interface AppLoadContext {
574
586
  weaverse: WeaverseClient;
@@ -774,4 +786,4 @@ declare const IMAGES_PLACEHOLDERS: {
774
786
  product_18: string;
775
787
  };
776
788
 
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 };
789
+ 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();
@@ -292,13 +289,15 @@ function getPreviewData(type, components, weaverseHost) {
292
289
  }
293
290
  };
294
291
  }
295
- var ThemeSettingsStore = class extends react.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 react.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 (react.isBrowser && window.__weaverseThemeSettingsStore === this) {
356
+ window.__weaverseThemeSettingsStore = void 0;
357
+ }
358
+ };
318
359
  };
319
360
  function useThemeSettingsStore() {
320
- let data = reactRouter.useRouteLoaderData("root");
361
+ const data = reactRouter.useRouteLoaderData("root");
321
362
  if (react.isBrowser && window.__weaverseThemeSettingsStore) {
322
363
  return window.__weaverseThemeSettingsStore;
323
364
  }
@@ -332,9 +373,12 @@ function useStudio(weaverse) {
332
373
  let navigate = reactRouter.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
  react$1.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
  react.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
  react.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 react.WeaverseItemStore {
381
427
  };
382
428
  react.Weaverse.ItemConstructor = WeaverseHydrogenItem;
383
429
  var WeaverseHydrogen = class extends react.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 = react$1.memo(
461
508
  ({
462
509
  components,
463
- errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error?.message || "An unexpected error occurred" })
510
+ errorComponent: ErrorComponent = ({ error }) => /* @__PURE__ */ jsxRuntime.jsx("div", { children: error instanceof Error ? error.message : "An unexpected error occurred" })
464
511
  }) => {
465
512
  const matches = reactRouter.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}`;
@@ -1207,6 +1249,7 @@ exports.getRequestQueries = getRequestQueries;
1207
1249
  exports.getSelectedProductOptions = getSelectedProductOptions;
1208
1250
  exports.getWeaverseConfigs = getWeaverseConfigs;
1209
1251
  exports.hasError = hasError;
1252
+ exports.hasWeaverseStudio = hasWeaverseStudio;
1210
1253
  exports.isFetchProjectPayload = isFetchProjectPayload;
1211
1254
  exports.isProjectIdFunction = isProjectIdFunction;
1212
1255
  exports.isThemeSettingsResponse = isThemeSettingsResponse;