@weaverse/hydrogen 3.2.0 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +10 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -4
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -313,7 +313,6 @@ var WeaverseHydrogenRoot = (0, import_react13.memo)(
|
|
|
313
313
|
}) => {
|
|
314
314
|
let loaderData = (0, import_react11.useLoaderData)();
|
|
315
315
|
let data = loaderData?.weaverseData;
|
|
316
|
-
console.log("data", data);
|
|
317
316
|
if (data) {
|
|
318
317
|
if (data instanceof Promise) {
|
|
319
318
|
return /* @__PURE__ */ import_react13.default.createElement(import_react_error_boundary.ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ import_react13.default.createElement(import_react13.Suspense, null, /* @__PURE__ */ import_react13.default.createElement(import_react11.Await, { resolve: data }, (resolvedData) => /* @__PURE__ */ import_react13.default.createElement(RenderRoot, { data: resolvedData, components }))));
|
|
@@ -393,7 +392,7 @@ var WeaverseClient = class {
|
|
|
393
392
|
projectId: this.configs.projectId
|
|
394
393
|
};
|
|
395
394
|
}
|
|
396
|
-
fetchWithCache = (url, options = {}) => {
|
|
395
|
+
fetchWithCache = async (url, options = {}) => {
|
|
397
396
|
let cacheKey = [url, options.body];
|
|
398
397
|
let {
|
|
399
398
|
strategy = this.storefront.CacheCustom({
|
|
@@ -403,12 +402,19 @@ var WeaverseClient = class {
|
|
|
403
402
|
}),
|
|
404
403
|
...reqInit
|
|
405
404
|
} = options;
|
|
405
|
+
if (this.configs.isDesignMode) {
|
|
406
|
+
try {
|
|
407
|
+
const res2 = await fetch(url, reqInit);
|
|
408
|
+
return await res2.json();
|
|
409
|
+
} catch (err) {
|
|
410
|
+
throw new Error(err);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
406
413
|
let res = this.withCache(cacheKey, strategy, async () => {
|
|
407
|
-
let cacheControlHeader = (0, import_hydrogen.generateCacheControlHeader)(strategy);
|
|
408
414
|
let response = await fetch(url, {
|
|
409
415
|
...reqInit,
|
|
410
416
|
headers: {
|
|
411
|
-
"Cache-Control":
|
|
417
|
+
"Cache-Control": (0, import_hydrogen.generateCacheControlHeader)(strategy),
|
|
412
418
|
...reqInit.headers
|
|
413
419
|
}
|
|
414
420
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n Weaverse,\n WeaverseItemStore,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n type PlatformTypeEnum,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport { useChildInstances, useItemInstance, useParentInstance, useWeaverse }\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n } else {\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return matches[1] + '_' + size + '.' + matches[2]\n }\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport React, { memo, Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { createWeaverseInstance, ThemeSettingsProvider } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n console.log('data', data)\n \n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport { type WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners: (() => void)[] = []\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { WeaverseHydrogen } from './index'\nimport { defaultComponents } from '~/components'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n components.forEach((comp) => {\n WeaverseHydrogen.registerElement({\n type: comp?.schema?.type,\n Component: comp?.default,\n schema: comp?.schema,\n loader: comp?.loader,\n })\n })\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n // eslint-disable-next-line react/no-danger-with-children\n <div\n ref={ref}\n {...rest}\n children={children}\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\n\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = <T>(url: string, options: FetchWithCacheOptions = {}) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 2,\n sMaxAge: 2,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n let res = this.withCache(cacheKey, strategy, async () => {\n let cacheControlHeader = generateCacheControlHeader(strategy)\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': cacheControlHeader,\n ...reqInit.headers,\n },\n })\n\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error(`❌ Theme settings load failed.`, e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: 'fallback_page_' + Date.now(),\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage(`Please add new section to start.`)\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return resolve(data)\n } catch (e) {\n console.error(`❌ Page load failed.`, e)\n reject(e)\n }\n })\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn(`❌ Item loader run failed.`, type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","React","React","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n Weaverse,\n WeaverseItemStore,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n type PlatformTypeEnum,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport { useChildInstances, useItemInstance, useParentInstance, useWeaverse }\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n } else {\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return matches[1] + '_' + size + '.' + matches[2]\n }\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport React, { memo, Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { createWeaverseInstance, ThemeSettingsProvider } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n \n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport { type WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners: (() => void)[] = []\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { WeaverseHydrogen } from './index'\nimport { defaultComponents } from '~/components'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n components.forEach((comp) => {\n WeaverseHydrogen.registerElement({\n type: comp?.schema?.type,\n Component: comp?.default,\n schema: comp?.schema,\n loader: comp?.loader,\n })\n })\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n // eslint-disable-next-line react/no-danger-with-children\n <div\n ref={ref}\n {...rest}\n children={children}\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 2,\n sMaxAge: 2,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(err)\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error(`❌ Theme settings load failed.`, e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: 'fallback_page_' + Date.now(),\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage(`Please add new section to start.`)\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return resolve(data)\n } catch (e) {\n console.error(`❌ Page load failed.`, e)\n reject(e)\n }\n })\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn(`❌ Item loader run failed.`, type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","schema","import_react","import_react","React","React","res","schema","import_hydrogen","hydrogen_getSelectedProductOptions"]}
|
package/dist/index.mjs
CHANGED
|
@@ -283,7 +283,6 @@ var WeaverseHydrogenRoot = memo2(
|
|
|
283
283
|
}) => {
|
|
284
284
|
let loaderData = useLoaderData();
|
|
285
285
|
let data = loaderData?.weaverseData;
|
|
286
|
-
console.log("data", data);
|
|
287
286
|
if (data) {
|
|
288
287
|
if (data instanceof Promise) {
|
|
289
288
|
return /* @__PURE__ */ React2.createElement(ErrorBoundary, { fallbackRender: ErrorComponent }, /* @__PURE__ */ React2.createElement(Suspense, null, /* @__PURE__ */ React2.createElement(Await, { resolve: data }, (resolvedData) => /* @__PURE__ */ React2.createElement(RenderRoot, { data: resolvedData, components }))));
|
|
@@ -363,7 +362,7 @@ var WeaverseClient = class {
|
|
|
363
362
|
projectId: this.configs.projectId
|
|
364
363
|
};
|
|
365
364
|
}
|
|
366
|
-
fetchWithCache = (url, options = {}) => {
|
|
365
|
+
fetchWithCache = async (url, options = {}) => {
|
|
367
366
|
let cacheKey = [url, options.body];
|
|
368
367
|
let {
|
|
369
368
|
strategy = this.storefront.CacheCustom({
|
|
@@ -373,12 +372,19 @@ var WeaverseClient = class {
|
|
|
373
372
|
}),
|
|
374
373
|
...reqInit
|
|
375
374
|
} = options;
|
|
375
|
+
if (this.configs.isDesignMode) {
|
|
376
|
+
try {
|
|
377
|
+
const res2 = await fetch(url, reqInit);
|
|
378
|
+
return await res2.json();
|
|
379
|
+
} catch (err) {
|
|
380
|
+
throw new Error(err);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
376
383
|
let res = this.withCache(cacheKey, strategy, async () => {
|
|
377
|
-
let cacheControlHeader = generateCacheControlHeader(strategy);
|
|
378
384
|
let response = await fetch(url, {
|
|
379
385
|
...reqInit,
|
|
380
386
|
headers: {
|
|
381
|
-
"Cache-Control":
|
|
387
|
+
"Cache-Control": generateCacheControlHeader(strategy),
|
|
382
388
|
...reqInit.headers
|
|
383
389
|
}
|
|
384
390
|
});
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n Weaverse,\n WeaverseItemStore,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n type PlatformTypeEnum,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport { useChildInstances, useItemInstance, useParentInstance, useWeaverse }\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n } else {\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return matches[1] + '_' + size + '.' + matches[2]\n }\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport React, { memo, Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { createWeaverseInstance, ThemeSettingsProvider } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n console.log('data', data)\n \n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport { type WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners: (() => void)[] = []\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { WeaverseHydrogen } from './index'\nimport { defaultComponents } from '~/components'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n components.forEach((comp) => {\n WeaverseHydrogen.registerElement({\n type: comp?.schema?.type,\n Component: comp?.default,\n schema: comp?.schema,\n loader: comp?.loader,\n })\n })\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n // eslint-disable-next-line react/no-danger-with-children\n <div\n ref={ref}\n {...rest}\n children={children}\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\n\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = <T>(url: string, options: FetchWithCacheOptions = {}) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 2,\n sMaxAge: 2,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n let res = this.withCache(cacheKey, strategy, async () => {\n let cacheControlHeader = generateCacheControlHeader(strategy)\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': cacheControlHeader,\n ...reqInit.headers,\n },\n })\n\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error(`❌ Theme settings load failed.`, e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: 'fallback_page_' + Date.now(),\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage(`Please add new section to start.`)\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return resolve(data)\n } catch (e) {\n console.error(`❌ Page load failed.`, e)\n reject(e)\n }\n })\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn(`❌ Item loader run failed.`, type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":";;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;;;ACAA,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,OAAO;AACL,UAAI,UAAU,SAAS,MAAM,2BAA2B;AAExD,aAAO,QAAQ,CAAC,IAAI,MAAM,OAAO,MAAM,QAAQ,CAAC;AAAA,IAClD;AAAA,EACF,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;;;AC1GA,SAAS,OAAO,qBAAqB;AACrC,SAAS,oBAAoB;AAC7B,OAAOA,UAAS,QAAAC,OAAM,gBAAgB;AACtC,SAAS,qBAAqB;;;ACH9B,SAAS,YAAY;;;ACArB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;;;ACP1B,SAAS,0BAA0B;AACnC,SAAS,iBAAiB;AAC1B,SAAS,4BAA4B;AAS9B,IAAM,qBAAN,MAAyB;AAAA,EAC9B,WAAkC,CAAC;AAAA,EACnC,YAA4B,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAsC;AAChD,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,WAAW;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,WAAW;AAAA,EAClB;AAAA,EAEA,YAAY,CAAC,aAAuC;AAClD,SAAK,YAAY,CAAC,GAAG,KAAK,WAAW,QAAQ;AAC7C,WAAO,MAAM;AACX,WAAK,YAAY,KAAK,UAAU,OAAO,CAAC,MAAM,MAAM,QAAQ;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,cAAc,MAAM;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,oBAAoB,MAAM;AACxB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAAa,MAAM;AACjB,aAAS,YAAY,KAAK,WAAW;AACnC,eAAS;AAAA,IACX;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB;AACtC,MAAI,OAAO,mBAAmB,MAAM;AACpC,MAAI,aAAa,OAAO,8BAA8B;AACpD,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,IAAI,mBAAmB,MAAM,aAAa;AACnD;AAEO,SAAS,mBAA8C;AAC5D,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,WAAW;AAAA,IACb,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,EACrB;AACA,SAAO;AACT;;;ADhEO,SAAS,UAAU,UAA4B;AACpD,MAAI,EAAE,WAAW,IAAI,eAAe;AACpC,MAAI,aAAa,cAAc;AAC/B,MAAI,EAAE,UAAU,OAAO,IAAI,YAAY;AACvC,MAAI,WAAW,YAAY;AAC3B,MAAI,qBAAqB,sBAAsB;AAC/C,MAAI,EAAE,cAAc,cAAc,gBAAgB,IAAI;AAEtD,YAAU,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,iBAAW,SAAS,EACjB,KAAK,MAAM;AACV,eAAO,gBAAgB,KAAK,QAAQ;AAAA,MACtC,CAAC,EACA,MAAM,QAAQ,KAAK;AAAA,IACxB;AAAA,EAEF,GAAG,CAAC,UAAU,QAAQ,WAAW,KAAK,CAAC;AACzC;;;ADhCO,IAAI,iBAAiB;AAAA,EAC1B,CAAC,EAAE,QAAQ,MAAqC;AAC9C,cAAU,OAAO;AACjB,WAAO;AAAA,EACT;AACF;;;AGTA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,qBAAqB;;;ACD9B;AAAA;AAAA;AAAA;AAAA;AAAA,OAAO,SAAS,kBAAuC;AAOvD,IAAI,OAAO,WAGT,CAAC,OAAO,QAAQ;AAChB,MAAI,EAAE,UAAU,yBAAyB,GAAG,KAAK,IAAI;AAErD;AAAA;AAAA,IAEE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACC,GAAG;AAAA,QACJ;AAAA,QACA,yBAAyB,WAAW,SAAY;AAAA;AAAA,IAClD;AAAA;AAEJ,CAAC;AAED,IAAO,eAAQ;AAER,IAAI,SAAkC;AAAA,EAC3C,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW,CAAC;AACd;;;AC1BO,IAAI,oBAAyC,CAAC,YAAI;;;AFOzD,SAAS,mBAAmB,YAAiC;AAC3D,aAAW,QAAQ,CAAC,SAAS;AAC3B,qBAAiB,gBAAgB;AAAA,MAC/B,MAAM,MAAM,QAAQ;AAAA,MACpB,WAAW,MAAM;AAAA,MACjB,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,6BACP,QACkB;AAClB,MAAIC,YAAW;AACb,WAAO,cAAc,OAAO,eAAe,CAAC;AAC5C,QAAI,WAAW,OAAO,YAAY,OAAO,MAAM;AAC/C,QAAI,CAAC,UAAU;AACb,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,wBAAwB;AAAA,EACjC;AACF;AACA,sBAAsB,cAAc;;;AJvD7B,IAAI,uBAAuBC;AAAA,EAChC,CAAC;AAAA,IACC,gBAAgB,iBAAiB;AAAA,IACjC;AAAA,EACF,MAAiC;AAC/B,QAAI,aAAa,cAAc;AAG/B,QAAI,OAAO,YAAY;AACvB,YAAQ,IAAI,QAAQ,IAAI;AAExB,QAAI,MAAM;AACR,UAAI,gBAAgB,SAAS;AAC3B,eACE,gBAAAC,OAAA,cAAC,iBAAc,gBAAgB,kBAC7B,gBAAAA,OAAA,cAAC,gBACC,gBAAAA,OAAA,cAAC,SAAM,SAAS,QACb,CAAC,iBACA,gBAAAA,OAAA,cAAC,cAAW,MAAM,cAAc,YAAwB,CAE5D,CACF,CACF;AAAA,MAEJ;AACA,aAAO,gBAAAA,OAAA,cAAC,cAAW,MAAY,YAAwB;AAAA,IACzD;AACA,WACE,gBAAAA,OAAA;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,gBAAAA,OAAA,cAAAA,OAAA,gBACE,gBAAAA,OAAA,cAAC,gBAAa,SAAS,UAAU,GACjC,gBAAAA,OAAA,cAAC,kBAAe,SAAS,UAAU,CACrC;AAEJ;AAEO,SAAS,aAAa,WAAqC;AAChE,SAAO,CAAC,UAAyC;AAC/C,QAAI,EAAE,SAAS,IAAI,sBAAsB;AACzC,WACE,gBAAAA,OAAA,cAAC,sBAAsB,UAAtB,EAA+B,OAAO,YACrC,gBAAAA,OAAA,cAAC,aAAW,GAAG,OAAO,CACxB;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc,EAAE,MAAM,GAAqC;AAClE,SAAO,gBAAAA,OAAA,cAAC,aAAK,OAAO,WAAW,8BAA+B;AAChE;;;AO9EA,SAAS,iBAAiB,kCAAkC;AAqBrD,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,YAAY,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAErD,SAAK,UAAU,mBAAmB,SAAS,GAAG;AAC9C,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,CAAI,KAAa,UAAiC,CAAC,MAAM;AACxE,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,MAAM,KAAK,UAAU,UAAU,UAAU,YAAY;AACvD,UAAI,qBAAqB,2BAA2B,QAAQ;AAC5D,UAAI,WAAW,MAAM,MAAM,KAAK;AAAA,QAC9B,GAAG;AAAA,QACH,SAAS;AAAA,UACP,iBAAiB;AAAA,UACjB,GAAG,QAAQ;AAAA,QACb;AAAA,MACF,CAAC;AAED,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,EAAE;AAAA,MACpD;AAEA,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,CAACC,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,mBAAmB,KAAK,IAAI;AAAA,MAChC;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;AAEvC,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAW;AAC5C,UAAI;AACF,YAAI,EAAE,SAAS,YAAY,qBAAqB,gBAAgB,IAAI;AACpE,YAAI,EAAE,WAAW,cAAc,aAAa,IAAI,KAAK;AAErD,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AAEA,YAAI,EAAE,UAAU,GAAG,eAAe,IAAI;AACtC,YAAI,OAAgC;AAAA,UAClC,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,KAAK,QAAQ;AAAA,QACf;AAEA,YAAI,UAAuB;AAAA,UACzB,QAAQ;AAAA,UACR,MAAM,KAAK,UAAU,IAAI;AAAA,QAC3B;AACA,YAAI,MAAM,GAAG,YAAY,IAAI,KAAK,GAAG;AACrC,YAAI;AAEJ,YAAI,cAAc;AAChB,oBAAU,MAAM,MAAM,KAAK,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;AAAA,QAC9D,OAAO;AACL,oBAAU,MAAM,KAAK,eAAe,KAAK;AAAA,YACvC,GAAG;AAAA,YACH;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,SAAS,OAAO;AAClB,gBAAM,IAAI,MAAM,SAAS,KAAK;AAAA,QAChC;AACA,YAAI,EAAE,MAAM,SAAS,eAAe,IAAI;AACxC,YAAI,CAAC,SAAS;AACZ,gBAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAAA,QAChE;AACA,YAAI,CAAC,MAAM;AACT,iBAAO,KAAK,qBAAqB,kCAAkC;AAAA,QACrE;AACA,YAAI,MAAM,OAAO;AACf,cAAI,QAAQ,KAAK;AACjB,eAAK,QAAQ,MAAM,QAAQ,IAAI,MAAM,IAAI,KAAK,mBAAmB,CAAC;AAAA,QACpE;AACA,YAAI,OAA2B;AAAA,UAC7B;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS;AAAA,YACP,GAAG;AAAA,YACH,aAAa;AAAA,cACX,MAAM,WAAW;AAAA;AAAA,cAEjB,SAAS,kBAAyC,OAAO;AAAA,cACzD,UAAU,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,cAC/B,QAAQ,IAAI,IAAI,QAAQ,GAAG,EAAE;AAAA,YAC/B;AAAA,UACF;AAAA,QACF;AACA,eAAO,QAAQ,IAAI;AAAA,MACrB,SAAS,GAAG;AACV,gBAAQ,MAAM,4BAAuB,CAAC;AACtC,eAAO,CAAC;AAAA,MACV;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,sBAAsB,OAAO,SAAgC;AAC3D,QAAI,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI;AAC9B,QAAIC,UAAS,KAAK,WAAW,KAAK,CAAC,EAAE,QAAAA,QAAO,MAAMA,SAAQ,SAAS,IAAI;AACvE,QAAI,SAASA,SAAQ;AACrB,QAAI,UAAU,OAAO,WAAW,YAAY;AAC1C,UAAI;AACF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,YAAY,MAAM,OAAO;AAAA,YACvB;AAAA,YACA,UAAU;AAAA,UACZ,CAAC;AAAA,QACH;AAAA,MACF,SAAS,GAAG;AACV,gBAAQ,KAAK,kCAA6B,MAAM,IAAI,CAAC;AACrD,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;;;AChQA,SAAS,6BAA6B,0CAA0C;AAGzE,SAAS,0BACd,SACuB;AACvB,MAAI,UAAU,mCAAmC,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;;;AX/BO,IAAM,mBAAN,cAA+B,SAAS;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,kBAAkB;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,SAAS,kBAAkB;","names":["React","memo","schema","isBrowser","isBrowser","memo","React","res","schema"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/WeaverseHydrogenRoot.tsx","../src/Effect.tsx","../src/hooks/use-studio.ts","../src/hooks/use-theme-settings.ts","../src/context.ts","../src/components/main.tsx","../src/components/index.ts","../src/weaverse-client.ts","../src/wrappers.ts","../src/placeholders.ts"],"sourcesContent":["import {\n Weaverse,\n WeaverseItemStore,\n useChildInstances,\n useItemInstance,\n useParentInstance,\n useWeaverse,\n type PlatformTypeEnum,\n} from '@weaverse/react'\nimport type {\n HydrogenComponentData,\n HydrogenElement,\n HydrogenPageData,\n WeaverseHydrogenParams,\n WeaverseInternal,\n WeaverseLoaderRequestInfo,\n} from './types'\nimport { generateDataFromSchema } from './utils'\n\nexport * from './WeaverseHydrogenRoot'\nexport { useThemeSettings } from './hooks/use-theme-settings'\nexport * from './types'\nexport * from './utils'\nexport * from './weaverse-client'\nexport * from './wrappers'\nexport * from './placeholders'\nexport { useChildInstances, useItemInstance, useParentInstance, useWeaverse }\n\nexport class WeaverseHydrogen extends Weaverse {\n platformType: PlatformTypeEnum = 'shopify-hydrogen'\n pageId: string\n internal: Partial<WeaverseInternal>\n requestInfo: WeaverseLoaderRequestInfo\n declare ItemConstructor: typeof WeaverseHydrogenItem\n declare data: HydrogenPageData\n static itemInstances: Map<string, WeaverseHydrogenItem>\n static elementRegistry: Map<string, HydrogenElement>\n\n constructor(params: WeaverseHydrogenParams) {\n let { internal, pageId, requestInfo, ...coreParams } = params\n super({ ...coreParams })\n this.internal = internal\n this.pageId = pageId\n this.requestInfo = requestInfo\n }\n}\n\nexport class WeaverseHydrogenItem extends WeaverseItemStore {\n declare weaverse: WeaverseHydrogen\n\n constructor(initialData: HydrogenComponentData, weaverse: WeaverseHydrogen) {\n super(initialData, weaverse)\n let { data, ...rest } = initialData\n Object.assign(this._store, this._schemaData, data, rest)\n }\n\n get Element(): HydrogenElement {\n return super.Element\n }\n\n get _schemaData() {\n if (this.Element?.schema) {\n return generateDataFromSchema(this.Element.schema)\n }\n return {}\n }\n}\n\nWeaverse.ItemConstructor = WeaverseHydrogenItem\n","import type {\n HydrogenComponentSchema,\n HydrogenThemeEnv,\n HydrogenThemeSchema,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\n\nexport function getRequestQueries<T = Record<string, string | boolean>>(\n request: Request,\n) {\n let url = new URL(request.url)\n return Array.from(url.searchParams.entries()).reduce(\n (q: Record<string, unknown>, [k, v]) => {\n q[k] = v === 'true' ? true : v === 'false' ? false : v\n return q\n },\n {},\n ) as T\n}\n\nexport function getWeaverseConfigs(\n request: Request,\n env: HydrogenThemeEnv,\n): WeaverseProjectConfigs {\n let queries = getRequestQueries<WeaverseStudioQueries>(request)\n let {\n WEAVERSE_PROJECT_ID,\n WEAVERSE_API_KEY,\n WEAVERSE_HOST,\n PUBLIC_STORE_DOMAIN,\n PUBLIC_STOREFRONT_API_TOKEN,\n } = env || {}\n let envFromProcess = (typeof process !== 'undefined' && process.env) || {}\n let {\n weaverseProjectId,\n weaverseHost,\n isDesignMode,\n weaverseVersion,\n weaverseApiKey,\n } = queries\n return {\n projectId:\n weaverseProjectId ||\n WEAVERSE_PROJECT_ID ||\n envFromProcess.WEAVERSE_PROJECT_ID ||\n '',\n weaverseHost:\n weaverseHost ||\n WEAVERSE_HOST ||\n envFromProcess.WEAVERSE_HOST ||\n 'https://studio.weaverse.io',\n weaverseApiKey:\n weaverseApiKey ||\n WEAVERSE_API_KEY ||\n envFromProcess.WEAVERSE_API_KEY ||\n '',\n weaverseVersion: weaverseVersion || '',\n isDesignMode: isDesignMode || false,\n publicEnv: {\n PUBLIC_STORE_DOMAIN: PUBLIC_STORE_DOMAIN || '',\n PUBLIC_STOREFRONT_API_TOKEN: PUBLIC_STOREFRONT_API_TOKEN || '',\n },\n }\n}\n\nexport function generateDataFromSchema({\n inspector,\n}: HydrogenComponentSchema | HydrogenThemeSchema) {\n let data: Record<string, any> = {}\n if (inspector) {\n for (let group of inspector) {\n for (let input of group.inputs) {\n let { name, defaultValue } = input\n if (name && defaultValue !== null && defaultValue !== undefined) {\n data[name] = defaultValue\n }\n }\n }\n }\n return data\n}\n\n/**\n * Resize an image to the specified dimensions.\n *\n * @param imageURL {string} URL of the image\n * @param size {string} Shopify size attribute\n * @returns {string} URL with size attribute\n *\n * @example\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x')\n * resizeImage('https://cdn.shopify.com/image.jpg', '100x100')\n */\nexport function resizeShopifyImage(imageURL: string, size: string): string {\n try {\n if (size === 'original') {\n return imageURL\n } else {\n let matches = imageURL.match(/(.*\\/[\\w-_.]+)\\.(\\w{2,4})/)\n // @ts-ignore\n return matches[1] + '_' + size + '.' + matches[2]\n }\n } catch (e) {\n return imageURL\n }\n}\n","import { Await, useLoaderData } from '@remix-run/react'\nimport { WeaverseRoot } from '@weaverse/react'\nimport React, { memo, Suspense } from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\n\nimport { WeaverseEffect } from '~/Effect'\nimport { createWeaverseInstance, ThemeSettingsProvider } from './context'\nimport { useThemeSettingsStore } from './hooks/use-theme-settings'\nimport type {\n HydrogenComponent,\n WeaverseHydrogenRootProps,\n WeaverseLoaderData,\n} from './types'\n\ntype WeaverseData = WeaverseLoaderData | Promise<WeaverseLoaderData>\n\nexport let WeaverseHydrogenRoot = memo(\n ({\n errorComponent: ErrorComponent = FallbackError,\n components,\n }: WeaverseHydrogenRootProps) => {\n let loaderData = useLoaderData() as {\n weaverseData: WeaverseData\n }\n let data = loaderData?.weaverseData\n \n if (data) {\n if (data instanceof Promise) {\n return (\n <ErrorBoundary fallbackRender={ErrorComponent}>\n <Suspense>\n <Await resolve={data}>\n {(resolvedData) => (\n <RenderRoot data={resolvedData} components={components} />\n )}\n </Await>\n </Suspense>\n </ErrorBoundary>\n )\n }\n return <RenderRoot data={data} components={components} />\n }\n return (\n <ErrorComponent\n error={{ message: 'No Weaverse data return from route loader!' }}\n />\n )\n },\n)\n\nfunction RenderRoot(props: {\n data: WeaverseLoaderData\n components: HydrogenComponent[]\n}) {\n let { data, components } = props\n let weaverse = createWeaverseInstance(data, components)\n return (\n <>\n <WeaverseRoot context={weaverse} />\n <WeaverseEffect context={weaverse} />\n </>\n )\n}\n\nexport function withWeaverse(Component: React.ComponentType<any>) {\n return (props: React.JSX.IntrinsicAttributes) => {\n let { settings } = useThemeSettingsStore()\n return (\n <ThemeSettingsProvider.Provider value={settings}>\n <Component {...props} />\n </ThemeSettingsProvider.Provider>\n )\n }\n}\n\nfunction FallbackError({ error }: { error?: { message?: string } }) {\n return <div>{error?.message || 'An unexpected error occurred'}</div>\n}\n","import { memo } from 'react'\nimport { useStudio } from '~/hooks/use-studio'\nimport type { WeaverseHydrogen } from './index'\n\nexport let WeaverseEffect = memo(\n ({ context }: { context: WeaverseHydrogen }) => {\n useStudio(context)\n return null\n },\n)\n","import {\n useLocation,\n useNavigate,\n useNavigation,\n useRevalidator,\n} from '@remix-run/react'\nimport { loadScript } from '@weaverse/react'\nimport { useEffect } from 'react'\nimport { type WeaverseHydrogen } from '~/index'\nimport { useThemeSettingsStore } from './use-theme-settings'\n\nexport function useStudio(weaverse: WeaverseHydrogen) {\n let { revalidate } = useRevalidator()\n let navigation = useNavigation()\n let { pathname, search } = useLocation()\n let navigate = useNavigate()\n let themeSettingsStore = useThemeSettingsStore()\n let { isDesignMode, weaverseHost, weaverseVersion } = weaverse\n\n useEffect(() => {\n if (navigation.state === 'idle' && isDesignMode) {\n weaverse.internal = {\n ...weaverse.internal,\n navigate,\n revalidate,\n themeSettingsStore,\n }\n let studioSrc = `${weaverseHost}/static/studio/hydrogen/index.js?v=${weaverseVersion}`\n loadScript(studioSrc)\n .then(() => {\n window.weaverseStudio?.init(weaverse)\n })\n .catch(console.error)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pathname, search, navigation.state])\n}\n","import { useRouteLoaderData } from '@remix-run/react'\nimport { isBrowser } from '@weaverse/react'\nimport { useSyncExternalStore } from 'react'\nimport type {\n HydrogenThemeSchema,\n HydrogenThemeSettings,\n Localizations,\n PublicEnv,\n RootRouteData,\n} from '~/types'\n\nexport class ThemeSettingsStore {\n settings: HydrogenThemeSettings = {}\n listeners: (() => void)[] = []\n countries?: Localizations\n schema?: HydrogenThemeSchema\n publicEnv?: PublicEnv\n\n constructor(data: RootRouteData['weaverseTheme']) {\n let { theme, countries, schema, publicEnv } = data || {}\n this.settings = { ...theme } || {}\n this.countries = countries\n this.schema = schema\n this.publicEnv = publicEnv\n if (isBrowser) {\n window.__weaverseThemeSettingsStore = this\n }\n }\n\n updateThemeSettings = (newSettings: HydrogenThemeSettings) => {\n this.settings = {\n ...this.settings,\n ...newSettings,\n }\n this.emitChange()\n }\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners = [...this.listeners, listener]\n return () => {\n this.listeners = this.listeners.filter((l) => l !== listener)\n }\n }\n\n getSnapshot = () => {\n return this.settings\n }\n\n getServerSnapshot = () => {\n return this.settings\n }\n\n emitChange = () => {\n for (let listener of this.listeners) {\n listener()\n }\n }\n}\n\nexport function useThemeSettingsStore() {\n let data = useRouteLoaderData('root') as RootRouteData\n if (isBrowser && window.__weaverseThemeSettingsStore) {\n return window.__weaverseThemeSettingsStore\n }\n return new ThemeSettingsStore(data?.weaverseTheme)\n}\n\nexport function useThemeSettings<T = HydrogenThemeSettings>() {\n let themeSettingsStore = useThemeSettingsStore()\n let settings = useSyncExternalStore(\n themeSettingsStore.subscribe,\n themeSettingsStore.getSnapshot,\n themeSettingsStore.getServerSnapshot,\n )\n return settings as T\n}\n","import { isBrowser } from '@weaverse/react'\nimport { createContext } from 'react'\nimport type {\n HydrogenComponent,\n HydrogenThemeSettings,\n WeaverseHydrogenParams,\n WeaverseLoaderData,\n} from './types'\nimport { WeaverseHydrogen } from './index'\nimport { defaultComponents } from '~/components'\n\nfunction registerComponents(components: HydrogenComponent[]) {\n components.forEach((comp) => {\n WeaverseHydrogen.registerElement({\n type: comp?.schema?.type,\n Component: comp?.default,\n schema: comp?.schema,\n loader: comp?.loader,\n })\n })\n}\n\nfunction createCachedWeaverseInstance(\n params: WeaverseHydrogenParams,\n): WeaverseHydrogen {\n if (isBrowser) {\n window.__weaverses = window.__weaverses || {}\n let weaverse = window.__weaverses[params.pageId]\n if (!weaverse) {\n weaverse = new WeaverseHydrogen(params)\n window.__weaverses[params.pageId] = weaverse\n }\n if (weaverse?.isDesignMode) {\n weaverse.requestInfo = params.requestInfo\n window.weaverseStudio?.refreshStudio(params)\n }\n return weaverse\n }\n return new WeaverseHydrogen(params)\n}\n\nexport function createWeaverseInstance(\n weaverseData: WeaverseLoaderData,\n components: HydrogenComponent[],\n) {\n let { page, configs, project, pageAssignment } = weaverseData || {}\n registerComponents(components)\n registerComponents(defaultComponents)\n return createCachedWeaverseInstance({\n ...configs,\n data: page,\n pageId: page?.id,\n internal: { project, pageAssignment },\n })\n}\n\nexport let STORE_PAGES = {\n INDEX: 'INDEX',\n PRODUCT: 'PRODUCT',\n ALL_PRODUCTS: 'ALL_PRODUCTS',\n COLLECTION: 'COLLECTION',\n COLLECTION_LIST: 'COLLECTION_LIST',\n PAGE: 'PAGE',\n BLOG: 'BLOG',\n ARTICLE: 'ARTICLE',\n CUSTOM: 'CUSTOM',\n}\n\nexport let ThemeSettingsProvider = createContext<HydrogenThemeSettings | null>(\n null,\n)\nThemeSettingsProvider.displayName = 'WeaverseThemeSettingsProvider'\n","import React, { forwardRef, type HTMLAttributes } from 'react'\nimport type { HydrogenComponentProps, HydrogenComponentSchema } from '~/types'\n\n/*\n Main is the default Weaverse component that is used to render the main content.\n This component wraps all the sections/components inside a Weaverse page.\n*/\nlet Main = forwardRef<\n HTMLDivElement,\n HydrogenComponentProps & HTMLAttributes<HTMLDivElement>\n>((props, ref) => {\n let { children, dangerouslySetInnerHTML, ...rest } = props\n\n return (\n // eslint-disable-next-line react/no-danger-with-children\n <div\n ref={ref}\n {...rest}\n children={children}\n dangerouslySetInnerHTML={children ? undefined : dangerouslySetInnerHTML}\n />\n )\n})\n\nexport default Main\n\nexport let schema: HydrogenComponentSchema = {\n type: 'main',\n title: 'Main',\n inspector: [],\n}\n","import * as Main from './main'\n\nimport type { HydrogenComponent } from '~/types'\n\nexport let defaultComponents: HydrogenComponent[] = [Main]\n","import { createWithCache, generateCacheControlHeader } from '@shopify/hydrogen'\nimport type {\n AllCacheOptions,\n FetchProjectPayload,\n FetchProjectRequestBody,\n FetchWithCacheOptions,\n HydrogenComponentData,\n HydrogenPageData,\n LoadPageParams,\n WeaverseClientArgs,\n WeaverseLoaderData,\n WeaverseProjectConfigs,\n WeaverseStudioQueries,\n} from './types'\nimport {\n generateDataFromSchema,\n getRequestQueries,\n getWeaverseConfigs,\n} from './utils'\n\nexport class WeaverseClient {\n API = 'api/public'\n basePageConfigs: Omit<WeaverseProjectConfigs, 'requestInfo'>\n basePageRequestBody: Omit<FetchProjectRequestBody, 'url' | 'countries'>\n configs: WeaverseProjectConfigs\n withCache: ReturnType<typeof createWithCache>\n\n request: WeaverseClientArgs['request']\n storefront: WeaverseClientArgs['storefront']\n components: WeaverseClientArgs['components']\n themeSchema: WeaverseClientArgs['themeSchema']\n env: WeaverseClientArgs['env']\n cache: WeaverseClientArgs['cache']\n waitUntil: WeaverseClientArgs['waitUntil']\n countries?: WeaverseClientArgs['countries']\n\n constructor(args: WeaverseClientArgs) {\n let {\n env,\n storefront,\n components,\n countries,\n cache,\n waitUntil,\n themeSchema,\n request,\n } = args\n this.request = request\n this.storefront = storefront\n this.components = components\n this.themeSchema = themeSchema\n this.env = env\n this.cache = cache\n this.waitUntil = waitUntil\n this.countries = countries\n this.withCache = createWithCache({ cache, waitUntil })\n\n this.configs = getWeaverseConfigs(request, env)\n this.basePageConfigs = {\n projectId: this.configs.projectId,\n weaverseHost: this.configs.weaverseHost,\n weaverseApiKey: this.configs.weaverseApiKey,\n weaverseVersion: this.configs.weaverseVersion,\n isDesignMode: this.configs.isDesignMode,\n }\n this.basePageRequestBody = {\n isDesignMode: this.configs.isDesignMode,\n i18n: storefront.i18n,\n projectId: this.configs.projectId,\n }\n }\n\n fetchWithCache = async <T>(\n url: string,\n options: FetchWithCacheOptions = {},\n ) => {\n let cacheKey = [url, options.body]\n let {\n strategy = this.storefront.CacheCustom({\n maxAge: 2,\n sMaxAge: 2,\n staleWhileRevalidate: 82800,\n }),\n ...reqInit\n } = options\n if (this.configs.isDesignMode) {\n try {\n const res = await fetch(url, reqInit)\n return await res.json<T>()\n } catch (err) {\n throw new Error(err)\n }\n }\n let res = this.withCache(cacheKey, strategy, async () => {\n let response = await fetch(url, {\n ...reqInit,\n headers: {\n 'Cache-Control': generateCacheControlHeader(strategy),\n ...reqInit.headers,\n },\n })\n if (!response.ok) {\n let error = await response.text()\n let { status, statusText } = response\n throw new Error(`${status} ${statusText} ${error}`)\n }\n return await response.json<T>()\n })\n return res as Promise<T>\n }\n\n loadThemeSettings = async (strategy?: AllCacheOptions) => {\n try {\n let { API, configs } = this\n let { weaverseHost, projectId, isDesignMode } = configs\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n let url = `${weaverseHost}/${API}/project_configs`\n let res\n let body = JSON.stringify({ isDesignMode, projectId })\n if (isDesignMode) {\n res = await fetch(url, { method: 'POST', body }).then((res) =>\n res.json(),\n )\n } else {\n res = await this.fetchWithCache(url, { method: 'POST', strategy, body })\n }\n let data: any = res || {}\n if (data?.theme && this.themeSchema?.inspector) {\n let defaultThemeSettings = {}\n if (this.themeSchema) {\n defaultThemeSettings = generateDataFromSchema(this.themeSchema)\n }\n data.theme = {\n ...defaultThemeSettings,\n ...data.theme,\n }\n }\n if (this.configs.isDesignMode) {\n data = {\n ...data,\n schema: this.themeSchema,\n countries: this.countries || [],\n publicEnv: this.configs.publicEnv,\n }\n }\n return data\n } catch (e) {\n console.error(`❌ Theme settings load failed.`, e)\n return null\n }\n }\n\n generateFallbackPage = (message: string): HydrogenPageData => {\n let rootId = crypto.randomUUID()\n return {\n id: 'fallback_page_' + Date.now(),\n rootId,\n name: 'Default Page',\n items: [\n {\n type: 'main',\n id: rootId,\n data: { dangerouslySetInnerHTML: { __html: message } },\n },\n ],\n }\n }\n\n loadPage = async (\n params: LoadPageParams = {},\n ): Promise<WeaverseLoaderData | null> => {\n // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n let { request, storefront, basePageRequestBody, basePageConfigs } = this\n let { projectId, isDesignMode, weaverseHost } = this.configs\n\n if (!projectId) {\n throw new Error('Missing Weaverse projectId!')\n }\n\n let { strategy, ...pageLoadParams } = params\n let body: FetchProjectRequestBody = {\n ...basePageRequestBody,\n params: pageLoadParams,\n url: request.url,\n }\n\n let reqInit: RequestInit = {\n method: 'POST',\n body: JSON.stringify(body),\n }\n let url = `${weaverseHost}/${this.API}/project`\n let payload: FetchProjectPayload\n\n if (isDesignMode) {\n payload = await fetch(url, reqInit).then((res) => res.json())\n } else {\n payload = await this.fetchWithCache(url, {\n ...reqInit,\n strategy,\n })\n }\n\n if (payload?.error) {\n throw new Error(payload?.error)\n }\n let { page, project, pageAssignment } = payload\n if (!project) {\n throw new Error(`Weaverse project not found. Id: ${projectId}`)\n }\n if (!page) {\n page = this.generateFallbackPage(`Please add new section to start.`)\n }\n if (page?.items) {\n let items = page.items\n page.items = await Promise.all(items.map(this.execComponentLoader))\n }\n let data: WeaverseLoaderData = {\n page,\n project,\n pageAssignment,\n configs: {\n ...basePageConfigs,\n requestInfo: {\n i18n: storefront.i18n,\n // TODO: @hta218 - migrate to Remix hooks\n queries: getRequestQueries<WeaverseStudioQueries>(request),\n pathname: new URL(request.url).pathname,\n search: new URL(request.url).search,\n },\n },\n }\n return resolve(data)\n } catch (e) {\n console.error(`❌ Page load failed.`, e)\n reject(e)\n }\n })\n }\n\n execComponentLoader = async (item: HydrogenComponentData) => {\n let { data = {}, type, id } = item\n let schema = this.components.find(({ schema }) => schema?.type === type)\n let loader = schema?.loader\n if (loader && typeof loader === 'function') {\n try {\n return {\n ...item,\n loaderData: await loader({\n data,\n weaverse: this,\n }),\n }\n } catch (e) {\n console.warn(`❌ Item loader run failed.`, type, id, e)\n return item\n }\n }\n return item\n }\n}\n","import { getSelectedProductOptions as hydrogen_getSelectedProductOptions } from '@shopify/hydrogen'\nimport type { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types'\n\nexport function getSelectedProductOptions(\n request: Request,\n): SelectedOptionInput[] {\n let options = hydrogen_getSelectedProductOptions(request)\n return options.filter(\n ({ name }) => name !== 'isDesignMode' && !name.startsWith('weaverse'),\n )\n}\n","export let IMAGES_PLACEHOLDERS = {\n logo_white:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-w-600x200.svg',\n logo_black:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-logo-k-600x200.svg',\n image:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-image-1024x1024.svg',\n banner_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-1-1800x900.svg',\n banner_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-lifestyle-2-1800x900.svg',\n collection_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-hats-1024x1024.svg',\n collection_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-shoes-1024x1024.svg',\n collection_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-glasses-1024x1024.svg',\n collection_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-lamps-1024x1024.svg',\n collection_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-bags-1024x1024.svg',\n collection_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-collection-watches-1024x1024.svg',\n product_1:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-3-1024x1024.svg',\n product_2:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-2-1024x1024.svg',\n product_3:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-1-1024x1024.svg',\n product_4:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-2-1024x1024.svg',\n product_5:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-1-1024x1024.svg',\n product_6:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-1-1024x1024.svg',\n product_7:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-2-1024x1024.svg',\n product_8:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-3-1024x1024.svg',\n product_9:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-1-1024x1024.svg',\n product_10:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-2-1024x1024.svg',\n product_11:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-2-1024x1024.svg',\n product_12:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-glasses-3-1024x1024.svg',\n product_13:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-shoe-3-1024x1024.svg',\n product_14:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-bag-3-1024x1024.svg',\n product_15:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-hat-1-1024x1024.svg',\n product_16:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-lamp-3-1024x1024.svg',\n product_17:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-1-1024x1024.svg',\n product_18:\n 'https://cdn.shopify.com/s/files/1/0838/0052/3057/files/fpo-product-watch-2-1024x1024.svg',\n}\n"],"mappings":"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","names":["React","memo","schema","isBrowser","isBrowser","memo","React","res","schema"]}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@weaverse/hydrogen",
|
|
3
3
|
"author": "Weaverse Team",
|
|
4
4
|
"description": "Components, hooks, and utilities for building Shopify Hydrogen websites with Weaverse",
|
|
5
|
-
"version": "3.2.
|
|
5
|
+
"version": "3.2.2",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"typings": "dist/index.d.ts",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
]
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@weaverse/react": "3.2.
|
|
45
|
+
"@weaverse/react": "3.2.2",
|
|
46
46
|
"react-error-boundary": "^4.0.13"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|