@weaverse/next 0.1.0-alpha.9 → 1.0.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/README.md +161 -73
- package/dist/{chunk-6PMZ77RA.mjs → chunk-OSC5HR5V.mjs} +117 -8
- package/dist/chunk-OSC5HR5V.mjs.map +1 -0
- package/dist/client-boundary.js +1425 -0
- package/dist/client-boundary.js.map +1 -0
- package/dist/client-boundary.mjs +1395 -0
- package/dist/client-boundary.mjs.map +1 -0
- package/dist/index.js +292 -1003
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -966
- package/dist/index.mjs.map +1 -1
- package/dist/server.js +321 -91
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +205 -28
- package/dist/server.mjs.map +1 -1
- package/dist/types/client-boundary.d.ts +25 -0
- package/dist/types/client-boundary.d.ts.map +1 -0
- package/dist/types/client.d.ts +16 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/hooks.d.ts +20 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +33 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/item.d.ts +60 -0
- package/dist/types/item.d.ts.map +1 -0
- package/dist/types/loader.d.ts +25 -0
- package/dist/types/loader.d.ts.map +1 -0
- package/dist/types/main.d.ts +11 -0
- package/dist/types/main.d.ts.map +1 -0
- package/dist/types/provider.d.ts +82 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/registry.d.ts +15 -0
- package/dist/types/registry.d.ts.map +1 -0
- package/dist/types/renderer.d.ts +21 -0
- package/dist/types/renderer.d.ts.map +1 -0
- package/dist/types/request-info.d.ts +19 -0
- package/dist/types/request-info.d.ts.map +1 -0
- package/dist/types/revalidate-item.d.ts +82 -0
- package/dist/types/revalidate-item.d.ts.map +1 -0
- package/dist/types/root-provider.d.ts +62 -0
- package/dist/types/root-provider.d.ts.map +1 -0
- package/dist/types/runtime.d.ts +113 -0
- package/dist/types/runtime.d.ts.map +1 -0
- package/dist/types/seo.d.ts +55 -0
- package/dist/types/seo.d.ts.map +1 -0
- package/dist/types/server/configs.d.ts +27 -0
- package/dist/types/server/configs.d.ts.map +1 -0
- package/dist/types/server/normalize-page-url.d.ts +19 -0
- package/dist/types/server/normalize-page-url.d.ts.map +1 -0
- package/dist/types/server/revalidate-handler.d.ts +55 -0
- package/dist/types/server/revalidate-handler.d.ts.map +1 -0
- package/dist/types/server/server-client.d.ts +21 -0
- package/dist/types/server/server-client.d.ts.map +1 -0
- package/dist/types/server.d.ts +19 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/studio-bridge.d.ts +16 -0
- package/dist/types/studio-bridge.d.ts.map +1 -0
- package/dist/types/studio-connect.d.ts +27 -0
- package/dist/types/studio-connect.d.ts.map +1 -0
- package/dist/types/studio-router.d.ts +50 -0
- package/dist/types/studio-router.d.ts.map +1 -0
- package/dist/types/studio-script-src.d.ts +12 -0
- package/dist/types/studio-script-src.d.ts.map +1 -0
- package/dist/types/theme-settings-store.d.ts +18 -0
- package/dist/types/theme-settings-store.d.ts.map +1 -0
- package/dist/types/translate.d.ts +56 -0
- package/dist/types/translate.d.ts.map +1 -0
- package/dist/types/translation-context.d.ts +109 -0
- package/dist/types/translation-context.d.ts.map +1 -0
- package/dist/types/translation-store.d.ts +44 -0
- package/dist/types/translation-store.d.ts.map +1 -0
- package/dist/types/types.d.ts +665 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/use-weaverse-next-studio.d.ts +34 -0
- package/dist/types/use-weaverse-next-studio.d.ts.map +1 -0
- package/dist/types/utils.d.ts +22 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +12 -27
- package/src/client-boundary.ts +50 -0
- package/src/client.ts +102 -0
- package/src/hooks.ts +50 -0
- package/src/index.ts +143 -0
- package/src/item.ts +167 -0
- package/src/loader.ts +135 -0
- package/src/main.tsx +45 -0
- package/src/provider.tsx +223 -0
- package/src/registry.ts +63 -0
- package/src/renderer.tsx +100 -0
- package/src/request-info.ts +124 -0
- package/src/revalidate-item.ts +211 -0
- package/src/root-provider.tsx +180 -0
- package/src/runtime.ts +555 -0
- package/src/seo.ts +157 -0
- package/src/server/configs.ts +178 -0
- package/src/server/normalize-page-url.ts +73 -0
- package/src/server/revalidate-handler.ts +357 -0
- package/src/server/server-client.ts +728 -0
- package/src/server.ts +67 -0
- package/src/studio-bridge.tsx +82 -0
- package/src/studio-connect.tsx +88 -0
- package/src/studio-router.ts +85 -0
- package/src/studio-script-src.ts +128 -0
- package/src/theme-settings-store.ts +47 -0
- package/src/translate.ts +125 -0
- package/src/translation-context.tsx +182 -0
- package/src/translation-store.ts +69 -0
- package/src/types.ts +753 -0
- package/src/use-weaverse-next-studio.tsx +106 -0
- package/src/utils.ts +49 -0
- package/dist/chunk-6PMZ77RA.mjs.map +0 -1
- package/dist/index.d.mts +0 -580
- package/dist/index.d.ts +0 -580
- package/dist/seo-Dos9t22_.d.mts +0 -477
- package/dist/seo-Dos9t22_.d.ts +0 -477
- package/dist/server.d.mts +0 -99
- package/dist/server.d.ts +0 -99
|
@@ -0,0 +1,665 @@
|
|
|
1
|
+
import type { WeaverseElement, WeaverseResourcePickerData } from '@weaverse/react';
|
|
2
|
+
import type { InspectorGroup, PageSEOData, PageType, SchemaType, ThemeRoutes } from '@weaverse/schema';
|
|
3
|
+
import type { ComponentType, ForwardRefExoticComponent, ReactNode } from 'react';
|
|
4
|
+
import type { TranslationStore } from './translation-store';
|
|
5
|
+
/** Request metadata exposed to the Studio runtime. */
|
|
6
|
+
export interface WeaverseNextRequestInfo {
|
|
7
|
+
/** Route handle used for page assignment. */
|
|
8
|
+
handle?: string;
|
|
9
|
+
/** Locale and market information for the current request. */
|
|
10
|
+
i18n?: WeaverseNextI18n;
|
|
11
|
+
/** Weaverse page type resolved by the route. */
|
|
12
|
+
pageType?: PageType;
|
|
13
|
+
/** URL pathname without the query string. */
|
|
14
|
+
pathname: string;
|
|
15
|
+
/** Query parameters, with `true` and `false` converted to booleans. */
|
|
16
|
+
queries: Record<string, string | boolean>;
|
|
17
|
+
/** Serialized query string, including the leading `?` when non-empty. */
|
|
18
|
+
search: string;
|
|
19
|
+
}
|
|
20
|
+
/** External store used by React and Studio for live theme-setting updates. */
|
|
21
|
+
export interface WeaverseNextThemeSettingsStore {
|
|
22
|
+
/** Return the theme-settings snapshot during server rendering. */
|
|
23
|
+
getServerSnapshot: () => Record<string, unknown>;
|
|
24
|
+
/** Return the current theme-settings snapshot. */
|
|
25
|
+
getSnapshot: () => Record<string, unknown>;
|
|
26
|
+
/** Public environment values exposed with the theme settings. */
|
|
27
|
+
publicEnv?: Record<string, string | undefined>;
|
|
28
|
+
/** Theme schema associated with this store. */
|
|
29
|
+
schema?: SchemaType | WeaverseNextThemeSchema;
|
|
30
|
+
/** Current merged theme-setting values. */
|
|
31
|
+
settings: Record<string, unknown>;
|
|
32
|
+
/** Subscribe to setting changes and return an unsubscribe function. */
|
|
33
|
+
subscribe: (listener: () => void) => () => void;
|
|
34
|
+
/** Merge setting changes into the current snapshot and notify subscribers. */
|
|
35
|
+
updateThemeSettings: (next: Record<string, unknown>) => void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Page assignment payload returned by `/api/public/project` and preserved on
|
|
39
|
+
* loader data so the Builder Studio save pipeline receives the same shape it
|
|
40
|
+
* gets from Hydrogen (`{ projectId, type, locale, handle }`, plus optional
|
|
41
|
+
* inherited/fallback `meta`). Kept framework-neutral: `type` accepts a known
|
|
42
|
+
* `PageType` or any string, and `meta` preserves inherited/fallback metadata
|
|
43
|
+
* (unknown fields included) without asserting a strict shape.
|
|
44
|
+
*/
|
|
45
|
+
export interface WeaverseNextPageAssignment {
|
|
46
|
+
/** Assigned page handle. */
|
|
47
|
+
handle: string;
|
|
48
|
+
/** Assigned locale, or an empty string when the API omits it. */
|
|
49
|
+
locale: string;
|
|
50
|
+
/** Inherited/fallback page metadata; unknown fields preserved as-is. */
|
|
51
|
+
meta?: {
|
|
52
|
+
/** Number of inheritance levels between source and assigned projects. */
|
|
53
|
+
depth?: number;
|
|
54
|
+
/** Whether the assignment was inherited from another project. */
|
|
55
|
+
inherited?: boolean;
|
|
56
|
+
/** Project that supplied an inherited assignment. */
|
|
57
|
+
sourceProjectId?: string;
|
|
58
|
+
/** Additional assignment metadata returned by the API. */
|
|
59
|
+
[key: string]: unknown;
|
|
60
|
+
};
|
|
61
|
+
/** Project that owns the assignment. */
|
|
62
|
+
projectId: string;
|
|
63
|
+
/** Assigned Weaverse page type. */
|
|
64
|
+
type: PageType | string;
|
|
65
|
+
}
|
|
66
|
+
/** Mutable integration callbacks and data exposed to the Studio bridge. */
|
|
67
|
+
export interface WeaverseNextRuntimeInternal {
|
|
68
|
+
/** Active-locale static-text overrides fetched from the API (nested). */
|
|
69
|
+
merchantOverrides?: Record<string, unknown>;
|
|
70
|
+
/** Navigate the preview while preserving React Router-compatible options. */
|
|
71
|
+
navigate?: (to: string, options?: {
|
|
72
|
+
/** Preserve the current preview scroll position after navigation. */
|
|
73
|
+
preventScrollReset?: boolean;
|
|
74
|
+
} | Record<string, unknown>) => void;
|
|
75
|
+
/** Assignment metadata used by Studio save operations. */
|
|
76
|
+
pageAssignment?: WeaverseNextPageAssignment;
|
|
77
|
+
/** Raw project payload associated with the loaded page. */
|
|
78
|
+
project?: unknown;
|
|
79
|
+
/** Refresh server-rendered route data. */
|
|
80
|
+
revalidate?: (options?: unknown) => Promise<void> | void;
|
|
81
|
+
/**
|
|
82
|
+
* Studio per-item loader revalidation. Builder feature-detects this and
|
|
83
|
+
* prefers it over the legacy `revalidate()` (`router.refresh()`) flow; it
|
|
84
|
+
* must reject on failure so Builder can fall back.
|
|
85
|
+
*/
|
|
86
|
+
revalidateItem?: (draftItem: WeaverseNextComponentData) => Promise<void>;
|
|
87
|
+
/** Live theme-settings store used by Studio. */
|
|
88
|
+
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
89
|
+
/**
|
|
90
|
+
* Legacy name for the live translation store.
|
|
91
|
+
*
|
|
92
|
+
* @deprecated Use {@link WeaverseNextRuntimeInternal.translationStore}
|
|
93
|
+
* instead. Same instance, kept so Builder's existing `updateStaticText()`
|
|
94
|
+
* RPC (which reads `internal.themeTextStore`) works with Next unchanged.
|
|
95
|
+
*/
|
|
96
|
+
themeTextStore?: TranslationStore;
|
|
97
|
+
/**
|
|
98
|
+
* Live design-mode static-text override store. Builder's `updateStaticText()`
|
|
99
|
+
* RPC mutates it via `updateOverrides()`; the `TranslationProvider` observing
|
|
100
|
+
* the same instance re-renders `useTranslation()` consumers.
|
|
101
|
+
*/
|
|
102
|
+
translationStore?: TranslationStore;
|
|
103
|
+
}
|
|
104
|
+
/** Configuration used to create or reuse a browser-side Weaverse runtime. */
|
|
105
|
+
export interface WeaverseNextRuntimeConfig {
|
|
106
|
+
/** Client that supplied the page and request context. */
|
|
107
|
+
client?: WeaverseNextClient;
|
|
108
|
+
/** Loaded Weaverse page payload. */
|
|
109
|
+
data: WeaverseNextLoaderData;
|
|
110
|
+
/** Data-connector values available while rendering the page. */
|
|
111
|
+
dataContext?: Record<string, unknown>;
|
|
112
|
+
/** Active-locale static-text overrides threaded onto `internal`. */
|
|
113
|
+
merchantOverrides?: Record<string, unknown>;
|
|
114
|
+
/** Preview navigation callback, normally derived from Next's router. */
|
|
115
|
+
navigate?: WeaverseNextRuntimeInternal['navigate'];
|
|
116
|
+
/** Route revalidation callback, normally backed by `router.refresh()`. */
|
|
117
|
+
revalidate?: WeaverseNextRuntimeInternal['revalidate'];
|
|
118
|
+
/** Existing root-scoped theme-settings store to reuse. */
|
|
119
|
+
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
120
|
+
/** Root/route-owned translation store to attach to `internal`. */
|
|
121
|
+
translationStore?: TranslationStore;
|
|
122
|
+
}
|
|
123
|
+
/** A single translated field for one item. */
|
|
124
|
+
export interface WeaverseNextTranslationMapEntry {
|
|
125
|
+
/** Source-language value used to detect changes. */
|
|
126
|
+
originalValue: string;
|
|
127
|
+
/** Current translated value. */
|
|
128
|
+
translatedValue: string;
|
|
129
|
+
}
|
|
130
|
+
/** Per-item translation fields, keyed by field name. */
|
|
131
|
+
export interface WeaverseNextTranslationItemEntry {
|
|
132
|
+
/** Translation entry keyed by component setting name. */
|
|
133
|
+
[key: string]: WeaverseNextTranslationMapEntry;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Translation map sent from Builder alongside page data in design mode.
|
|
137
|
+
* Keyed by item ID, each value maps field names to translation entries.
|
|
138
|
+
*/
|
|
139
|
+
export interface WeaverseNextTranslationMap {
|
|
140
|
+
/** Translated fields keyed by Weaverse item ID. */
|
|
141
|
+
[itemId: string]: WeaverseNextTranslationItemEntry;
|
|
142
|
+
}
|
|
143
|
+
/** A single translation entry for save payloads. */
|
|
144
|
+
export interface WeaverseNextTranslationEntry {
|
|
145
|
+
/** Whether the persisted translation should be removed. */
|
|
146
|
+
deleted?: boolean;
|
|
147
|
+
/** Weaverse item that owns the translated field. */
|
|
148
|
+
itemId: string;
|
|
149
|
+
/** Namespaced field key, such as `data.heading`. */
|
|
150
|
+
key: string;
|
|
151
|
+
/** Source-language value used to detect changes. */
|
|
152
|
+
originalValue: string;
|
|
153
|
+
/** Value to persist for the target language. */
|
|
154
|
+
translatedValue: string;
|
|
155
|
+
}
|
|
156
|
+
/** Result of collecting translation changes for the save flow. */
|
|
157
|
+
export interface WeaverseNextTranslationChanges {
|
|
158
|
+
/** Changed translation entries ready for the Studio save payload. */
|
|
159
|
+
entries: WeaverseNextTranslationEntry[];
|
|
160
|
+
/** Target language identifier used by Weaverse. */
|
|
161
|
+
languageId: string;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Locale/market info passed through to component loaders and the Storefront
|
|
165
|
+
* client. Kept structurally close to Hydrogen's `WeaverseI18n` but without the
|
|
166
|
+
* `@shopify/hydrogen` `I18nBase` dependency so the adapter stays framework
|
|
167
|
+
* neutral.
|
|
168
|
+
*/
|
|
169
|
+
export interface WeaverseNextI18n {
|
|
170
|
+
/** ISO country or market code. */
|
|
171
|
+
country?: string;
|
|
172
|
+
/** Human-readable locale label. */
|
|
173
|
+
label?: string;
|
|
174
|
+
/** ISO language code. */
|
|
175
|
+
language?: string;
|
|
176
|
+
/** Combined locale identifier, such as `en-US`. */
|
|
177
|
+
locale?: string;
|
|
178
|
+
/** Locale prefix used in storefront paths. */
|
|
179
|
+
pathPrefix?: string;
|
|
180
|
+
/** Additional host-defined locale metadata. */
|
|
181
|
+
[key: string]: unknown;
|
|
182
|
+
}
|
|
183
|
+
/** Framework-neutral theme-setting input accepted by the Next adapter. */
|
|
184
|
+
export interface WeaverseNextThemeSchemaInput {
|
|
185
|
+
/** Optional visibility condition evaluated by Builder. */
|
|
186
|
+
condition?: unknown;
|
|
187
|
+
/** Default value applied when no merchant value exists. */
|
|
188
|
+
defaultValue?: unknown;
|
|
189
|
+
/** Setting key used in the generated theme-settings object. */
|
|
190
|
+
name?: string;
|
|
191
|
+
/** Additional schema fields preserved for Builder compatibility. */
|
|
192
|
+
[key: string]: unknown;
|
|
193
|
+
}
|
|
194
|
+
/** Named group of theme-setting inputs displayed in Builder. */
|
|
195
|
+
export interface WeaverseNextThemeSchemaGroup {
|
|
196
|
+
/** Group label displayed in Builder. */
|
|
197
|
+
group?: string;
|
|
198
|
+
/** Theme-setting inputs contained in this group. */
|
|
199
|
+
inputs?: WeaverseNextThemeSchemaInput[];
|
|
200
|
+
/** Additional group metadata preserved for Builder compatibility. */
|
|
201
|
+
[key: string]: unknown;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Theme schema shape accepted by the Next adapter. Mirrors Hydrogen's
|
|
205
|
+
* `HydrogenThemeSchema` while keeping locale data framework-neutral via
|
|
206
|
+
* {@link WeaverseNextI18n}.
|
|
207
|
+
*/
|
|
208
|
+
export interface WeaverseNextThemeSchema {
|
|
209
|
+
/** Theme localization configuration and default static content. */
|
|
210
|
+
i18n?: {
|
|
211
|
+
/** Locale used when no storefront locale matches. */
|
|
212
|
+
defaultLocale?: WeaverseNextI18n;
|
|
213
|
+
/** Locales supported by the storefront. */
|
|
214
|
+
shopLocales?: WeaverseNextI18n[];
|
|
215
|
+
/** Default translated strings keyed by dot path or nested key. */
|
|
216
|
+
staticContent?: Record<string, unknown>;
|
|
217
|
+
/** Enable the translation UI in Builder. */
|
|
218
|
+
translation?: boolean;
|
|
219
|
+
/** Storefront URL strategy used to distinguish locales. */
|
|
220
|
+
urlStructure?: 'url-path' | 'subdomain' | 'top-level-domain';
|
|
221
|
+
/** Additional localization metadata preserved for compatibility. */
|
|
222
|
+
[key: string]: unknown;
|
|
223
|
+
};
|
|
224
|
+
/** Theme identity, version, support, and documentation metadata. */
|
|
225
|
+
info?: {
|
|
226
|
+
/** Theme author or organization name. */
|
|
227
|
+
author?: string;
|
|
228
|
+
/** URL of the author's profile image. */
|
|
229
|
+
authorProfilePhoto?: string;
|
|
230
|
+
/** URL of the theme documentation. */
|
|
231
|
+
documentationUrl?: string;
|
|
232
|
+
/** Display name of the theme. */
|
|
233
|
+
name?: string;
|
|
234
|
+
/** URL where merchants can request theme support. */
|
|
235
|
+
supportUrl?: string;
|
|
236
|
+
/** Published theme version. */
|
|
237
|
+
version?: string;
|
|
238
|
+
/** Additional theme identity metadata preserved for compatibility. */
|
|
239
|
+
[key: string]: unknown;
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* Legacy theme-setting groups.
|
|
243
|
+
*
|
|
244
|
+
* @deprecated Migrate the same groups to {@link WeaverseNextThemeSchema.settings}.
|
|
245
|
+
*/
|
|
246
|
+
inspector?: (InspectorGroup | WeaverseNextThemeSchemaGroup)[];
|
|
247
|
+
/**
|
|
248
|
+
* URL patterns for the page types whose routes differ from the Shopify
|
|
249
|
+
* convention, so Studio can navigate to them, e.g.
|
|
250
|
+
* `{ COLLECTION: '/shop/:handle' }`. See `ThemeRoutes`.
|
|
251
|
+
*/
|
|
252
|
+
routes?: ThemeRoutes;
|
|
253
|
+
/** Theme-setting groups displayed in Builder. */
|
|
254
|
+
settings?: (InspectorGroup | WeaverseNextThemeSchemaGroup)[];
|
|
255
|
+
/** Additional schema metadata preserved for forward compatibility. */
|
|
256
|
+
[key: string]: unknown;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Minimal Storefront client shape required by component loaders. The host app
|
|
260
|
+
* provides this (public or private token mode); Weaverse never owns it.
|
|
261
|
+
*/
|
|
262
|
+
export interface WeaverseNextStorefront {
|
|
263
|
+
/** Locale and market used for Storefront API queries. */
|
|
264
|
+
i18n?: WeaverseNextI18n;
|
|
265
|
+
/** Execute a Storefront API GraphQL query. */
|
|
266
|
+
query: (query: string, options?: unknown) => Promise<unknown>;
|
|
267
|
+
/** Additional methods supplied by the commerce integration. */
|
|
268
|
+
[key: string]: unknown;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* App-provided commerce context. `storefront` is the only v0 must-have; cart
|
|
272
|
+
* and customer-account stay app-owned and are passed through untouched.
|
|
273
|
+
*/
|
|
274
|
+
export interface WeaverseNextCommerceContext {
|
|
275
|
+
/** Host-defined cart client or state. */
|
|
276
|
+
cart?: unknown;
|
|
277
|
+
/** Host-defined customer account client or state. */
|
|
278
|
+
customerAccount?: unknown;
|
|
279
|
+
/** Storefront API client used by component loaders. */
|
|
280
|
+
storefront?: WeaverseNextStorefront;
|
|
281
|
+
/** Additional host-defined commerce services. */
|
|
282
|
+
[key: string]: unknown;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Explicit, framework-neutral replacement for React Router's
|
|
286
|
+
* `LoaderFunctionArgs`. Built by the Next route/page from params + headers +
|
|
287
|
+
* searchParams instead of an implicit loader context.
|
|
288
|
+
*/
|
|
289
|
+
export interface WeaverseNextRequestContext {
|
|
290
|
+
/** Route handle used for page assignment. */
|
|
291
|
+
handle?: string;
|
|
292
|
+
/** Incoming request headers. */
|
|
293
|
+
headers?: Headers;
|
|
294
|
+
/** Locale and market information for this request. */
|
|
295
|
+
i18n?: WeaverseNextI18n;
|
|
296
|
+
/** Whether the request is rendered inside Builder Studio. */
|
|
297
|
+
isDesignMode?: boolean;
|
|
298
|
+
/** Whether the request renders a component preview. */
|
|
299
|
+
isPreviewMode?: boolean;
|
|
300
|
+
/** Whether the request renders a saved revision. */
|
|
301
|
+
isRevisionPreview?: boolean;
|
|
302
|
+
/** Weaverse page type resolved by the route. */
|
|
303
|
+
pageType?: PageType;
|
|
304
|
+
/** Request pathname when a complete URL is unavailable. */
|
|
305
|
+
pathname?: string;
|
|
306
|
+
/** Request query parameters. */
|
|
307
|
+
searchParams?: URLSearchParams;
|
|
308
|
+
/** Component type requested for section preview mode. */
|
|
309
|
+
sectionType?: string;
|
|
310
|
+
/** Complete request URL, when available. */
|
|
311
|
+
url?: URL | string;
|
|
312
|
+
/** Additional request-scoped values passed to component loaders. */
|
|
313
|
+
[key: string]: unknown;
|
|
314
|
+
}
|
|
315
|
+
/** A single serialized item in a Weaverse page tree. */
|
|
316
|
+
export interface WeaverseNextComponentData {
|
|
317
|
+
/** Inline child items or references to items in the page's flat item list. */
|
|
318
|
+
children?: WeaverseNextComponentData[] | {
|
|
319
|
+
/** ID of the referenced child item. */
|
|
320
|
+
id: string;
|
|
321
|
+
}[];
|
|
322
|
+
/** Authored component setting values. */
|
|
323
|
+
data?: Record<string, unknown>;
|
|
324
|
+
/** Stable Weaverse item identifier. */
|
|
325
|
+
id: string;
|
|
326
|
+
/** Attached by the root-entry `runWeaverseComponentLoaders` after a loader runs. */
|
|
327
|
+
loaderData?: unknown;
|
|
328
|
+
/** Registered component schema type. */
|
|
329
|
+
type: string;
|
|
330
|
+
/** Additional serialized item metadata. */
|
|
331
|
+
[key: string]: unknown;
|
|
332
|
+
}
|
|
333
|
+
/** Serialized page tree fetched from Weaverse. */
|
|
334
|
+
export interface WeaverseNextPageData {
|
|
335
|
+
/** Stable Weaverse page identifier. */
|
|
336
|
+
id: string;
|
|
337
|
+
/** Flat serialized component tree. */
|
|
338
|
+
items: WeaverseNextComponentData[];
|
|
339
|
+
/** Display name assigned in Builder. */
|
|
340
|
+
name?: string;
|
|
341
|
+
/** Root component item ID. */
|
|
342
|
+
rootId?: string;
|
|
343
|
+
/** Page-level SEO metadata published by Weaverse Builder. */
|
|
344
|
+
seo?: PageSEOData | null;
|
|
345
|
+
/** Additional page metadata returned by the API. */
|
|
346
|
+
[key: string]: unknown;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Top-level payload returned by `client.loadPage`. Kept close to Hydrogen's
|
|
350
|
+
* `WeaverseLoaderData` so registered components stay portable.
|
|
351
|
+
*/
|
|
352
|
+
export interface WeaverseNextLoaderData {
|
|
353
|
+
/** Client-safe runtime configuration returned with the page. */
|
|
354
|
+
configs?: Record<string, unknown>;
|
|
355
|
+
/** Serialized page to render. */
|
|
356
|
+
page: WeaverseNextPageData;
|
|
357
|
+
/** Assignment used by Studio when saving the page. */
|
|
358
|
+
pageAssignment?: WeaverseNextPageAssignment;
|
|
359
|
+
/** Public project metadata returned by Weaverse. */
|
|
360
|
+
project?: Record<string, unknown>;
|
|
361
|
+
/** Additional loader values supplied by the host app. */
|
|
362
|
+
[key: string]: unknown;
|
|
363
|
+
}
|
|
364
|
+
/** Props injected into every registered Weaverse component. */
|
|
365
|
+
export interface WeaverseNextComponentProps<L = unknown> extends Partial<WeaverseElement> {
|
|
366
|
+
/** Nested rendered component content. */
|
|
367
|
+
children?: ReactNode;
|
|
368
|
+
/** Optional CSS class supplied by the renderer or component settings. */
|
|
369
|
+
className?: string;
|
|
370
|
+
/** Result returned by the registered component loader. */
|
|
371
|
+
loaderData?: L;
|
|
372
|
+
/** Authored component settings and renderer-provided values. */
|
|
373
|
+
[key: string]: unknown;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Arguments passed to a component `loader`. `commerce.storefront` is the
|
|
377
|
+
* explicit contract; `weaverse.storefront` exists as a compatibility alias for
|
|
378
|
+
* Pilot-style loaders that call `weaverse.storefront.query(...)`.
|
|
379
|
+
*/
|
|
380
|
+
export interface WeaverseNextComponentLoaderArgs<TData = unknown> {
|
|
381
|
+
/** Request-scoped commerce clients and state. */
|
|
382
|
+
commerce?: WeaverseNextCommerceContext;
|
|
383
|
+
/** Explicit Next request context. */
|
|
384
|
+
context?: WeaverseNextRequestContext;
|
|
385
|
+
/** Component settings merged over schema defaults. */
|
|
386
|
+
data: TData;
|
|
387
|
+
/** Request-scoped Weaverse client. */
|
|
388
|
+
weaverse: WeaverseNextClient;
|
|
389
|
+
}
|
|
390
|
+
/** Registered component module shape: `default` + `schema` + optional `loader`. */
|
|
391
|
+
export interface WeaverseNextComponent<TProps extends WeaverseNextComponentProps = WeaverseNextComponentProps> {
|
|
392
|
+
/** React component rendered for this registration. */
|
|
393
|
+
default: ComponentType<TProps> | ForwardRefExoticComponent<TProps>;
|
|
394
|
+
/** Optional server-side data loader for each component item. */
|
|
395
|
+
loader?: (args: WeaverseNextComponentLoaderArgs) => Promise<unknown>;
|
|
396
|
+
/** Builder schema identifying the component and its settings. */
|
|
397
|
+
schema: SchemaType;
|
|
398
|
+
}
|
|
399
|
+
/** Input for `client.loadPage`. The Next route maps `params` → `type/handle`. */
|
|
400
|
+
export interface WeaverseNextLoadPageInput {
|
|
401
|
+
/** Page handle resolved from the route. */
|
|
402
|
+
handle?: string;
|
|
403
|
+
/** Locale used to select the assigned page. */
|
|
404
|
+
locale?: string;
|
|
405
|
+
/** Weaverse page type to load. */
|
|
406
|
+
type?: PageType;
|
|
407
|
+
/** Additional page-resolution parameters sent to Weaverse. */
|
|
408
|
+
[key: string]: unknown;
|
|
409
|
+
}
|
|
410
|
+
/** Configuration for the fetcher-injected root-entry client. */
|
|
411
|
+
export interface WeaverseNextClientConfig {
|
|
412
|
+
/** Commerce services passed to component loaders. */
|
|
413
|
+
commerce?: WeaverseNextCommerceContext;
|
|
414
|
+
/** Component modules available to the renderer and loaders. */
|
|
415
|
+
components: WeaverseNextComponent[];
|
|
416
|
+
/**
|
|
417
|
+
* Injected page fetcher. v0 delegates network I/O to the host app so the
|
|
418
|
+
* adapter can be tested without real Weaverse API calls.
|
|
419
|
+
*/
|
|
420
|
+
fetchPage?: (input: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
421
|
+
/** Injected theme-settings fetcher. */
|
|
422
|
+
fetchThemeSettings?: (context?: WeaverseNextRequestContext) => Promise<unknown>;
|
|
423
|
+
/** Weaverse project to load. */
|
|
424
|
+
projectId: string;
|
|
425
|
+
/** Request metadata passed to component loaders and the runtime. */
|
|
426
|
+
requestContext?: WeaverseNextRequestContext;
|
|
427
|
+
/** Theme schema used to derive default settings. */
|
|
428
|
+
themeSchema?: SchemaType | WeaverseNextThemeSchema;
|
|
429
|
+
/** Merchant theme settings merged over schema defaults. */
|
|
430
|
+
themeSettings?: Record<string, unknown>;
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Request-safe client returned by the root-entry `createWeaverseNextClient`.
|
|
434
|
+
* Holds the registry/config plus the currently loaded page data and is passed
|
|
435
|
+
* to component loaders as `weaverse`.
|
|
436
|
+
*/
|
|
437
|
+
export interface WeaverseNextClient {
|
|
438
|
+
/** Commerce services passed to component loaders. */
|
|
439
|
+
commerce?: WeaverseNextCommerceContext;
|
|
440
|
+
/** Registered component modules. */
|
|
441
|
+
components: WeaverseNextComponent[];
|
|
442
|
+
/** Currently loaded page payload (set by `loadPage`). */
|
|
443
|
+
data: WeaverseNextLoaderData | null;
|
|
444
|
+
/** Data-connector context handed to the React renderer. */
|
|
445
|
+
dataContext: Record<string, unknown>;
|
|
446
|
+
/** Load a page and return its serialized renderer payload. */
|
|
447
|
+
loadPage: (input?: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
448
|
+
/** Load the project's theme settings. */
|
|
449
|
+
loadThemeSettings: (context?: WeaverseNextRequestContext) => Promise<unknown>;
|
|
450
|
+
/** Active Weaverse project identifier. */
|
|
451
|
+
projectId: string;
|
|
452
|
+
/** Request metadata associated with this client. */
|
|
453
|
+
requestContext?: WeaverseNextRequestContext;
|
|
454
|
+
/** Compatibility alias for `commerce.storefront`. */
|
|
455
|
+
storefront?: WeaverseNextStorefront;
|
|
456
|
+
/** Theme schema used by the current project. */
|
|
457
|
+
themeSchema?: SchemaType | WeaverseNextThemeSchema;
|
|
458
|
+
/** Theme settings with schema defaults applied. */
|
|
459
|
+
themeSettings: Record<string, unknown>;
|
|
460
|
+
}
|
|
461
|
+
/** Product selected with a Weaverse resource-picker setting. */
|
|
462
|
+
export type WeaverseProduct = WeaverseResourcePickerData;
|
|
463
|
+
/** Collection selected with a Weaverse resource-picker setting. */
|
|
464
|
+
export type WeaverseCollection = WeaverseResourcePickerData;
|
|
465
|
+
/** Blog selected with a Weaverse resource-picker setting. */
|
|
466
|
+
export type WeaverseBlog = WeaverseResourcePickerData;
|
|
467
|
+
/** Article selected with a Weaverse resource-picker setting. */
|
|
468
|
+
export type WeaverseArticle = WeaverseResourcePickerData;
|
|
469
|
+
/** Metaobject selected with a Weaverse resource-picker setting. */
|
|
470
|
+
export type WeaverseMetaObject = WeaverseResourcePickerData;
|
|
471
|
+
/**
|
|
472
|
+
* Project identifier accepted by {@link WeaverseNextServerClientConfig}. Either
|
|
473
|
+
* a static string or a (possibly async) resolver that reads the request
|
|
474
|
+
* context — matching Hydrogen's static/dynamic projectId support.
|
|
475
|
+
*/
|
|
476
|
+
export type WeaverseNextProjectId = string | ((context?: WeaverseNextRequestContext) => string | Promise<string> | undefined);
|
|
477
|
+
/** Simple Next.js fetch cache options used for published-mode requests. */
|
|
478
|
+
export interface WeaverseNextCacheConfig {
|
|
479
|
+
/** Maps to Next's `fetch(..., { next: { revalidate } })`. */
|
|
480
|
+
revalidate?: number | false;
|
|
481
|
+
/** Maps to Next's `fetch(..., { next: { tags } })`. */
|
|
482
|
+
tags?: string[];
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Per-request fetch options for {@link WeaverseNextServerClient.fetchWithCache}.
|
|
486
|
+
* Plain `RequestInit` plus the same simple Next cache knobs as
|
|
487
|
+
* {@link WeaverseNextCacheConfig}, so callers never need to import `next/*`.
|
|
488
|
+
*/
|
|
489
|
+
export interface WeaverseNextFetchOptions extends RequestInit {
|
|
490
|
+
/** Next.js time-based revalidation interval, or `false` for indefinite caching. */
|
|
491
|
+
revalidate?: number | false;
|
|
492
|
+
/** Next.js cache tags associated with the request. */
|
|
493
|
+
tags?: string[];
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Public, client-safe Weaverse config bundle. Mirrors Hydrogen's
|
|
497
|
+
* `WeaverseProjectConfigs`, restricted to the fields that are safe to serialize
|
|
498
|
+
* into loader data.
|
|
499
|
+
*/
|
|
500
|
+
export interface WeaverseNextConfigs {
|
|
501
|
+
/** Whether the request is rendered inside Builder Studio. */
|
|
502
|
+
isDesignMode: boolean;
|
|
503
|
+
/** Whether the request renders a component preview. */
|
|
504
|
+
isPreviewMode: boolean;
|
|
505
|
+
/** Whether the request renders a saved revision. */
|
|
506
|
+
isRevisionPreview: boolean;
|
|
507
|
+
/** Effective Weaverse project identifier. */
|
|
508
|
+
projectId: string;
|
|
509
|
+
/** Environment values safe to expose to client components. */
|
|
510
|
+
publicEnv: Record<string, string | undefined>;
|
|
511
|
+
/** Component type requested for section preview mode. */
|
|
512
|
+
sectionType: string;
|
|
513
|
+
/** Base URL used for public Weaverse data requests. */
|
|
514
|
+
weaverseApiBase: string;
|
|
515
|
+
/** Trusted Studio origin. */
|
|
516
|
+
weaverseHost: string;
|
|
517
|
+
/** Public API base retained for Hydrogen-compatible consumers. */
|
|
518
|
+
weaversePublicApiBase: string;
|
|
519
|
+
/** Studio asset version requested by Builder. */
|
|
520
|
+
weaverseVersion: string;
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Resolved base configs derived from request context + env. Internal to the
|
|
524
|
+
* server client; the client-facing subset is built explicitly by
|
|
525
|
+
* `_buildPublicConfigs` and never includes anything beyond it.
|
|
526
|
+
*/
|
|
527
|
+
export interface WeaverseNextBaseConfigs {
|
|
528
|
+
/** Project ID read from `WEAVERSE_PROJECT_ID`. */
|
|
529
|
+
envProjectId: string;
|
|
530
|
+
/** Whether the request is rendered inside Builder Studio. */
|
|
531
|
+
isDesignMode: boolean;
|
|
532
|
+
/** Whether the request renders a component preview. */
|
|
533
|
+
isPreviewMode: boolean;
|
|
534
|
+
/** Whether the request renders a saved revision. */
|
|
535
|
+
isRevisionPreview: boolean;
|
|
536
|
+
/** Environment values safe to expose to client components. */
|
|
537
|
+
publicEnv: Record<string, string | undefined>;
|
|
538
|
+
/** Project ID read from the request query string. */
|
|
539
|
+
queryProjectId: string;
|
|
540
|
+
/** Component type requested for section preview mode. */
|
|
541
|
+
sectionType: string;
|
|
542
|
+
/** Base URL used for public Weaverse data requests. */
|
|
543
|
+
weaverseApiBase: string;
|
|
544
|
+
/** Trusted Studio origin. */
|
|
545
|
+
weaverseHost: string;
|
|
546
|
+
/** Studio asset version requested by Builder. */
|
|
547
|
+
weaverseVersion: string;
|
|
548
|
+
}
|
|
549
|
+
/** Theme settings payload returned by {@link WeaverseNextServerClient.loadThemeSettings}. */
|
|
550
|
+
export interface WeaverseNextThemeSettingsResponse {
|
|
551
|
+
/** Error message returned with fallback settings after a failed load. */
|
|
552
|
+
_error?: string;
|
|
553
|
+
/** Whether remote theme settings failed to load. */
|
|
554
|
+
_loadFailed?: boolean;
|
|
555
|
+
/** Active-locale static-text overrides. */
|
|
556
|
+
merchantOverrides?: Record<string, unknown>;
|
|
557
|
+
/** Environment values safe to expose to the browser in design mode. */
|
|
558
|
+
publicEnv?: Record<string, string | undefined>;
|
|
559
|
+
/** Serializable theme schema returned in design mode. */
|
|
560
|
+
schema?: SchemaType | WeaverseNextThemeSchema;
|
|
561
|
+
/** Default-locale static content from the theme schema. */
|
|
562
|
+
staticContent?: Record<string, unknown>;
|
|
563
|
+
/** Theme-setting values with schema defaults applied. */
|
|
564
|
+
theme?: Record<string, unknown>;
|
|
565
|
+
/** Additional project configuration returned by Weaverse. */
|
|
566
|
+
[key: string]: unknown;
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Options for {@link WeaverseNextServerClient.loadThemeSettings}. Cache knobs
|
|
570
|
+
* only — the server client always reads the request context it was created
|
|
571
|
+
* with, so there is no per-call context override.
|
|
572
|
+
*/
|
|
573
|
+
export interface WeaverseNextThemeSettingsOptions extends WeaverseNextCacheConfig {
|
|
574
|
+
}
|
|
575
|
+
/** Published custom-page record suitable for a Next.js sitemap entry. */
|
|
576
|
+
export interface WeaverseNextCustomPageEntry {
|
|
577
|
+
/** Suggested sitemap change frequency. */
|
|
578
|
+
changeFrequency?: 'daily' | 'weekly' | 'monthly';
|
|
579
|
+
/** Custom page handle. */
|
|
580
|
+
handle: string;
|
|
581
|
+
/** ISO timestamp of the latest page update. */
|
|
582
|
+
lastModified: string;
|
|
583
|
+
/** Assigned locale, or `null` for the default locale. */
|
|
584
|
+
locale: string | null;
|
|
585
|
+
/** Storefront pathname for the custom page. */
|
|
586
|
+
path: string;
|
|
587
|
+
/** Suggested sitemap priority. */
|
|
588
|
+
priority?: number;
|
|
589
|
+
}
|
|
590
|
+
/** Pagination, locale, and cache options for fetching custom pages. */
|
|
591
|
+
export interface WeaverseNextFetchCustomPagesOptions extends WeaverseNextCacheConfig {
|
|
592
|
+
/** Maximum number of custom-page results returned per request. */
|
|
593
|
+
limit?: number;
|
|
594
|
+
/** Only return custom pages assigned to this locale. */
|
|
595
|
+
locale?: string;
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* Config for {@link createWeaverseNextServerClient}. Unlike the root-entry
|
|
599
|
+
* `WeaverseNextClientConfig` (which delegates network I/O to injected fetchers),
|
|
600
|
+
* the server client performs the real Weaverse API fetch itself, so
|
|
601
|
+
* it accepts request context, env, and cache options instead.
|
|
602
|
+
*/
|
|
603
|
+
export interface WeaverseNextServerClientConfig {
|
|
604
|
+
/** Default Next.js cache options for Weaverse API requests. */
|
|
605
|
+
cache?: WeaverseNextCacheConfig;
|
|
606
|
+
/** Commerce services passed to component loaders. */
|
|
607
|
+
commerce?: WeaverseNextCommerceContext;
|
|
608
|
+
/** Component modules available to server-side loaders. */
|
|
609
|
+
components: WeaverseNextComponent[];
|
|
610
|
+
/** Plain env map; falls back to `process.env` for any missing key. */
|
|
611
|
+
env?: Record<string, string | undefined>;
|
|
612
|
+
/** Custom `fetch` (mainly for tests); defaults to the global `fetch`. */
|
|
613
|
+
fetch?: typeof fetch;
|
|
614
|
+
/** Per-request network timeout in ms. Defaults to 10s. */
|
|
615
|
+
fetchTimeoutMs?: number;
|
|
616
|
+
/** Static project ID or request-aware project resolver. */
|
|
617
|
+
projectId?: WeaverseNextProjectId;
|
|
618
|
+
/** Explicit request metadata used for config and page resolution. */
|
|
619
|
+
requestContext?: WeaverseNextRequestContext;
|
|
620
|
+
/** Theme schema used to derive default settings and preview data. */
|
|
621
|
+
themeSchema?: SchemaType | WeaverseNextThemeSchema;
|
|
622
|
+
/** Merchant theme settings merged over schema defaults. */
|
|
623
|
+
themeSettings?: Record<string, unknown>;
|
|
624
|
+
/** Optional override for the resolved Weaverse public API base. */
|
|
625
|
+
weaverseApiBase?: string;
|
|
626
|
+
/** Optional override for the resolved Weaverse host. */
|
|
627
|
+
weaverseHost?: string;
|
|
628
|
+
/** Studio asset version override. */
|
|
629
|
+
weaverseVersion?: string;
|
|
630
|
+
}
|
|
631
|
+
/**
|
|
632
|
+
* Server-side Weaverse client returned by {@link createWeaverseNextServerClient}.
|
|
633
|
+
* Closes the gap with Hydrogen's `context.weaverse.loadPage(...)` by performing
|
|
634
|
+
* the real Weaverse API fetch in Next server components/route handlers. It is
|
|
635
|
+
* also assignable to {@link WeaverseNextClient} so it can be passed straight to
|
|
636
|
+
* `runWeaverseComponentLoaders` and the renderer/runtime.
|
|
637
|
+
*/
|
|
638
|
+
export interface WeaverseNextServerClient extends WeaverseNextClient {
|
|
639
|
+
/** Public, client-safe resolved configs (no server secrets). */
|
|
640
|
+
configs: WeaverseNextConfigs;
|
|
641
|
+
/** Fetch every published custom page, primarily for sitemap generation. */
|
|
642
|
+
fetchCustomPages: (options?: WeaverseNextFetchCustomPagesOptions) => Promise<WeaverseNextCustomPageEntry[]>;
|
|
643
|
+
/** Fetch JSON with Next.js cache controls and the configured timeout. */
|
|
644
|
+
fetchWithCache: <T = unknown>(url: string, options?: WeaverseNextFetchOptions) => Promise<T>;
|
|
645
|
+
/** Resolve, fetch, and run component loaders for a Weaverse page. */
|
|
646
|
+
loadPage: (input?: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
647
|
+
/**
|
|
648
|
+
* Load theme settings. Pass cache options (`revalidate` / `tags`) only — the
|
|
649
|
+
* request context is the one the client was created with, so there is no
|
|
650
|
+
* per-call context override. The parameter is typed broadly purely to stay
|
|
651
|
+
* assignable to the base {@link WeaverseNextClient.loadThemeSettings}; any
|
|
652
|
+
* non-cache fields are ignored.
|
|
653
|
+
*/
|
|
654
|
+
loadThemeSettings: (options?: WeaverseNextThemeSettingsOptions | WeaverseNextRequestContext) => Promise<WeaverseNextThemeSettingsResponse>;
|
|
655
|
+
/** Resolve the effective projectId (query → function → string → env). */
|
|
656
|
+
resolveProjectId: () => Promise<string>;
|
|
657
|
+
}
|
|
658
|
+
/** Input for {@link WeaverseNextServerClient.loadPage}. */
|
|
659
|
+
export interface WeaverseNextServerLoadPageInput extends WeaverseNextLoadPageInput {
|
|
660
|
+
/** Per-call cache override merged over the client-level `cache` config. */
|
|
661
|
+
cache?: WeaverseNextCacheConfig;
|
|
662
|
+
/** Route-level project override (multi-project), like Hydrogen. */
|
|
663
|
+
projectId?: string;
|
|
664
|
+
}
|
|
665
|
+
//# sourceMappingURL=types.d.ts.map
|