@weaverse/hydrogen 4.2.0 → 4.2.2

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
@@ -47,7 +47,8 @@ declare class WeaverseClient {
47
47
  waitUntil: WeaverseClientArgs['waitUntil'];
48
48
  countries?: WeaverseClientArgs['countries'];
49
49
  constructor(args: WeaverseClientArgs);
50
- fetchWithCache: <T extends object>(url: string, options?: FetchWithCacheOptions) => Promise<T>;
50
+ private directFetch;
51
+ fetchWithCache<T extends object>(url: string, options?: FetchWithCacheOptions): Promise<T>;
51
52
  loadThemeSettings: (strategy?: AllCacheOptions) => Promise<any>;
52
53
  generateFallbackPage: (message: string) => HydrogenPageData;
53
54
  loadPage: (params?: LoadPageParams) => Promise<WeaverseLoaderData | null>;
@@ -70,9 +71,7 @@ interface AllCacheOptions {
70
71
  }
71
72
  type ComponentLoaderArgs<T = any, E = any> = {
72
73
  data: T;
73
- weaverse: Omit<WeaverseClient, 'env'> & {
74
- env: E;
75
- };
74
+ weaverse: WeaverseClient;
76
75
  };
77
76
  interface RouteLoaderArgs extends LoaderFunctionArgs {
78
77
  context: AppLoadContext & {
@@ -102,8 +101,9 @@ interface HydrogenComponentSchema extends ElementSchema {
102
101
  };
103
102
  toolbar?: (HydrogenToolbarAction | HydrogenToolbarAction[])[];
104
103
  }
105
- type BasicInput = BasicInput$1 & {
104
+ type BasicInput = Omit<BasicInput$1, 'condition'> & {
106
105
  shouldRevalidate?: boolean;
106
+ condition?: string | ((data: ElementData, weaverse: WeaverseHydrogen) => boolean);
107
107
  };
108
108
  type HeadingInputType = 'heading';
109
109
  type HeadingInput = {
package/dist/index.d.ts CHANGED
@@ -47,7 +47,8 @@ declare class WeaverseClient {
47
47
  waitUntil: WeaverseClientArgs['waitUntil'];
48
48
  countries?: WeaverseClientArgs['countries'];
49
49
  constructor(args: WeaverseClientArgs);
50
- fetchWithCache: <T extends object>(url: string, options?: FetchWithCacheOptions) => Promise<T>;
50
+ private directFetch;
51
+ fetchWithCache<T extends object>(url: string, options?: FetchWithCacheOptions): Promise<T>;
51
52
  loadThemeSettings: (strategy?: AllCacheOptions) => Promise<any>;
52
53
  generateFallbackPage: (message: string) => HydrogenPageData;
53
54
  loadPage: (params?: LoadPageParams) => Promise<WeaverseLoaderData | null>;
@@ -70,9 +71,7 @@ interface AllCacheOptions {
70
71
  }
71
72
  type ComponentLoaderArgs<T = any, E = any> = {
72
73
  data: T;
73
- weaverse: Omit<WeaverseClient, 'env'> & {
74
- env: E;
75
- };
74
+ weaverse: WeaverseClient;
76
75
  };
77
76
  interface RouteLoaderArgs extends LoaderFunctionArgs {
78
77
  context: AppLoadContext & {
@@ -102,8 +101,9 @@ interface HydrogenComponentSchema extends ElementSchema {
102
101
  };
103
102
  toolbar?: (HydrogenToolbarAction | HydrogenToolbarAction[])[];
104
103
  }
105
- type BasicInput = BasicInput$1 & {
104
+ type BasicInput = Omit<BasicInput$1, 'condition'> & {
106
105
  shouldRevalidate?: boolean;
106
+ condition?: string | ((data: ElementData, weaverse: WeaverseHydrogen) => boolean);
107
107
  };
108
108
  type HeadingInputType = 'heading';
109
109
  type HeadingInput = {
package/dist/index.js CHANGED
@@ -255,6 +255,7 @@ function usePixel(context) {
255
255
  let url = `${weaverseHost}/api/public/px`;
256
256
  let img = new Image();
257
257
  img.onload = () => {
258
+ img.remove();
258
259
  };
259
260
  img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
260
261
  }, []);
@@ -376,12 +377,19 @@ function withWeaverse(Component) {
376
377
  function FallbackError({ error }) {
377
378
  return /* @__PURE__ */ jsxRuntime.jsx("div", { children: error?.message || "An unexpected error occurred" });
378
379
  }
380
+ var API_PATH = "api/public";
381
+ var DEFAULT_CACHE_STRATEGY = {
382
+ maxAge: 5,
383
+ sMaxAge: 5,
384
+ staleWhileRevalidate: 82800
385
+ };
379
386
  var WeaverseClient = class {
380
- API = "api/public";
387
+ API = API_PATH;
381
388
  basePageConfigs;
382
389
  basePageRequestBody;
383
390
  configs;
384
391
  withCache;
392
+ // Required dependencies
385
393
  request;
386
394
  storefront;
387
395
  components;
@@ -391,7 +399,7 @@ var WeaverseClient = class {
391
399
  waitUntil;
392
400
  countries;
393
401
  constructor(args) {
394
- let {
402
+ const {
395
403
  env,
396
404
  storefront,
397
405
  components,
@@ -424,50 +432,50 @@ var WeaverseClient = class {
424
432
  projectId: this.configs.projectId
425
433
  };
426
434
  }
427
- fetchWithCache = async (url, options = {}) => {
428
- let cacheKey = [url, options.body];
429
- let {
430
- strategy = this.storefront.CacheCustom({
431
- maxAge: 1,
432
- sMaxAge: 1,
433
- staleWhileRevalidate: 82800
434
- }),
435
+ // Helper method for direct fetching in design mode
436
+ async directFetch(url, options = {}) {
437
+ try {
438
+ const res = await fetch(url, options);
439
+ if (!res.ok) {
440
+ const error = await res.text();
441
+ throw new Error(`${res.status} ${res.statusText} ${error}`);
442
+ }
443
+ return res.json();
444
+ } catch (err) {
445
+ throw new Error(`Failed to fetch data from ${url}`, { cause: err });
446
+ }
447
+ }
448
+ async fetchWithCache(url, options = {}) {
449
+ const {
450
+ strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),
435
451
  ...reqInit
436
452
  } = options;
453
+ const cacheKey = [url, options.body];
437
454
  if (this.configs.isDesignMode) {
438
- try {
439
- const res2 = await fetch(url, reqInit);
440
- return await res2.json();
441
- } catch (err) {
442
- throw new Error(`Failed to fetch data from ${url}`, { cause: err });
443
- }
455
+ return this.directFetch(url, reqInit);
444
456
  }
445
- let res = this.withCache.run(
457
+ return this.withCache.run(
446
458
  {
447
459
  cacheKey,
448
460
  cacheStrategy: strategy,
449
- // @ts-expect-error
450
461
  shouldCacheResult: (result) => result?.data
451
462
  },
452
463
  async () => {
453
- let response = await fetch(url, {
464
+ return this.directFetch(url, {
454
465
  ...reqInit,
455
466
  headers: {
456
467
  "Cache-Control": hydrogen.generateCacheControlHeader(strategy),
457
468
  ...reqInit.headers
458
469
  }
459
470
  });
460
- if (!response.ok) {
461
- let error = await response.text();
462
- let { status, statusText } = response;
463
- throw new Error(`${status} ${statusText} ${error}`, { cause: error });
464
- }
465
- return await response.json();
466
471
  }
467
472
  );
468
- return res;
469
- };
473
+ }
470
474
  loadThemeSettings = async (strategy) => {
475
+ let defaultThemeSettings = {};
476
+ if (this.themeSchema) {
477
+ defaultThemeSettings = generateDataFromSchema(this.themeSchema);
478
+ }
471
479
  try {
472
480
  let { API, configs } = this;
473
481
  let { weaverseHost, projectId, isDesignMode } = configs;
@@ -490,10 +498,6 @@ var WeaverseClient = class {
490
498
  }
491
499
  let data = res || {};
492
500
  if (data?.theme && this.themeSchema?.inspector) {
493
- let defaultThemeSettings = {};
494
- if (this.themeSchema) {
495
- defaultThemeSettings = generateDataFromSchema(this.themeSchema);
496
- }
497
501
  data.theme = {
498
502
  ...defaultThemeSettings,
499
503
  ...data.theme
@@ -509,8 +513,8 @@ var WeaverseClient = class {
509
513
  }
510
514
  return data;
511
515
  } catch (e) {
512
- console.error("\u274C Theme settings load failed.", e);
513
- return null;
516
+ console.info("Unable to load theme settings", e);
517
+ return defaultThemeSettings;
514
518
  }
515
519
  };
516
520
  generateFallbackPage = (message) => {
@@ -574,7 +578,13 @@ var WeaverseClient = class {
574
578
  }
575
579
  let { page, project, pageAssignment } = payload;
576
580
  if (!project) {
577
- throw new Error(`Weaverse project not found. Id: ${projectId}`);
581
+ console.error("Weaverse project not found. Id:", projectId);
582
+ project = {
583
+ id: projectId,
584
+ name: "Weaverse project not found.",
585
+ weaverseShopId: ""
586
+ };
587
+ page = this.generateFallbackPage("Weaverse project not found.");
578
588
  }
579
589
  if (!page) {
580
590
  page = this.generateFallbackPage("Please add new section to start.");
@@ -600,7 +610,7 @@ var WeaverseClient = class {
600
610
  };
601
611
  } catch (e) {
602
612
  console.error(`\u274C Page load failed.`, e);
603
- throw e;
613
+ return null;
604
614
  }
605
615
  };
606
616
  execComponentLoader = async (item) => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","EventEmitter","schema","isBrowser","useRouteLoaderData","useSyncExternalStore","useRevalidator","useNavigation","useLocation","useNavigate","useEffect","loadScript","memo","forwardRef","jsx","createContext","useLoaderData","ErrorBoundary","Suspense","Await","jsxs","Fragment","WeaverseRoot","createWithCache","res","generateCacheControlHeader","hydrogen_getSelectedProductOptions","Weaverse","WeaverseItemStore"],"mappings":"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","file":"index.js","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\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: HydrogenEnv,\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 isPreviewMode,\n sectionType,\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 WEAVERSE_HOST ||\n weaverseHost ||\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 isPreviewMode: isPreviewMode || false,\n sectionType: sectionType || '',\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 (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } 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 extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\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.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\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 {\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\n}\n\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\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 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 { 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 (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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 { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, 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: ComponentType<any>) {\n return (props: 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 {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} 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 getPreviewData,\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, request })\n\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\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 extends object>(\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(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n // @ts-expect-error\n shouldCacheResult: (result) => result?.data,\n },\n 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}`, { cause: error })\n }\n return await response.json<T>()\n },\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: any\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, {\n method: 'POST',\n strategy,\n body,\n })\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 {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\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 return {\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 } 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 component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\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","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"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","EventEmitter","schema","isBrowser","useRouteLoaderData","useSyncExternalStore","useRevalidator","useNavigation","useLocation","useNavigate","useEffect","loadScript","memo","forwardRef","jsx","createContext","useLoaderData","ErrorBoundary","Suspense","Await","jsxs","Fragment","WeaverseRoot","createWithCache","generateCacheControlHeader","res","hydrogen_getSelectedProductOptions","Weaverse","WeaverseItemStore"],"mappings":"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","file":"index.js","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\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: HydrogenEnv,\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 isPreviewMode,\n sectionType,\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 WEAVERSE_HOST ||\n weaverseHost ||\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 isPreviewMode: isPreviewMode || false,\n sectionType: sectionType || '',\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 (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } 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 extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\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.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\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 {\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\n}\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {\n // clear the image node\n img.remove()\n }\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\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 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 { 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 (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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 { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, 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: ComponentType<any>) {\n return (props: 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 {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} 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 getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'api/public'\nconst DEFAULT_CACHE_STRATEGY = {\n maxAge: 5,\n sMaxAge: 5,\n staleWhileRevalidate: 82800,\n}\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n public configs: WeaverseProjectConfigs\n public withCache: ReturnType<typeof createWithCache>\n\n // Required dependencies\n public request: WeaverseClientArgs['request']\n public storefront: WeaverseClientArgs['storefront']\n public components: WeaverseClientArgs['components']\n public themeSchema: WeaverseClientArgs['themeSchema']\n public env: WeaverseClientArgs['env']\n public cache: WeaverseClientArgs['cache']\n public waitUntil: WeaverseClientArgs['waitUntil']\n public countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n\n // Initialize required properties\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, request })\n\n // Initialize configs\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n // Initialize base configurations\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\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n // Helper method for direct fetching in design mode\n private async directFetch<T>(\n url: string,\n options: RequestInit = {},\n ): Promise<T> {\n try {\n const res = await fetch(url, options)\n if (!res.ok) {\n const error = await res.text()\n throw new Error(`${res.status} ${res.statusText} ${error}`)\n }\n return res.json()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n public async fetchWithCache<T extends object>(\n url: string,\n options: FetchWithCacheOptions = {},\n ): Promise<T> {\n const {\n strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),\n ...reqInit\n } = options\n const cacheKey = [url, options.body]\n\n if (this.configs.isDesignMode) {\n return this.directFetch<T>(url, reqInit)\n }\n\n return this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResult: (result: any) => result?.data,\n },\n async () => {\n return this.directFetch<T>(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n },\n ) as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\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: any\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, {\n method: 'POST',\n strategy,\n body,\n })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\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.info('Unable to load theme settings', e)\n return defaultThemeSettings\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 {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\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 console.error('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n page = this.generateFallbackPage('Weaverse project not found.')\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 return {\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 } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n return null\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\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","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"]}
package/dist/index.mjs CHANGED
@@ -254,6 +254,7 @@ function usePixel(context) {
254
254
  let url = `${weaverseHost}/api/public/px`;
255
255
  let img = new Image();
256
256
  img.onload = () => {
257
+ img.remove();
257
258
  };
258
259
  img.src = `${url}?projectId=${projectId}&pageId=${pageId}`;
259
260
  }, []);
@@ -375,12 +376,19 @@ function withWeaverse(Component) {
375
376
  function FallbackError({ error }) {
376
377
  return /* @__PURE__ */ jsx("div", { children: error?.message || "An unexpected error occurred" });
377
378
  }
379
+ var API_PATH = "api/public";
380
+ var DEFAULT_CACHE_STRATEGY = {
381
+ maxAge: 5,
382
+ sMaxAge: 5,
383
+ staleWhileRevalidate: 82800
384
+ };
378
385
  var WeaverseClient = class {
379
- API = "api/public";
386
+ API = API_PATH;
380
387
  basePageConfigs;
381
388
  basePageRequestBody;
382
389
  configs;
383
390
  withCache;
391
+ // Required dependencies
384
392
  request;
385
393
  storefront;
386
394
  components;
@@ -390,7 +398,7 @@ var WeaverseClient = class {
390
398
  waitUntil;
391
399
  countries;
392
400
  constructor(args) {
393
- let {
401
+ const {
394
402
  env,
395
403
  storefront,
396
404
  components,
@@ -423,50 +431,50 @@ var WeaverseClient = class {
423
431
  projectId: this.configs.projectId
424
432
  };
425
433
  }
426
- fetchWithCache = async (url, options = {}) => {
427
- let cacheKey = [url, options.body];
428
- let {
429
- strategy = this.storefront.CacheCustom({
430
- maxAge: 1,
431
- sMaxAge: 1,
432
- staleWhileRevalidate: 82800
433
- }),
434
+ // Helper method for direct fetching in design mode
435
+ async directFetch(url, options = {}) {
436
+ try {
437
+ const res = await fetch(url, options);
438
+ if (!res.ok) {
439
+ const error = await res.text();
440
+ throw new Error(`${res.status} ${res.statusText} ${error}`);
441
+ }
442
+ return res.json();
443
+ } catch (err) {
444
+ throw new Error(`Failed to fetch data from ${url}`, { cause: err });
445
+ }
446
+ }
447
+ async fetchWithCache(url, options = {}) {
448
+ const {
449
+ strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),
434
450
  ...reqInit
435
451
  } = options;
452
+ const cacheKey = [url, options.body];
436
453
  if (this.configs.isDesignMode) {
437
- try {
438
- const res2 = await fetch(url, reqInit);
439
- return await res2.json();
440
- } catch (err) {
441
- throw new Error(`Failed to fetch data from ${url}`, { cause: err });
442
- }
454
+ return this.directFetch(url, reqInit);
443
455
  }
444
- let res = this.withCache.run(
456
+ return this.withCache.run(
445
457
  {
446
458
  cacheKey,
447
459
  cacheStrategy: strategy,
448
- // @ts-expect-error
449
460
  shouldCacheResult: (result) => result?.data
450
461
  },
451
462
  async () => {
452
- let response = await fetch(url, {
463
+ return this.directFetch(url, {
453
464
  ...reqInit,
454
465
  headers: {
455
466
  "Cache-Control": generateCacheControlHeader(strategy),
456
467
  ...reqInit.headers
457
468
  }
458
469
  });
459
- if (!response.ok) {
460
- let error = await response.text();
461
- let { status, statusText } = response;
462
- throw new Error(`${status} ${statusText} ${error}`, { cause: error });
463
- }
464
- return await response.json();
465
470
  }
466
471
  );
467
- return res;
468
- };
472
+ }
469
473
  loadThemeSettings = async (strategy) => {
474
+ let defaultThemeSettings = {};
475
+ if (this.themeSchema) {
476
+ defaultThemeSettings = generateDataFromSchema(this.themeSchema);
477
+ }
470
478
  try {
471
479
  let { API, configs } = this;
472
480
  let { weaverseHost, projectId, isDesignMode } = configs;
@@ -489,10 +497,6 @@ var WeaverseClient = class {
489
497
  }
490
498
  let data = res || {};
491
499
  if (data?.theme && this.themeSchema?.inspector) {
492
- let defaultThemeSettings = {};
493
- if (this.themeSchema) {
494
- defaultThemeSettings = generateDataFromSchema(this.themeSchema);
495
- }
496
500
  data.theme = {
497
501
  ...defaultThemeSettings,
498
502
  ...data.theme
@@ -508,8 +512,8 @@ var WeaverseClient = class {
508
512
  }
509
513
  return data;
510
514
  } catch (e) {
511
- console.error("\u274C Theme settings load failed.", e);
512
- return null;
515
+ console.info("Unable to load theme settings", e);
516
+ return defaultThemeSettings;
513
517
  }
514
518
  };
515
519
  generateFallbackPage = (message) => {
@@ -573,7 +577,13 @@ var WeaverseClient = class {
573
577
  }
574
578
  let { page, project, pageAssignment } = payload;
575
579
  if (!project) {
576
- throw new Error(`Weaverse project not found. Id: ${projectId}`);
580
+ console.error("Weaverse project not found. Id:", projectId);
581
+ project = {
582
+ id: projectId,
583
+ name: "Weaverse project not found.",
584
+ weaverseShopId: ""
585
+ };
586
+ page = this.generateFallbackPage("Weaverse project not found.");
577
587
  }
578
588
  if (!page) {
579
589
  page = this.generateFallbackPage("Please add new section to start.");
@@ -599,7 +609,7 @@ var WeaverseClient = class {
599
609
  };
600
610
  } catch (e) {
601
611
  console.error(`\u274C Page load failed.`, e);
602
- throw e;
612
+ return null;
603
613
  }
604
614
  };
605
615
  execComponentLoader = async (item) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","schema","isBrowser","memo","jsx","res","hydrogen_getSelectedProductOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\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: HydrogenEnv,\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 isPreviewMode,\n sectionType,\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 WEAVERSE_HOST ||\n weaverseHost ||\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 isPreviewMode: isPreviewMode || false,\n sectionType: sectionType || '',\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 (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } 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 extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\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.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\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 {\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\n}\n\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {}\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\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 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 { 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 (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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 { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, 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: ComponentType<any>) {\n return (props: 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 {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} 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 getPreviewData,\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, request })\n\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\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 extends object>(\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(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n let res = this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n // @ts-expect-error\n shouldCacheResult: (result) => result?.data,\n },\n 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}`, { cause: error })\n }\n return await response.json<T>()\n },\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: any\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, {\n method: 'POST',\n strategy,\n body,\n })\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 {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\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 return {\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 } 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 component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\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","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"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/hooks/use-theme-settings.ts","../src/hooks/use-studio.ts","../src/Effect.tsx","../src/components/main.tsx","../src/components/index.ts","../src/context.ts","../src/WeaverseHydrogenRoot.tsx","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts","../src/index.ts"],"names":["type","children","data","schema","isBrowser","memo","jsx","res","hydrogen_getSelectedProductOptions"],"mappings":"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","file":"index.mjs","sourcesContent":["import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\n HydrogenComponent,\n HydrogenComponentSchema,\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: HydrogenEnv,\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 isPreviewMode,\n sectionType,\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 WEAVERSE_HOST ||\n weaverseHost ||\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 isPreviewMode: isPreviewMode || false,\n sectionType: sectionType || '',\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 (!imageURL.includes('cdn.shopify.com') || size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\n\nexport function recursivelyAddDataItem(\n type: string,\n components: HydrogenComponent<any>[],\n items: any[],\n initData?: object,\n) {\n const component = components.find((c) => c.schema.type === type)\n if (!component) {\n return\n }\n let childIDs = []\n // generate id for item\n const id = crypto.randomUUID()\n const { children, ...data } = component.schema?.presets || {}\n if (children) {\n for (const child of children) {\n const { type, children, ...data } = child\n const childID = recursivelyAddDataItem(\n child.type,\n components,\n items,\n data,\n )\n childIDs.push({\n id: childID,\n })\n }\n }\n items.push({\n data: { ...data, ...initData },\n id,\n type,\n children: childIDs,\n })\n return id\n}\nexport function getPreviewData(type: string, components, weaverseHost: string) {\n const initialData = {\n project: {\n id: 'x',\n weaverseShopId: 'shopid',\n name: 'Section Preview',\n },\n // pageAssignment: {\n // projectId: \"x\",\n // type: \"CUSTOM\",\n // locale: \"en-us\",\n // handle: \"\",\n // },\n configs: {\n projectId: 'x',\n weaverseHost,\n isDesignMode: false,\n isPreviewMode: true,\n requestInfo: {\n i18n: {\n label: 'United States (USD $)',\n language: 'EN',\n country: 'US',\n currency: 'USD',\n pathPrefix: '',\n },\n queries: {},\n pathname: '/',\n search: '',\n },\n },\n }\n let items = []\n const id = recursivelyAddDataItem(type, components, items)\n const page = {\n id: '0',\n name: 'Preview section',\n rootId: '1',\n items: [\n {\n data: {},\n id: '1',\n type: 'main',\n children: [\n {\n id,\n },\n ],\n },\n ...items,\n ],\n }\n const previewData = {\n ...initialData,\n page,\n }\n return previewData\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser, EventEmitter } 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 extends EventEmitter{\n settings: HydrogenThemeSettings = {}\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n super()\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.emit(this.settings)\n }\n\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\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 {\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, isPreviewMode } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle') {\n if (isPreviewMode) {\n let previewSrc = `${weaverseHost}/static/studio/hydrogen/preview.js?v=${weaverseVersion}`\n loadScript(previewSrc).catch(console.error)\n } else if (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 }\n }, [pathname, search, navigation.state])\n usePixel(weaverse)\n}\n\nexport function usePixel(context: WeaverseHydrogen) {\n let { projectId, pageId, weaverseHost, isDesignMode } = context\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (!projectId || !pageId || !weaverseHost || isDesignMode) return\n let url = `${weaverseHost}/api/public/px`\n let img = new Image()\n img.onload = () => {\n // clear the image node\n img.remove()\n }\n img.src = `${url}?projectId=${projectId}&pageId=${pageId}`\n }, [])\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 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 { 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 (\n !weaverse ||\n weaverse?.requestInfo?.pathname !== params.requestInfo.pathname ||\n weaverse?.requestInfo?.search !== params.requestInfo.search\n ) {\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 { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport { type ComponentType, type JSX, 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: ComponentType<any>) {\n return (props: 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 {\n type HydrogenEnv,\n createWithCache,\n generateCacheControlHeader,\n} 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 getPreviewData,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\n// Constants at the top\nconst API_PATH = 'api/public'\nconst DEFAULT_CACHE_STRATEGY = {\n maxAge: 5,\n sMaxAge: 5,\n staleWhileRevalidate: 82800,\n}\n\nexport class WeaverseClient {\n public API = API_PATH\n public basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n public basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n public configs: WeaverseProjectConfigs\n public withCache: ReturnType<typeof createWithCache>\n\n // Required dependencies\n public request: WeaverseClientArgs['request']\n public storefront: WeaverseClientArgs['storefront']\n public components: WeaverseClientArgs['components']\n public themeSchema: WeaverseClientArgs['themeSchema']\n public env: WeaverseClientArgs['env']\n public cache: WeaverseClientArgs['cache']\n public waitUntil: WeaverseClientArgs['waitUntil']\n public countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n // Destructure and initialize all dependencies\n const {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n\n // Initialize required properties\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, request })\n\n // Initialize configs\n this.configs = getWeaverseConfigs(request, env as HydrogenEnv)\n\n // Initialize base configurations\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\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n // Helper method for direct fetching in design mode\n private async directFetch<T>(\n url: string,\n options: RequestInit = {},\n ): Promise<T> {\n try {\n const res = await fetch(url, options)\n if (!res.ok) {\n const error = await res.text()\n throw new Error(`${res.status} ${res.statusText} ${error}`)\n }\n return res.json()\n } catch (err) {\n throw new Error(`Failed to fetch data from ${url}`, { cause: err })\n }\n }\n\n public async fetchWithCache<T extends object>(\n url: string,\n options: FetchWithCacheOptions = {},\n ): Promise<T> {\n const {\n strategy = this.storefront.CacheCustom(DEFAULT_CACHE_STRATEGY),\n ...reqInit\n } = options\n const cacheKey = [url, options.body]\n\n if (this.configs.isDesignMode) {\n return this.directFetch<T>(url, reqInit)\n }\n\n return this.withCache.run(\n {\n cacheKey,\n cacheStrategy: strategy,\n shouldCacheResult: (result: any) => result?.data,\n },\n async () => {\n return this.directFetch<T>(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n },\n ) as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\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: any\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, {\n method: 'POST',\n strategy,\n body,\n })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\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.info('Unable to load theme settings', e)\n return defaultThemeSettings\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 {\n projectId,\n isDesignMode,\n weaverseHost,\n isPreviewMode,\n sectionType,\n } = this.configs\n if (isPreviewMode) {\n const previewData = getPreviewData(\n sectionType,\n this.components,\n weaverseHost,\n )\n return previewData as unknown as WeaverseLoaderData\n }\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 console.error('Weaverse project not found. Id:', projectId)\n project = {\n id: projectId,\n name: 'Weaverse project not found.',\n weaverseShopId: '',\n }\n page = this.generateFallbackPage('Weaverse project not found.')\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 return {\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 } catch (e) {\n // biome-ignore lint/style/noUnusedTemplateLiteral: <explanation>\n console.error(`❌ Page load failed.`, e)\n return null\n }\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let component = this.components.find(({ schema }) => schema?.type === type)\n let loader = component?.loader\n if (typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await Promise.resolve(\n loader({\n data: { ...generateDataFromSchema(component.schema), ...data },\n weaverse: this,\n }),\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","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"]}
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": "4.2.0",
5
+ "version": "4.2.2",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "typings": "dist/index.d.ts",
@@ -36,7 +36,7 @@
36
36
  "treeshake": true
37
37
  },
38
38
  "dependencies": {
39
- "@weaverse/react": "4.2.0",
39
+ "@weaverse/react": "4.2.2",
40
40
  "react-error-boundary": "^4.0.13",
41
41
  "@shopify/oxygen-workers-types": "4",
42
42
  "@shopify/remix-oxygen": "2",