@weaverse/next 0.1.0-alpha.9 → 1.0.0
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 +155 -73
- package/dist/{chunk-6PMZ77RA.mjs → chunk-LH6AAEIK.mjs} +115 -8
- package/dist/chunk-LH6AAEIK.mjs.map +1 -0
- package/dist/index.js +180 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +86 -47
- 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.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 +34 -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/translation-context.d.ts +156 -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 +12 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/package.json +12 -8
- package/src/client.ts +102 -0
- package/src/hooks.ts +50 -0
- package/src/index.ts +153 -0
- package/src/item.ts +167 -0
- package/src/loader.ts +135 -0
- package/src/main.tsx +45 -0
- package/src/provider.tsx +225 -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 +182 -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/translation-context.tsx +299 -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 +37 -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
package/dist/index.js
CHANGED
|
@@ -54,6 +54,7 @@ var WeaverseNextItem = class extends react.WeaverseItemStore {
|
|
|
54
54
|
_cachedSnapshot = null;
|
|
55
55
|
_snapshotStoreRef = null;
|
|
56
56
|
_snapshotTranslationRef = null;
|
|
57
|
+
/** Create an item store from serialized component data and its runtime. */
|
|
57
58
|
constructor(initialData, weaverse) {
|
|
58
59
|
super(initialData, weaverse);
|
|
59
60
|
let schemaData = generateDataFromSchema(this.Element?.schema);
|
|
@@ -62,15 +63,31 @@ var WeaverseNextItem = class extends react.WeaverseItemStore {
|
|
|
62
63
|
/**
|
|
63
64
|
* Flatten nested `data` on updates exactly like the constructor does. Core's
|
|
64
65
|
* `initProject()` calls `setData(item)` when a new runtime serves a page
|
|
65
|
-
* whose item instances already exist (e.g. locale/client navigation)
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
66
|
+
* whose item instances already exist (e.g. locale/client navigation).
|
|
67
|
+
*
|
|
68
|
+
* A complete serialized item (it carries `id` and `type`; core's
|
|
69
|
+
* `initProject()` always passes one) replaces the store the way the
|
|
70
|
+
* constructor builds it: the schema defaults of the item's own `type` — the
|
|
71
|
+
* Builder can replace a section in place, keeping its id — then the item's
|
|
72
|
+
* settings. A payload omits a setting — or the whole optional `data` — when
|
|
73
|
+
* its value equals the schema default, so merging into the previous store
|
|
74
|
+
* would keep the previous locale's value visible. Partial updates still
|
|
75
|
+
* merge. Either way the `_store` ref changes, which invalidates the memoized
|
|
76
|
+
* snapshot below. The subscriber emit is queued instead of fired when a
|
|
77
|
+
* render-phase deferral is active (see `collectDeferredItemUpdates`).
|
|
71
78
|
*/
|
|
72
79
|
setData = (update) => {
|
|
73
|
-
|
|
80
|
+
if ("id" in update && "type" in update) {
|
|
81
|
+
let { data, type } = update;
|
|
82
|
+
let schema = this.weaverse.elementRegistry.get(type)?.schema;
|
|
83
|
+
this._store = {
|
|
84
|
+
...generateDataFromSchema(schema),
|
|
85
|
+
...data === void 0 ? {} : { data },
|
|
86
|
+
...flattenItemData(update)
|
|
87
|
+
};
|
|
88
|
+
} else {
|
|
89
|
+
this.data = flattenItemData(update);
|
|
90
|
+
}
|
|
74
91
|
if (deferredItemUpdates) {
|
|
75
92
|
deferredItemUpdates.add(this);
|
|
76
93
|
} else {
|
|
@@ -319,18 +336,24 @@ var useThemeText = useTranslation;
|
|
|
319
336
|
|
|
320
337
|
// src/translation-store.ts
|
|
321
338
|
var TranslationStore = class {
|
|
339
|
+
/** Current flat translation overrides keyed by dot path. */
|
|
322
340
|
overrides = {};
|
|
323
341
|
listeners = /* @__PURE__ */ new Set();
|
|
342
|
+
/** Replace every override and notify subscribers. */
|
|
324
343
|
setOverrides = (overrides) => {
|
|
325
344
|
this.overrides = { ...overrides };
|
|
326
345
|
this.emit();
|
|
327
346
|
};
|
|
347
|
+
/** Merge changed overrides into the current values and notify subscribers. */
|
|
328
348
|
updateOverrides = (newOverrides) => {
|
|
329
349
|
this.overrides = { ...this.overrides, ...newOverrides };
|
|
330
350
|
this.emit();
|
|
331
351
|
};
|
|
352
|
+
/** Return the current client-side override snapshot. */
|
|
332
353
|
getSnapshot = () => this.overrides;
|
|
354
|
+
/** Return the override snapshot used during server rendering. */
|
|
333
355
|
getServerSnapshot = () => this.overrides;
|
|
356
|
+
/** Subscribe to override changes and return an unsubscribe function. */
|
|
334
357
|
subscribe = (callback) => {
|
|
335
358
|
this.listeners.add(callback);
|
|
336
359
|
return () => {
|
|
@@ -601,13 +624,22 @@ function getSearchParamsFromContext(context) {
|
|
|
601
624
|
}
|
|
602
625
|
return new URLSearchParams();
|
|
603
626
|
}
|
|
627
|
+
function withPathPrefix(pathname, i18n) {
|
|
628
|
+
let raw = typeof i18n?.pathPrefix === "string" ? i18n.pathPrefix : "";
|
|
629
|
+
let segments = raw.split("/").filter(Boolean);
|
|
630
|
+
let prefix = segments.length > 0 ? `/${segments.join("/")}` : "";
|
|
631
|
+
if (prefix === "" || pathname === prefix || pathname.startsWith(`${prefix}/`)) {
|
|
632
|
+
return pathname;
|
|
633
|
+
}
|
|
634
|
+
return pathname === "/" ? prefix : `${prefix}${pathname}`;
|
|
635
|
+
}
|
|
604
636
|
function getPathnameFromContext(context) {
|
|
605
637
|
if (context?.pathname) {
|
|
606
|
-
return context.pathname;
|
|
638
|
+
return withPathPrefix(context.pathname, context.i18n);
|
|
607
639
|
}
|
|
608
640
|
if (context?.url) {
|
|
609
641
|
let url = toUrl(context.url);
|
|
610
|
-
return url.pathname || "/";
|
|
642
|
+
return withPathPrefix(url.pathname || "/", context.i18n);
|
|
611
643
|
}
|
|
612
644
|
return "/";
|
|
613
645
|
}
|
|
@@ -648,7 +680,9 @@ function buildWeaverseNextRequestInfo(context) {
|
|
|
648
680
|
pathname: getPathnameFromContext(context),
|
|
649
681
|
search: search ? `?${search}` : "",
|
|
650
682
|
queries: toQueryRecord(searchParams),
|
|
651
|
-
...context?.i18n ? { i18n: context.i18n } : {}
|
|
683
|
+
...context?.i18n ? { i18n: context.i18n } : {},
|
|
684
|
+
...context?.pageType ? { pageType: context.pageType } : {},
|
|
685
|
+
...context?.handle ? { handle: context.handle } : {}
|
|
652
686
|
};
|
|
653
687
|
}
|
|
654
688
|
|
|
@@ -665,6 +699,12 @@ function getConfigString(configs, key) {
|
|
|
665
699
|
let value = configs?.[key];
|
|
666
700
|
return typeof value === "string" ? value : void 0;
|
|
667
701
|
}
|
|
702
|
+
function resolveModeFlag(config, key) {
|
|
703
|
+
return config.client?.requestContext?.[key] === true || config.data.configs?.[key] === true;
|
|
704
|
+
}
|
|
705
|
+
function resolveSectionType(config) {
|
|
706
|
+
return config.client?.requestContext?.sectionType || getConfigString(config.data.configs, "sectionType") || void 0;
|
|
707
|
+
}
|
|
668
708
|
function getRecordString(record, key) {
|
|
669
709
|
let value = record?.[key];
|
|
670
710
|
return typeof value === "string" ? value : void 0;
|
|
@@ -701,12 +741,30 @@ function registerRuntime(runtime) {
|
|
|
701
741
|
runtimeWindow.__weaverses[runtime.pageId] = runtime;
|
|
702
742
|
runtimeWindow.__weaverse = runtime;
|
|
703
743
|
}
|
|
744
|
+
function rebindPageItemsToRuntime(runtime) {
|
|
745
|
+
let items = runtime.data?.items;
|
|
746
|
+
if (!items) {
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
for (let { id } of items) {
|
|
750
|
+
let instance = runtime.itemInstances.get(id);
|
|
751
|
+
if (instance && instance.weaverse !== runtime) {
|
|
752
|
+
instance.weaverse = runtime;
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
704
756
|
var WeaverseNextRuntime = class extends react.Weaverse {
|
|
757
|
+
/** Stable ID of the page owned by this runtime. */
|
|
705
758
|
pageId;
|
|
759
|
+
/** Mutable callbacks and stores consumed by the Studio bridge. */
|
|
706
760
|
internal;
|
|
761
|
+
/** Path, query, and locale metadata for Studio navigation. */
|
|
707
762
|
requestInfo;
|
|
763
|
+
/** Whether this runtime renders a component preview. */
|
|
708
764
|
isPreviewMode;
|
|
765
|
+
/** Whether this runtime renders a saved revision. */
|
|
709
766
|
isRevisionPreview;
|
|
767
|
+
/** Component type rendered in section preview mode. */
|
|
710
768
|
sectionType;
|
|
711
769
|
// ─── Item-level translation sidecar (design mode only) ─────────────
|
|
712
770
|
/**
|
|
@@ -715,7 +773,9 @@ var WeaverseNextRuntime = class extends react.Weaverse {
|
|
|
715
773
|
* components, so translations render without mutating the base `_store`.
|
|
716
774
|
*/
|
|
717
775
|
translationMap = {};
|
|
776
|
+
/** Locale associated with the item-level translation sidecar. */
|
|
718
777
|
translationLocale = String();
|
|
778
|
+
/** Weaverse language ID used when saving translation changes. */
|
|
719
779
|
translationLanguageId = String();
|
|
720
780
|
/**
|
|
721
781
|
* Fresh page data captured while React was rendering. Runtime reuse happens
|
|
@@ -733,27 +793,32 @@ var WeaverseNextRuntime = class extends react.Weaverse {
|
|
|
733
793
|
* deferred to `flushRenderPhaseUpdates()`.
|
|
734
794
|
*/
|
|
735
795
|
pendingItemUpdates = [];
|
|
796
|
+
/** Create a browser runtime from a loaded page and its request context. */
|
|
736
797
|
constructor(config) {
|
|
737
798
|
let { client, data } = config;
|
|
738
799
|
let page = getRenderablePage(data);
|
|
739
800
|
let configs = data.configs;
|
|
740
801
|
let requestContext = client?.requestContext;
|
|
802
|
+
let isDesignMode = resolveModeFlag(config, "isDesignMode");
|
|
803
|
+
let isPreviewMode = resolveModeFlag(config, "isPreviewMode");
|
|
804
|
+
let isRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
|
|
805
|
+
let sectionType = resolveSectionType(config);
|
|
741
806
|
let projectId = resolveProjectId(client, data, page.id);
|
|
742
807
|
ensureNextItemConstructor();
|
|
743
808
|
super({
|
|
744
809
|
projectId,
|
|
745
810
|
data: page,
|
|
746
|
-
isDesignMode
|
|
811
|
+
isDesignMode,
|
|
747
812
|
weaverseHost: getConfigString(configs, "weaverseHost"),
|
|
748
813
|
weaverseVersion: getConfigString(configs, "weaverseVersion")
|
|
749
814
|
});
|
|
750
815
|
this.pageId = page.id;
|
|
751
816
|
this.dataContext = resolveDataContext(config);
|
|
752
817
|
this.requestInfo = buildWeaverseNextRequestInfo(requestContext);
|
|
753
|
-
this.isDesignMode =
|
|
754
|
-
this.isPreviewMode =
|
|
755
|
-
this.isRevisionPreview =
|
|
756
|
-
this.sectionType =
|
|
818
|
+
this.isDesignMode = isDesignMode;
|
|
819
|
+
this.isPreviewMode = isPreviewMode;
|
|
820
|
+
this.isRevisionPreview = isRevisionPreview;
|
|
821
|
+
this.sectionType = sectionType;
|
|
757
822
|
let translationStore = config.translationStore ?? new TranslationStore();
|
|
758
823
|
this.internal = {
|
|
759
824
|
merchantOverrides: config.merchantOverrides,
|
|
@@ -885,7 +950,11 @@ function createWeaverseNextRuntime(config) {
|
|
|
885
950
|
let existing = runtimeWindow?.__weaverses?.[page.id];
|
|
886
951
|
let requestKey = getRuntimeKey(page.id, requestInfo);
|
|
887
952
|
if (existing?.__weaverseNextRequestKey === requestKey) {
|
|
888
|
-
let
|
|
953
|
+
let configs = config.data.configs;
|
|
954
|
+
let nextIsDesignMode = resolveModeFlag(config, "isDesignMode");
|
|
955
|
+
let nextIsPreviewMode = resolveModeFlag(config, "isPreviewMode");
|
|
956
|
+
let nextIsRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
|
|
957
|
+
let nextSectionType = resolveSectionType(config);
|
|
889
958
|
if (existing.isDesignMode || nextIsDesignMode) {
|
|
890
959
|
existing.pendingProjectData = void 0;
|
|
891
960
|
} else {
|
|
@@ -896,11 +965,11 @@ function createWeaverseNextRuntime(config) {
|
|
|
896
965
|
existing.requestInfo = requestInfo;
|
|
897
966
|
existing.projectId = resolveProjectId(config.client, config.data, page.id);
|
|
898
967
|
existing.isDesignMode = nextIsDesignMode;
|
|
899
|
-
existing.isPreviewMode =
|
|
900
|
-
existing.isRevisionPreview =
|
|
901
|
-
existing.sectionType =
|
|
902
|
-
existing.weaverseHost = getConfigString(
|
|
903
|
-
existing.weaverseVersion = getConfigString(
|
|
968
|
+
existing.isPreviewMode = nextIsPreviewMode;
|
|
969
|
+
existing.isRevisionPreview = nextIsRevisionPreview;
|
|
970
|
+
existing.sectionType = nextSectionType;
|
|
971
|
+
existing.weaverseHost = getConfigString(configs, "weaverseHost") ?? existing.weaverseHost;
|
|
972
|
+
existing.weaverseVersion = getConfigString(configs, "weaverseVersion") ?? existing.weaverseVersion;
|
|
904
973
|
existing.internal.pageAssignment = config.data.pageAssignment;
|
|
905
974
|
existing.internal.project = config.data.project;
|
|
906
975
|
if (config.navigate) {
|
|
@@ -924,6 +993,7 @@ function createWeaverseNextRuntime(config) {
|
|
|
924
993
|
() => new WeaverseNextRuntime(config)
|
|
925
994
|
);
|
|
926
995
|
runtime.pendingItemUpdates = refreshedItems;
|
|
996
|
+
rebindPageItemsToRuntime(runtime);
|
|
927
997
|
runtime.__weaverseNextRequestKey = requestKey;
|
|
928
998
|
runtime.__weaverseNextLatestData = page;
|
|
929
999
|
registerRuntime(runtime);
|
|
@@ -938,7 +1008,10 @@ function bindWeaverseNextStudioRuntime(runtime) {
|
|
|
938
1008
|
return false;
|
|
939
1009
|
}
|
|
940
1010
|
let boundRuntime = runtime;
|
|
941
|
-
|
|
1011
|
+
let activeRuntime = studio.weaverse;
|
|
1012
|
+
let activeRequestInfo = activeRuntime?.requestInfo;
|
|
1013
|
+
let isActiveUrl = !activeRequestInfo || activeRequestInfo.pathname === runtime.requestInfo.pathname && activeRequestInfo.search === runtime.requestInfo.search;
|
|
1014
|
+
if (!(boundRuntime.__weaverseNextStudioBound && isActiveUrl)) {
|
|
942
1015
|
studio.init?.(runtime);
|
|
943
1016
|
boundRuntime.__weaverseNextStudioBound = true;
|
|
944
1017
|
return true;
|
|
@@ -950,9 +1023,67 @@ function bindWeaverseNextStudioRuntime(runtime) {
|
|
|
950
1023
|
});
|
|
951
1024
|
return true;
|
|
952
1025
|
}
|
|
953
|
-
|
|
954
|
-
// src/revalidate-item.ts
|
|
955
1026
|
var DEFAULT_REVALIDATE_ENDPOINT = "/api/weaverse/revalidate";
|
|
1027
|
+
var MAX_ROUTE_CONTEXT_HANDLE_LENGTH = 512;
|
|
1028
|
+
var DENIED_ROUTE_CONTEXT_PARAMS = [
|
|
1029
|
+
"weaverseprojectid",
|
|
1030
|
+
"weaversehost",
|
|
1031
|
+
"weaverseapikey",
|
|
1032
|
+
"weaverseapibase",
|
|
1033
|
+
"weaversepublicapibase",
|
|
1034
|
+
"weaverseversion",
|
|
1035
|
+
"projectid",
|
|
1036
|
+
"weaversedraftitem",
|
|
1037
|
+
"__weaversedraftitem",
|
|
1038
|
+
"_rsc"
|
|
1039
|
+
];
|
|
1040
|
+
var ROUTE_CONTEXT_I18N_KEYS = [
|
|
1041
|
+
"country",
|
|
1042
|
+
"label",
|
|
1043
|
+
"language",
|
|
1044
|
+
"locale",
|
|
1045
|
+
"pathPrefix"
|
|
1046
|
+
];
|
|
1047
|
+
function sanitizeRouteContextSearch(search) {
|
|
1048
|
+
let params = new URLSearchParams(search);
|
|
1049
|
+
let denied = new Set(DENIED_ROUTE_CONTEXT_PARAMS);
|
|
1050
|
+
for (let key of [...new Set(params.keys())]) {
|
|
1051
|
+
if (denied.has(key.toLowerCase())) {
|
|
1052
|
+
params.delete(key);
|
|
1053
|
+
}
|
|
1054
|
+
}
|
|
1055
|
+
let serialized = params.toString();
|
|
1056
|
+
return serialized ? `?${serialized}` : "";
|
|
1057
|
+
}
|
|
1058
|
+
function buildWeaverseNextRevalidateRouteContext(requestInfo) {
|
|
1059
|
+
if (!requestInfo || typeof requestInfo.pathname !== "string" || !requestInfo.pathname) {
|
|
1060
|
+
return;
|
|
1061
|
+
}
|
|
1062
|
+
let routeContext = {
|
|
1063
|
+
pathname: requestInfo.pathname,
|
|
1064
|
+
search: sanitizeRouteContextSearch(requestInfo.search ?? "")
|
|
1065
|
+
};
|
|
1066
|
+
let { i18n } = requestInfo;
|
|
1067
|
+
if (i18n && typeof i18n === "object") {
|
|
1068
|
+
let picked = {};
|
|
1069
|
+
for (let key of ROUTE_CONTEXT_I18N_KEYS) {
|
|
1070
|
+
let value = i18n[key];
|
|
1071
|
+
if (typeof value === "string") {
|
|
1072
|
+
picked[key] = value;
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1075
|
+
if (Object.keys(picked).length) {
|
|
1076
|
+
routeContext.i18n = picked;
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
if (requestInfo.pageType && schema.PageTypeSchema.safeParse(requestInfo.pageType).success) {
|
|
1080
|
+
routeContext.pageType = requestInfo.pageType;
|
|
1081
|
+
}
|
|
1082
|
+
if (typeof requestInfo.handle === "string" && requestInfo.handle && requestInfo.handle.length <= MAX_ROUTE_CONTEXT_HANDLE_LENGTH) {
|
|
1083
|
+
routeContext.handle = requestInfo.handle;
|
|
1084
|
+
}
|
|
1085
|
+
return routeContext;
|
|
1086
|
+
}
|
|
956
1087
|
async function revalidateWeaverseNextItem(runtime, draftItem, endpoint = DEFAULT_REVALIDATE_ENDPOINT) {
|
|
957
1088
|
let instance = runtime.itemInstances.get(draftItem.id);
|
|
958
1089
|
if (!instance) {
|
|
@@ -960,10 +1091,14 @@ async function revalidateWeaverseNextItem(runtime, draftItem, endpoint = DEFAULT
|
|
|
960
1091
|
`[weaverse-next] No live item instance for "${draftItem.id}".`
|
|
961
1092
|
);
|
|
962
1093
|
}
|
|
1094
|
+
let routeContext = buildWeaverseNextRevalidateRouteContext(
|
|
1095
|
+
runtime.requestInfo
|
|
1096
|
+
);
|
|
1097
|
+
let body = routeContext ? { draftItem, routeContext } : { draftItem };
|
|
963
1098
|
let response = await fetch(endpoint, {
|
|
964
1099
|
method: "POST",
|
|
965
1100
|
headers: { "Content-Type": "application/json" },
|
|
966
|
-
body: JSON.stringify(
|
|
1101
|
+
body: JSON.stringify(body)
|
|
967
1102
|
});
|
|
968
1103
|
if (!response.ok) {
|
|
969
1104
|
throw new Error(
|
|
@@ -1131,6 +1266,15 @@ function hasOpenGraphContent(seo) {
|
|
|
1131
1266
|
function hasTwitterContent(seo) {
|
|
1132
1267
|
return Boolean(seo?.title || seo?.description || seo?.image || seo?.cardType);
|
|
1133
1268
|
}
|
|
1269
|
+
function normalizeTwitterCard(cardType) {
|
|
1270
|
+
return cardType === "summary_large_image" ? "summary_large_image" : "summary";
|
|
1271
|
+
}
|
|
1272
|
+
function normalizeOpenGraphType(type) {
|
|
1273
|
+
if (type === "article" || type === "profile" || type === "video.other") {
|
|
1274
|
+
return type;
|
|
1275
|
+
}
|
|
1276
|
+
return "website";
|
|
1277
|
+
}
|
|
1134
1278
|
function formatWeaverseNextSeoMetadata(seo) {
|
|
1135
1279
|
let index = seo?.robots?.index !== false;
|
|
1136
1280
|
let follow = seo?.robots?.follow !== false;
|
|
@@ -1158,13 +1302,13 @@ function formatWeaverseNextSeoMetadata(seo) {
|
|
|
1158
1302
|
title: openGraph?.title,
|
|
1159
1303
|
description: openGraph?.description,
|
|
1160
1304
|
images: openGraph?.image ? [openGraph.image] : void 0,
|
|
1161
|
-
type: openGraph?.type
|
|
1305
|
+
type: normalizeOpenGraphType(openGraph?.type)
|
|
1162
1306
|
};
|
|
1163
1307
|
}
|
|
1164
1308
|
let twitter = seo.twitter;
|
|
1165
1309
|
if (hasTwitterContent(twitter)) {
|
|
1166
1310
|
metadata.twitter = {
|
|
1167
|
-
card: twitter?.cardType
|
|
1311
|
+
card: normalizeTwitterCard(twitter?.cardType),
|
|
1168
1312
|
title: twitter?.title,
|
|
1169
1313
|
description: twitter?.description,
|
|
1170
1314
|
images: twitter?.image ? [twitter.image] : void 0
|
|
@@ -1243,7 +1387,7 @@ function resolveWeaverseNextStudioScriptSrc(context, options = {}) {
|
|
|
1243
1387
|
if (!isTrustedStudioOrigin(origin, storefrontHostname)) {
|
|
1244
1388
|
return null;
|
|
1245
1389
|
}
|
|
1246
|
-
let bundle =
|
|
1390
|
+
let bundle = isPreviewMode || isRevisionPreview ? "preview.js" : "index.js";
|
|
1247
1391
|
let version = last(searchParams, "weaverseVersion");
|
|
1248
1392
|
let url = `${origin}/static/studio/next/${bundle}`;
|
|
1249
1393
|
return version ? `${url}?v=${encodeURIComponent(version)}` : url;
|
|
@@ -1317,10 +1461,6 @@ Object.defineProperty(exports, "useWeaverse", {
|
|
|
1317
1461
|
enumerable: true,
|
|
1318
1462
|
get: function () { return react.useWeaverse; }
|
|
1319
1463
|
});
|
|
1320
|
-
Object.defineProperty(exports, "createSchema", {
|
|
1321
|
-
enumerable: true,
|
|
1322
|
-
get: function () { return schema.createSchema; }
|
|
1323
|
-
});
|
|
1324
1464
|
exports.DEFAULT_REVALIDATE_ENDPOINT = DEFAULT_REVALIDATE_ENDPOINT;
|
|
1325
1465
|
exports.ThemeTextProvider = ThemeTextProvider;
|
|
1326
1466
|
exports.ThemeTextStore = ThemeTextStore;
|
|
@@ -1335,12 +1475,14 @@ exports.WeaverseNextStudioBridge = WeaverseNextStudioBridge;
|
|
|
1335
1475
|
exports.WeaverseNextStudioConnect = WeaverseNextStudioConnect;
|
|
1336
1476
|
exports.bindWeaverseNextStudioRuntime = bindWeaverseNextStudioRuntime;
|
|
1337
1477
|
exports.buildWeaverseNextRequestInfo = buildWeaverseNextRequestInfo;
|
|
1478
|
+
exports.buildWeaverseNextRevalidateRouteContext = buildWeaverseNextRevalidateRouteContext;
|
|
1338
1479
|
exports.createTranslate = createTranslate;
|
|
1339
1480
|
exports.createWeaverseNextClient = createWeaverseNextClient;
|
|
1340
1481
|
exports.createWeaverseNextRuntime = createWeaverseNextRuntime;
|
|
1341
1482
|
exports.createWeaverseNextStudioInternals = createWeaverseNextStudioInternals;
|
|
1342
1483
|
exports.createWeaverseNextThemeSettingsStore = createWeaverseNextThemeSettingsStore;
|
|
1343
1484
|
exports.formatWeaverseNextSeoMetadata = formatWeaverseNextSeoMetadata;
|
|
1485
|
+
exports.generateDataFromSchema = generateDataFromSchema;
|
|
1344
1486
|
exports.getNestedKey = getNestedKey;
|
|
1345
1487
|
exports.getWeaverseNextSeoMetadata = getWeaverseNextSeoMetadata;
|
|
1346
1488
|
exports.interpolate = interpolate;
|
|
@@ -1355,5 +1497,11 @@ exports.useWeaverseCommerce = useWeaverseCommerce;
|
|
|
1355
1497
|
exports.useWeaverseNextStudioInternals = useWeaverseNextStudioInternals;
|
|
1356
1498
|
exports.useWeaversePageData = useWeaversePageData;
|
|
1357
1499
|
exports.useWeaverseRootData = useWeaverseRootData;
|
|
1500
|
+
Object.keys(schema).forEach(function (k) {
|
|
1501
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
1502
|
+
enumerable: true,
|
|
1503
|
+
get: function () { return schema[k]; }
|
|
1504
|
+
});
|
|
1505
|
+
});
|
|
1358
1506
|
//# sourceMappingURL=index.js.map
|
|
1359
1507
|
//# sourceMappingURL=index.js.map
|