@weaverse/hydrogen 3.4.0 → 3.4.1

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.js CHANGED
@@ -267,7 +267,7 @@ function createCachedWeaverseInstance(params) {
267
267
  if (import_react9.isBrowser) {
268
268
  window.__weaverses = window.__weaverses || {};
269
269
  let weaverse = window.__weaverses[params.pageId];
270
- if (!weaverse) {
270
+ if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
271
271
  weaverse = new WeaverseHydrogen(params);
272
272
  window.__weaverses[params.pageId] = weaverse;
273
273
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\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 weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\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 { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n 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 { 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 { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import {\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 getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env 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>(\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(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: 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, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n 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"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","import_jsx_runtime","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\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 weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\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 { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n 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 { 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 { 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 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 {\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 getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env 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>(\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(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: 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, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n 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"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAUO;;;ACFA,SAAS,kBACd,SACA;AACA,MAAI,MAAM,IAAI,IAAI,QAAQ,GAAG;AAC7B,SAAO,MAAM,KAAK,IAAI,aAAa,QAAQ,CAAC,EAAE;AAAA,IAC5C,CAAC,GAA4B,CAAC,GAAG,CAAC,MAAM;AACtC,QAAE,CAAC,IAAI,MAAM,SAAS,OAAO,MAAM,UAAU,QAAQ;AACrD,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEO,SAAS,mBACd,SACA,KACwB;AACxB,MAAI,UAAU,kBAAyC,OAAO;AAC9D,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,OAAO,CAAC;AACZ,MAAI,iBAAkB,OAAO,YAAY,eAAe,QAAQ,OAAQ,CAAC;AACzE,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,SAAO;AAAA,IACL,WACE,qBACA,uBACA,eAAe,uBACf;AAAA,IACF,cACE,gBACA,iBACA,eAAe,iBACf;AAAA,IACF,gBACE,kBACA,oBACA,eAAe,oBACf;AAAA,IACF,iBAAiB,mBAAmB;AAAA,IACpC,cAAc,gBAAgB;AAAA,IAC9B,WAAW;AAAA,MACT,qBAAqB,uBAAuB;AAAA,MAC5C,6BAA6B,+BAA+B;AAAA,IAC9D;AAAA,EACF;AACF;AAEO,SAAS,uBAAuB;AAAA,EACrC;AACF,GAAkD;AAChD,MAAI,OAA4B,CAAC;AACjC,MAAI,WAAW;AACb,aAAS,SAAS,WAAW;AAC3B,eAAS,SAAS,MAAM,QAAQ;AAC9B,YAAI,EAAE,MAAM,aAAa,IAAI;AAC7B,YAAI,QAAQ,iBAAiB,QAAQ,iBAAiB,QAAW;AAC/D,eAAK,IAAI,IAAI;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAaO,SAAS,mBAAmB,UAAkB,MAAsB;AACzE,MAAI;AACF,QAAI,SAAS,YAAY;AACvB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,EAAE,MAAM,GAAG,IAAI,SAAS,MAAM,2BAA2B;AAC9D,WAAO,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG;AAAA,EAC/B,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;;;ACxGA,IAAAC,iBAAqC;AACrC,IAAAA,iBAA6B;AAC7B,IAAAA,iBAA6D;AAC7D,kCAA8B;;;ACH9B,IAAAC,gBAAqB;;;ACArB,IAAAC,gBAKO;AACP,IAAAA,gBAA2B;AAC3B,IAAAA,gBAA0B;;;ACP1B,mBAAmC;AACnC,IAAAC,gBAAwC;AACxC,IAAAA,gBAAqC;AAS9B,IAAM,qBAAN,cAAiC,2BAAY;AAAA,EAClD,WAAkC,CAAC;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAsC;AAChD,UAAM;AACN,QAAI,EAAE,OAAO,WAAW,QAAAC,SAAQ,UAAU,IAAI,QAAQ,CAAC;AACvD,SAAK,WAAW,EAAE,GAAG,MAAM;AAC3B,SAAK,YAAY;AACjB,SAAK,SAASA;AACd,SAAK,YAAY;AACjB,QAAI,yBAAW;AACb,aAAO,+BAA+B;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,sBAAsB,CAAC,gBAAuC;AAC5D,SAAK,WAAW;AAAA,MACd,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,IACL;AACA,SAAK,KAAK,KAAK,QAAQ;AAAA,EACzB;AAAA,EAGA,cAAc,MAAM;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAEF;AAEO,SAAS,wBAAwB;AACtC,MAAI,WAAO,iCAAmB,MAAM;AACpC,MAAI,2BAAa,OAAO,8BAA8B;AACpD,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,IAAI,mBAAmB,MAAM,aAAa;AACnD;AAEO,SAAS,mBAA8C;AAC5D,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,eAAW;AAAA,IACb,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AACA,SAAO;AACT;;;ADrDO,SAAS,UAAU,UAA4B;AACpD,MAAI,EAAE,WAAW,QAAI,8BAAe;AACpC,MAAI,iBAAa,6BAAc;AAC/B,MAAI,EAAE,UAAU,OAAO,QAAI,2BAAY;AACvC,MAAI,eAAW,2BAAY;AAC3B,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,EAAE,cAAc,cAAc,gBAAgB,IAAI;AAGtD,+BAAU,MAAM;AACd,QAAI,WAAW,UAAU,UAAU,cAAc;AAC/C,eAAS,WAAW;AAAA,QAClB,GAAG,SAAS;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,YAAY,GAAG,YAAY,sCAAsC,eAAe;AACpF,oCAAW,SAAS,EACjB,KAAK,MAAM;AACV,eAAO,gBAAgB,KAAK,QAAQ;AAAA,MACtC,CAAC,EACA,MAAM,QAAQ,KAAK;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,UAAU,QAAQ,WAAW,KAAK,CAAC;AACvC,WAAS,QAAQ;AACnB;AAGO,SAAS,SAAS,SAA2B;AAClD,MAAI,EAAE,WAAW,QAAQ,cAAc,aAAa,IAAI;AAExD,+BAAU,MAAM;AACd,QAAI,CAAC,aAAa,CAAC,UAAU,CAAC,gBAAgB,aAAc;AAC5D,QAAI,MAAM,GAAG,YAAY;AACzB,QAAI,MAAM,IAAI,MAAM;AACpB,QAAI,SAAS,MAAM;AAAA,IAAC;AACpB,QAAI,MAAM,GAAG,GAAG,cAAc,SAAS,WAAW,MAAM;AAAA,EAC1D,GAAG,CAAC,CAAC;AACP;;;AD9CO,IAAI,qBAAiB;AAAA,EAC1B,CAAC,EAAE,QAAQ,MAAqC;AAC9C,cAAU,OAAO;AACjB,WAAO;AAAA,EACT;AACF;;;AGTA,IAAAC,gBAA0B;AAC1B,IAAAA,iBAA8B;;;ACD9B;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,gBAAuD;AAcnD;AAPJ,IAAI,WAAO,0BAGT,CAAC,OAAO,QAAQ;AAChB,MAAI,EAAE,UAAU,yBAAyB,GAAG,KAAK,IAAI;AAErD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACC,GAAG;AAAA,MAEJ;AAAA,MAEA,yBAAyB,WAAW,SAAY;AAAA;AAAA,EAClD;AAEJ,CAAC;AAED,IAAO,eAAQ;AAER,IAAI,SAAkC;AAAA,EAC3C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW,CAAC;AACd;;;AC3BO,IAAI,oBAAyC,CAAC,YAAI;;;AFOzD,SAAS,mBAAmB,YAAiC;AAC3D,aAAW,QAAQ,YAAY;AAC7B,UAAM,QAAQ,QACZ,iBAAiB,gBAAgB;AAAA,MAC/B,MAAM,MAAM,OAAO;AAAA,MACnB,WAAW,KAAK;AAAA,MAChB,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACf,CAAC;AAAA,EACL;AACF;AAEA,SAAS,6BACP,QACkB;AAClB,MAAI,yBAAW;AACb,WAAO,cAAc,OAAO,eAAe,CAAC;AAC5C,QAAI,WAAW,OAAO,YAAY,OAAO,MAAM;AAC/C,QACE,CAAC,YACD,UAAU,aAAa,aAAa,OAAO,YAAY,YACvD,UAAU,aAAa,WAAW,OAAO,YAAY,QACrD;AACA,iBAAW,IAAI,iBAAiB,MAAM;AACtC,aAAO,YAAY,OAAO,MAAM,IAAI;AAAA,IACtC;AACA,QAAI,UAAU,cAAc;AAC1B,eAAS,cAAc,OAAO;AAC9B,aAAO,gBAAgB,cAAc,MAAM;AAAA,IAC7C;AACA,WAAO;AAAA,EACT;AACA,SAAO,IAAI,iBAAiB,MAAM;AACpC;AAEO,SAAS,uBACd,cACA,YACA;AACA,MAAI,EAAE,MAAM,SAAS,SAAS,eAAe,IAAI,gBAAgB,CAAC;AAClE,qBAAmB,UAAU;AAC7B,qBAAmB,iBAAiB;AACpC,SAAO,6BAA6B;AAAA,IAClC,GAAG;AAAA,IACH,MAAM;AAAA,IACN,QAAQ,MAAM;AAAA,IACd,UAAU,EAAE,SAAS,eAAe;AAAA,EACtC,CAAC;AACH;AAcO,IAAI,4BAAwB;AAAA,EACjC;AACF;AACA,sBAAsB,cAAc;;;AJ3ClB,IAAAC,sBAAA;AAjBX,IAAI,2BAAuB;AAAA,EAChC,CAAC;AAAA,IACC,gBAAgB,iBAAiB;AAAA,IACjC;AAAA,EACF,MAAiC;AAC/B,QAAI,iBAAa,8BAAc;AAG/B,QAAI,OAAO,YAAY;AAEvB,QAAI,MAAM;AACR,UAAI,gBAAgB,SAAS;AAC3B,eACE,6CAAC,6CAAc,gBAAgB,gBAC7B,uDAAC,2BACC,uDAAC,wBAAM,SAAS,MACb,WAAC,iBACA,6CAAC,cAAW,MAAM,cAAc,YAAwB,GAE5D,GACF,GACF;AAAA,MAEJ;AACA,aAAO,6CAAC,cAAW,MAAY,YAAwB;AAAA,IACzD;AACA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,EAAE,SAAS,6CAA6C;AAAA;AAAA,IACjE;AAAA,EAEJ;AACF;AAEA,SAAS,WAAW,OAGjB;AACD,MAAI,EAAE,MAAM,WAAW,IAAI;AAC3B,MAAI,WAAW,uBAAuB,MAAM,UAAU;AACtD,SACE,8EACE;AAAA,iDAAC,+BAAa,SAAS,UAAU;AAAA,IACjC,6CAAC,kBAAe,SAAS,UAAU;AAAA,KACrC;AAEJ;AAEO,SAAS,aAAa,WAA+B;AAC1D,SAAO,CAAC,UAAmC;AACzC,QAAI,EAAE,SAAS,IAAI,sBAAsB;AACzC,WACE,6CAAC,sBAAsB,UAAtB,EAA+B,OAAO,UACrC,uDAAC,aAAW,GAAG,OAAO,GACxB;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc,EAAE,MAAM,GAAqC;AAClE,SAAO,6CAAC,SAAK,iBAAO,WAAW,gCAA+B;AAChE;;;AO7EA,sBAIO;AAoBA,IAAM,iBAAN,MAAqB;AAAA,EAC1B,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAA0B;AACpC,QAAI;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,aAAa;AAClB,SAAK,cAAc;AACnB,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,YAAY;AACjB,SAAK,YAAY;AACjB,SAAK,gBAAY,iCAAgB,EAAE,OAAO,UAAU,CAAC;AAErD,SAAK,UAAU,mBAAmB,SAAS,GAAkB;AAE7D,SAAK,kBAAkB;AAAA,MACrB,WAAW,KAAK,QAAQ;AAAA,MACxB,cAAc,KAAK,QAAQ;AAAA,MAC3B,gBAAgB,KAAK,QAAQ;AAAA,MAC7B,iBAAiB,KAAK,QAAQ;AAAA,MAC9B,cAAc,KAAK,QAAQ;AAAA,IAC7B;AACA,SAAK,sBAAsB;AAAA,MACzB,cAAc,KAAK,QAAQ;AAAA,MAC3B,MAAM,WAAW;AAAA,MACjB,WAAW,KAAK,QAAQ;AAAA,IAC1B;AAAA,EACF;AAAA,EAEA,iBAAiB,OACf,KACA,UAAiC,CAAC,MAC/B;AACH,QAAI,WAAW,CAAC,KAAK,QAAQ,IAAI;AACjC,QAAI;AAAA,MACF,WAAW,KAAK,WAAW,YAAY;AAAA,QACrC,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,sBAAsB;AAAA,MACxB,CAAC;AAAA,MACD,GAAG;AAAA,IACL,IAAI;AACJ,QAAI,KAAK,QAAQ,cAAc;AAC7B,UAAI;AACF,cAAMC,OAAM,MAAM,MAAM,KAAK,OAAO;AACpC,eAAO,MAAMA,KAAI,KAAQ;AAAA,MAC3B,SAAS,KAAK;AACZ,cAAM,IAAI,MAAM,6BAA6B,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MACpE;AAAA,IACF;AACA,QAAI,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY;AACvD,UAAI,WAAW,MAAM,MAAM,KAAK;AAAA,QAC9B,GAAG;AAAA,QACH,SAAS;AAAA,UACP,qBAAiB,4CAA2B,QAAQ;AAAA,UACpD,GAAG,QAAQ;AAAA,QACb;AAAA,MACF,CAAC;AACD,UAAI,CAAC,SAAS,IAAI;AAChB,YAAI,QAAQ,MAAM,SAAS,KAAK;AAChC,YAAI,EAAE,QAAQ,WAAW,IAAI;AAC7B,cAAM,IAAI,MAAM,GAAG,MAAM,IAAI,UAAU,IAAI,KAAK,IAAI,EAAE,OAAO,MAAM,CAAC;AAAA,MACtE;AACA,aAAO,MAAM,SAAS,KAAQ;AAAA,IAChC,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,oBAAoB,OAAO,aAA+B;AACxD,QAAI;AACF,UAAI,EAAE,KAAK,QAAQ,IAAI;AACvB,UAAI,EAAE,cAAc,WAAW,aAAa,IAAI;AAChD,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AACA,UAAI,MAAM,GAAG,YAAY,IAAI,GAAG;AAChC,UAAI;AACJ,UAAI,OAAO,KAAK,UAAU,EAAE,cAAc,UAAU,CAAC;AACrD,UAAI,cAAc;AAChB,cAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,QAAQ,KAAK,CAAC,EAAE;AAAA,UAAK,CAACA,SACrDA,KAAI,KAAK;AAAA,QACX;AAAA,MACF,OAAO;AACL,cAAM,MAAM,KAAK,eAAe,KAAK,EAAE,QAAQ,QAAQ,UAAU,KAAK,CAAC;AAAA,MACzE;AACA,UAAI,OAAY,OAAO,CAAC;AACxB,UAAI,MAAM,SAAS,KAAK,aAAa,WAAW;AAC9C,YAAI,uBAAuB,CAAC;AAC5B,YAAI,KAAK,aAAa;AACpB,iCAAuB,uBAAuB,KAAK,WAAW;AAAA,QAChE;AACA,aAAK,QAAQ;AAAA,UACX,GAAG;AAAA,UACH,GAAG,KAAK;AAAA,QACV;AAAA,MACF;AACA,UAAI,KAAK,QAAQ,cAAc;AAC7B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,KAAK;AAAA,UACb,WAAW,KAAK,aAAa,CAAC;AAAA,UAC9B,WAAW,KAAK,QAAQ;AAAA,QAC1B;AAAA,MACF;AACA,aAAO;AAAA,IACT,SAAS,GAAG;AACV,cAAQ,MAAM,sCAAiC,CAAC;AAChD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,uBAAuB,CAAC,YAAsC;AAC5D,QAAI,SAAS,OAAO,WAAW;AAC/B,WAAO;AAAA,MACL,IAAI,iBAAiB,KAAK,IAAI,CAAC;AAAA,MAC/B;AAAA,MACA,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,MAAM,EAAE,yBAAyB,EAAE,QAAQ,QAAQ,EAAE;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAW,OACT,SAAyB,CAAC,MACa;AACvC,QAAI;AACF,UAAI,EAAE,SAAS,YAAY,qBAAqB,gBAAgB,IAAI;AACpE,UAAI,EAAE,WAAW,cAAc,aAAa,IAAI,KAAK;AAErD,UAAI,CAAC,WAAW;AACd,cAAM,IAAI,MAAM,6BAA6B;AAAA,MAC/C;AAEA,UAAI,EAAE,UAAU,GAAG,eAAe,IAAI;AACtC,UAAI,OAAgC;AAAA,QAClC,GAAG;AAAA,QACH,QAAQ;AAAA,QACR,KAAK,QAAQ;AAAA,MACf;AAEA,UAAI,UAAuB;AAAA,QACzB,QAAQ;AAAA,QACR,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B;AACA,UAAI,MAAM,GAAG,YAAY,IAAI,KAAK,GAAG;AACrC,UAAI;AAEJ,UAAI,cAAc;AAChB,kBAAU,MAAM,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,MAC9D,OAAO;AACL,kBAAU,MAAM,KAAK,eAAe,KAAK;AAAA,UACvC,GAAG;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,SAAS,OAAO;AAClB,cAAM,IAAI,MAAM,SAAS,KAAK;AAAA,MAChC;AACA,UAAI,EAAE,MAAM,SAAS,eAAe,IAAI;AACxC,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAAA,MAChE;AACA,UAAI,CAAC,MAAM;AACT,eAAO,KAAK,qBAAqB,kCAAkC;AAAA,MACrE;AACA,UAAI,MAAM,OAAO;AACf,YAAI,QAAQ,KAAK;AACjB,aAAK,QAAQ,MAAM,QAAQ,IAAI,MAAM,IAAI,KAAK,mBAAmB,CAAC;AAAA,MACpE;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,UACP,GAAG;AAAA,UACH,aAAa;AAAA,YACX,MAAM,WAAW;AAAA;AAAA,YAEjB,SAAS,kBAAyC,OAAO;AAAA,YACzD,UAAU,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,YAC/B,QAAQ,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AAEV,cAAQ,MAAM,4BAAuB,CAAC;AACtC,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,sBAAsB,OAAO,SAAgC;AAC3D,QAAI,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;AAC9B,QAAI,YAAY,KAAK,WAAW,KAAK,CAAC,EAAE,QAAAC,QAAO,MAAMA,SAAQ,SAAS,IAAI;AAC1E,QAAI,SAAS,WAAW;AACxB,QAAI,OAAO,WAAW,YAAY;AAChC,UAAI;AACF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,YAAY,MAAM,QAAQ;AAAA,YACxB,OAAO;AAAA,cACL,MAAM,EAAE,GAAG,uBAAuB,UAAU,MAAM,GAAG,GAAG,KAAK;AAAA,cAC7D,UAAU;AAAA,YACZ,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,KAAK,kCAA6B,MAAM,IAAI,CAAC;AACrD,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AC3QA,IAAAC,mBAAgF;AAGzE,SAAS,0BACd,SACuB;AACvB,MAAI,cAAU,iBAAAC,2BAAmC,OAAO;AACxD,SAAO,QAAQ;AAAA,IACb,CAAC,EAAE,KAAK,MAAM,SAAS,kBAAkB,CAAC,KAAK,WAAW,UAAU;AAAA,EACtE;AACF;;;ACVO,IAAI,sBAAsB;AAAA,EAC/B,YACE;AAAA,EACF,YACE;AAAA,EACF,OACE;AAAA,EACF,UACE;AAAA,EACF,UACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,cACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,WACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AAAA,EACF,YACE;AACJ;;;AXtBO,IAAM,mBAAN,cAA+B,wBAAS;AAAA,EAC7C,eAAiC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EAGA,OAAO;AAAA,EACP,OAAO;AAAA,EAEP,YAAY,QAAgC;AAC1C,QAAI,EAAE,UAAU,QAAQ,aAAa,GAAG,WAAW,IAAI;AACvD,UAAM,EAAE,GAAG,WAAW,CAAC;AACvB,SAAK,WAAW;AAChB,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACrB;AACF;AAEO,IAAM,uBAAN,cAAmC,iCAAkB;AAAA,EAG1D,YAAY,aAAoC,UAA4B;AAC1E,UAAM,aAAa,QAAQ;AAC3B,QAAI,EAAE,MAAM,GAAG,KAAK,IAAI;AACxB,WAAO,OAAO,KAAK,QAAQ,KAAK,aAAa,MAAM,IAAI;AAAA,EACzD;AAAA,EAEA,IAAI,UAA2B;AAC7B,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,IAAI,cAAc;AAChB,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,uBAAuB,KAAK,QAAQ,MAAM;AAAA,IACnD;AACA,WAAO,CAAC;AAAA,EACV;AACF;AAEA,wBAAS,kBAAkB;","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","import_jsx_runtime","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
package/dist/index.mjs CHANGED
@@ -247,7 +247,7 @@ function createCachedWeaverseInstance(params) {
247
247
  if (isBrowser2) {
248
248
  window.__weaverses = window.__weaverses || {};
249
249
  let weaverse = window.__weaverses[params.pageId];
250
- if (!weaverse) {
250
+ if (!weaverse || weaverse?.requestInfo?.pathname !== params.requestInfo.pathname || weaverse?.requestInfo?.search !== params.requestInfo.search) {
251
251
  weaverse = new WeaverseHydrogen(params);
252
252
  window.__weaverses[params.pageId] = weaverse;
253
253
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\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 weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\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 { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n 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 { 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 { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport { defaultComponents } from '~/components'\nimport { WeaverseHydrogen } from './index'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n for (const comp of components) {\n comp?.schema?.type &&\n WeaverseHydrogen.registerElement({\n type: comp?.schema.type,\n Component: comp.default,\n schema: comp.schema,\n loader: comp.loader,\n })\n }\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n <div\n ref={ref}\n {...rest}\n // biome-ignore lint/correctness/noChildrenProp: <explanation>\n children={children}\n // biome-ignore lint/security/noDangerouslySetInnerHtmlWithChildren: <explanation>\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import {\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 getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env 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>(\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(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: 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, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n 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"],"mappings":"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","names":["isBrowser","memo","schema","isBrowser","isBrowser","jsx","memo","res","schema"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n type PlatformTypeEnum,\n Weaverse,\n WeaverseItemStore,\n isBrowser,\n isIframe,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport {\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n isBrowser,\n isIframe,\n}\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type { HydrogenEnv } from '@shopify/hydrogen'\nimport type {\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 weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n }\n let [, path, ext] = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n return `${path}_${size}.${ext}`\n } catch (e) {\n return imageURL\n }\n}\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 { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport type { WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n }, [pathname, search, navigation.state])\n 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 { 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 { 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 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 {\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 getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env 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>(\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(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`, { cause: error })\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res: 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, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error('❌ Theme settings load failed.', e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: `fallback_page_${Date.now()}`,\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage('Please add new section to start.')\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n 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"],"mappings":"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","names":["isBrowser","memo","schema","isBrowser","isBrowser","jsx","memo","res","schema"]}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@weaverse/hydrogen",
3
3
  "author": "Weaverse Team",
4
4
  "description": "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
5
- "version": "3.4.0",
5
+ "version": "3.4.1",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "typings": "dist/index.d.ts",
@@ -42,7 +42,7 @@
42
42
  ]
43
43
  },
44
44
  "dependencies": {
45
- "@weaverse/react": "3.4.0",
45
+ "@weaverse/react": "3.4.1",
46
46
  "react-error-boundary": "^4.0.13"
47
47
  },
48
48
  "peerDependencies": {