@weaverse/hydrogen 5.13.1 → 5.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +45 -4
- package/dist/index.d.ts +45 -4
- package/dist/index.js +122 -15
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +121 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
|
|
2
2
|
import { Weaverse, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
|
|
3
3
|
export { PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
4
|
-
import { PageType, InspectorGroup, SchemaType, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
|
|
4
|
+
import { PageType, InspectorGroup, SchemaType, PageSEOData, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
|
|
5
5
|
export * from '@weaverse/schema';
|
|
6
6
|
export { BasicInput, HeadingInput, InputType, InspectorGroup, PageType, SchemaValidationIssue, SchemaValidationResult } from '@weaverse/schema';
|
|
7
7
|
import { createWithCache, CachingStrategy, I18nBase, HydrogenContext, HydrogenEnv } from '@shopify/hydrogen';
|
|
@@ -9,7 +9,7 @@ export { CachingStrategy } from '@shopify/hydrogen';
|
|
|
9
9
|
import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
10
10
|
import * as React$1 from 'react';
|
|
11
11
|
import { ReactNode, ComponentType, JSX, ForwardRefExoticComponent } from 'react';
|
|
12
|
-
import { NavigateFunction, UIMatch } from 'react-router';
|
|
12
|
+
import { NavigateFunction, UIMatch, MetaDescriptor } from 'react-router';
|
|
13
13
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -622,6 +622,13 @@ interface HydrogenPageData extends WeaverseProjectDataType {
|
|
|
622
622
|
id: string;
|
|
623
623
|
items: HydrogenComponentData[];
|
|
624
624
|
name: string;
|
|
625
|
+
/**
|
|
626
|
+
* Page-level SEO metadata published by Weaverse Builder. `null` when
|
|
627
|
+
* the page has no `PageSeo` row; absent on revision snapshots that
|
|
628
|
+
* predate the SEO feature. Themes should treat both as "no Weaverse
|
|
629
|
+
* override".
|
|
630
|
+
*/
|
|
631
|
+
seo?: PageSEOData | null;
|
|
625
632
|
[key: string]: any;
|
|
626
633
|
}
|
|
627
634
|
type WeaverseI18n = I18nBase & {
|
|
@@ -923,7 +930,6 @@ declare module '@shopify/hydrogen' {
|
|
|
923
930
|
PUBLIC_SHOPIFY_INBOX_SHOP_ID: string;
|
|
924
931
|
PUBLIC_STORE_DOMAIN: string;
|
|
925
932
|
PUBLIC_STOREFRONT_API_TOKEN: string;
|
|
926
|
-
WEAVERSE_API_BASE?: string;
|
|
927
933
|
WEAVERSE_API_KEY: string;
|
|
928
934
|
WEAVERSE_HOST?: string;
|
|
929
935
|
WEAVERSE_PROJECT_ID: string;
|
|
@@ -1073,6 +1079,41 @@ declare function useWeaverseDataContext(): WeaverseDataContext;
|
|
|
1073
1079
|
*/
|
|
1074
1080
|
declare function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext;
|
|
1075
1081
|
|
|
1082
|
+
/**
|
|
1083
|
+
* Convert a Weaverse page-level SEO payload into React Router
|
|
1084
|
+
* `MetaDescriptor[]`. Pure, synchronous, tree-shakeable — does not fetch.
|
|
1085
|
+
*
|
|
1086
|
+
* Behavior:
|
|
1087
|
+
* - `title` → top-level `{ title }` descriptor.
|
|
1088
|
+
* - `description` / `keywords` → `<meta name="...">`.
|
|
1089
|
+
* - `canonicalUrl` → `<link rel="canonical">`.
|
|
1090
|
+
* - `openGraph.*` → `<meta property="og:*">`. `og:type` defaults to
|
|
1091
|
+
* `'website'` when any other OG field is present.
|
|
1092
|
+
* - `twitter.*` → `<meta name="twitter:*">`. `twitter:card` defaults to
|
|
1093
|
+
* `'summary'` when any other Twitter field is present.
|
|
1094
|
+
* - `robots` is always emitted (defaults to `'index,follow'`) so themes
|
|
1095
|
+
* stacking multiple SEO sources have a deterministic last word on
|
|
1096
|
+
* indexing for Weaverse-managed pages.
|
|
1097
|
+
* - Empty strings / missing fields are filtered before return so empty
|
|
1098
|
+
* descriptors don't override earlier sources (e.g. Hydrogen
|
|
1099
|
+
* `getSeoMeta`).
|
|
1100
|
+
*/
|
|
1101
|
+
declare function formatMetaDescriptors(seo: PageSEOData | null | undefined): MetaDescriptor[];
|
|
1102
|
+
/**
|
|
1103
|
+
* Convenience accessor: pull `page.seo` out of a `WeaverseLoaderData`
|
|
1104
|
+
* (or `HydrogenPageData`) and emit `MetaDescriptor[]`. Null-safe.
|
|
1105
|
+
*
|
|
1106
|
+
* @example
|
|
1107
|
+
* ```ts
|
|
1108
|
+
* export const meta: MetaFunction<typeof loader> = ({ data }) => {
|
|
1109
|
+
* return getWeaverseSeoMeta(data?.weaverseData)
|
|
1110
|
+
* }
|
|
1111
|
+
* ```
|
|
1112
|
+
*/
|
|
1113
|
+
declare function getWeaverseSeoMeta(data: WeaverseLoaderData | HydrogenPageData | {
|
|
1114
|
+
page?: HydrogenPageData | null;
|
|
1115
|
+
} | null | undefined): MetaDescriptor[];
|
|
1116
|
+
|
|
1076
1117
|
/**
|
|
1077
1118
|
* Extract and parse query parameters from a request URL.
|
|
1078
1119
|
* Supports optional allowlist for security-sensitive applications.
|
|
@@ -1155,4 +1196,4 @@ declare const IMAGES_PLACEHOLDERS: {
|
|
|
1155
1196
|
product_18: string;
|
|
1156
1197
|
};
|
|
1157
1198
|
|
|
1158
|
-
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type CustomPageEntry, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, ThemeTextStore, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
1199
|
+
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type CustomPageEntry, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, ThemeTextStore, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, formatMetaDescriptors, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseSeoMeta, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SelectedOptionInput } from '@shopify/hydrogen/storefront-api-types';
|
|
2
2
|
import { Weaverse, WeaverseItemStore, ElementData, WeaverseElement, WeaverseProjectDataType, WeaverseCoreParams, WeaverseResourcePickerData } from '@weaverse/react';
|
|
3
3
|
export { PositionInputValue, WeaverseImage, WeaverseVideo, isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
4
|
-
import { PageType, InspectorGroup, SchemaType, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
|
|
4
|
+
import { PageType, InspectorGroup, SchemaType, PageSEOData, ComponentPresets, SchemaValidationResult } from '@weaverse/schema';
|
|
5
5
|
export * from '@weaverse/schema';
|
|
6
6
|
export { BasicInput, HeadingInput, InputType, InspectorGroup, PageType, SchemaValidationIssue, SchemaValidationResult } from '@weaverse/schema';
|
|
7
7
|
import { createWithCache, CachingStrategy, I18nBase, HydrogenContext, HydrogenEnv } from '@shopify/hydrogen';
|
|
@@ -9,7 +9,7 @@ export { CachingStrategy } from '@shopify/hydrogen';
|
|
|
9
9
|
import { LoaderFunctionArgs, AppLoadContext } from '@shopify/remix-oxygen';
|
|
10
10
|
import * as React$1 from 'react';
|
|
11
11
|
import { ReactNode, ComponentType, JSX, ForwardRefExoticComponent } from 'react';
|
|
12
|
-
import { NavigateFunction, UIMatch } from 'react-router';
|
|
12
|
+
import { NavigateFunction, UIMatch, MetaDescriptor } from 'react-router';
|
|
13
13
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -622,6 +622,13 @@ interface HydrogenPageData extends WeaverseProjectDataType {
|
|
|
622
622
|
id: string;
|
|
623
623
|
items: HydrogenComponentData[];
|
|
624
624
|
name: string;
|
|
625
|
+
/**
|
|
626
|
+
* Page-level SEO metadata published by Weaverse Builder. `null` when
|
|
627
|
+
* the page has no `PageSeo` row; absent on revision snapshots that
|
|
628
|
+
* predate the SEO feature. Themes should treat both as "no Weaverse
|
|
629
|
+
* override".
|
|
630
|
+
*/
|
|
631
|
+
seo?: PageSEOData | null;
|
|
625
632
|
[key: string]: any;
|
|
626
633
|
}
|
|
627
634
|
type WeaverseI18n = I18nBase & {
|
|
@@ -923,7 +930,6 @@ declare module '@shopify/hydrogen' {
|
|
|
923
930
|
PUBLIC_SHOPIFY_INBOX_SHOP_ID: string;
|
|
924
931
|
PUBLIC_STORE_DOMAIN: string;
|
|
925
932
|
PUBLIC_STOREFRONT_API_TOKEN: string;
|
|
926
|
-
WEAVERSE_API_BASE?: string;
|
|
927
933
|
WEAVERSE_API_KEY: string;
|
|
928
934
|
WEAVERSE_HOST?: string;
|
|
929
935
|
WEAVERSE_PROJECT_ID: string;
|
|
@@ -1073,6 +1079,41 @@ declare function useWeaverseDataContext(): WeaverseDataContext;
|
|
|
1073
1079
|
*/
|
|
1074
1080
|
declare function createWeaverseDataContext(matches: UIMatch<unknown, unknown>[]): WeaverseDataContext;
|
|
1075
1081
|
|
|
1082
|
+
/**
|
|
1083
|
+
* Convert a Weaverse page-level SEO payload into React Router
|
|
1084
|
+
* `MetaDescriptor[]`. Pure, synchronous, tree-shakeable — does not fetch.
|
|
1085
|
+
*
|
|
1086
|
+
* Behavior:
|
|
1087
|
+
* - `title` → top-level `{ title }` descriptor.
|
|
1088
|
+
* - `description` / `keywords` → `<meta name="...">`.
|
|
1089
|
+
* - `canonicalUrl` → `<link rel="canonical">`.
|
|
1090
|
+
* - `openGraph.*` → `<meta property="og:*">`. `og:type` defaults to
|
|
1091
|
+
* `'website'` when any other OG field is present.
|
|
1092
|
+
* - `twitter.*` → `<meta name="twitter:*">`. `twitter:card` defaults to
|
|
1093
|
+
* `'summary'` when any other Twitter field is present.
|
|
1094
|
+
* - `robots` is always emitted (defaults to `'index,follow'`) so themes
|
|
1095
|
+
* stacking multiple SEO sources have a deterministic last word on
|
|
1096
|
+
* indexing for Weaverse-managed pages.
|
|
1097
|
+
* - Empty strings / missing fields are filtered before return so empty
|
|
1098
|
+
* descriptors don't override earlier sources (e.g. Hydrogen
|
|
1099
|
+
* `getSeoMeta`).
|
|
1100
|
+
*/
|
|
1101
|
+
declare function formatMetaDescriptors(seo: PageSEOData | null | undefined): MetaDescriptor[];
|
|
1102
|
+
/**
|
|
1103
|
+
* Convenience accessor: pull `page.seo` out of a `WeaverseLoaderData`
|
|
1104
|
+
* (or `HydrogenPageData`) and emit `MetaDescriptor[]`. Null-safe.
|
|
1105
|
+
*
|
|
1106
|
+
* @example
|
|
1107
|
+
* ```ts
|
|
1108
|
+
* export const meta: MetaFunction<typeof loader> = ({ data }) => {
|
|
1109
|
+
* return getWeaverseSeoMeta(data?.weaverseData)
|
|
1110
|
+
* }
|
|
1111
|
+
* ```
|
|
1112
|
+
*/
|
|
1113
|
+
declare function getWeaverseSeoMeta(data: WeaverseLoaderData | HydrogenPageData | {
|
|
1114
|
+
page?: HydrogenPageData | null;
|
|
1115
|
+
} | null | undefined): MetaDescriptor[];
|
|
1116
|
+
|
|
1076
1117
|
/**
|
|
1077
1118
|
* Extract and parse query parameters from a request URL.
|
|
1078
1119
|
* Supports optional allowlist for security-sensitive applications.
|
|
@@ -1155,4 +1196,4 @@ declare const IMAGES_PLACEHOLDERS: {
|
|
|
1155
1196
|
product_18: string;
|
|
1156
1197
|
};
|
|
1157
1198
|
|
|
1158
|
-
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type CustomPageEntry, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, ThemeTextStore, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
|
1199
|
+
export { type CacheResponseValidator, type ComponentDataValue, type ComponentLoaderArgs, type CreateHydrogenSchemaOptions, type CustomPageEntry, type DirectFetchResponse, type FetchProjectPayload, type FetchProjectRequestBody, type HydrogenComponent, type HydrogenComponentData, type HydrogenComponentPresets, type HydrogenComponentProps, type HydrogenComponentSchema, type HydrogenElement, type HydrogenPageAssignment, type HydrogenPageData, type HydrogenProjectType, type HydrogenSchemaValidationResult, type HydrogenThemeSchema, type HydrogenThemeSettings, IMAGES_PLACEHOLDERS, type LoadPageParams, type ProjectIdValidationResult, type ProjectIdValue, type PublicEnv, type RouteLoaderArgs, type ThemeSettingsResponse, ThemeTextProvider, type ThemeTextProviderProps, ThemeTextStore, type ThemeTextValue, type TranslateFunction, type TranslationChanges, type TranslationEntry, type TranslationItemEntry, type TranslationMap, type TranslationMapEntry, type WeaverseArticle, type WeaverseBlog, WeaverseClient, type WeaverseClientArgs, type WeaverseCollection, type WeaverseDataContext, WeaverseError, WeaverseHydrogen, WeaverseHydrogenItem, type WeaverseHydrogenParams, WeaverseHydrogenRoot, type WeaverseI18n, type WeaverseInternal, type WeaverseLoaderData, type WeaverseLoaderRequestInfo, type WeaverseMetaObject, type WeaverseProduct, type WeaverseProjectConfigs, type WeaverseStudioQueries, type WithCacheFetchResponse, type WithWeaverseOptions, createWeaverseDataContext, defaultComponents, formatMetaDescriptors, generateDataFromSchema, getNestedKey, getPreviewData, getRequestQueries, getSelectedProductOptions, getWeaverseConfigs, getWeaverseSeoMeta, hasError, hasWeaverseStudio, interpolate, isFetchProjectPayload, isProjectIdFunction, isThemeSettingsResponse, isValidHydrogenSchema, isWithCacheFetchResponse, registerComponent, useThemeSettings, useThemeText, useWeaverseDataContext, withWeaverse };
|
package/dist/index.js
CHANGED
|
@@ -143,6 +143,73 @@ function useWeaverseDataContext() {
|
|
|
143
143
|
function createWeaverseDataContext(matches) {
|
|
144
144
|
return createFlatDataContext(matches);
|
|
145
145
|
}
|
|
146
|
+
|
|
147
|
+
// src/seo.ts
|
|
148
|
+
function formatMetaDescriptors(seo) {
|
|
149
|
+
if (!seo) {
|
|
150
|
+
return [{ name: "robots", content: "index,follow" }];
|
|
151
|
+
}
|
|
152
|
+
let descriptors = [];
|
|
153
|
+
if (seo.title) {
|
|
154
|
+
descriptors.push({ title: seo.title });
|
|
155
|
+
}
|
|
156
|
+
if (seo.description) {
|
|
157
|
+
descriptors.push({ name: "description", content: seo.description });
|
|
158
|
+
}
|
|
159
|
+
if (seo.keywords) {
|
|
160
|
+
descriptors.push({ name: "keywords", content: seo.keywords });
|
|
161
|
+
}
|
|
162
|
+
if (seo.canonicalUrl) {
|
|
163
|
+
descriptors.push({
|
|
164
|
+
tagName: "link",
|
|
165
|
+
rel: "canonical",
|
|
166
|
+
href: seo.canonicalUrl
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
let og = seo.openGraph;
|
|
170
|
+
if (og && (og.title || og.description || og.image || og.type)) {
|
|
171
|
+
if (og.title) {
|
|
172
|
+
descriptors.push({ property: "og:title", content: og.title });
|
|
173
|
+
}
|
|
174
|
+
if (og.description) {
|
|
175
|
+
descriptors.push({ property: "og:description", content: og.description });
|
|
176
|
+
}
|
|
177
|
+
if (og.image) {
|
|
178
|
+
descriptors.push({ property: "og:image", content: og.image });
|
|
179
|
+
}
|
|
180
|
+
descriptors.push({ property: "og:type", content: og.type || "website" });
|
|
181
|
+
}
|
|
182
|
+
let tw = seo.twitter;
|
|
183
|
+
if (tw && (tw.title || tw.description || tw.image || tw.cardType)) {
|
|
184
|
+
descriptors.push({
|
|
185
|
+
name: "twitter:card",
|
|
186
|
+
content: tw.cardType || "summary"
|
|
187
|
+
});
|
|
188
|
+
if (tw.title) {
|
|
189
|
+
descriptors.push({ name: "twitter:title", content: tw.title });
|
|
190
|
+
}
|
|
191
|
+
if (tw.description) {
|
|
192
|
+
descriptors.push({ name: "twitter:description", content: tw.description });
|
|
193
|
+
}
|
|
194
|
+
if (tw.image) {
|
|
195
|
+
descriptors.push({ name: "twitter:image", content: tw.image });
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
let index = seo.robots?.index !== false;
|
|
199
|
+
let follow = seo.robots?.follow !== false;
|
|
200
|
+
descriptors.push({
|
|
201
|
+
name: "robots",
|
|
202
|
+
content: `${index ? "index" : "noindex"},${follow ? "follow" : "nofollow"}`
|
|
203
|
+
});
|
|
204
|
+
return descriptors;
|
|
205
|
+
}
|
|
206
|
+
function getWeaverseSeoMeta(data) {
|
|
207
|
+
if (!data) {
|
|
208
|
+
return formatMetaDescriptors(null);
|
|
209
|
+
}
|
|
210
|
+
let page = "items" in data && "id" in data ? data : data.page ?? null;
|
|
211
|
+
return formatMetaDescriptors(page?.seo ?? null);
|
|
212
|
+
}
|
|
146
213
|
function isProjectIdFunction(projectId) {
|
|
147
214
|
return typeof projectId === "function";
|
|
148
215
|
}
|
|
@@ -230,7 +297,6 @@ function getWeaverseConfigs(request, env) {
|
|
|
230
297
|
WEAVERSE_PROJECT_ID,
|
|
231
298
|
WEAVERSE_API_KEY,
|
|
232
299
|
WEAVERSE_HOST,
|
|
233
|
-
WEAVERSE_API_BASE,
|
|
234
300
|
PUBLIC_STORE_DOMAIN,
|
|
235
301
|
PUBLIC_STOREFRONT_API_TOKEN
|
|
236
302
|
} = env || {};
|
|
@@ -246,10 +312,11 @@ function getWeaverseConfigs(request, env) {
|
|
|
246
312
|
} = queries;
|
|
247
313
|
let url = new URL(request.url);
|
|
248
314
|
let isRevisionPreview = url.searchParams.has("__revisionId");
|
|
315
|
+
let resolvedWeaverseHost = weaverseHost || WEAVERSE_HOST || envFromProcess.WEAVERSE_HOST || "https://studio.weaverse.io";
|
|
249
316
|
return {
|
|
250
317
|
projectId: weaverseProjectId || WEAVERSE_PROJECT_ID || envFromProcess.WEAVERSE_PROJECT_ID || "",
|
|
251
|
-
weaverseHost:
|
|
252
|
-
weaverseApiBase:
|
|
318
|
+
weaverseHost: resolvedWeaverseHost,
|
|
319
|
+
weaverseApiBase: resolvedWeaverseHost,
|
|
253
320
|
weaverseApiKey: weaverseApiKey || WEAVERSE_API_KEY || envFromProcess.WEAVERSE_API_KEY || "",
|
|
254
321
|
weaverseVersion: weaverseVersion || "",
|
|
255
322
|
isDesignMode,
|
|
@@ -440,6 +507,46 @@ function hasWeaverseData(value) {
|
|
|
440
507
|
}
|
|
441
508
|
return value.weaverseData !== void 0;
|
|
442
509
|
}
|
|
510
|
+
|
|
511
|
+
// src/utils/studio-request-info.ts
|
|
512
|
+
function getBrowserLocation() {
|
|
513
|
+
if (typeof window === "undefined") {
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
return window.location;
|
|
517
|
+
}
|
|
518
|
+
function getQueriesFromSearch(search) {
|
|
519
|
+
let queries = {};
|
|
520
|
+
let params = new URLSearchParams(search);
|
|
521
|
+
for (let [key, value] of params.entries()) {
|
|
522
|
+
if (value === "true") {
|
|
523
|
+
queries[key] = true;
|
|
524
|
+
} else if (value === "false") {
|
|
525
|
+
queries[key] = false;
|
|
526
|
+
} else {
|
|
527
|
+
queries[key] = value;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
return queries;
|
|
531
|
+
}
|
|
532
|
+
function normalizeDesignModeRequestInfo(params, browserLocation = getBrowserLocation()) {
|
|
533
|
+
if (!(params.isDesignMode && browserLocation)) {
|
|
534
|
+
return params;
|
|
535
|
+
}
|
|
536
|
+
let { pathname, search } = browserLocation;
|
|
537
|
+
if (params.requestInfo.pathname === pathname && params.requestInfo.search === search) {
|
|
538
|
+
return params;
|
|
539
|
+
}
|
|
540
|
+
return {
|
|
541
|
+
...params,
|
|
542
|
+
requestInfo: {
|
|
543
|
+
...params.requestInfo,
|
|
544
|
+
pathname,
|
|
545
|
+
queries: getQueriesFromSearch(search),
|
|
546
|
+
search
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
}
|
|
443
550
|
var ThemeSettingsStore = class {
|
|
444
551
|
settings = {};
|
|
445
552
|
schema;
|
|
@@ -759,22 +866,23 @@ var WeaverseHydrogen = class extends react.Weaverse {
|
|
|
759
866
|
};
|
|
760
867
|
};
|
|
761
868
|
function createWeaverseInstance(params) {
|
|
869
|
+
const normalizedParams = normalizeDesignModeRequestInfo(params);
|
|
762
870
|
if (react.isBrowser) {
|
|
763
871
|
window.__weaverses = window.__weaverses || {};
|
|
764
|
-
let weaverse = window.__weaverses[
|
|
765
|
-
if (!weaverse || weaverse?.requestInfo?.pathname !==
|
|
766
|
-
weaverse = new WeaverseHydrogen(
|
|
767
|
-
window.__weaverses[
|
|
872
|
+
let weaverse = window.__weaverses[normalizedParams.pageId];
|
|
873
|
+
if (!weaverse || weaverse?.requestInfo?.pathname !== normalizedParams.requestInfo.pathname || weaverse?.requestInfo?.search !== normalizedParams.requestInfo.search) {
|
|
874
|
+
weaverse = new WeaverseHydrogen(normalizedParams);
|
|
875
|
+
window.__weaverses[normalizedParams.pageId] = weaverse;
|
|
768
876
|
}
|
|
769
877
|
if (weaverse?.isDesignMode) {
|
|
770
|
-
weaverse.requestInfo =
|
|
878
|
+
weaverse.requestInfo = normalizedParams.requestInfo;
|
|
771
879
|
if (hasWeaverseStudio(window)) {
|
|
772
|
-
window.weaverseStudio.refreshStudio(
|
|
880
|
+
window.weaverseStudio.refreshStudio(normalizedParams);
|
|
773
881
|
}
|
|
774
882
|
}
|
|
775
883
|
return weaverse;
|
|
776
884
|
}
|
|
777
|
-
return new WeaverseHydrogen(
|
|
885
|
+
return new WeaverseHydrogen(normalizedParams);
|
|
778
886
|
}
|
|
779
887
|
var StudioBridge = react$1.memo(({ context }) => {
|
|
780
888
|
useStudio(context);
|
|
@@ -1219,11 +1327,8 @@ var WeaverseClient = class {
|
|
|
1219
1327
|
}
|
|
1220
1328
|
};
|
|
1221
1329
|
// Helper method for building API URLs consistently
|
|
1222
|
-
getApiUrl(endpoint
|
|
1223
|
-
const { weaverseHost
|
|
1224
|
-
if (useProxy) {
|
|
1225
|
-
return `${weaverseApiBase}/v1/${endpoint}?projectId=${projectId}`;
|
|
1226
|
-
}
|
|
1330
|
+
getApiUrl(endpoint) {
|
|
1331
|
+
const { weaverseHost } = this.configs;
|
|
1227
1332
|
return `${weaverseHost}/api/public/${endpoint}`;
|
|
1228
1333
|
}
|
|
1229
1334
|
/**
|
|
@@ -1735,12 +1840,14 @@ exports.WeaverseHydrogenItem = WeaverseHydrogenItem;
|
|
|
1735
1840
|
exports.WeaverseHydrogenRoot = WeaverseHydrogenRoot;
|
|
1736
1841
|
exports.createWeaverseDataContext = createWeaverseDataContext;
|
|
1737
1842
|
exports.defaultComponents = defaultComponents;
|
|
1843
|
+
exports.formatMetaDescriptors = formatMetaDescriptors;
|
|
1738
1844
|
exports.generateDataFromSchema = generateDataFromSchema;
|
|
1739
1845
|
exports.getNestedKey = getNestedKey;
|
|
1740
1846
|
exports.getPreviewData = getPreviewData;
|
|
1741
1847
|
exports.getRequestQueries = getRequestQueries;
|
|
1742
1848
|
exports.getSelectedProductOptions = getSelectedProductOptions;
|
|
1743
1849
|
exports.getWeaverseConfigs = getWeaverseConfigs;
|
|
1850
|
+
exports.getWeaverseSeoMeta = getWeaverseSeoMeta;
|
|
1744
1851
|
exports.hasError = hasError;
|
|
1745
1852
|
exports.hasWeaverseStudio = hasWeaverseStudio;
|
|
1746
1853
|
exports.interpolate = interpolate;
|