@weaverse/hydrogen 3.2.5 → 3.2.7

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
@@ -4,7 +4,9 @@ import { NavigateFunction } from '@remix-run/react';
4
4
  import { createWithCache, I18nBase, Storefront } from '@shopify/hydrogen';
5
5
  import { LanguageCode, CountryCode, CurrencyCode, SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
6
6
  import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
7
- import React, { ForwardRefExoticComponent } from 'react';
7
+ import * as react from 'react';
8
+ import { ForwardRefExoticComponent } from 'react';
9
+ import * as react_jsx_runtime from 'react/jsx-runtime';
8
10
 
9
11
  declare let STORE_PAGES: {
10
12
  INDEX: string;
@@ -20,7 +22,7 @@ declare let STORE_PAGES: {
20
22
 
21
23
  declare class ThemeSettingsStore {
22
24
  settings: HydrogenThemeSettings;
23
- listeners: (() => void)[];
25
+ listeners: Set<() => void>;
24
26
  countries?: Localizations;
25
27
  schema?: HydrogenThemeSchema;
26
28
  publicEnv?: PublicEnv;
@@ -317,8 +319,8 @@ declare global {
317
319
  }
318
320
  }
319
321
 
320
- declare let WeaverseHydrogenRoot: React.MemoExoticComponent<({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps) => React.JSX.Element>;
321
- declare function withWeaverse(Component: React.ComponentType<any>): (props: React.JSX.IntrinsicAttributes) => React.JSX.Element;
322
+ declare let WeaverseHydrogenRoot: react.MemoExoticComponent<({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps) => react_jsx_runtime.JSX.Element>;
323
+ declare function withWeaverse(Component: React.ComponentType<any>): (props: React.JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
322
324
 
323
325
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
324
326
  declare function getWeaverseConfigs(request: Request, env: HydrogenThemeEnv): WeaverseProjectConfigs;
package/dist/index.d.ts CHANGED
@@ -4,7 +4,9 @@ import { NavigateFunction } from '@remix-run/react';
4
4
  import { createWithCache, I18nBase, Storefront } from '@shopify/hydrogen';
5
5
  import { LanguageCode, CountryCode, CurrencyCode, SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
6
6
  import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
7
- import React, { ForwardRefExoticComponent } from 'react';
7
+ import * as react from 'react';
8
+ import { ForwardRefExoticComponent } from 'react';
9
+ import * as react_jsx_runtime from 'react/jsx-runtime';
8
10
 
9
11
  declare let STORE_PAGES: {
10
12
  INDEX: string;
@@ -20,7 +22,7 @@ declare let STORE_PAGES: {
20
22
 
21
23
  declare class ThemeSettingsStore {
22
24
  settings: HydrogenThemeSettings;
23
- listeners: (() => void)[];
25
+ listeners: Set<() => void>;
24
26
  countries?: Localizations;
25
27
  schema?: HydrogenThemeSchema;
26
28
  publicEnv?: PublicEnv;
@@ -317,8 +319,8 @@ declare global {
317
319
  }
318
320
  }
319
321
 
320
- declare let WeaverseHydrogenRoot: React.MemoExoticComponent<({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps) => React.JSX.Element>;
321
- declare function withWeaverse(Component: React.ComponentType<any>): (props: React.JSX.IntrinsicAttributes) => React.JSX.Element;
322
+ declare let WeaverseHydrogenRoot: react.MemoExoticComponent<({ errorComponent: ErrorComponent, components, }: WeaverseHydrogenRootProps) => react_jsx_runtime.JSX.Element>;
323
+ declare function withWeaverse(Component: React.ComponentType<any>): (props: React.JSX.IntrinsicAttributes) => react_jsx_runtime.JSX.Element;
322
324
 
323
325
  declare function getRequestQueries<T = Record<string, string | boolean>>(request: Request): T;
324
326
  declare function getWeaverseConfigs(request: Request, env: HydrogenThemeEnv): WeaverseProjectConfigs;
package/dist/index.js CHANGED
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,14 +14,6 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
18
 
29
19
  // src/index.ts
@@ -111,10 +101,9 @@ function resizeShopifyImage(imageURL, size) {
111
101
  try {
112
102
  if (size === "original") {
113
103
  return imageURL;
114
- } else {
115
- let matches = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
116
- return matches[1] + "_" + size + "." + matches[2];
117
104
  }
105
+ let matches = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
106
+ return `${matches[1]}_${size}.${matches[2]}`;
118
107
  } catch (e) {
119
108
  return imageURL;
120
109
  }
@@ -123,7 +112,7 @@ function resizeShopifyImage(imageURL, size) {
123
112
  // src/WeaverseHydrogenRoot.tsx
124
113
  var import_react11 = require("@remix-run/react");
125
114
  var import_react12 = require("@weaverse/react");
126
- var import_react13 = __toESM(require("react"));
115
+ var import_react13 = require("react");
127
116
  var import_react_error_boundary = require("react-error-boundary");
128
117
 
129
118
  // src/Effect.tsx
@@ -140,7 +129,7 @@ var import_react2 = require("@weaverse/react");
140
129
  var import_react3 = require("react");
141
130
  var ThemeSettingsStore = class {
142
131
  settings = {};
143
- listeners = [];
132
+ listeners = /* @__PURE__ */ new Set();
144
133
  countries;
145
134
  schema;
146
135
  publicEnv;
@@ -162,9 +151,9 @@ var ThemeSettingsStore = class {
162
151
  this.emitChange();
163
152
  };
164
153
  subscribe = (listener) => {
165
- this.listeners = [...this.listeners, listener];
154
+ this.listeners.add(listener);
166
155
  return () => {
167
- this.listeners = this.listeners.filter((l) => l !== listener);
156
+ this.listeners.delete(listener);
168
157
  };
169
158
  };
170
159
  getSnapshot = () => {
@@ -238,20 +227,18 @@ __export(main_exports, {
238
227
  default: () => main_default,
239
228
  schema: () => schema
240
229
  });
241
- var import_react8 = __toESM(require("react"));
230
+ var import_react8 = require("react");
231
+ var import_jsx_runtime = require("react/jsx-runtime");
242
232
  var Main = (0, import_react8.forwardRef)((props, ref) => {
243
233
  let { children, dangerouslySetInnerHTML, ...rest } = props;
244
- return (
245
- // eslint-disable-next-line react/no-danger-with-children
246
- /* @__PURE__ */ import_react8.default.createElement(
247
- "div",
248
- {
249
- ref,
250
- ...rest,
251
- children,
252
- dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
253
- }
254
- )
234
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
235
+ "div",
236
+ {
237
+ ref,
238
+ ...rest,
239
+ children,
240
+ dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
241
+ }
255
242
  );
256
243
  });
257
244
  var main_default = Main;
@@ -266,14 +253,14 @@ var defaultComponents = [main_exports];
266
253
 
267
254
  // src/context.ts
268
255
  function registerComponents(components) {
269
- components.forEach((comp) => {
270
- WeaverseHydrogen.registerElement({
271
- type: comp?.schema?.type,
272
- Component: comp?.default,
273
- schema: comp?.schema,
274
- loader: comp?.loader
256
+ for (const comp of components) {
257
+ comp?.schema?.type && WeaverseHydrogen.registerElement({
258
+ type: comp?.schema.type,
259
+ Component: comp.default,
260
+ schema: comp.schema,
261
+ loader: comp.loader
275
262
  });
276
- });
263
+ }
277
264
  }
278
265
  function createCachedWeaverseInstance(params) {
279
266
  if (import_react9.isBrowser) {
@@ -308,6 +295,7 @@ var ThemeSettingsProvider = (0, import_react10.createContext)(
308
295
  ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
309
296
 
310
297
  // src/WeaverseHydrogenRoot.tsx
298
+ var import_jsx_runtime2 = require("react/jsx-runtime");
311
299
  var WeaverseHydrogenRoot = (0, import_react13.memo)(
312
300
  ({
313
301
  errorComponent: ErrorComponent = FallbackError,
@@ -317,11 +305,11 @@ var WeaverseHydrogenRoot = (0, import_react13.memo)(
317
305
  let data = loaderData?.weaverseData;
318
306
  if (data) {
319
307
  if (data instanceof Promise) {
320
- return /* @__PURE__ */ import_react13.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react13.default.createElement(import_react13.Suspense, null, /* @__PURE__ */ import_react13.default.createElement(import_react11.Await, { resolve: data }, (resolvedData) => /* @__PURE__ */ import_react13.default.createElement(RenderRoot, { data: resolvedData, components }))));
308
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react13.Suspense, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react11.Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RenderRoot, { data: resolvedData, components }) }) }) });
321
309
  }
322
- return /* @__PURE__ */ import_react13.default.createElement(RenderRoot, { data, components });
310
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(RenderRoot, { data, components });
323
311
  }
324
- return /* @__PURE__ */ import_react13.default.createElement(
312
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
325
313
  ErrorComponent,
326
314
  {
327
315
  error: { message: "No Weaverse data return from route loader!" }
@@ -332,16 +320,19 @@ var WeaverseHydrogenRoot = (0, import_react13.memo)(
332
320
  function RenderRoot(props) {
333
321
  let { data, components } = props;
334
322
  let weaverse = createWeaverseInstance(data, components);
335
- return /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, /* @__PURE__ */ import_react13.default.createElement(import_react12.WeaverseRoot, { context: weaverse }), /* @__PURE__ */ import_react13.default.createElement(WeaverseEffect, { context: weaverse }));
323
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
324
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react12.WeaverseRoot, { context: weaverse }),
325
+ /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(WeaverseEffect, { context: weaverse })
326
+ ] });
336
327
  }
337
328
  function withWeaverse(Component) {
338
329
  return (props) => {
339
330
  let { settings } = useThemeSettingsStore();
340
- return /* @__PURE__ */ import_react13.default.createElement(ThemeSettingsProvider.Provider, { value: settings }, /* @__PURE__ */ import_react13.default.createElement(Component, { ...props }));
331
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Component, { ...props }) });
341
332
  };
342
333
  }
343
334
  function FallbackError({ error }) {
344
- return /* @__PURE__ */ import_react13.default.createElement("div", null, error?.message || "An unexpected error occurred");
335
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { children: error?.message || "An unexpected error occurred" });
345
336
  }
346
337
 
347
338
  // src/weaverse-client.ts
@@ -398,8 +389,8 @@ var WeaverseClient = class {
398
389
  let cacheKey = [url, options.body];
399
390
  let {
400
391
  strategy = this.storefront.CacheCustom({
401
- maxAge: 2,
402
- sMaxAge: 2,
392
+ maxAge: 1,
393
+ sMaxAge: 1,
403
394
  staleWhileRevalidate: 82800
404
395
  }),
405
396
  ...reqInit
@@ -467,14 +458,14 @@ var WeaverseClient = class {
467
458
  }
468
459
  return data;
469
460
  } catch (e) {
470
- console.error(`\u274C Theme settings load failed.`, e);
461
+ console.error("\u274C Theme settings load failed.", e);
471
462
  return null;
472
463
  }
473
464
  };
474
465
  generateFallbackPage = (message) => {
475
466
  let rootId = crypto.randomUUID();
476
467
  return {
477
- id: "fallback_page_" + Date.now(),
468
+ id: `fallback_page_${Date.now()}`,
478
469
  rootId,
479
470
  name: "Default Page",
480
471
  items: [
@@ -487,68 +478,66 @@ var WeaverseClient = class {
487
478
  };
488
479
  };
489
480
  loadPage = async (params = {}) => {
490
- return new Promise(async (resolve, reject) => {
491
- try {
492
- let { request, storefront, basePageRequestBody, basePageConfigs } = this;
493
- let { projectId, isDesignMode, weaverseHost } = this.configs;
494
- if (!projectId) {
495
- throw new Error("Missing Weaverse projectId!");
496
- }
497
- let { strategy, ...pageLoadParams } = params;
498
- let body = {
499
- ...basePageRequestBody,
500
- params: pageLoadParams,
501
- url: request.url
502
- };
503
- let reqInit = {
504
- method: "POST",
505
- body: JSON.stringify(body)
506
- };
507
- let url = `${weaverseHost}/${this.API}/project`;
508
- let payload;
509
- if (isDesignMode) {
510
- payload = await fetch(url, reqInit).then((res) => res.json());
511
- } else {
512
- payload = await this.fetchWithCache(url, {
513
- ...reqInit,
514
- strategy
515
- });
516
- }
517
- if (payload?.error) {
518
- throw new Error(payload?.error);
519
- }
520
- let { page, project, pageAssignment } = payload;
521
- if (!project) {
522
- throw new Error(`Weaverse project not found. Id: ${projectId}`);
523
- }
524
- if (!page) {
525
- page = this.generateFallbackPage(`Please add new section to start.`);
526
- }
527
- if (page?.items) {
528
- let items = page.items;
529
- page.items = await Promise.all(items.map(this.execComponentLoader));
530
- }
531
- let data = {
532
- page,
533
- project,
534
- pageAssignment,
535
- configs: {
536
- ...basePageConfigs,
537
- requestInfo: {
538
- i18n: storefront.i18n,
539
- // TODO: @hta218 - migrate to Remix hooks
540
- queries: getRequestQueries(request),
541
- pathname: new URL(request.url).pathname,
542
- search: new URL(request.url).search
543
- }
544
- }
545
- };
546
- return resolve(data);
547
- } catch (e) {
548
- console.error(`\u274C Page load failed.`, e);
549
- reject(e);
481
+ try {
482
+ let { request, storefront, basePageRequestBody, basePageConfigs } = this;
483
+ let { projectId, isDesignMode, weaverseHost } = this.configs;
484
+ if (!projectId) {
485
+ throw new Error("Missing Weaverse projectId!");
550
486
  }
551
- });
487
+ let { strategy, ...pageLoadParams } = params;
488
+ let body = {
489
+ ...basePageRequestBody,
490
+ params: pageLoadParams,
491
+ url: request.url
492
+ };
493
+ let reqInit = {
494
+ method: "POST",
495
+ body: JSON.stringify(body)
496
+ };
497
+ let url = `${weaverseHost}/${this.API}/project`;
498
+ let payload;
499
+ if (isDesignMode) {
500
+ payload = await fetch(url, reqInit).then((res) => res.json());
501
+ } else {
502
+ payload = await this.fetchWithCache(url, {
503
+ ...reqInit,
504
+ strategy
505
+ });
506
+ }
507
+ if (payload?.error) {
508
+ throw new Error(payload?.error);
509
+ }
510
+ let { page, project, pageAssignment } = payload;
511
+ if (!project) {
512
+ throw new Error(`Weaverse project not found. Id: ${projectId}`);
513
+ }
514
+ if (!page) {
515
+ page = this.generateFallbackPage("Please add new section to start.");
516
+ }
517
+ if (page?.items) {
518
+ let items = page.items;
519
+ page.items = await Promise.all(items.map(this.execComponentLoader));
520
+ }
521
+ let data = {
522
+ page,
523
+ project,
524
+ pageAssignment,
525
+ configs: {
526
+ ...basePageConfigs,
527
+ requestInfo: {
528
+ i18n: storefront.i18n,
529
+ // TODO: @hta218 - migrate to Remix hooks
530
+ queries: getRequestQueries(request),
531
+ pathname: new URL(request.url).pathname,
532
+ search: new URL(request.url).search
533
+ }
534
+ }
535
+ };
536
+ return data;
537
+ } catch (e) {
538
+ console.error(`\u274C Page load failed.`, e);
539
+ throw e;
540
+ }
552
541
  };
553
542
  execComponentLoader = async (item) => {
554
543
  let { data = {}, type, id } = item;
@@ -564,7 +553,7 @@ var WeaverseClient = class {
564
553
  })
565
554
  };
566
555
  } catch (e) {
567
- console.warn(`\u274C Item loader run failed.`, type, id, e);
556
+ console.warn("\u274C Item loader run failed.", type, id, e);
568
557
  return item;
569
558
  }
570
559
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n Weaverse,\n WeaverseItemStore,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n type PlatformTypeEnum,\n isBrowser,\n isIframe\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport { useChildInstances, useItemInstance, useParentInstance, useWeaverse, isBrowser, isIframe }\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n } else {\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return matches[1] + '_' + size + '.' + matches[2]\n }\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport React, { memo, Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { createWeaverseInstance, ThemeSettingsProvider } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n \n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport { type WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners: (() => void)[] = []\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { WeaverseHydrogen } from './index'\nimport { defaultComponents } from '~/components'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n components.forEach((comp) => {\n WeaverseHydrogen.registerElement({\n type: comp?.schema?.type,\n Component: comp?.default,\n schema: comp?.schema,\n loader: comp?.loader,\n })\n })\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n // eslint-disable-next-line react/no-danger-with-children\n <div\n ref={ref}\n {...rest}\n children={children}\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 2,\n sMaxAge: 2,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(err)\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error(`❌ Theme settings load failed.`, e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: 'fallback_page_' + Date.now(),\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage(`Please add new section to start.`)\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return resolve(data)\n } catch (e) {\n console.error(`❌ Page load failed.`, e)\n reject(e)\n }\n })\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn(`❌ Item loader run failed.`, type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","React","React","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return `${matches[1]}_${size}.${matches[2]}`\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners = new Set<() => void>()\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(err)\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return data\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","import_jsx_runtime","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
package/dist/index.mjs CHANGED
@@ -8,12 +8,12 @@ var __export = (target, all) => {
8
8
  import {
9
9
  Weaverse,
10
10
  WeaverseItemStore,
11
+ isBrowser as isBrowser3,
12
+ isIframe,
11
13
  useChildInstances,
12
14
  useItemInstance,
13
15
  useParentInstance,
14
- useWeaverse,
15
- isBrowser as isBrowser3,
16
- isIframe
16
+ useWeaverse
17
17
  } from "@weaverse/react";
18
18
 
19
19
  // src/utils.ts
@@ -76,10 +76,9 @@ function resizeShopifyImage(imageURL, size) {
76
76
  try {
77
77
  if (size === "original") {
78
78
  return imageURL;
79
- } else {
80
- let matches = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
81
- return matches[1] + "_" + size + "." + matches[2];
82
79
  }
80
+ let matches = imageURL.match(/(.*\/[\w-_.]+)\.(\w{2,4})/);
81
+ return `${matches[1]}_${size}.${matches[2]}`;
83
82
  } catch (e) {
84
83
  return imageURL;
85
84
  }
@@ -88,7 +87,7 @@ function resizeShopifyImage(imageURL, size) {
88
87
  // src/WeaverseHydrogenRoot.tsx
89
88
  import { Await, useLoaderData } from "@remix-run/react";
90
89
  import { WeaverseRoot } from "@weaverse/react";
91
- import React2, { memo as memo2, Suspense } from "react";
90
+ import { Suspense, memo as memo2 } from "react";
92
91
  import { ErrorBoundary } from "react-error-boundary";
93
92
 
94
93
  // src/Effect.tsx
@@ -110,7 +109,7 @@ import { isBrowser } from "@weaverse/react";
110
109
  import { useSyncExternalStore } from "react";
111
110
  var ThemeSettingsStore = class {
112
111
  settings = {};
113
- listeners = [];
112
+ listeners = /* @__PURE__ */ new Set();
114
113
  countries;
115
114
  schema;
116
115
  publicEnv;
@@ -132,9 +131,9 @@ var ThemeSettingsStore = class {
132
131
  this.emitChange();
133
132
  };
134
133
  subscribe = (listener) => {
135
- this.listeners = [...this.listeners, listener];
134
+ this.listeners.add(listener);
136
135
  return () => {
137
- this.listeners = this.listeners.filter((l) => l !== listener);
136
+ this.listeners.delete(listener);
138
137
  };
139
138
  };
140
139
  getSnapshot = () => {
@@ -208,20 +207,18 @@ __export(main_exports, {
208
207
  default: () => main_default,
209
208
  schema: () => schema
210
209
  });
211
- import React, { forwardRef } from "react";
210
+ import { forwardRef } from "react";
211
+ import { jsx } from "react/jsx-runtime";
212
212
  var Main = forwardRef((props, ref) => {
213
213
  let { children, dangerouslySetInnerHTML, ...rest } = props;
214
- return (
215
- // eslint-disable-next-line react/no-danger-with-children
216
- /* @__PURE__ */ React.createElement(
217
- "div",
218
- {
219
- ref,
220
- ...rest,
221
- children,
222
- dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
223
- }
224
- )
214
+ return /* @__PURE__ */ jsx(
215
+ "div",
216
+ {
217
+ ref,
218
+ ...rest,
219
+ children,
220
+ dangerouslySetInnerHTML: children ? void 0 : dangerouslySetInnerHTML
221
+ }
225
222
  );
226
223
  });
227
224
  var main_default = Main;
@@ -236,14 +233,14 @@ var defaultComponents = [main_exports];
236
233
 
237
234
  // src/context.ts
238
235
  function registerComponents(components) {
239
- components.forEach((comp) => {
240
- WeaverseHydrogen.registerElement({
241
- type: comp?.schema?.type,
242
- Component: comp?.default,
243
- schema: comp?.schema,
244
- loader: comp?.loader
236
+ for (const comp of components) {
237
+ comp?.schema?.type && WeaverseHydrogen.registerElement({
238
+ type: comp?.schema.type,
239
+ Component: comp.default,
240
+ schema: comp.schema,
241
+ loader: comp.loader
245
242
  });
246
- });
243
+ }
247
244
  }
248
245
  function createCachedWeaverseInstance(params) {
249
246
  if (isBrowser2) {
@@ -278,6 +275,7 @@ var ThemeSettingsProvider = createContext(
278
275
  ThemeSettingsProvider.displayName = "WeaverseThemeSettingsProvider";
279
276
 
280
277
  // src/WeaverseHydrogenRoot.tsx
278
+ import { Fragment, jsx as jsx2, jsxs } from "react/jsx-runtime";
281
279
  var WeaverseHydrogenRoot = memo2(
282
280
  ({
283
281
  errorComponent: ErrorComponent = FallbackError,
@@ -287,11 +285,11 @@ var WeaverseHydrogenRoot = memo2(
287
285
  let data = loaderData?.weaverseData;
288
286
  if (data) {
289
287
  if (data instanceof Promise) {
290
- return /* @__PURE__ */ React2.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React2.createElement(Suspense, null, /* @__PURE__ */ React2.createElement(Await, { resolve: data }, (resolvedData) => /* @__PURE__ */ React2.createElement(RenderRoot, { data: resolvedData, components }))));
288
+ return /* @__PURE__ */ jsx2(ErrorBoundary, { fallbackRender: ErrorComponent, children: /* @__PURE__ */ jsx2(Suspense, { children: /* @__PURE__ */ jsx2(Await, { resolve: data, children: (resolvedData) => /* @__PURE__ */ jsx2(RenderRoot, { data: resolvedData, components }) }) }) });
291
289
  }
292
- return /* @__PURE__ */ React2.createElement(RenderRoot, { data, components });
290
+ return /* @__PURE__ */ jsx2(RenderRoot, { data, components });
293
291
  }
294
- return /* @__PURE__ */ React2.createElement(
292
+ return /* @__PURE__ */ jsx2(
295
293
  ErrorComponent,
296
294
  {
297
295
  error: { message: "No Weaverse data return from route loader!" }
@@ -302,16 +300,19 @@ var WeaverseHydrogenRoot = memo2(
302
300
  function RenderRoot(props) {
303
301
  let { data, components } = props;
304
302
  let weaverse = createWeaverseInstance(data, components);
305
- return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(WeaverseRoot, { context: weaverse }), /* @__PURE__ */ React2.createElement(WeaverseEffect, { context: weaverse }));
303
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
304
+ /* @__PURE__ */ jsx2(WeaverseRoot, { context: weaverse }),
305
+ /* @__PURE__ */ jsx2(WeaverseEffect, { context: weaverse })
306
+ ] });
306
307
  }
307
308
  function withWeaverse(Component) {
308
309
  return (props) => {
309
310
  let { settings } = useThemeSettingsStore();
310
- return /* @__PURE__ */ React2.createElement(ThemeSettingsProvider.Provider, { value: settings }, /* @__PURE__ */ React2.createElement(Component, { ...props }));
311
+ return /* @__PURE__ */ jsx2(ThemeSettingsProvider.Provider, { value: settings, children: /* @__PURE__ */ jsx2(Component, { ...props }) });
311
312
  };
312
313
  }
313
314
  function FallbackError({ error }) {
314
- return /* @__PURE__ */ React2.createElement("div", null, error?.message || "An unexpected error occurred");
315
+ return /* @__PURE__ */ jsx2("div", { children: error?.message || "An unexpected error occurred" });
315
316
  }
316
317
 
317
318
  // src/weaverse-client.ts
@@ -368,8 +369,8 @@ var WeaverseClient = class {
368
369
  let cacheKey = [url, options.body];
369
370
  let {
370
371
  strategy = this.storefront.CacheCustom({
371
- maxAge: 2,
372
- sMaxAge: 2,
372
+ maxAge: 1,
373
+ sMaxAge: 1,
373
374
  staleWhileRevalidate: 82800
374
375
  }),
375
376
  ...reqInit
@@ -437,14 +438,14 @@ var WeaverseClient = class {
437
438
  }
438
439
  return data;
439
440
  } catch (e) {
440
- console.error(`\u274C Theme settings load failed.`, e);
441
+ console.error("\u274C Theme settings load failed.", e);
441
442
  return null;
442
443
  }
443
444
  };
444
445
  generateFallbackPage = (message) => {
445
446
  let rootId = crypto.randomUUID();
446
447
  return {
447
- id: "fallback_page_" + Date.now(),
448
+ id: `fallback_page_${Date.now()}`,
448
449
  rootId,
449
450
  name: "Default Page",
450
451
  items: [
@@ -457,68 +458,66 @@ var WeaverseClient = class {
457
458
  };
458
459
  };
459
460
  loadPage = async (params = {}) => {
460
- return new Promise(async (resolve, reject) => {
461
- try {
462
- let { request, storefront, basePageRequestBody, basePageConfigs } = this;
463
- let { projectId, isDesignMode, weaverseHost } = this.configs;
464
- if (!projectId) {
465
- throw new Error("Missing Weaverse projectId!");
466
- }
467
- let { strategy, ...pageLoadParams } = params;
468
- let body = {
469
- ...basePageRequestBody,
470
- params: pageLoadParams,
471
- url: request.url
472
- };
473
- let reqInit = {
474
- method: "POST",
475
- body: JSON.stringify(body)
476
- };
477
- let url = `${weaverseHost}/${this.API}/project`;
478
- let payload;
479
- if (isDesignMode) {
480
- payload = await fetch(url, reqInit).then((res) => res.json());
481
- } else {
482
- payload = await this.fetchWithCache(url, {
483
- ...reqInit,
484
- strategy
485
- });
486
- }
487
- if (payload?.error) {
488
- throw new Error(payload?.error);
489
- }
490
- let { page, project, pageAssignment } = payload;
491
- if (!project) {
492
- throw new Error(`Weaverse project not found. Id: ${projectId}`);
493
- }
494
- if (!page) {
495
- page = this.generateFallbackPage(`Please add new section to start.`);
496
- }
497
- if (page?.items) {
498
- let items = page.items;
499
- page.items = await Promise.all(items.map(this.execComponentLoader));
500
- }
501
- let data = {
502
- page,
503
- project,
504
- pageAssignment,
505
- configs: {
506
- ...basePageConfigs,
507
- requestInfo: {
508
- i18n: storefront.i18n,
509
- // TODO: @hta218 - migrate to Remix hooks
510
- queries: getRequestQueries(request),
511
- pathname: new URL(request.url).pathname,
512
- search: new URL(request.url).search
513
- }
514
- }
515
- };
516
- return resolve(data);
517
- } catch (e) {
518
- console.error(`\u274C Page load failed.`, e);
519
- reject(e);
461
+ try {
462
+ let { request, storefront, basePageRequestBody, basePageConfigs } = this;
463
+ let { projectId, isDesignMode, weaverseHost } = this.configs;
464
+ if (!projectId) {
465
+ throw new Error("Missing Weaverse projectId!");
520
466
  }
521
- });
467
+ let { strategy, ...pageLoadParams } = params;
468
+ let body = {
469
+ ...basePageRequestBody,
470
+ params: pageLoadParams,
471
+ url: request.url
472
+ };
473
+ let reqInit = {
474
+ method: "POST",
475
+ body: JSON.stringify(body)
476
+ };
477
+ let url = `${weaverseHost}/${this.API}/project`;
478
+ let payload;
479
+ if (isDesignMode) {
480
+ payload = await fetch(url, reqInit).then((res) => res.json());
481
+ } else {
482
+ payload = await this.fetchWithCache(url, {
483
+ ...reqInit,
484
+ strategy
485
+ });
486
+ }
487
+ if (payload?.error) {
488
+ throw new Error(payload?.error);
489
+ }
490
+ let { page, project, pageAssignment } = payload;
491
+ if (!project) {
492
+ throw new Error(`Weaverse project not found. Id: ${projectId}`);
493
+ }
494
+ if (!page) {
495
+ page = this.generateFallbackPage("Please add new section to start.");
496
+ }
497
+ if (page?.items) {
498
+ let items = page.items;
499
+ page.items = await Promise.all(items.map(this.execComponentLoader));
500
+ }
501
+ let data = {
502
+ page,
503
+ project,
504
+ pageAssignment,
505
+ configs: {
506
+ ...basePageConfigs,
507
+ requestInfo: {
508
+ i18n: storefront.i18n,
509
+ // TODO: @hta218 - migrate to Remix hooks
510
+ queries: getRequestQueries(request),
511
+ pathname: new URL(request.url).pathname,
512
+ search: new URL(request.url).search
513
+ }
514
+ }
515
+ };
516
+ return data;
517
+ } catch (e) {
518
+ console.error(`\u274C Page load failed.`, e);
519
+ throw e;
520
+ }
522
521
  };
523
522
  execComponentLoader = async (item) => {
524
523
  let { data = {}, type, id } = item;
@@ -534,7 +533,7 @@ var WeaverseClient = class {
534
533
  })
535
534
  };
536
535
  } catch (e) {
537
- console.warn(`\u274C Item loader run failed.`, type, id, e);
536
+ console.warn("\u274C Item loader run failed.", type, id, e);
538
537
  return item;
539
538
  }
540
539
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n Weaverse,\n WeaverseItemStore,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n type PlatformTypeEnum,\n isBrowser,\n isIframe\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport { useChildInstances, useItemInstance, useParentInstance, useWeaverse, isBrowser, isIframe }\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n } else {\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return matches[1] + '_' + size + '.' + matches[2]\n }\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport React, { memo, Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { createWeaverseInstance, ThemeSettingsProvider } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n \n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport { type WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners: (() => void)[] = []\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { WeaverseHydrogen } from './index'\nimport { defaultComponents } from '~/components'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n components.forEach((comp) => {\n WeaverseHydrogen.registerElement({\n type: comp?.schema?.type,\n Component: comp?.default,\n schema: comp?.schema,\n loader: comp?.loader,\n })\n })\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n // eslint-disable-next-line react/no-danger-with-children\n <div\n ref={ref}\n {...rest}\n children={children}\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 2,\n sMaxAge: 2,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(err)\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error(`❌ Theme settings load failed.`, e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: 'fallback_page_' + Date.now(),\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage(`Please add new section to start.`)\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return resolve(data)\n } catch (e) {\n console.error(`❌ Page load failed.`, e)\n reject(e)\n }\n })\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn(`❌ Item loader run failed.`, type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["isBrowser","React","memo","schema","isBrowser","isBrowser","memo","React","res","schema"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return `${matches[1]}_${size}.${matches[2]}`\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { Suspense, memo } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { ThemeSettingsProvider, createWeaverseInstance } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n\n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners = new Set<() => void>()\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener)\n return () => {\n this.listeners.delete(listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 1,\n sMaxAge: 1,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(err)\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return data\n } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n throw e\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn('❌ Item loader run failed.', type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["isBrowser","memo","schema","isBrowser","isBrowser","jsx","memo","res","schema"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@weaverse/hydrogen",
3
3
  "author": "Weaverse Team",
4
4
  "description": "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
5
- "version": "3.2.5",
5
+ "version": "3.2.7",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "typings": "dist/index.d.ts",
@@ -42,7 +42,7 @@
42
42
  ]
43
43
  },
44
44
  "dependencies": {
45
- "@weaverse/react": "3.2.5",
45
+ "@weaverse/react": "3.2.7",
46
46
  "react-error-boundary": "^4.0.13"
47
47
  },
48
48
  "peerDependencies": {