@weaverse/next 0.1.0-alpha.1 → 0.1.0-alpha.10
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 +521 -108
- package/dist/{chunk-SS6QUKYY.mjs → chunk-XXGMPTWH.mjs} +74 -4
- package/dist/chunk-XXGMPTWH.mjs.map +1 -0
- package/dist/index.d.mts +423 -16
- package/dist/index.d.ts +423 -16
- package/dist/index.js +674 -44
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +584 -45
- package/dist/index.mjs.map +1 -1
- package/dist/{types-DvEeLX6L.d.mts → seo-CgO21rLg.d.mts} +205 -9
- package/dist/{types-DvEeLX6L.d.ts → seo-CgO21rLg.d.ts} +205 -9
- package/dist/server.d.mts +43 -4
- package/dist/server.d.ts +43 -4
- package/dist/server.js +248 -18
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +177 -19
- package/dist/server.mjs.map +1 -1
- package/package.json +8 -3
- package/dist/chunk-SS6QUKYY.mjs.map +0 -1
|
@@ -1,7 +1,42 @@
|
|
|
1
|
+
import { PageType, InspectorGroup, PageSEOData, SchemaType } from '@weaverse/schema';
|
|
1
2
|
import { WeaverseElement, WeaverseResourcePickerData } from '@weaverse/react';
|
|
2
|
-
import { PageType, SchemaType } from '@weaverse/schema';
|
|
3
3
|
import { ReactNode, ComponentType, ForwardRefExoticComponent } from 'react';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Minimal mutable store for design-mode static text overrides.
|
|
7
|
+
*
|
|
8
|
+
* `useSyncExternalStore`-compatible. Passed into {@link TranslationProvider}
|
|
9
|
+
* (from `./translation-context`) which subscribes internally and layers
|
|
10
|
+
* overrides on top of `merchantOverrides`/`staticContent`. The Studio bridge
|
|
11
|
+
* calls `updateOverrides()` via `runtime.internal.translationStore` (also
|
|
12
|
+
* exposed as the deprecated `runtime.internal.themeTextStore` alias) so live
|
|
13
|
+
* static-text edits reach the runtime — identical surface to Hydrogen's store,
|
|
14
|
+
* so Builder's existing static-text RPC works with `@weaverse/next` unchanged.
|
|
15
|
+
*
|
|
16
|
+
* Shape: flat `Record<string, string>` — dot-notation keys map to values
|
|
17
|
+
* (e.g. "cart.title" → "Shopping Cart").
|
|
18
|
+
*/
|
|
19
|
+
declare class TranslationStore {
|
|
20
|
+
overrides: Record<string, string>;
|
|
21
|
+
private readonly listeners;
|
|
22
|
+
setOverrides: (overrides: Record<string, string>) => void;
|
|
23
|
+
updateOverrides: (newOverrides: Record<string, string>) => void;
|
|
24
|
+
getSnapshot: () => Record<string, string>;
|
|
25
|
+
getServerSnapshot: () => Record<string, string>;
|
|
26
|
+
subscribe: (callback: () => void) => () => void;
|
|
27
|
+
private readonly emit;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use {@link TranslationStore} instead. Kept as a backward-compatible
|
|
31
|
+
* alias and will remain exported for existing integrations.
|
|
32
|
+
*/
|
|
33
|
+
declare const ThemeTextStore: typeof TranslationStore;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Use {@link TranslationStore} instead. Kept as a backward-compatible
|
|
36
|
+
* alias and will remain exported for existing integrations.
|
|
37
|
+
*/
|
|
38
|
+
type ThemeTextStore = TranslationStore;
|
|
39
|
+
|
|
5
40
|
interface WeaverseNextRequestInfo {
|
|
6
41
|
i18n?: WeaverseNextI18n;
|
|
7
42
|
pathname: string;
|
|
@@ -12,27 +47,101 @@ interface WeaverseNextThemeSettingsStore {
|
|
|
12
47
|
getServerSnapshot: () => Record<string, unknown>;
|
|
13
48
|
getSnapshot: () => Record<string, unknown>;
|
|
14
49
|
publicEnv?: Record<string, string | undefined>;
|
|
15
|
-
schema?:
|
|
50
|
+
schema?: WeaverseNextThemeSchema;
|
|
16
51
|
settings: Record<string, unknown>;
|
|
17
52
|
subscribe: (listener: () => void) => () => void;
|
|
18
53
|
updateThemeSettings: (next: Record<string, unknown>) => void;
|
|
19
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Page assignment payload returned by `/api/public/project` and preserved on
|
|
57
|
+
* loader data so the Builder Studio save pipeline receives the same shape it
|
|
58
|
+
* gets from Hydrogen (`{ projectId, type, locale, handle }`, plus optional
|
|
59
|
+
* inherited/fallback `meta`). Kept framework-neutral: `type` accepts a known
|
|
60
|
+
* {@link PageType} or any string, and `meta` preserves inherited/fallback
|
|
61
|
+
* metadata (unknown fields included) without asserting a strict shape.
|
|
62
|
+
*/
|
|
63
|
+
interface WeaverseNextPageAssignment {
|
|
64
|
+
handle: string;
|
|
65
|
+
locale: string;
|
|
66
|
+
/** Inherited/fallback page metadata; unknown fields preserved as-is. */
|
|
67
|
+
meta?: {
|
|
68
|
+
depth?: number;
|
|
69
|
+
inherited?: boolean;
|
|
70
|
+
sourceProjectId?: string;
|
|
71
|
+
[key: string]: unknown;
|
|
72
|
+
};
|
|
73
|
+
projectId: string;
|
|
74
|
+
type: PageType | string;
|
|
75
|
+
}
|
|
20
76
|
interface WeaverseNextRuntimeInternal {
|
|
77
|
+
/** Active-locale static-text overrides fetched from the API (nested). */
|
|
78
|
+
merchantOverrides?: Record<string, unknown>;
|
|
21
79
|
navigate?: (to: string, options?: {
|
|
22
80
|
preventScrollReset?: boolean;
|
|
23
81
|
} | Record<string, unknown>) => void;
|
|
24
|
-
pageAssignment?:
|
|
82
|
+
pageAssignment?: WeaverseNextPageAssignment;
|
|
25
83
|
project?: unknown;
|
|
26
84
|
revalidate?: (options?: unknown) => Promise<void> | void;
|
|
85
|
+
/**
|
|
86
|
+
* Studio per-item loader revalidation. Builder feature-detects this and
|
|
87
|
+
* prefers it over the legacy `revalidate()` (`router.refresh()`) flow; it
|
|
88
|
+
* must reject on failure so Builder can fall back.
|
|
89
|
+
*/
|
|
90
|
+
revalidateItem?: (draftItem: WeaverseNextComponentData) => Promise<void>;
|
|
27
91
|
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
92
|
+
/**
|
|
93
|
+
* @deprecated Use {@link WeaverseNextRuntimeInternal.translationStore}
|
|
94
|
+
* instead. Same instance, kept so Builder's existing `updateStaticText()`
|
|
95
|
+
* RPC (which reads `internal.themeTextStore`) works with Next unchanged.
|
|
96
|
+
*/
|
|
97
|
+
themeTextStore?: TranslationStore;
|
|
98
|
+
/**
|
|
99
|
+
* Live design-mode static-text override store. Builder's `updateStaticText()`
|
|
100
|
+
* RPC mutates it via `updateOverrides()`; the `TranslationProvider` observing
|
|
101
|
+
* the same instance re-renders `useTranslation()` consumers.
|
|
102
|
+
*/
|
|
103
|
+
translationStore?: TranslationStore;
|
|
28
104
|
}
|
|
29
105
|
interface WeaverseNextRuntimeConfig {
|
|
30
106
|
client?: WeaverseNextClient;
|
|
31
107
|
data: WeaverseNextLoaderData;
|
|
32
108
|
dataContext?: Record<string, unknown>;
|
|
109
|
+
/** Active-locale static-text overrides threaded onto `internal`. */
|
|
110
|
+
merchantOverrides?: Record<string, unknown>;
|
|
33
111
|
navigate?: WeaverseNextRuntimeInternal['navigate'];
|
|
34
112
|
revalidate?: WeaverseNextRuntimeInternal['revalidate'];
|
|
35
113
|
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
114
|
+
/** Root/route-owned translation store to attach to `internal`. */
|
|
115
|
+
translationStore?: TranslationStore;
|
|
116
|
+
}
|
|
117
|
+
/** A single translated field for one item. */
|
|
118
|
+
interface WeaverseNextTranslationMapEntry {
|
|
119
|
+
originalValue: string;
|
|
120
|
+
translatedValue: string;
|
|
121
|
+
}
|
|
122
|
+
/** Per-item translation fields, keyed by field name. */
|
|
123
|
+
interface WeaverseNextTranslationItemEntry {
|
|
124
|
+
[key: string]: WeaverseNextTranslationMapEntry;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Translation map sent from Builder alongside page data in design mode.
|
|
128
|
+
* Keyed by item ID, each value maps field names to translation entries.
|
|
129
|
+
*/
|
|
130
|
+
interface WeaverseNextTranslationMap {
|
|
131
|
+
[itemId: string]: WeaverseNextTranslationItemEntry;
|
|
132
|
+
}
|
|
133
|
+
/** A single translation entry for save payloads. */
|
|
134
|
+
interface WeaverseNextTranslationEntry {
|
|
135
|
+
deleted?: boolean;
|
|
136
|
+
itemId: string;
|
|
137
|
+
key: string;
|
|
138
|
+
originalValue: string;
|
|
139
|
+
translatedValue: string;
|
|
140
|
+
}
|
|
141
|
+
/** Result of collecting translation changes for the save flow. */
|
|
142
|
+
interface WeaverseNextTranslationChanges {
|
|
143
|
+
entries: WeaverseNextTranslationEntry[];
|
|
144
|
+
languageId: string;
|
|
36
145
|
}
|
|
37
146
|
/**
|
|
38
147
|
* Locale/market info passed through to component loaders and the Storefront
|
|
@@ -48,6 +157,46 @@ interface WeaverseNextI18n {
|
|
|
48
157
|
pathPrefix?: string;
|
|
49
158
|
[key: string]: unknown;
|
|
50
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Theme schema shape accepted by the Next adapter. Mirrors Hydrogen's
|
|
162
|
+
* `HydrogenThemeSchema` but keeps locale data framework-neutral via
|
|
163
|
+
* {@link WeaverseNextI18n} instead of Shopify Hydrogen's `I18nBase`.
|
|
164
|
+
*/
|
|
165
|
+
interface WeaverseNextThemeSchemaInput {
|
|
166
|
+
condition?: unknown;
|
|
167
|
+
defaultValue?: unknown;
|
|
168
|
+
name?: string;
|
|
169
|
+
[key: string]: unknown;
|
|
170
|
+
}
|
|
171
|
+
interface WeaverseNextThemeSchemaGroup {
|
|
172
|
+
group?: string;
|
|
173
|
+
inputs?: WeaverseNextThemeSchemaInput[];
|
|
174
|
+
[key: string]: unknown;
|
|
175
|
+
}
|
|
176
|
+
interface WeaverseNextThemeSchema {
|
|
177
|
+
i18n?: {
|
|
178
|
+
defaultLocale?: WeaverseNextI18n;
|
|
179
|
+
shopLocales?: WeaverseNextI18n[];
|
|
180
|
+
staticContent?: Record<string, unknown>;
|
|
181
|
+
/** Enable the translation UI in Builder. */
|
|
182
|
+
translation?: boolean;
|
|
183
|
+
urlStructure?: 'url-path' | 'subdomain' | 'top-level-domain';
|
|
184
|
+
[key: string]: unknown;
|
|
185
|
+
};
|
|
186
|
+
info?: {
|
|
187
|
+
author?: string;
|
|
188
|
+
authorProfilePhoto?: string;
|
|
189
|
+
documentationUrl?: string;
|
|
190
|
+
name?: string;
|
|
191
|
+
supportUrl?: string;
|
|
192
|
+
version?: string;
|
|
193
|
+
[key: string]: unknown;
|
|
194
|
+
};
|
|
195
|
+
/** @deprecated Use settings instead. */
|
|
196
|
+
inspector?: (InspectorGroup | WeaverseNextThemeSchemaGroup)[];
|
|
197
|
+
settings?: (InspectorGroup | WeaverseNextThemeSchemaGroup)[];
|
|
198
|
+
[key: string]: unknown;
|
|
199
|
+
}
|
|
51
200
|
/**
|
|
52
201
|
* Minimal Storefront client shape required by component loaders. The host app
|
|
53
202
|
* provides this (public or private token mode); Weaverse never owns it.
|
|
@@ -104,6 +253,8 @@ interface WeaverseNextPageData {
|
|
|
104
253
|
items: WeaverseNextComponentData[];
|
|
105
254
|
name?: string;
|
|
106
255
|
rootId?: string;
|
|
256
|
+
/** Page-level SEO metadata published by Weaverse Builder. */
|
|
257
|
+
seo?: PageSEOData | null;
|
|
107
258
|
[key: string]: unknown;
|
|
108
259
|
}
|
|
109
260
|
/**
|
|
@@ -113,7 +264,7 @@ interface WeaverseNextPageData {
|
|
|
113
264
|
interface WeaverseNextLoaderData {
|
|
114
265
|
configs?: Record<string, unknown>;
|
|
115
266
|
page: WeaverseNextPageData;
|
|
116
|
-
pageAssignment?:
|
|
267
|
+
pageAssignment?: WeaverseNextPageAssignment;
|
|
117
268
|
project?: Record<string, unknown>;
|
|
118
269
|
[key: string]: unknown;
|
|
119
270
|
}
|
|
@@ -160,7 +311,7 @@ interface WeaverseNextClientConfig {
|
|
|
160
311
|
fetchThemeSettings?: (context?: WeaverseNextRequestContext) => Promise<unknown>;
|
|
161
312
|
projectId: string;
|
|
162
313
|
requestContext?: WeaverseNextRequestContext;
|
|
163
|
-
themeSchema?:
|
|
314
|
+
themeSchema?: WeaverseNextThemeSchema;
|
|
164
315
|
themeSettings?: Record<string, unknown>;
|
|
165
316
|
}
|
|
166
317
|
/**
|
|
@@ -181,11 +332,14 @@ interface WeaverseNextClient {
|
|
|
181
332
|
requestContext?: WeaverseNextRequestContext;
|
|
182
333
|
/** Compatibility alias for `commerce.storefront`. */
|
|
183
334
|
storefront?: WeaverseNextStorefront;
|
|
184
|
-
themeSchema?:
|
|
335
|
+
themeSchema?: WeaverseNextThemeSchema;
|
|
185
336
|
themeSettings: Record<string, unknown>;
|
|
186
337
|
}
|
|
187
338
|
type WeaverseProduct = WeaverseResourcePickerData;
|
|
188
339
|
type WeaverseCollection = WeaverseResourcePickerData;
|
|
340
|
+
type WeaverseBlog = WeaverseResourcePickerData;
|
|
341
|
+
type WeaverseArticle = WeaverseResourcePickerData;
|
|
342
|
+
type WeaverseMetaObject = WeaverseResourcePickerData;
|
|
189
343
|
/**
|
|
190
344
|
* Project identifier accepted by {@link WeaverseNextServerClientConfig}. Either
|
|
191
345
|
* a static string or a (possibly async) resolver that reads the request
|
|
@@ -249,7 +403,7 @@ interface WeaverseNextThemeSettingsResponse {
|
|
|
249
403
|
_loadFailed?: boolean;
|
|
250
404
|
merchantOverrides?: Record<string, unknown>;
|
|
251
405
|
publicEnv?: Record<string, string | undefined>;
|
|
252
|
-
schema?:
|
|
406
|
+
schema?: WeaverseNextThemeSchema;
|
|
253
407
|
staticContent?: Record<string, unknown>;
|
|
254
408
|
theme?: Record<string, unknown>;
|
|
255
409
|
[key: string]: unknown;
|
|
@@ -261,6 +415,18 @@ interface WeaverseNextThemeSettingsResponse {
|
|
|
261
415
|
*/
|
|
262
416
|
interface WeaverseNextThemeSettingsOptions extends WeaverseNextCacheConfig {
|
|
263
417
|
}
|
|
418
|
+
interface WeaverseNextCustomPageEntry {
|
|
419
|
+
changeFrequency?: 'daily' | 'weekly' | 'monthly';
|
|
420
|
+
handle: string;
|
|
421
|
+
lastModified: string;
|
|
422
|
+
locale: string | null;
|
|
423
|
+
path: string;
|
|
424
|
+
priority?: number;
|
|
425
|
+
}
|
|
426
|
+
interface WeaverseNextFetchCustomPagesOptions extends WeaverseNextCacheConfig {
|
|
427
|
+
limit?: number;
|
|
428
|
+
locale?: string;
|
|
429
|
+
}
|
|
264
430
|
/**
|
|
265
431
|
* Config for {@link createWeaverseNextServerClient}. Unlike
|
|
266
432
|
* {@link WeaverseNextClientConfig} (which delegates network I/O to injected
|
|
@@ -279,7 +445,7 @@ interface WeaverseNextServerClientConfig {
|
|
|
279
445
|
fetchTimeoutMs?: number;
|
|
280
446
|
projectId?: WeaverseNextProjectId;
|
|
281
447
|
requestContext?: WeaverseNextRequestContext;
|
|
282
|
-
themeSchema?:
|
|
448
|
+
themeSchema?: WeaverseNextThemeSchema;
|
|
283
449
|
themeSettings?: Record<string, unknown>;
|
|
284
450
|
/** Optional override for the resolved Weaverse public API base. */
|
|
285
451
|
weaverseApiBase?: string;
|
|
@@ -297,6 +463,7 @@ interface WeaverseNextServerClientConfig {
|
|
|
297
463
|
interface WeaverseNextServerClient extends WeaverseNextClient {
|
|
298
464
|
/** Public, client-safe resolved configs (no server secrets). */
|
|
299
465
|
configs: WeaverseNextConfigs;
|
|
466
|
+
fetchCustomPages: (options?: WeaverseNextFetchCustomPagesOptions) => Promise<WeaverseNextCustomPageEntry[]>;
|
|
300
467
|
fetchWithCache: <T = unknown>(url: string, options?: WeaverseNextFetchOptions) => Promise<T>;
|
|
301
468
|
loadPage: (input?: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
302
469
|
/**
|
|
@@ -318,4 +485,33 @@ interface WeaverseNextServerLoadPageInput extends WeaverseNextLoadPageInput {
|
|
|
318
485
|
projectId?: string;
|
|
319
486
|
}
|
|
320
487
|
|
|
321
|
-
|
|
488
|
+
interface WeaverseNextSeoMetadata {
|
|
489
|
+
alternates?: {
|
|
490
|
+
canonical?: string;
|
|
491
|
+
};
|
|
492
|
+
description?: string;
|
|
493
|
+
keywords?: string;
|
|
494
|
+
openGraph?: {
|
|
495
|
+
description?: string;
|
|
496
|
+
images?: string[];
|
|
497
|
+
title?: string;
|
|
498
|
+
type?: string;
|
|
499
|
+
};
|
|
500
|
+
robots: {
|
|
501
|
+
follow: boolean;
|
|
502
|
+
index: boolean;
|
|
503
|
+
};
|
|
504
|
+
title?: string;
|
|
505
|
+
twitter?: {
|
|
506
|
+
card?: string;
|
|
507
|
+
description?: string;
|
|
508
|
+
images?: string[];
|
|
509
|
+
title?: string;
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
declare function formatWeaverseNextSeoMetadata(seo: PageSEOData | null | undefined): WeaverseNextSeoMetadata;
|
|
513
|
+
declare function getWeaverseNextSeoMetadata(data: WeaverseNextLoaderData | WeaverseNextPageData | {
|
|
514
|
+
page?: WeaverseNextPageData | null;
|
|
515
|
+
} | null | undefined): WeaverseNextSeoMetadata;
|
|
516
|
+
|
|
517
|
+
export { type WeaverseNextRuntimeInternal as A, type WeaverseNextSeoMetadata as B, type WeaverseNextServerClient as C, type WeaverseNextServerClientConfig as D, type WeaverseNextServerLoadPageInput as E, type WeaverseNextStorefront as F, type WeaverseNextThemeSchema as G, type WeaverseNextThemeSettingsOptions as H, type WeaverseNextThemeSettingsResponse as I, type WeaverseNextThemeSettingsStore as J, type WeaverseNextTranslationChanges as K, type WeaverseNextTranslationEntry as L, type WeaverseNextTranslationItemEntry as M, type WeaverseNextTranslationMap as N, type WeaverseNextTranslationMapEntry as O, type WeaverseProduct as P, formatWeaverseNextSeoMetadata as Q, getWeaverseNextSeoMetadata as R, ThemeTextStore as T, type WeaverseArticle as W, TranslationStore as a, type WeaverseBlog as b, type WeaverseCollection as c, type WeaverseMetaObject as d, type WeaverseNextBaseConfigs as e, type WeaverseNextCacheConfig as f, type WeaverseNextClient as g, type WeaverseNextClientConfig as h, type WeaverseNextCommerceContext as i, type WeaverseNextComponent as j, type WeaverseNextComponentData as k, type WeaverseNextComponentLoaderArgs as l, type WeaverseNextComponentProps as m, type WeaverseNextConfigs as n, type WeaverseNextCustomPageEntry as o, type WeaverseNextFetchCustomPagesOptions as p, type WeaverseNextFetchOptions as q, type WeaverseNextI18n as r, type WeaverseNextLoadPageInput as s, type WeaverseNextLoaderData as t, type WeaverseNextPageAssignment as u, type WeaverseNextPageData as v, type WeaverseNextProjectId as w, type WeaverseNextRequestContext as x, type WeaverseNextRequestInfo as y, type WeaverseNextRuntimeConfig as z };
|
|
@@ -1,7 +1,42 @@
|
|
|
1
|
+
import { PageType, InspectorGroup, PageSEOData, SchemaType } from '@weaverse/schema';
|
|
1
2
|
import { WeaverseElement, WeaverseResourcePickerData } from '@weaverse/react';
|
|
2
|
-
import { PageType, SchemaType } from '@weaverse/schema';
|
|
3
3
|
import { ReactNode, ComponentType, ForwardRefExoticComponent } from 'react';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Minimal mutable store for design-mode static text overrides.
|
|
7
|
+
*
|
|
8
|
+
* `useSyncExternalStore`-compatible. Passed into {@link TranslationProvider}
|
|
9
|
+
* (from `./translation-context`) which subscribes internally and layers
|
|
10
|
+
* overrides on top of `merchantOverrides`/`staticContent`. The Studio bridge
|
|
11
|
+
* calls `updateOverrides()` via `runtime.internal.translationStore` (also
|
|
12
|
+
* exposed as the deprecated `runtime.internal.themeTextStore` alias) so live
|
|
13
|
+
* static-text edits reach the runtime — identical surface to Hydrogen's store,
|
|
14
|
+
* so Builder's existing static-text RPC works with `@weaverse/next` unchanged.
|
|
15
|
+
*
|
|
16
|
+
* Shape: flat `Record<string, string>` — dot-notation keys map to values
|
|
17
|
+
* (e.g. "cart.title" → "Shopping Cart").
|
|
18
|
+
*/
|
|
19
|
+
declare class TranslationStore {
|
|
20
|
+
overrides: Record<string, string>;
|
|
21
|
+
private readonly listeners;
|
|
22
|
+
setOverrides: (overrides: Record<string, string>) => void;
|
|
23
|
+
updateOverrides: (newOverrides: Record<string, string>) => void;
|
|
24
|
+
getSnapshot: () => Record<string, string>;
|
|
25
|
+
getServerSnapshot: () => Record<string, string>;
|
|
26
|
+
subscribe: (callback: () => void) => () => void;
|
|
27
|
+
private readonly emit;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use {@link TranslationStore} instead. Kept as a backward-compatible
|
|
31
|
+
* alias and will remain exported for existing integrations.
|
|
32
|
+
*/
|
|
33
|
+
declare const ThemeTextStore: typeof TranslationStore;
|
|
34
|
+
/**
|
|
35
|
+
* @deprecated Use {@link TranslationStore} instead. Kept as a backward-compatible
|
|
36
|
+
* alias and will remain exported for existing integrations.
|
|
37
|
+
*/
|
|
38
|
+
type ThemeTextStore = TranslationStore;
|
|
39
|
+
|
|
5
40
|
interface WeaverseNextRequestInfo {
|
|
6
41
|
i18n?: WeaverseNextI18n;
|
|
7
42
|
pathname: string;
|
|
@@ -12,27 +47,101 @@ interface WeaverseNextThemeSettingsStore {
|
|
|
12
47
|
getServerSnapshot: () => Record<string, unknown>;
|
|
13
48
|
getSnapshot: () => Record<string, unknown>;
|
|
14
49
|
publicEnv?: Record<string, string | undefined>;
|
|
15
|
-
schema?:
|
|
50
|
+
schema?: WeaverseNextThemeSchema;
|
|
16
51
|
settings: Record<string, unknown>;
|
|
17
52
|
subscribe: (listener: () => void) => () => void;
|
|
18
53
|
updateThemeSettings: (next: Record<string, unknown>) => void;
|
|
19
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Page assignment payload returned by `/api/public/project` and preserved on
|
|
57
|
+
* loader data so the Builder Studio save pipeline receives the same shape it
|
|
58
|
+
* gets from Hydrogen (`{ projectId, type, locale, handle }`, plus optional
|
|
59
|
+
* inherited/fallback `meta`). Kept framework-neutral: `type` accepts a known
|
|
60
|
+
* {@link PageType} or any string, and `meta` preserves inherited/fallback
|
|
61
|
+
* metadata (unknown fields included) without asserting a strict shape.
|
|
62
|
+
*/
|
|
63
|
+
interface WeaverseNextPageAssignment {
|
|
64
|
+
handle: string;
|
|
65
|
+
locale: string;
|
|
66
|
+
/** Inherited/fallback page metadata; unknown fields preserved as-is. */
|
|
67
|
+
meta?: {
|
|
68
|
+
depth?: number;
|
|
69
|
+
inherited?: boolean;
|
|
70
|
+
sourceProjectId?: string;
|
|
71
|
+
[key: string]: unknown;
|
|
72
|
+
};
|
|
73
|
+
projectId: string;
|
|
74
|
+
type: PageType | string;
|
|
75
|
+
}
|
|
20
76
|
interface WeaverseNextRuntimeInternal {
|
|
77
|
+
/** Active-locale static-text overrides fetched from the API (nested). */
|
|
78
|
+
merchantOverrides?: Record<string, unknown>;
|
|
21
79
|
navigate?: (to: string, options?: {
|
|
22
80
|
preventScrollReset?: boolean;
|
|
23
81
|
} | Record<string, unknown>) => void;
|
|
24
|
-
pageAssignment?:
|
|
82
|
+
pageAssignment?: WeaverseNextPageAssignment;
|
|
25
83
|
project?: unknown;
|
|
26
84
|
revalidate?: (options?: unknown) => Promise<void> | void;
|
|
85
|
+
/**
|
|
86
|
+
* Studio per-item loader revalidation. Builder feature-detects this and
|
|
87
|
+
* prefers it over the legacy `revalidate()` (`router.refresh()`) flow; it
|
|
88
|
+
* must reject on failure so Builder can fall back.
|
|
89
|
+
*/
|
|
90
|
+
revalidateItem?: (draftItem: WeaverseNextComponentData) => Promise<void>;
|
|
27
91
|
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
92
|
+
/**
|
|
93
|
+
* @deprecated Use {@link WeaverseNextRuntimeInternal.translationStore}
|
|
94
|
+
* instead. Same instance, kept so Builder's existing `updateStaticText()`
|
|
95
|
+
* RPC (which reads `internal.themeTextStore`) works with Next unchanged.
|
|
96
|
+
*/
|
|
97
|
+
themeTextStore?: TranslationStore;
|
|
98
|
+
/**
|
|
99
|
+
* Live design-mode static-text override store. Builder's `updateStaticText()`
|
|
100
|
+
* RPC mutates it via `updateOverrides()`; the `TranslationProvider` observing
|
|
101
|
+
* the same instance re-renders `useTranslation()` consumers.
|
|
102
|
+
*/
|
|
103
|
+
translationStore?: TranslationStore;
|
|
28
104
|
}
|
|
29
105
|
interface WeaverseNextRuntimeConfig {
|
|
30
106
|
client?: WeaverseNextClient;
|
|
31
107
|
data: WeaverseNextLoaderData;
|
|
32
108
|
dataContext?: Record<string, unknown>;
|
|
109
|
+
/** Active-locale static-text overrides threaded onto `internal`. */
|
|
110
|
+
merchantOverrides?: Record<string, unknown>;
|
|
33
111
|
navigate?: WeaverseNextRuntimeInternal['navigate'];
|
|
34
112
|
revalidate?: WeaverseNextRuntimeInternal['revalidate'];
|
|
35
113
|
themeSettingsStore?: WeaverseNextThemeSettingsStore;
|
|
114
|
+
/** Root/route-owned translation store to attach to `internal`. */
|
|
115
|
+
translationStore?: TranslationStore;
|
|
116
|
+
}
|
|
117
|
+
/** A single translated field for one item. */
|
|
118
|
+
interface WeaverseNextTranslationMapEntry {
|
|
119
|
+
originalValue: string;
|
|
120
|
+
translatedValue: string;
|
|
121
|
+
}
|
|
122
|
+
/** Per-item translation fields, keyed by field name. */
|
|
123
|
+
interface WeaverseNextTranslationItemEntry {
|
|
124
|
+
[key: string]: WeaverseNextTranslationMapEntry;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Translation map sent from Builder alongside page data in design mode.
|
|
128
|
+
* Keyed by item ID, each value maps field names to translation entries.
|
|
129
|
+
*/
|
|
130
|
+
interface WeaverseNextTranslationMap {
|
|
131
|
+
[itemId: string]: WeaverseNextTranslationItemEntry;
|
|
132
|
+
}
|
|
133
|
+
/** A single translation entry for save payloads. */
|
|
134
|
+
interface WeaverseNextTranslationEntry {
|
|
135
|
+
deleted?: boolean;
|
|
136
|
+
itemId: string;
|
|
137
|
+
key: string;
|
|
138
|
+
originalValue: string;
|
|
139
|
+
translatedValue: string;
|
|
140
|
+
}
|
|
141
|
+
/** Result of collecting translation changes for the save flow. */
|
|
142
|
+
interface WeaverseNextTranslationChanges {
|
|
143
|
+
entries: WeaverseNextTranslationEntry[];
|
|
144
|
+
languageId: string;
|
|
36
145
|
}
|
|
37
146
|
/**
|
|
38
147
|
* Locale/market info passed through to component loaders and the Storefront
|
|
@@ -48,6 +157,46 @@ interface WeaverseNextI18n {
|
|
|
48
157
|
pathPrefix?: string;
|
|
49
158
|
[key: string]: unknown;
|
|
50
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Theme schema shape accepted by the Next adapter. Mirrors Hydrogen's
|
|
162
|
+
* `HydrogenThemeSchema` but keeps locale data framework-neutral via
|
|
163
|
+
* {@link WeaverseNextI18n} instead of Shopify Hydrogen's `I18nBase`.
|
|
164
|
+
*/
|
|
165
|
+
interface WeaverseNextThemeSchemaInput {
|
|
166
|
+
condition?: unknown;
|
|
167
|
+
defaultValue?: unknown;
|
|
168
|
+
name?: string;
|
|
169
|
+
[key: string]: unknown;
|
|
170
|
+
}
|
|
171
|
+
interface WeaverseNextThemeSchemaGroup {
|
|
172
|
+
group?: string;
|
|
173
|
+
inputs?: WeaverseNextThemeSchemaInput[];
|
|
174
|
+
[key: string]: unknown;
|
|
175
|
+
}
|
|
176
|
+
interface WeaverseNextThemeSchema {
|
|
177
|
+
i18n?: {
|
|
178
|
+
defaultLocale?: WeaverseNextI18n;
|
|
179
|
+
shopLocales?: WeaverseNextI18n[];
|
|
180
|
+
staticContent?: Record<string, unknown>;
|
|
181
|
+
/** Enable the translation UI in Builder. */
|
|
182
|
+
translation?: boolean;
|
|
183
|
+
urlStructure?: 'url-path' | 'subdomain' | 'top-level-domain';
|
|
184
|
+
[key: string]: unknown;
|
|
185
|
+
};
|
|
186
|
+
info?: {
|
|
187
|
+
author?: string;
|
|
188
|
+
authorProfilePhoto?: string;
|
|
189
|
+
documentationUrl?: string;
|
|
190
|
+
name?: string;
|
|
191
|
+
supportUrl?: string;
|
|
192
|
+
version?: string;
|
|
193
|
+
[key: string]: unknown;
|
|
194
|
+
};
|
|
195
|
+
/** @deprecated Use settings instead. */
|
|
196
|
+
inspector?: (InspectorGroup | WeaverseNextThemeSchemaGroup)[];
|
|
197
|
+
settings?: (InspectorGroup | WeaverseNextThemeSchemaGroup)[];
|
|
198
|
+
[key: string]: unknown;
|
|
199
|
+
}
|
|
51
200
|
/**
|
|
52
201
|
* Minimal Storefront client shape required by component loaders. The host app
|
|
53
202
|
* provides this (public or private token mode); Weaverse never owns it.
|
|
@@ -104,6 +253,8 @@ interface WeaverseNextPageData {
|
|
|
104
253
|
items: WeaverseNextComponentData[];
|
|
105
254
|
name?: string;
|
|
106
255
|
rootId?: string;
|
|
256
|
+
/** Page-level SEO metadata published by Weaverse Builder. */
|
|
257
|
+
seo?: PageSEOData | null;
|
|
107
258
|
[key: string]: unknown;
|
|
108
259
|
}
|
|
109
260
|
/**
|
|
@@ -113,7 +264,7 @@ interface WeaverseNextPageData {
|
|
|
113
264
|
interface WeaverseNextLoaderData {
|
|
114
265
|
configs?: Record<string, unknown>;
|
|
115
266
|
page: WeaverseNextPageData;
|
|
116
|
-
pageAssignment?:
|
|
267
|
+
pageAssignment?: WeaverseNextPageAssignment;
|
|
117
268
|
project?: Record<string, unknown>;
|
|
118
269
|
[key: string]: unknown;
|
|
119
270
|
}
|
|
@@ -160,7 +311,7 @@ interface WeaverseNextClientConfig {
|
|
|
160
311
|
fetchThemeSettings?: (context?: WeaverseNextRequestContext) => Promise<unknown>;
|
|
161
312
|
projectId: string;
|
|
162
313
|
requestContext?: WeaverseNextRequestContext;
|
|
163
|
-
themeSchema?:
|
|
314
|
+
themeSchema?: WeaverseNextThemeSchema;
|
|
164
315
|
themeSettings?: Record<string, unknown>;
|
|
165
316
|
}
|
|
166
317
|
/**
|
|
@@ -181,11 +332,14 @@ interface WeaverseNextClient {
|
|
|
181
332
|
requestContext?: WeaverseNextRequestContext;
|
|
182
333
|
/** Compatibility alias for `commerce.storefront`. */
|
|
183
334
|
storefront?: WeaverseNextStorefront;
|
|
184
|
-
themeSchema?:
|
|
335
|
+
themeSchema?: WeaverseNextThemeSchema;
|
|
185
336
|
themeSettings: Record<string, unknown>;
|
|
186
337
|
}
|
|
187
338
|
type WeaverseProduct = WeaverseResourcePickerData;
|
|
188
339
|
type WeaverseCollection = WeaverseResourcePickerData;
|
|
340
|
+
type WeaverseBlog = WeaverseResourcePickerData;
|
|
341
|
+
type WeaverseArticle = WeaverseResourcePickerData;
|
|
342
|
+
type WeaverseMetaObject = WeaverseResourcePickerData;
|
|
189
343
|
/**
|
|
190
344
|
* Project identifier accepted by {@link WeaverseNextServerClientConfig}. Either
|
|
191
345
|
* a static string or a (possibly async) resolver that reads the request
|
|
@@ -249,7 +403,7 @@ interface WeaverseNextThemeSettingsResponse {
|
|
|
249
403
|
_loadFailed?: boolean;
|
|
250
404
|
merchantOverrides?: Record<string, unknown>;
|
|
251
405
|
publicEnv?: Record<string, string | undefined>;
|
|
252
|
-
schema?:
|
|
406
|
+
schema?: WeaverseNextThemeSchema;
|
|
253
407
|
staticContent?: Record<string, unknown>;
|
|
254
408
|
theme?: Record<string, unknown>;
|
|
255
409
|
[key: string]: unknown;
|
|
@@ -261,6 +415,18 @@ interface WeaverseNextThemeSettingsResponse {
|
|
|
261
415
|
*/
|
|
262
416
|
interface WeaverseNextThemeSettingsOptions extends WeaverseNextCacheConfig {
|
|
263
417
|
}
|
|
418
|
+
interface WeaverseNextCustomPageEntry {
|
|
419
|
+
changeFrequency?: 'daily' | 'weekly' | 'monthly';
|
|
420
|
+
handle: string;
|
|
421
|
+
lastModified: string;
|
|
422
|
+
locale: string | null;
|
|
423
|
+
path: string;
|
|
424
|
+
priority?: number;
|
|
425
|
+
}
|
|
426
|
+
interface WeaverseNextFetchCustomPagesOptions extends WeaverseNextCacheConfig {
|
|
427
|
+
limit?: number;
|
|
428
|
+
locale?: string;
|
|
429
|
+
}
|
|
264
430
|
/**
|
|
265
431
|
* Config for {@link createWeaverseNextServerClient}. Unlike
|
|
266
432
|
* {@link WeaverseNextClientConfig} (which delegates network I/O to injected
|
|
@@ -279,7 +445,7 @@ interface WeaverseNextServerClientConfig {
|
|
|
279
445
|
fetchTimeoutMs?: number;
|
|
280
446
|
projectId?: WeaverseNextProjectId;
|
|
281
447
|
requestContext?: WeaverseNextRequestContext;
|
|
282
|
-
themeSchema?:
|
|
448
|
+
themeSchema?: WeaverseNextThemeSchema;
|
|
283
449
|
themeSettings?: Record<string, unknown>;
|
|
284
450
|
/** Optional override for the resolved Weaverse public API base. */
|
|
285
451
|
weaverseApiBase?: string;
|
|
@@ -297,6 +463,7 @@ interface WeaverseNextServerClientConfig {
|
|
|
297
463
|
interface WeaverseNextServerClient extends WeaverseNextClient {
|
|
298
464
|
/** Public, client-safe resolved configs (no server secrets). */
|
|
299
465
|
configs: WeaverseNextConfigs;
|
|
466
|
+
fetchCustomPages: (options?: WeaverseNextFetchCustomPagesOptions) => Promise<WeaverseNextCustomPageEntry[]>;
|
|
300
467
|
fetchWithCache: <T = unknown>(url: string, options?: WeaverseNextFetchOptions) => Promise<T>;
|
|
301
468
|
loadPage: (input?: WeaverseNextLoadPageInput) => Promise<WeaverseNextLoaderData | null>;
|
|
302
469
|
/**
|
|
@@ -318,4 +485,33 @@ interface WeaverseNextServerLoadPageInput extends WeaverseNextLoadPageInput {
|
|
|
318
485
|
projectId?: string;
|
|
319
486
|
}
|
|
320
487
|
|
|
321
|
-
|
|
488
|
+
interface WeaverseNextSeoMetadata {
|
|
489
|
+
alternates?: {
|
|
490
|
+
canonical?: string;
|
|
491
|
+
};
|
|
492
|
+
description?: string;
|
|
493
|
+
keywords?: string;
|
|
494
|
+
openGraph?: {
|
|
495
|
+
description?: string;
|
|
496
|
+
images?: string[];
|
|
497
|
+
title?: string;
|
|
498
|
+
type?: string;
|
|
499
|
+
};
|
|
500
|
+
robots: {
|
|
501
|
+
follow: boolean;
|
|
502
|
+
index: boolean;
|
|
503
|
+
};
|
|
504
|
+
title?: string;
|
|
505
|
+
twitter?: {
|
|
506
|
+
card?: string;
|
|
507
|
+
description?: string;
|
|
508
|
+
images?: string[];
|
|
509
|
+
title?: string;
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
declare function formatWeaverseNextSeoMetadata(seo: PageSEOData | null | undefined): WeaverseNextSeoMetadata;
|
|
513
|
+
declare function getWeaverseNextSeoMetadata(data: WeaverseNextLoaderData | WeaverseNextPageData | {
|
|
514
|
+
page?: WeaverseNextPageData | null;
|
|
515
|
+
} | null | undefined): WeaverseNextSeoMetadata;
|
|
516
|
+
|
|
517
|
+
export { type WeaverseNextRuntimeInternal as A, type WeaverseNextSeoMetadata as B, type WeaverseNextServerClient as C, type WeaverseNextServerClientConfig as D, type WeaverseNextServerLoadPageInput as E, type WeaverseNextStorefront as F, type WeaverseNextThemeSchema as G, type WeaverseNextThemeSettingsOptions as H, type WeaverseNextThemeSettingsResponse as I, type WeaverseNextThemeSettingsStore as J, type WeaverseNextTranslationChanges as K, type WeaverseNextTranslationEntry as L, type WeaverseNextTranslationItemEntry as M, type WeaverseNextTranslationMap as N, type WeaverseNextTranslationMapEntry as O, type WeaverseProduct as P, formatWeaverseNextSeoMetadata as Q, getWeaverseNextSeoMetadata as R, ThemeTextStore as T, type WeaverseArticle as W, TranslationStore as a, type WeaverseBlog as b, type WeaverseCollection as c, type WeaverseMetaObject as d, type WeaverseNextBaseConfigs as e, type WeaverseNextCacheConfig as f, type WeaverseNextClient as g, type WeaverseNextClientConfig as h, type WeaverseNextCommerceContext as i, type WeaverseNextComponent as j, type WeaverseNextComponentData as k, type WeaverseNextComponentLoaderArgs as l, type WeaverseNextComponentProps as m, type WeaverseNextConfigs as n, type WeaverseNextCustomPageEntry as o, type WeaverseNextFetchCustomPagesOptions as p, type WeaverseNextFetchOptions as q, type WeaverseNextI18n as r, type WeaverseNextLoadPageInput as s, type WeaverseNextLoaderData as t, type WeaverseNextPageAssignment as u, type WeaverseNextPageData as v, type WeaverseNextProjectId as w, type WeaverseNextRequestContext as x, type WeaverseNextRequestInfo as y, type WeaverseNextRuntimeConfig as z };
|