@weaverse/next 0.1.0-alpha.8 → 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 +260 -30
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +167 -46
- 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 -517
- package/dist/index.d.ts +0 -517
- package/dist/seo-CpN6tC36.d.mts +0 -477
- package/dist/seo-CpN6tC36.d.ts +0 -477
- package/dist/server.d.mts +0 -99
- package/dist/server.d.ts +0 -99
package/dist/index.mjs
CHANGED
|
@@ -1,13 +1,31 @@
|
|
|
1
|
-
import { buildWeaverseNextRequestInfo, generateDataFromSchema } from './chunk-
|
|
2
|
-
export { buildWeaverseNextRequestInfo, formatWeaverseNextSeoMetadata, getWeaverseNextSeoMetadata, runWeaverseComponentLoaders } from './chunk-
|
|
1
|
+
import { buildWeaverseNextRequestInfo, DEFAULT_REVALIDATE_ENDPOINT, revalidateWeaverseNextItem, generateDataFromSchema } from './chunk-LH6AAEIK.mjs';
|
|
2
|
+
export { DEFAULT_REVALIDATE_ENDPOINT, buildWeaverseNextRequestInfo, buildWeaverseNextRevalidateRouteContext, formatWeaverseNextSeoMetadata, generateDataFromSchema, getWeaverseNextSeoMetadata, revalidateWeaverseNextItem, runWeaverseComponentLoaders } from './chunk-LH6AAEIK.mjs';
|
|
3
3
|
import { WeaverseRoot, Weaverse, WeaverseItemStore, useSafeExternalStore } from '@weaverse/react';
|
|
4
4
|
export { isBrowser, isIframe, useChildInstances, useItemInstance, useParentInstance, useWeaverse } from '@weaverse/react';
|
|
5
5
|
import { createSchema } from '@weaverse/schema';
|
|
6
|
-
export
|
|
6
|
+
export * from '@weaverse/schema';
|
|
7
7
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
8
|
-
import { createContext, memo, useContext, useMemo,
|
|
8
|
+
import { createContext, memo, useContext, useMemo, useEffect, useLayoutEffect, useRef, useSyncExternalStore } from 'react';
|
|
9
9
|
import { useRouter } from 'next/navigation';
|
|
10
10
|
|
|
11
|
+
function flattenItemData(update) {
|
|
12
|
+
let { data, ...rest } = update;
|
|
13
|
+
if (!(data && typeof data === "object" && !Array.isArray(data))) {
|
|
14
|
+
return rest;
|
|
15
|
+
}
|
|
16
|
+
return { ...data, ...rest };
|
|
17
|
+
}
|
|
18
|
+
var deferredItemUpdates = null;
|
|
19
|
+
function collectDeferredItemUpdates(create) {
|
|
20
|
+
let previousQueue = deferredItemUpdates;
|
|
21
|
+
let queue = /* @__PURE__ */ new Set();
|
|
22
|
+
deferredItemUpdates = queue;
|
|
23
|
+
try {
|
|
24
|
+
return [create(), [...queue]];
|
|
25
|
+
} finally {
|
|
26
|
+
deferredItemUpdates = previousQueue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
11
29
|
var WeaverseNextItem = class extends WeaverseItemStore {
|
|
12
30
|
/**
|
|
13
31
|
* Cached merged snapshot (base `_store` + translations). Reset whenever the
|
|
@@ -17,12 +35,47 @@ var WeaverseNextItem = class extends WeaverseItemStore {
|
|
|
17
35
|
_cachedSnapshot = null;
|
|
18
36
|
_snapshotStoreRef = null;
|
|
19
37
|
_snapshotTranslationRef = null;
|
|
38
|
+
/** Create an item store from serialized component data and its runtime. */
|
|
20
39
|
constructor(initialData, weaverse) {
|
|
21
40
|
super(initialData, weaverse);
|
|
22
|
-
let { data, ...rest } = initialData;
|
|
23
41
|
let schemaData = generateDataFromSchema(this.Element?.schema);
|
|
24
|
-
Object.assign(this._store, schemaData,
|
|
42
|
+
Object.assign(this._store, schemaData, flattenItemData(initialData));
|
|
25
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Flatten nested `data` on updates exactly like the constructor does. Core's
|
|
46
|
+
* `initProject()` calls `setData(item)` when a new runtime serves a page
|
|
47
|
+
* whose item instances already exist (e.g. locale/client navigation).
|
|
48
|
+
*
|
|
49
|
+
* A complete serialized item (it carries `id` and `type`; core's
|
|
50
|
+
* `initProject()` always passes one) replaces the store the way the
|
|
51
|
+
* constructor builds it: the schema defaults of the item's own `type` — the
|
|
52
|
+
* Builder can replace a section in place, keeping its id — then the item's
|
|
53
|
+
* settings. A payload omits a setting — or the whole optional `data` — when
|
|
54
|
+
* its value equals the schema default, so merging into the previous store
|
|
55
|
+
* would keep the previous locale's value visible. Partial updates still
|
|
56
|
+
* merge. Either way the `_store` ref changes, which invalidates the memoized
|
|
57
|
+
* snapshot below. The subscriber emit is queued instead of fired when a
|
|
58
|
+
* render-phase deferral is active (see `collectDeferredItemUpdates`).
|
|
59
|
+
*/
|
|
60
|
+
setData = (update) => {
|
|
61
|
+
if ("id" in update && "type" in update) {
|
|
62
|
+
let { data, type } = update;
|
|
63
|
+
let schema = this.weaverse.elementRegistry.get(type)?.schema;
|
|
64
|
+
this._store = {
|
|
65
|
+
...generateDataFromSchema(schema),
|
|
66
|
+
...data === void 0 ? {} : { data },
|
|
67
|
+
...flattenItemData(update)
|
|
68
|
+
};
|
|
69
|
+
} else {
|
|
70
|
+
this.data = flattenItemData(update);
|
|
71
|
+
}
|
|
72
|
+
if (deferredItemUpdates) {
|
|
73
|
+
deferredItemUpdates.add(this);
|
|
74
|
+
} else {
|
|
75
|
+
this.triggerUpdate();
|
|
76
|
+
}
|
|
77
|
+
return this.data;
|
|
78
|
+
};
|
|
26
79
|
/**
|
|
27
80
|
* Overlay item-level translations onto the base store when the runtime is in
|
|
28
81
|
* translation mode. Mirrors Hydrogen's `WeaverseHydrogenItem.getSnapShot()`:
|
|
@@ -264,18 +317,24 @@ var useThemeText = useTranslation;
|
|
|
264
317
|
|
|
265
318
|
// src/translation-store.ts
|
|
266
319
|
var TranslationStore = class {
|
|
320
|
+
/** Current flat translation overrides keyed by dot path. */
|
|
267
321
|
overrides = {};
|
|
268
322
|
listeners = /* @__PURE__ */ new Set();
|
|
323
|
+
/** Replace every override and notify subscribers. */
|
|
269
324
|
setOverrides = (overrides) => {
|
|
270
325
|
this.overrides = { ...overrides };
|
|
271
326
|
this.emit();
|
|
272
327
|
};
|
|
328
|
+
/** Merge changed overrides into the current values and notify subscribers. */
|
|
273
329
|
updateOverrides = (newOverrides) => {
|
|
274
330
|
this.overrides = { ...this.overrides, ...newOverrides };
|
|
275
331
|
this.emit();
|
|
276
332
|
};
|
|
333
|
+
/** Return the current client-side override snapshot. */
|
|
277
334
|
getSnapshot = () => this.overrides;
|
|
335
|
+
/** Return the override snapshot used during server rendering. */
|
|
278
336
|
getServerSnapshot = () => this.overrides;
|
|
337
|
+
/** Subscribe to override changes and return an unsubscribe function. */
|
|
279
338
|
subscribe = (callback) => {
|
|
280
339
|
this.listeners.add(callback);
|
|
281
340
|
return () => {
|
|
@@ -466,6 +525,12 @@ function getConfigString(configs, key) {
|
|
|
466
525
|
let value = configs?.[key];
|
|
467
526
|
return typeof value === "string" ? value : void 0;
|
|
468
527
|
}
|
|
528
|
+
function resolveModeFlag(config, key) {
|
|
529
|
+
return config.client?.requestContext?.[key] === true || config.data.configs?.[key] === true;
|
|
530
|
+
}
|
|
531
|
+
function resolveSectionType(config) {
|
|
532
|
+
return config.client?.requestContext?.sectionType || getConfigString(config.data.configs, "sectionType") || void 0;
|
|
533
|
+
}
|
|
469
534
|
function getRecordString(record, key) {
|
|
470
535
|
let value = record?.[key];
|
|
471
536
|
return typeof value === "string" ? value : void 0;
|
|
@@ -502,12 +567,30 @@ function registerRuntime(runtime) {
|
|
|
502
567
|
runtimeWindow.__weaverses[runtime.pageId] = runtime;
|
|
503
568
|
runtimeWindow.__weaverse = runtime;
|
|
504
569
|
}
|
|
570
|
+
function rebindPageItemsToRuntime(runtime) {
|
|
571
|
+
let items = runtime.data?.items;
|
|
572
|
+
if (!items) {
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
for (let { id } of items) {
|
|
576
|
+
let instance = runtime.itemInstances.get(id);
|
|
577
|
+
if (instance && instance.weaverse !== runtime) {
|
|
578
|
+
instance.weaverse = runtime;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
505
582
|
var WeaverseNextRuntime = class extends Weaverse {
|
|
583
|
+
/** Stable ID of the page owned by this runtime. */
|
|
506
584
|
pageId;
|
|
585
|
+
/** Mutable callbacks and stores consumed by the Studio bridge. */
|
|
507
586
|
internal;
|
|
587
|
+
/** Path, query, and locale metadata for Studio navigation. */
|
|
508
588
|
requestInfo;
|
|
589
|
+
/** Whether this runtime renders a component preview. */
|
|
509
590
|
isPreviewMode;
|
|
591
|
+
/** Whether this runtime renders a saved revision. */
|
|
510
592
|
isRevisionPreview;
|
|
593
|
+
/** Component type rendered in section preview mode. */
|
|
511
594
|
sectionType;
|
|
512
595
|
// ─── Item-level translation sidecar (design mode only) ─────────────
|
|
513
596
|
/**
|
|
@@ -516,29 +599,52 @@ var WeaverseNextRuntime = class extends Weaverse {
|
|
|
516
599
|
* components, so translations render without mutating the base `_store`.
|
|
517
600
|
*/
|
|
518
601
|
translationMap = {};
|
|
602
|
+
/** Locale associated with the item-level translation sidecar. */
|
|
519
603
|
translationLocale = String();
|
|
604
|
+
/** Weaverse language ID used when saving translation changes. */
|
|
520
605
|
translationLanguageId = String();
|
|
606
|
+
/**
|
|
607
|
+
* Fresh page data captured while React was rendering. Runtime reuse happens
|
|
608
|
+
* inside the renderer's render phase (`useMemo`), where applying it through
|
|
609
|
+
* `setProjectData()` would emit item updates to `useSyncExternalStore`
|
|
610
|
+
* subscribers mid-render. The renderer applies it post-commit via
|
|
611
|
+
* `flushRenderPhaseUpdates()`. Never set on design-mode runtimes — the live
|
|
612
|
+
* Studio tree owns the page data there.
|
|
613
|
+
*/
|
|
614
|
+
pendingProjectData;
|
|
615
|
+
/**
|
|
616
|
+
* Reused item instances whose data was refreshed while this runtime was
|
|
617
|
+
* constructed during render (core `initProject()` calls `setData()` on
|
|
618
|
+
* them). Their data is already fresh; only the subscriber notification was
|
|
619
|
+
* deferred to `flushRenderPhaseUpdates()`.
|
|
620
|
+
*/
|
|
621
|
+
pendingItemUpdates = [];
|
|
622
|
+
/** Create a browser runtime from a loaded page and its request context. */
|
|
521
623
|
constructor(config) {
|
|
522
624
|
let { client, data } = config;
|
|
523
625
|
let page = getRenderablePage(data);
|
|
524
626
|
let configs = data.configs;
|
|
525
627
|
let requestContext = client?.requestContext;
|
|
628
|
+
let isDesignMode = resolveModeFlag(config, "isDesignMode");
|
|
629
|
+
let isPreviewMode = resolveModeFlag(config, "isPreviewMode");
|
|
630
|
+
let isRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
|
|
631
|
+
let sectionType = resolveSectionType(config);
|
|
526
632
|
let projectId = resolveProjectId(client, data, page.id);
|
|
527
633
|
ensureNextItemConstructor();
|
|
528
634
|
super({
|
|
529
635
|
projectId,
|
|
530
636
|
data: page,
|
|
531
|
-
isDesignMode
|
|
637
|
+
isDesignMode,
|
|
532
638
|
weaverseHost: getConfigString(configs, "weaverseHost"),
|
|
533
639
|
weaverseVersion: getConfigString(configs, "weaverseVersion")
|
|
534
640
|
});
|
|
535
641
|
this.pageId = page.id;
|
|
536
642
|
this.dataContext = resolveDataContext(config);
|
|
537
643
|
this.requestInfo = buildWeaverseNextRequestInfo(requestContext);
|
|
538
|
-
this.isDesignMode =
|
|
539
|
-
this.isPreviewMode =
|
|
540
|
-
this.isRevisionPreview =
|
|
541
|
-
this.sectionType =
|
|
644
|
+
this.isDesignMode = isDesignMode;
|
|
645
|
+
this.isPreviewMode = isPreviewMode;
|
|
646
|
+
this.isRevisionPreview = isRevisionPreview;
|
|
647
|
+
this.sectionType = sectionType;
|
|
542
648
|
let translationStore = config.translationStore ?? new TranslationStore();
|
|
543
649
|
this.internal = {
|
|
544
650
|
merchantOverrides: config.merchantOverrides,
|
|
@@ -641,6 +747,27 @@ var WeaverseNextRuntime = class extends Weaverse {
|
|
|
641
747
|
this.extractTranslationSidecar();
|
|
642
748
|
this.initProject();
|
|
643
749
|
};
|
|
750
|
+
/**
|
|
751
|
+
* Apply updates deferred off the render phase: swap in any pending page data
|
|
752
|
+
* captured on runtime reuse, then notify items whose data was refreshed
|
|
753
|
+
* during construction. The renderer calls this from a layout effect right
|
|
754
|
+
* after commit, so subscribers re-render before paint (no content flash) and
|
|
755
|
+
* without React's setState-in-render warning.
|
|
756
|
+
*/
|
|
757
|
+
flushRenderPhaseUpdates = () => {
|
|
758
|
+
let pendingData = this.pendingProjectData;
|
|
759
|
+
if (pendingData) {
|
|
760
|
+
this.pendingProjectData = void 0;
|
|
761
|
+
this.setProjectData(pendingData);
|
|
762
|
+
}
|
|
763
|
+
let pendingItems = this.pendingItemUpdates;
|
|
764
|
+
if (pendingItems.length > 0) {
|
|
765
|
+
this.pendingItemUpdates = [];
|
|
766
|
+
for (let item of pendingItems) {
|
|
767
|
+
item.triggerUpdate();
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
};
|
|
644
771
|
};
|
|
645
772
|
function createWeaverseNextRuntime(config) {
|
|
646
773
|
let requestInfo = buildWeaverseNextRequestInfo(config.client?.requestContext);
|
|
@@ -649,20 +776,26 @@ function createWeaverseNextRuntime(config) {
|
|
|
649
776
|
let existing = runtimeWindow?.__weaverses?.[page.id];
|
|
650
777
|
let requestKey = getRuntimeKey(page.id, requestInfo);
|
|
651
778
|
if (existing?.__weaverseNextRequestKey === requestKey) {
|
|
652
|
-
let
|
|
653
|
-
|
|
654
|
-
|
|
779
|
+
let configs = config.data.configs;
|
|
780
|
+
let nextIsDesignMode = resolveModeFlag(config, "isDesignMode");
|
|
781
|
+
let nextIsPreviewMode = resolveModeFlag(config, "isPreviewMode");
|
|
782
|
+
let nextIsRevisionPreview = resolveModeFlag(config, "isRevisionPreview");
|
|
783
|
+
let nextSectionType = resolveSectionType(config);
|
|
784
|
+
if (existing.isDesignMode || nextIsDesignMode) {
|
|
785
|
+
existing.pendingProjectData = void 0;
|
|
786
|
+
} else {
|
|
787
|
+
existing.pendingProjectData = page;
|
|
655
788
|
}
|
|
656
789
|
existing.__weaverseNextLatestData = page;
|
|
657
790
|
existing.dataContext = resolveDataContext(config);
|
|
658
791
|
existing.requestInfo = requestInfo;
|
|
659
792
|
existing.projectId = resolveProjectId(config.client, config.data, page.id);
|
|
660
793
|
existing.isDesignMode = nextIsDesignMode;
|
|
661
|
-
existing.isPreviewMode =
|
|
662
|
-
existing.isRevisionPreview =
|
|
663
|
-
existing.sectionType =
|
|
664
|
-
existing.weaverseHost = getConfigString(
|
|
665
|
-
existing.weaverseVersion = getConfigString(
|
|
794
|
+
existing.isPreviewMode = nextIsPreviewMode;
|
|
795
|
+
existing.isRevisionPreview = nextIsRevisionPreview;
|
|
796
|
+
existing.sectionType = nextSectionType;
|
|
797
|
+
existing.weaverseHost = getConfigString(configs, "weaverseHost") ?? existing.weaverseHost;
|
|
798
|
+
existing.weaverseVersion = getConfigString(configs, "weaverseVersion") ?? existing.weaverseVersion;
|
|
666
799
|
existing.internal.pageAssignment = config.data.pageAssignment;
|
|
667
800
|
existing.internal.project = config.data.project;
|
|
668
801
|
if (config.navigate) {
|
|
@@ -682,7 +815,11 @@ function createWeaverseNextRuntime(config) {
|
|
|
682
815
|
registerRuntime(existing);
|
|
683
816
|
return existing;
|
|
684
817
|
}
|
|
685
|
-
let runtime =
|
|
818
|
+
let [runtime, refreshedItems] = collectDeferredItemUpdates(
|
|
819
|
+
() => new WeaverseNextRuntime(config)
|
|
820
|
+
);
|
|
821
|
+
runtime.pendingItemUpdates = refreshedItems;
|
|
822
|
+
rebindPageItemsToRuntime(runtime);
|
|
686
823
|
runtime.__weaverseNextRequestKey = requestKey;
|
|
687
824
|
runtime.__weaverseNextLatestData = page;
|
|
688
825
|
registerRuntime(runtime);
|
|
@@ -697,7 +834,10 @@ function bindWeaverseNextStudioRuntime(runtime) {
|
|
|
697
834
|
return false;
|
|
698
835
|
}
|
|
699
836
|
let boundRuntime = runtime;
|
|
700
|
-
|
|
837
|
+
let activeRuntime = studio.weaverse;
|
|
838
|
+
let activeRequestInfo = activeRuntime?.requestInfo;
|
|
839
|
+
let isActiveUrl = !activeRequestInfo || activeRequestInfo.pathname === runtime.requestInfo.pathname && activeRequestInfo.search === runtime.requestInfo.search;
|
|
840
|
+
if (!(boundRuntime.__weaverseNextStudioBound && isActiveUrl)) {
|
|
701
841
|
studio.init?.(runtime);
|
|
702
842
|
boundRuntime.__weaverseNextStudioBound = true;
|
|
703
843
|
return true;
|
|
@@ -709,29 +849,6 @@ function bindWeaverseNextStudioRuntime(runtime) {
|
|
|
709
849
|
});
|
|
710
850
|
return true;
|
|
711
851
|
}
|
|
712
|
-
|
|
713
|
-
// src/revalidate-item.ts
|
|
714
|
-
var DEFAULT_REVALIDATE_ENDPOINT = "/api/weaverse/revalidate";
|
|
715
|
-
async function revalidateWeaverseNextItem(runtime, draftItem, endpoint = DEFAULT_REVALIDATE_ENDPOINT) {
|
|
716
|
-
let instance = runtime.itemInstances.get(draftItem.id);
|
|
717
|
-
if (!instance) {
|
|
718
|
-
throw new Error(
|
|
719
|
-
`[weaverse-next] No live item instance for "${draftItem.id}".`
|
|
720
|
-
);
|
|
721
|
-
}
|
|
722
|
-
let response = await fetch(endpoint, {
|
|
723
|
-
method: "POST",
|
|
724
|
-
headers: { "Content-Type": "application/json" },
|
|
725
|
-
body: JSON.stringify({ draftItem })
|
|
726
|
-
});
|
|
727
|
-
if (!response.ok) {
|
|
728
|
-
throw new Error(
|
|
729
|
-
`[weaverse-next] Revalidate endpoint responded ${response.status}.`
|
|
730
|
-
);
|
|
731
|
-
}
|
|
732
|
-
let { loaderData } = await response.json();
|
|
733
|
-
instance.setData({ loaderData: loaderData ?? null });
|
|
734
|
-
}
|
|
735
852
|
var STUDIO_BIND_RETRY_INTERVAL_MS = 50;
|
|
736
853
|
var STUDIO_BIND_MAX_ATTEMPTS = 100;
|
|
737
854
|
function WeaverseNextStudioBridge(props) {
|
|
@@ -835,6 +952,7 @@ function WeaverseNextStudio(props) {
|
|
|
835
952
|
);
|
|
836
953
|
}
|
|
837
954
|
var EMPTY_DATA_CONTEXT = {};
|
|
955
|
+
var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
|
|
838
956
|
function getRenderablePage2(data) {
|
|
839
957
|
let page = data?.page;
|
|
840
958
|
if (!page) {
|
|
@@ -870,6 +988,9 @@ var WeaverseNextRenderer = memo(function WeaverseNextRendererComponent(props) {
|
|
|
870
988
|
context?.themeSettingsStore,
|
|
871
989
|
context?.translationStore
|
|
872
990
|
]);
|
|
991
|
+
useIsomorphicLayoutEffect(() => {
|
|
992
|
+
weaverse?.flushRenderPhaseUpdates();
|
|
993
|
+
}, [weaverse]);
|
|
873
994
|
if (!weaverse) {
|
|
874
995
|
return null;
|
|
875
996
|
}
|
|
@@ -942,7 +1063,7 @@ function resolveWeaverseNextStudioScriptSrc(context, options = {}) {
|
|
|
942
1063
|
if (!isTrustedStudioOrigin(origin, storefrontHostname)) {
|
|
943
1064
|
return null;
|
|
944
1065
|
}
|
|
945
|
-
let bundle =
|
|
1066
|
+
let bundle = isPreviewMode || isRevisionPreview ? "preview.js" : "index.js";
|
|
946
1067
|
let version = last(searchParams, "weaverseVersion");
|
|
947
1068
|
let url = `${origin}/static/studio/next/${bundle}`;
|
|
948
1069
|
return version ? `${url}?v=${encodeURIComponent(version)}` : url;
|
|
@@ -992,6 +1113,6 @@ function WeaverseNextStudioConnect(props) {
|
|
|
992
1113
|
return null;
|
|
993
1114
|
}
|
|
994
1115
|
|
|
995
|
-
export {
|
|
1116
|
+
export { ThemeTextProvider, ThemeTextStore, TranslationProvider, TranslationStore, WeaverseNextProvider, WeaverseNextRenderer, WeaverseNextRootProvider, WeaverseNextRuntime, WeaverseNextStudio, WeaverseNextStudioBridge, WeaverseNextStudioConnect, bindWeaverseNextStudioRuntime, createTranslate, createWeaverseNextClient, createWeaverseNextRuntime, createWeaverseNextStudioInternals, createWeaverseNextThemeSettingsStore, getNestedKey, interpolate, loadWeaverseNextStudioScript, resolveWeaverseNextStudioScriptSrc, useThemeSettings, useThemeText, useTranslation, useWeaverseCommerce, useWeaverseNextStudioInternals, useWeaversePageData, useWeaverseRootData };
|
|
996
1117
|
//# sourceMappingURL=index.mjs.map
|
|
997
1118
|
//# sourceMappingURL=index.mjs.map
|