@weaverse/hydrogen 1.1.4 → 1.1.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
@@ -175,17 +175,8 @@ type HydrogenPageData = {
175
175
  type RelativeRoutingType = 'route' | 'path';
176
176
  type To = string | Partial<Path>;
177
177
  type Path = {
178
- /**
179
- * A URL pathname, beginning with a /.
180
- */
181
178
  pathname: string;
182
- /**
183
- * A URL search string, beginning with a ?.
184
- */
185
179
  search: string;
186
- /**
187
- * A URL fragment identifier, beginning with a #.
188
- */
189
180
  hash: string;
190
181
  };
191
182
  type NavigateOptions = {
@@ -197,6 +188,8 @@ type NavigateOptions = {
197
188
  type NavigateFunction = (to: To, options?: NavigateOptions) => void;
198
189
  interface WeaverseHydrogenRootProps {
199
190
  components: HydrogenComponent[];
191
+ countries: Localizations;
192
+ themeSchema: HydrogenThemeSchema;
200
193
  errorComponent: React.FC<{
201
194
  error: {
202
195
  message: string;
@@ -228,12 +221,12 @@ type FetchProjectRequestBody = {
228
221
  countries: Localizations;
229
222
  i18n?: I18nLocale;
230
223
  loaderConfigs?: WeaverseLoaderConfigs;
224
+ isDesignMode?: boolean;
231
225
  };
232
226
  declare global {
233
227
  interface Window {
234
228
  __weaverse: WeaverseHydrogen;
235
229
  __weaverses: WeaverseHydrogen[];
236
- __weaverseThemeConfigs: WeaverseThemeConfigs;
237
230
  }
238
231
  }
239
232
 
@@ -249,20 +242,12 @@ declare function fetchWithServerCache(params: FetchWithServerCacheParams): Promi
249
242
 
250
243
  declare function weaverseLoader(args: LoaderArgs, components: HydrogenComponent[], countries: Localizations, loaderConfigs?: WeaverseLoaderConfigs): Promise<WeaverseLoaderData | null>;
251
244
 
252
- declare function WeaverseStudio(): React.JSX.Element | null;
253
-
254
245
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
255
- /**
256
- * Check if the request is from Weaverse Studio.
257
- * @param request Request
258
- * @returns boolean
259
- */
260
- declare function studioCheck(request: Request): boolean;
261
246
 
262
247
  declare function getSelectedProductOptions(request: Request): _shopify_hydrogen_react_storefront_api_types.SelectedOptionInput[];
263
248
 
264
249
  declare function useThemeSettings(): (Record<string, any> | ((newSettings: any) => void))[];
265
250
 
266
- declare function WeaverseHydrogenRoot({ components, errorComponent: ErrorComponent, }: WeaverseHydrogenRootProps): React.JSX.Element;
251
+ declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, ...themeConfigs }: WeaverseHydrogenRootProps): React.JSX.Element;
267
252
 
268
- export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseStudio, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, studioCheck, useThemeSettings, weaverseLoader };
253
+ export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, useThemeSettings, weaverseLoader };
package/dist/index.d.ts CHANGED
@@ -175,17 +175,8 @@ type HydrogenPageData = {
175
175
  type RelativeRoutingType = 'route' | 'path';
176
176
  type To = string | Partial<Path>;
177
177
  type Path = {
178
- /**
179
- * A URL pathname, beginning with a /.
180
- */
181
178
  pathname: string;
182
- /**
183
- * A URL search string, beginning with a ?.
184
- */
185
179
  search: string;
186
- /**
187
- * A URL fragment identifier, beginning with a #.
188
- */
189
180
  hash: string;
190
181
  };
191
182
  type NavigateOptions = {
@@ -197,6 +188,8 @@ type NavigateOptions = {
197
188
  type NavigateFunction = (to: To, options?: NavigateOptions) => void;
198
189
  interface WeaverseHydrogenRootProps {
199
190
  components: HydrogenComponent[];
191
+ countries: Localizations;
192
+ themeSchema: HydrogenThemeSchema;
200
193
  errorComponent: React.FC<{
201
194
  error: {
202
195
  message: string;
@@ -228,12 +221,12 @@ type FetchProjectRequestBody = {
228
221
  countries: Localizations;
229
222
  i18n?: I18nLocale;
230
223
  loaderConfigs?: WeaverseLoaderConfigs;
224
+ isDesignMode?: boolean;
231
225
  };
232
226
  declare global {
233
227
  interface Window {
234
228
  __weaverse: WeaverseHydrogen;
235
229
  __weaverses: WeaverseHydrogen[];
236
- __weaverseThemeConfigs: WeaverseThemeConfigs;
237
230
  }
238
231
  }
239
232
 
@@ -249,20 +242,12 @@ declare function fetchWithServerCache(params: FetchWithServerCacheParams): Promi
249
242
 
250
243
  declare function weaverseLoader(args: LoaderArgs, components: HydrogenComponent[], countries: Localizations, loaderConfigs?: WeaverseLoaderConfigs): Promise<WeaverseLoaderData | null>;
251
244
 
252
- declare function WeaverseStudio(): React.JSX.Element | null;
253
-
254
245
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
255
- /**
256
- * Check if the request is from Weaverse Studio.
257
- * @param request Request
258
- * @returns boolean
259
- */
260
- declare function studioCheck(request: Request): boolean;
261
246
 
262
247
  declare function getSelectedProductOptions(request: Request): _shopify_hydrogen_react_storefront_api_types.SelectedOptionInput[];
263
248
 
264
249
  declare function useThemeSettings(): (Record<string, any> | ((newSettings: any) => void))[];
265
250
 
266
- declare function WeaverseHydrogenRoot({ components, errorComponent: ErrorComponent, }: WeaverseHydrogenRootProps): React.JSX.Element;
251
+ declare function WeaverseHydrogenRoot({ errorComponent: ErrorComponent, ...themeConfigs }: WeaverseHydrogenRootProps): React.JSX.Element;
267
252
 
268
- export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseStudio, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, studioCheck, useThemeSettings, weaverseLoader };
253
+ export { FetchProjectRequestBody, HydrogenComponent, HydrogenComponentData, HydrogenComponentInstance, HydrogenComponentPresets, HydrogenComponentProps, HydrogenComponentSchema, HydrogenElement, HydrogenPageAssignment, HydrogenPageConfigs, HydrogenPageData, HydrogenProjectConfig, HydrogenProjectType, HydrogenThemeInfo, HydrogenThemeSchema, HydrogenToolbarAction, I18nLocale, InspectorGroup, Locale, Localizations, NavigateFunction, PageType, TODO, WeaverseHydrogen, WeaverseHydrogenRoot, WeaverseHydrogenRootProps, WeaverseInternal, WeaverseLoaderArgs, WeaverseLoaderConfigs, WeaverseLoaderData, WeaverseLoaderRequestInfo, WeaverseStorefrontData, WeaverseThemeConfigs, fetchWithServerCache, getRequestQueries, getSelectedProductOptions, useThemeSettings, weaverseLoader };
package/dist/index.js CHANGED
@@ -32,18 +32,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
32
32
  var src_exports = {};
33
33
  __export(src_exports, {
34
34
  WeaverseHydrogenRoot: () => WeaverseHydrogenRoot,
35
- WeaverseStudio: () => WeaverseStudio,
36
35
  fetchWithServerCache: () => fetchWithServerCache,
37
36
  getRequestQueries: () => getRequestQueries,
38
37
  getSelectedProductOptions: () => getSelectedProductOptions,
39
- studioCheck: () => studioCheck,
40
38
  useThemeSettings: () => useThemeSettings,
41
39
  weaverseLoader: () => weaverseLoader
42
40
  });
43
41
  module.exports = __toCommonJS(src_exports);
44
- var import_react8 = require("@remix-run/react");
45
- var import_react9 = require("@weaverse/react");
46
- var import_react10 = __toESM(require("react"));
42
+ var import_react6 = require("@remix-run/react");
43
+ var import_react7 = require("@weaverse/react");
44
+ var import_react8 = __toESM(require("react"));
47
45
  var import_react_error_boundary = require("react-error-boundary");
48
46
 
49
47
  // src/context.ts
@@ -58,6 +56,8 @@ function createCachedWeaverseInstance(init) {
58
56
  if (!weaverse) {
59
57
  weaverse = new import_react.Weaverse(init);
60
58
  window.__weaverses.push(weaverse);
59
+ } else {
60
+ weaverse.setProjectData(init.data);
61
61
  }
62
62
  return weaverse;
63
63
  }
@@ -72,10 +72,9 @@ function createWeaverseInstance(weaverseData, components) {
72
72
  ...configs,
73
73
  data: page || {},
74
74
  pageId: page?.id,
75
- platformType: "shopify-hydrogen"
75
+ platformType: "shopify-hydrogen",
76
+ internal: { project, pageAssignment }
76
77
  });
77
- weaverse.internal.project = project;
78
- weaverse.internal.pageAssignment = pageAssignment;
79
78
  components.forEach((comp) => {
80
79
  weaverse.registerElement({
81
80
  type: comp?.schema?.type,
@@ -90,22 +89,29 @@ function createWeaverseInstance(weaverseData, components) {
90
89
  var import_react2 = require("@remix-run/react");
91
90
  var import_react3 = require("@weaverse/react");
92
91
  var import_react4 = require("react");
93
- function useStudio(weaverse) {
92
+ function useStudio(weaverse, countries, schema) {
94
93
  let navigate = (0, import_react2.useNavigate)();
95
94
  let revalidator = (0, import_react2.useRevalidator)();
95
+ let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
96
+ let isStudio = import_react3.isIframe && isDesignMode && weaverseHost && weaverseVersion;
96
97
  (0, import_react4.useEffect)(() => {
97
- if (import_react3.isIframe && weaverse.isDesignMode) {
98
+ if (isStudio) {
98
99
  weaverse.internal = {
99
100
  ...weaverse.internal,
100
101
  navigate,
101
- revalidator
102
+ revalidator,
103
+ themeConfigs: { schema, countries }
102
104
  };
103
105
  window.__weaverse = weaverse;
104
106
  if (window.weaverseStudio) {
105
107
  window.weaverseStudio.init(weaverse);
108
+ } else {
109
+ (0, import_react3.loadScript)(
110
+ `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`
111
+ );
106
112
  }
107
113
  }
108
- }, [weaverse]);
114
+ }, [weaverse, revalidator]);
109
115
  }
110
116
 
111
117
  // src/index.tsx
@@ -138,13 +144,6 @@ function getRequestQueries(request) {
138
144
  {}
139
145
  );
140
146
  }
141
- function studioCheck(request) {
142
- let queries = getRequestQueries(request);
143
- let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
144
- return Boolean(
145
- isDesignMode && weaverseProjectId && weaverseHost && weaverseVersion
146
- );
147
- }
148
147
 
149
148
  // src/loader.ts
150
149
  async function weaverseLoader(args, components, countries, loaderConfigs) {
@@ -153,7 +152,7 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
153
152
  let { request, context, params } = args;
154
153
  let queries = getRequestQueries(request);
155
154
  let { WEAVERSE_PROJECT_ID, WEAVERSE_HOST } = context?.env || {};
156
- let { weaverseProjectId, weaverseHost } = queries;
155
+ let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
157
156
  let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
158
157
  weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
159
158
  if (!projectId) {
@@ -163,17 +162,27 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
163
162
  }
164
163
  let i18n = context?.storefront?.i18n;
165
164
  let reqBody = {
165
+ isDesignMode,
166
166
  i18n,
167
167
  countries,
168
168
  projectId,
169
169
  loaderConfigs,
170
170
  url: request.url
171
171
  };
172
- let payload = await fetchWithServerCache({
173
- url: `${weaverseHost}/api/public/project`,
174
- options: { method: "POST", body: JSON.stringify(reqBody) },
175
- context
176
- });
172
+ let url = `${weaverseHost}/api/public/project`;
173
+ let payload;
174
+ if (isDesignMode) {
175
+ payload = await fetch(url, {
176
+ method: "POST",
177
+ body: JSON.stringify(reqBody)
178
+ }).then((res) => res.json());
179
+ } else {
180
+ payload = await fetchWithServerCache({
181
+ url,
182
+ options: { method: "POST", body: JSON.stringify(reqBody) },
183
+ context
184
+ });
185
+ }
177
186
  let { page, project, pageAssignment } = payload;
178
187
  if (!page || !project || !pageAssignment) {
179
188
  throw new Error(
@@ -184,8 +193,8 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
184
193
  let configs = {
185
194
  projectId,
186
195
  weaverseHost,
187
- weaverseVersion: queries.weaverseVersion,
188
- isDesignMode: queries.isDesignMode,
196
+ weaverseVersion,
197
+ isDesignMode,
189
198
  requestInfo: {
190
199
  i18n,
191
200
  params,
@@ -230,40 +239,6 @@ async function withLoaderData(items, components, configs, args) {
230
239
  );
231
240
  }
232
241
 
233
- // src/studio.tsx
234
- var import_react5 = require("@remix-run/react");
235
- var import_react6 = __toESM(require("react"));
236
- function WeaverseStudio() {
237
- let { search } = (0, import_react5.useLocation)();
238
- let { weaverseThemeConfigs } = (0, import_react5.useLoaderData)();
239
- if (weaverseThemeConfigs instanceof Promise) {
240
- let params = new URLSearchParams(search);
241
- let weaverseHost = params.get("weaverseHost");
242
- let weaverseVersion = params.get("weaverseVersion");
243
- return /* @__PURE__ */ import_react6.default.createElement(import_react6.Suspense, null, /* @__PURE__ */ import_react6.default.createElement(import_react5.Await, { resolve: weaverseThemeConfigs }, (configs) => {
244
- if (!configs)
245
- return null;
246
- return /* @__PURE__ */ import_react6.default.createElement(import_react6.default.Fragment, null, /* @__PURE__ */ import_react6.default.createElement(
247
- "script",
248
- {
249
- src: `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`,
250
- async: true
251
- }
252
- ), /* @__PURE__ */ import_react6.default.createElement(
253
- "script",
254
- {
255
- dangerouslySetInnerHTML: {
256
- __html: `window.__weaverseThemeConfigs = ${JSON.stringify(
257
- configs
258
- )}`
259
- }
260
- }
261
- ));
262
- }));
263
- }
264
- return null;
265
- }
266
-
267
242
  // src/hydrogen-wrappers.ts
268
243
  var import_hydrogen2 = require("@shopify/hydrogen");
269
244
  function getSelectedProductOptions(request) {
@@ -274,9 +249,9 @@ function getSelectedProductOptions(request) {
274
249
  }
275
250
 
276
251
  // src/hooks/use-theme-settings.ts
277
- var import_react7 = require("@weaverse/react");
252
+ var import_react5 = require("@weaverse/react");
278
253
  function useThemeSettings() {
279
- let weaverse = (0, import_react7.useWeaverse)();
254
+ let weaverse = (0, import_react5.useWeaverse)();
280
255
  let settings = weaverse?.internal?.project?.config?.theme;
281
256
  let updateSettings = (newSettings) => {
282
257
  weaverse.internal.project.config.theme = Object.assign(
@@ -291,32 +266,26 @@ function useThemeSettings() {
291
266
 
292
267
  // src/index.tsx
293
268
  function WeaverseHydrogenRoot({
294
- components,
295
- errorComponent: ErrorComponent
269
+ errorComponent: ErrorComponent,
270
+ ...themeConfigs
296
271
  }) {
297
- let data = (0, import_react8.useLoaderData)();
298
- let weaverseDataFromLoader = data?.weaverseData;
299
- if (weaverseDataFromLoader) {
300
- if (weaverseDataFromLoader instanceof Promise) {
301
- return /* @__PURE__ */ import_react10.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react10.default.createElement(import_react10.Suspense, null, /* @__PURE__ */ import_react10.default.createElement(import_react8.Await, { resolve: weaverseDataFromLoader }, (resolvedData) => {
302
- return /* @__PURE__ */ import_react10.default.createElement(
272
+ let data = (0, import_react6.useLoaderData)();
273
+ let weaverseData = data?.weaverseData;
274
+ if (weaverseData) {
275
+ if (weaverseData instanceof Promise) {
276
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react8.default.createElement(import_react8.Suspense, null, /* @__PURE__ */ import_react8.default.createElement(import_react6.Await, { resolve: weaverseData }, (resolvedData) => {
277
+ return /* @__PURE__ */ import_react8.default.createElement(
303
278
  RenderWeaverseRoot,
304
279
  {
305
280
  weaverseData: resolvedData,
306
- components
281
+ ...themeConfigs
307
282
  }
308
283
  );
309
284
  })));
310
285
  }
311
- return /* @__PURE__ */ import_react10.default.createElement(
312
- RenderWeaverseRoot,
313
- {
314
- weaverseData: weaverseDataFromLoader,
315
- components
316
- }
317
- );
286
+ return /* @__PURE__ */ import_react8.default.createElement(RenderWeaverseRoot, { weaverseData, ...themeConfigs });
318
287
  }
319
- return /* @__PURE__ */ import_react10.default.createElement(
288
+ return /* @__PURE__ */ import_react8.default.createElement(
320
289
  ErrorComponent,
321
290
  {
322
291
  error: { message: "No Weaverse data return from route loader!" }
@@ -324,19 +293,17 @@ function WeaverseHydrogenRoot({
324
293
  );
325
294
  }
326
295
  function RenderWeaverseRoot(props) {
327
- let { components, weaverseData } = props;
296
+ let { weaverseData, components, countries, themeSchema } = props;
328
297
  let weaverse = createWeaverseInstance(weaverseData, components);
329
- useStudio(weaverse);
330
- return /* @__PURE__ */ import_react10.default.createElement(import_react9.WeaverseRoot, { context: weaverse });
298
+ useStudio(weaverse, countries, themeSchema);
299
+ return /* @__PURE__ */ import_react8.default.createElement(import_react7.WeaverseRoot, { context: weaverse });
331
300
  }
332
301
  // Annotate the CommonJS export names for ESM import in node:
333
302
  0 && (module.exports = {
334
303
  WeaverseHydrogenRoot,
335
- WeaverseStudio,
336
304
  fetchWithServerCache,
337
305
  getRequestQueries,
338
306
  getSelectedProductOptions,
339
- studioCheck,
340
307
  useThemeSettings,
341
308
  weaverseLoader,
342
309
  ...require("@weaverse/react")
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  // src/index.tsx
2
- import { Await as Await2, useLoaderData as useLoaderData2 } from "@remix-run/react";
2
+ import { Await, useLoaderData } from "@remix-run/react";
3
3
  import { WeaverseRoot } from "@weaverse/react";
4
- import React2, { Suspense as Suspense2 } from "react";
4
+ import React, { Suspense } from "react";
5
5
  import { ErrorBoundary } from "react-error-boundary";
6
6
 
7
7
  // src/context.ts
@@ -16,6 +16,8 @@ function createCachedWeaverseInstance(init) {
16
16
  if (!weaverse) {
17
17
  weaverse = new Weaverse(init);
18
18
  window.__weaverses.push(weaverse);
19
+ } else {
20
+ weaverse.setProjectData(init.data);
19
21
  }
20
22
  return weaverse;
21
23
  }
@@ -30,10 +32,9 @@ function createWeaverseInstance(weaverseData, components) {
30
32
  ...configs,
31
33
  data: page || {},
32
34
  pageId: page?.id,
33
- platformType: "shopify-hydrogen"
35
+ platformType: "shopify-hydrogen",
36
+ internal: { project, pageAssignment }
34
37
  });
35
- weaverse.internal.project = project;
36
- weaverse.internal.pageAssignment = pageAssignment;
37
38
  components.forEach((comp) => {
38
39
  weaverse.registerElement({
39
40
  type: comp?.schema?.type,
@@ -46,24 +47,31 @@ function createWeaverseInstance(weaverseData, components) {
46
47
 
47
48
  // src/hooks/use-studio.ts
48
49
  import { useNavigate, useRevalidator } from "@remix-run/react";
49
- import { isIframe } from "@weaverse/react";
50
+ import { isIframe, loadScript } from "@weaverse/react";
50
51
  import { useEffect } from "react";
51
- function useStudio(weaverse) {
52
+ function useStudio(weaverse, countries, schema) {
52
53
  let navigate = useNavigate();
53
54
  let revalidator = useRevalidator();
55
+ let { isDesignMode, weaverseHost, weaverseVersion } = weaverse;
56
+ let isStudio = isIframe && isDesignMode && weaverseHost && weaverseVersion;
54
57
  useEffect(() => {
55
- if (isIframe && weaverse.isDesignMode) {
58
+ if (isStudio) {
56
59
  weaverse.internal = {
57
60
  ...weaverse.internal,
58
61
  navigate,
59
- revalidator
62
+ revalidator,
63
+ themeConfigs: { schema, countries }
60
64
  };
61
65
  window.__weaverse = weaverse;
62
66
  if (window.weaverseStudio) {
63
67
  window.weaverseStudio.init(weaverse);
68
+ } else {
69
+ loadScript(
70
+ `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`
71
+ );
64
72
  }
65
73
  }
66
- }, [weaverse]);
74
+ }, [weaverse, revalidator]);
67
75
  }
68
76
 
69
77
  // src/index.tsx
@@ -96,13 +104,6 @@ function getRequestQueries(request) {
96
104
  {}
97
105
  );
98
106
  }
99
- function studioCheck(request) {
100
- let queries = getRequestQueries(request);
101
- let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
102
- return Boolean(
103
- isDesignMode && weaverseProjectId && weaverseHost && weaverseVersion
104
- );
105
- }
106
107
 
107
108
  // src/loader.ts
108
109
  async function weaverseLoader(args, components, countries, loaderConfigs) {
@@ -111,7 +112,7 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
111
112
  let { request, context, params } = args;
112
113
  let queries = getRequestQueries(request);
113
114
  let { WEAVERSE_PROJECT_ID, WEAVERSE_HOST } = context?.env || {};
114
- let { weaverseProjectId, weaverseHost } = queries;
115
+ let { weaverseProjectId, weaverseHost, isDesignMode, weaverseVersion } = queries;
115
116
  let projectId = weaverseProjectId || WEAVERSE_PROJECT_ID;
116
117
  weaverseHost = weaverseHost || WEAVERSE_HOST || "https://weaverse.io";
117
118
  if (!projectId) {
@@ -121,17 +122,27 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
121
122
  }
122
123
  let i18n = context?.storefront?.i18n;
123
124
  let reqBody = {
125
+ isDesignMode,
124
126
  i18n,
125
127
  countries,
126
128
  projectId,
127
129
  loaderConfigs,
128
130
  url: request.url
129
131
  };
130
- let payload = await fetchWithServerCache({
131
- url: `${weaverseHost}/api/public/project`,
132
- options: { method: "POST", body: JSON.stringify(reqBody) },
133
- context
134
- });
132
+ let url = `${weaverseHost}/api/public/project`;
133
+ let payload;
134
+ if (isDesignMode) {
135
+ payload = await fetch(url, {
136
+ method: "POST",
137
+ body: JSON.stringify(reqBody)
138
+ }).then((res) => res.json());
139
+ } else {
140
+ payload = await fetchWithServerCache({
141
+ url,
142
+ options: { method: "POST", body: JSON.stringify(reqBody) },
143
+ context
144
+ });
145
+ }
135
146
  let { page, project, pageAssignment } = payload;
136
147
  if (!page || !project || !pageAssignment) {
137
148
  throw new Error(
@@ -142,8 +153,8 @@ async function weaverseLoader(args, components, countries, loaderConfigs) {
142
153
  let configs = {
143
154
  projectId,
144
155
  weaverseHost,
145
- weaverseVersion: queries.weaverseVersion,
146
- isDesignMode: queries.isDesignMode,
156
+ weaverseVersion,
157
+ isDesignMode,
147
158
  requestInfo: {
148
159
  i18n,
149
160
  params,
@@ -188,40 +199,6 @@ async function withLoaderData(items, components, configs, args) {
188
199
  );
189
200
  }
190
201
 
191
- // src/studio.tsx
192
- import { Await, useLoaderData, useLocation } from "@remix-run/react";
193
- import React, { Suspense } from "react";
194
- function WeaverseStudio() {
195
- let { search } = useLocation();
196
- let { weaverseThemeConfigs } = useLoaderData();
197
- if (weaverseThemeConfigs instanceof Promise) {
198
- let params = new URLSearchParams(search);
199
- let weaverseHost = params.get("weaverseHost");
200
- let weaverseVersion = params.get("weaverseVersion");
201
- return /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: weaverseThemeConfigs }, (configs) => {
202
- if (!configs)
203
- return null;
204
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
205
- "script",
206
- {
207
- src: `${weaverseHost}/assets/studio/hydrogen/index.js?v=${weaverseVersion}`,
208
- async: true
209
- }
210
- ), /* @__PURE__ */ React.createElement(
211
- "script",
212
- {
213
- dangerouslySetInnerHTML: {
214
- __html: `window.__weaverseThemeConfigs = ${JSON.stringify(
215
- configs
216
- )}`
217
- }
218
- }
219
- ));
220
- }));
221
- }
222
- return null;
223
- }
224
-
225
202
  // src/hydrogen-wrappers.ts
226
203
  import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from "@shopify/hydrogen";
227
204
  function getSelectedProductOptions(request) {
@@ -249,32 +226,26 @@ function useThemeSettings() {
249
226
 
250
227
  // src/index.tsx
251
228
  function WeaverseHydrogenRoot({
252
- components,
253
- errorComponent: ErrorComponent
229
+ errorComponent: ErrorComponent,
230
+ ...themeConfigs
254
231
  }) {
255
- let data = useLoaderData2();
256
- let weaverseDataFromLoader = data?.weaverseData;
257
- if (weaverseDataFromLoader) {
258
- if (weaverseDataFromLoader instanceof Promise) {
259
- return /* @__PURE__ */ React2.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React2.createElement(Suspense2, null, /* @__PURE__ */ React2.createElement(Await2, { resolve: weaverseDataFromLoader }, (resolvedData) => {
260
- return /* @__PURE__ */ React2.createElement(
232
+ let data = useLoaderData();
233
+ let weaverseData = data?.weaverseData;
234
+ if (weaverseData) {
235
+ if (weaverseData instanceof Promise) {
236
+ return /* @__PURE__ */ React.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React.createElement(Suspense, null, /* @__PURE__ */ React.createElement(Await, { resolve: weaverseData }, (resolvedData) => {
237
+ return /* @__PURE__ */ React.createElement(
261
238
  RenderWeaverseRoot,
262
239
  {
263
240
  weaverseData: resolvedData,
264
- components
241
+ ...themeConfigs
265
242
  }
266
243
  );
267
244
  })));
268
245
  }
269
- return /* @__PURE__ */ React2.createElement(
270
- RenderWeaverseRoot,
271
- {
272
- weaverseData: weaverseDataFromLoader,
273
- components
274
- }
275
- );
246
+ return /* @__PURE__ */ React.createElement(RenderWeaverseRoot, { weaverseData, ...themeConfigs });
276
247
  }
277
- return /* @__PURE__ */ React2.createElement(
248
+ return /* @__PURE__ */ React.createElement(
278
249
  ErrorComponent,
279
250
  {
280
251
  error: { message: "No Weaverse data return from route loader!" }
@@ -282,18 +253,16 @@ function WeaverseHydrogenRoot({
282
253
  );
283
254
  }
284
255
  function RenderWeaverseRoot(props) {
285
- let { components, weaverseData } = props;
256
+ let { weaverseData, components, countries, themeSchema } = props;
286
257
  let weaverse = createWeaverseInstance(weaverseData, components);
287
- useStudio(weaverse);
288
- return /* @__PURE__ */ React2.createElement(WeaverseRoot, { context: weaverse });
258
+ useStudio(weaverse, countries, themeSchema);
259
+ return /* @__PURE__ */ React.createElement(WeaverseRoot, { context: weaverse });
289
260
  }
290
261
  export {
291
262
  WeaverseHydrogenRoot,
292
- WeaverseStudio,
293
263
  fetchWithServerCache,
294
264
  getRequestQueries,
295
265
  getSelectedProductOptions,
296
- studioCheck,
297
266
  useThemeSettings,
298
267
  weaverseLoader
299
268
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.4",
2
+ "version": "1.1.6",
3
3
  "license": "MIT",
4
4
  "main": "dist/index.js",
5
5
  "typings": "dist/index.d.ts",
@@ -32,12 +32,12 @@
32
32
  "name": "@weaverse/hydrogen",
33
33
  "author": "Weaverse Team",
34
34
  "dependencies": {
35
- "@remix-run/react": "1.19.1",
36
- "@shopify/hydrogen": "2023.7.1",
37
- "@weaverse/react": "1.1.4",
38
- "react-error-boundary": "^4.0.10"
35
+ "@remix-run/react": "1.19.3",
36
+ "@shopify/hydrogen": "2023.7.2",
37
+ "@weaverse/react": "1.1.6",
38
+ "react-error-boundary": "^4.0.11"
39
39
  },
40
40
  "devDependencies": {
41
- "@shopify/remix-oxygen": "^1.1.2"
41
+ "@shopify/remix-oxygen": "^1.1.3"
42
42
  }
43
- }
43
+ }