@elytracms/next 0.0.81 → 0.0.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +295 -97
- package/dist/index.js +107 -59
- package/dist/index.js.map +1 -1
- package/package.json +5 -2
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ComponentRegistry } from '@elytracms/core/component-registry';
|
|
2
2
|
export { defineComponent } from '@elytracms/core/component-registry';
|
|
3
|
-
import { basePrimitives, getImplementation,
|
|
3
|
+
import { basePrimitives, getImplementation, renderDocumentBodyItems, documentBodyItems, ImageManifest, serializeListingQuery, RenderErrorBoundary, documentBodyRichTextValues, documentBodyCompositionNodes, richTextEmbedsInValue, collectReferencedAssetIds, collectRichTextRefsInValue, collectReferencedRelations, collectReferencedListings, collectReferencedRichTextLinks, normalizeImageSource } from '@elytracms/core/runtime-renderer';
|
|
4
4
|
import { isValidElement } from 'react';
|
|
5
5
|
import { jsx, Fragment } from 'react/jsx-runtime';
|
|
6
6
|
import { cacheTags, isSectionSourceId, parseCmsSourceQueryConfig, listQueryOfCmsConfig, isDocumentHistory, resolvedAsset, createContentClient, createContentContext } from '@elytracms/core/content';
|
|
7
|
-
import { documentKey,
|
|
8
|
-
export { documentSchema, fallbackHomeRoutes, localeConfigSchema, mergeRouteRecords, redirectRecordSchema, routeRecordSchema } from '@elytracms/core/cms-core';
|
|
7
|
+
import { documentKey, splitLocalePath, hierarchyMount, composePath, localeUrlPath, mergeRouteRecords, fallbackHomeRoutes, presentationBodyFields, splitPath, documentSchema, redirectRecordSchema } from '@elytracms/core/cms-core';
|
|
8
|
+
export { documentSchema, fallbackHomeRoutes, localeConfigSchema, localeUrlPath, mergeRouteRecords, redirectRecordSchema, routeRecordSchema, splitLocalePath } from '@elytracms/core/cms-core';
|
|
9
9
|
import { revalidateTag, unstable_cache } from 'next/cache';
|
|
10
10
|
import { draftMode } from 'next/headers';
|
|
11
11
|
import { redirect, notFound, permanentRedirect } from 'next/navigation';
|
|
@@ -148,11 +148,16 @@ async function CanvasRenderer(props) {
|
|
|
148
148
|
};
|
|
149
149
|
const document = result.document;
|
|
150
150
|
if (document) {
|
|
151
|
-
|
|
152
|
-
return /* @__PURE__ */ jsx(Fragment, { children: renderComposition(composition, ctx) });
|
|
151
|
+
return /* @__PURE__ */ jsx(Fragment, { children: renderDocumentBodyItems(bodyItemsOf(document, props.presentation), ctx) });
|
|
153
152
|
}
|
|
154
153
|
return /* @__PURE__ */ jsx(MissingDocumentFallback, {});
|
|
155
154
|
}
|
|
155
|
+
function bodyItemsOf(document, presentation) {
|
|
156
|
+
if (!document) return [];
|
|
157
|
+
const fields = presentation?.body ?? [];
|
|
158
|
+
if (fields.length > 0) return fields.flatMap((name) => documentBodyItems(document[name]));
|
|
159
|
+
return documentBodyItems(compositionOf(document));
|
|
160
|
+
}
|
|
156
161
|
function compositionOf(document) {
|
|
157
162
|
const body = document["body"];
|
|
158
163
|
if (Array.isArray(body) || isComponentNodeValue(body)) return body;
|
|
@@ -164,11 +169,8 @@ function compositionOf(document) {
|
|
|
164
169
|
}
|
|
165
170
|
return void 0;
|
|
166
171
|
}
|
|
167
|
-
function compositionNodesOf(document) {
|
|
168
|
-
|
|
169
|
-
const composition = compositionOf(document);
|
|
170
|
-
const candidates = Array.isArray(composition) ? composition : [composition];
|
|
171
|
-
return candidates.filter((node) => isComponentNodeValue(node));
|
|
172
|
+
function compositionNodesOf(document, presentation) {
|
|
173
|
+
return documentBodyCompositionNodes(bodyItemsOf(document, presentation));
|
|
172
174
|
}
|
|
173
175
|
function isComponentNodeValue(value) {
|
|
174
176
|
return typeof value === "object" && value !== null && typeof value.id === "string" && typeof value.componentId === "string";
|
|
@@ -219,9 +221,8 @@ function materializeSourcePayloads(input) {
|
|
|
219
221
|
}
|
|
220
222
|
return { payloads, tags };
|
|
221
223
|
}
|
|
222
|
-
var DEFAULT_LOCALES = { default: "en", locales: ["en"] };
|
|
223
224
|
function createStaticContentSource(data) {
|
|
224
|
-
const locales = data.locales
|
|
225
|
+
const locales = data.locales;
|
|
225
226
|
const routes = data.routes ?? [];
|
|
226
227
|
const redirects = data.redirects ?? [];
|
|
227
228
|
const assetUrl = data.assetUrl ?? ((asset) => `asset://unresolved/${asset.storageKey}`);
|
|
@@ -265,10 +266,15 @@ function createStaticContentSource(data) {
|
|
|
265
266
|
// dimensions. Baked into the (serializable) render outcome by the route
|
|
266
267
|
// helper, so a cached page keeps its images during a backend outage.
|
|
267
268
|
assets: () => [...assets.values()].map((record2) => resolvedAsset(record2, record2.url ?? assetUrl(record2))),
|
|
268
|
-
...data.sources ? { sources: data.sources } : {}
|
|
269
|
+
...data.sources ? { sources: data.sources } : {},
|
|
270
|
+
// EC-499: the schema the route helper reads a collection's declared
|
|
271
|
+
// `presentation` from (which field is the delivery body, which component
|
|
272
|
+
// wraps it). Already prefetched for the lookup above — exposing it costs
|
|
273
|
+
// nothing and keeps the declaration reachable without a second wiring seam.
|
|
274
|
+
...data.collections ? { collections: data.collections } : {}
|
|
269
275
|
};
|
|
270
276
|
}
|
|
271
|
-
async function createContentSnapshot(adapter, projectId, options
|
|
277
|
+
async function createContentSnapshot(adapter, projectId, options) {
|
|
272
278
|
const schema = await adapter.cms.findSchema(projectId);
|
|
273
279
|
const documentRecords = await adapter.cms.listDocuments(projectId);
|
|
274
280
|
const versionRecords = await adapter.cms.listAllDocumentVersions(projectId);
|
|
@@ -297,7 +303,7 @@ async function createContentSnapshot(adapter, projectId, options = {}) {
|
|
|
297
303
|
});
|
|
298
304
|
return createStaticContentSource({
|
|
299
305
|
projectId,
|
|
300
|
-
|
|
306
|
+
locales: options.locales,
|
|
301
307
|
...options.routes ? { routes: options.routes } : {},
|
|
302
308
|
redirects: options.redirects ? [...options.redirects] : redirects,
|
|
303
309
|
...options.sources ? { sources: options.sources } : {},
|
|
@@ -307,42 +313,57 @@ async function createContentSnapshot(adapter, projectId, options = {}) {
|
|
|
307
313
|
assetUrl: (asset) => adapter.blobs.url(asset.storageKey)
|
|
308
314
|
});
|
|
309
315
|
}
|
|
310
|
-
function
|
|
311
|
-
const
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
function localeUrlPath(path, locale, locales) {
|
|
319
|
-
const urlPath = locale === locales.default ? path : path === "/" ? `/${locale}` : `/${locale}${path}`;
|
|
320
|
-
const round = splitLocalePath(urlPath, locales);
|
|
321
|
-
return { urlPath, addressable: round.locale === locale && round.path === path };
|
|
316
|
+
function canvasWrapContext(result, info) {
|
|
317
|
+
const collection = result.document?.collection;
|
|
318
|
+
return {
|
|
319
|
+
...info,
|
|
320
|
+
...collection !== void 0 ? { collection } : {},
|
|
321
|
+
document: result.document,
|
|
322
|
+
result
|
|
323
|
+
};
|
|
322
324
|
}
|
|
323
325
|
function pathFromSlug(slug) {
|
|
324
326
|
return "/" + (slug ?? []).join("/");
|
|
325
327
|
}
|
|
326
|
-
function scopeAssetsToPage(allAssets, registry, result, resolveRelation) {
|
|
328
|
+
function scopeAssetsToPage(allAssets, registry, result, body, resolveRelation) {
|
|
327
329
|
if (allAssets.length === 0) return allAssets;
|
|
328
330
|
const ids = /* @__PURE__ */ new Set();
|
|
329
331
|
const seen = /* @__PURE__ */ new Set();
|
|
330
|
-
for (const node of
|
|
332
|
+
for (const node of body.nodes) {
|
|
331
333
|
collectReferencedAssetIds(node, registry, ids, resolveRelation, seen);
|
|
332
334
|
}
|
|
335
|
+
for (const value of body.richTexts) {
|
|
336
|
+
collectRichTextRefsInValue(value, { onAsset: (id) => ids.add(id) });
|
|
337
|
+
}
|
|
333
338
|
const ogImage = result.document?.["seoOgImage"];
|
|
334
339
|
const ogImageId = typeof ogImage === "string" ? ogImage : ogImage && typeof ogImage === "object" && typeof ogImage.id === "string" ? ogImage.id : null;
|
|
335
340
|
if (ogImageId) ids.add(ogImageId);
|
|
336
341
|
return ids.size === 0 ? [] : allAssets.filter((asset) => ids.has(asset.id));
|
|
337
342
|
}
|
|
338
|
-
function
|
|
339
|
-
|
|
343
|
+
function pageBodyOf(result, presentation) {
|
|
344
|
+
const items2 = bodyItemsOf(result.document, presentation);
|
|
345
|
+
const richTexts = documentBodyRichTextValues(items2);
|
|
346
|
+
return {
|
|
347
|
+
nodes: [
|
|
348
|
+
...documentBodyCompositionNodes(items2),
|
|
349
|
+
...richTexts.flatMap((value) => richTextEmbedsInValue(value))
|
|
350
|
+
],
|
|
351
|
+
richTexts
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
function presentationFor(source, result) {
|
|
355
|
+
const collectionId = result.document?.collection;
|
|
356
|
+
if (!collectionId || !source.collections) return void 0;
|
|
357
|
+
const collection = source.collections.find((candidate) => candidate.id === collectionId);
|
|
358
|
+
if (!collection?.presentation) return void 0;
|
|
359
|
+
const body = presentationBodyFields(collection);
|
|
360
|
+
return body.length > 0 ? { body: [...body] } : void 0;
|
|
340
361
|
}
|
|
341
|
-
function populatePageRelations(
|
|
362
|
+
function populatePageRelations(body, client, registry) {
|
|
342
363
|
if (!registry) return { relations: {}, docKeys: [] };
|
|
343
364
|
const refKeys = /* @__PURE__ */ new Set();
|
|
344
365
|
const relations = collectReferencedRelations(
|
|
345
|
-
|
|
366
|
+
body.nodes,
|
|
346
367
|
registry,
|
|
347
368
|
(ref) => client.resolveRelation(ref),
|
|
348
369
|
{},
|
|
@@ -350,11 +371,11 @@ function populatePageRelations(result, client, registry) {
|
|
|
350
371
|
);
|
|
351
372
|
return { relations, docKeys: [...refKeys] };
|
|
352
373
|
}
|
|
353
|
-
function populatePageListings(
|
|
374
|
+
function populatePageListings(body, client, registry) {
|
|
354
375
|
if (!registry) return { listings: {}, tags: [] };
|
|
355
376
|
const tags = [];
|
|
356
377
|
const listings = collectReferencedListings(
|
|
357
|
-
|
|
378
|
+
body.nodes,
|
|
358
379
|
registry,
|
|
359
380
|
(query) => {
|
|
360
381
|
const listed = client.listDocuments(query.collection, {
|
|
@@ -372,13 +393,20 @@ function populatePageListings(result, client, registry) {
|
|
|
372
393
|
);
|
|
373
394
|
return { listings, tags };
|
|
374
395
|
}
|
|
375
|
-
function populatePageLinks(
|
|
396
|
+
function populatePageLinks(body, client, registry) {
|
|
376
397
|
if (!registry) return { links: {}, docKeys: [] };
|
|
377
398
|
const refs = collectReferencedRichTextLinks(
|
|
378
|
-
|
|
399
|
+
body.nodes,
|
|
379
400
|
registry,
|
|
380
401
|
(ref) => client.resolveRelation(ref)
|
|
381
402
|
);
|
|
403
|
+
for (const value of body.richTexts) {
|
|
404
|
+
collectRichTextRefsInValue(value, {
|
|
405
|
+
onLink: (ref) => {
|
|
406
|
+
refs[`${ref.collection}:${ref.id}`] = ref;
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
}
|
|
382
410
|
const links = {};
|
|
383
411
|
for (const [key, ref] of Object.entries(refs)) {
|
|
384
412
|
const url = client.resolveLink(ref);
|
|
@@ -421,11 +449,14 @@ async function resolveCanvasPage(source, url, perspective, options = {}) {
|
|
|
421
449
|
});
|
|
422
450
|
payloads = { ...payloads, ...custom };
|
|
423
451
|
}
|
|
452
|
+
const presentation = presentationFor(source, result);
|
|
453
|
+
const body = pageBodyOf(result, presentation);
|
|
424
454
|
const allAssets = source.assets?.() ?? [];
|
|
425
455
|
const bakedAssets = options.registry ? scopeAssetsToPage(
|
|
426
456
|
allAssets,
|
|
427
457
|
options.registry,
|
|
428
458
|
result,
|
|
459
|
+
body,
|
|
429
460
|
(ref) => client.resolveRelation(ref)
|
|
430
461
|
) : allAssets;
|
|
431
462
|
const assetTags = cacheTags({
|
|
@@ -433,17 +464,17 @@ async function resolveCanvasPage(source, url, perspective, options = {}) {
|
|
|
433
464
|
locale: result.tags.locale
|
|
434
465
|
});
|
|
435
466
|
const { relations, docKeys: relationDocKeys } = populatePageRelations(
|
|
436
|
-
|
|
467
|
+
body,
|
|
437
468
|
client,
|
|
438
469
|
options.registry
|
|
439
470
|
);
|
|
440
471
|
const relationTags = cacheTags({ docs: relationDocKeys, locale: result.tags.locale });
|
|
441
472
|
const { listings, tags: listingTags } = populatePageListings(
|
|
442
|
-
|
|
473
|
+
body,
|
|
443
474
|
client,
|
|
444
475
|
options.registry
|
|
445
476
|
);
|
|
446
|
-
const { links, docKeys: linkDocKeys } = populatePageLinks(
|
|
477
|
+
const { links, docKeys: linkDocKeys } = populatePageLinks(body, client, options.registry);
|
|
447
478
|
const linkTags = cacheTags({ docs: linkDocKeys, locale: result.tags.locale });
|
|
448
479
|
return {
|
|
449
480
|
kind: "render",
|
|
@@ -453,6 +484,7 @@ async function resolveCanvasPage(source, url, perspective, options = {}) {
|
|
|
453
484
|
relations,
|
|
454
485
|
listings,
|
|
455
486
|
links,
|
|
487
|
+
...presentation ? { presentation } : {},
|
|
456
488
|
tags: mergeCacheTags(
|
|
457
489
|
result.tags,
|
|
458
490
|
...extraTags,
|
|
@@ -611,8 +643,8 @@ function createCanvasRoute(options) {
|
|
|
611
643
|
return outcome.permanent ? permanentRedirect(outcome.target) : redirect(outcome.target);
|
|
612
644
|
case "not-found":
|
|
613
645
|
return notFound();
|
|
614
|
-
case "render":
|
|
615
|
-
|
|
646
|
+
case "render": {
|
|
647
|
+
const rendered = /* @__PURE__ */ jsx(
|
|
616
648
|
CanvasRenderer,
|
|
617
649
|
{
|
|
618
650
|
result: outcome.result,
|
|
@@ -621,9 +653,13 @@ function createCanvasRoute(options) {
|
|
|
621
653
|
assets: outcome.assets,
|
|
622
654
|
relations: outcome.relations,
|
|
623
655
|
listings: outcome.listings,
|
|
624
|
-
links: outcome.links
|
|
656
|
+
links: outcome.links,
|
|
657
|
+
presentation: outcome.presentation
|
|
625
658
|
}
|
|
626
659
|
);
|
|
660
|
+
if (!options.wrap) return rendered;
|
|
661
|
+
return options.wrap(rendered, canvasWrapContext(outcome.result, { url, perspective }));
|
|
662
|
+
}
|
|
627
663
|
}
|
|
628
664
|
};
|
|
629
665
|
const generateMetadata = async (props) => {
|
|
@@ -679,7 +715,8 @@ function canvasSitemapEntries(source, options) {
|
|
|
679
715
|
}
|
|
680
716
|
return client;
|
|
681
717
|
};
|
|
682
|
-
const
|
|
718
|
+
const byUrl = /* @__PURE__ */ new Map();
|
|
719
|
+
const byGroup = /* @__PURE__ */ new Map();
|
|
683
720
|
for (const route of routes) {
|
|
684
721
|
const paramNames = paramNamesOf(route.pattern);
|
|
685
722
|
const mount = hierarchyMount(route);
|
|
@@ -740,9 +777,12 @@ function canvasSitemapEntries(source, options) {
|
|
|
740
777
|
);
|
|
741
778
|
continue;
|
|
742
779
|
}
|
|
743
|
-
const
|
|
744
|
-
|
|
745
|
-
|
|
780
|
+
const absolute = originOf(options.baseUrl) + urlPath;
|
|
781
|
+
const group = result.document ? `${route.id}\0doc\0${result.document.collection}\0${result.document.id}` : `${route.id}\0path\0${path}`;
|
|
782
|
+
if (!byUrl.has(absolute)) byUrl.set(absolute, { group, locale });
|
|
783
|
+
const perLocale = byGroup.get(group) ?? /* @__PURE__ */ new Map();
|
|
784
|
+
if (!perLocale.has(locale)) perLocale.set(locale, absolute);
|
|
785
|
+
byGroup.set(group, perLocale);
|
|
746
786
|
}
|
|
747
787
|
if (mount && paths.length > 0 && unresolved === paths.length) {
|
|
748
788
|
skip(
|
|
@@ -753,14 +793,10 @@ function canvasSitemapEntries(source, options) {
|
|
|
753
793
|
}
|
|
754
794
|
}
|
|
755
795
|
const entries = [];
|
|
756
|
-
for (const
|
|
757
|
-
const
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
url,
|
|
761
|
-
...perLocale.size > 1 ? { alternates: { languages } } : {}
|
|
762
|
-
});
|
|
763
|
-
}
|
|
796
|
+
for (const [url, { group }] of byUrl) {
|
|
797
|
+
const perLocale = byGroup.get(group);
|
|
798
|
+
const languages = perLocale && perLocale.size > 1 ? Object.fromEntries(perLocale) : void 0;
|
|
799
|
+
entries.push({ url, ...languages ? { alternates: { languages } } : {} });
|
|
764
800
|
}
|
|
765
801
|
entries.sort((a, b) => a.url < b.url ? -1 : a.url > b.url ? 1 : 0);
|
|
766
802
|
return { entries, skipped };
|
|
@@ -831,7 +867,7 @@ function createRevalidateRoute(options) {
|
|
|
831
867
|
{ status: evaluation.status, headers: cors }
|
|
832
868
|
);
|
|
833
869
|
}
|
|
834
|
-
for (const tag of evaluation.payload.tags) revalidateTag(tag,
|
|
870
|
+
for (const tag of evaluation.payload.tags) revalidateTag(tag, { expire: 0 });
|
|
835
871
|
return Response.json({ revalidated: evaluation.payload.tags }, { headers: cors });
|
|
836
872
|
},
|
|
837
873
|
async OPTIONS() {
|
|
@@ -935,8 +971,8 @@ function elytraHostImage(options = {}) {
|
|
|
935
971
|
}
|
|
936
972
|
|
|
937
973
|
// src/full-bleed.ts
|
|
938
|
-
function firstBlockFullBleed(document, registry) {
|
|
939
|
-
const first = compositionNodesOf(document)[0];
|
|
974
|
+
function firstBlockFullBleed(document, registry, presentation) {
|
|
975
|
+
const first = compositionNodesOf(document, presentation)[0];
|
|
940
976
|
if (!first) return false;
|
|
941
977
|
return registry.getManifest(first.componentId)?.presentation?.fullBleed === true;
|
|
942
978
|
}
|
|
@@ -1230,12 +1266,23 @@ function createElytraHost(options) {
|
|
|
1230
1266
|
const env = resolveHostEnv(options.env ?? process.env);
|
|
1231
1267
|
const routes = materializeRoutes(options.routes, options.collections);
|
|
1232
1268
|
const live = env.convexUrl !== void 0 && env.projectId !== void 0;
|
|
1269
|
+
if (!live && (env.convexUrl !== void 0 || env.projectId !== void 0)) {
|
|
1270
|
+
const [present, missing] = env.convexUrl !== void 0 ? [ELYTRA_HOST_ENV_KEYS.convexUrl, ELYTRA_HOST_ENV_KEYS.projectId] : [ELYTRA_HOST_ENV_KEYS.projectId, ELYTRA_HOST_ENV_KEYS.convexUrl];
|
|
1271
|
+
throw new Error(
|
|
1272
|
+
`Elytra delivery host: ${present} is set but ${missing} is not \u2014 live content needs both. Left as it is, this site would serve fallback content and look healthy. Set ${missing} to go live, or unset ${present} to run the no-backend fallback on purpose.`
|
|
1273
|
+
);
|
|
1274
|
+
}
|
|
1275
|
+
const contentMode = live ? "live" : options.fallbackContent ? "fallback" : "empty";
|
|
1233
1276
|
const contentScope = live ? env.projectId : options.slug;
|
|
1234
1277
|
const components = defineHostComponents([
|
|
1235
1278
|
// Batteries included (EC-368 image defaults): graph `base.Image` nodes render
|
|
1236
1279
|
// through next/image — resized variants via the host's own optimizer. The
|
|
1237
1280
|
// canonical manifest stays (first registration wins in defineHostComponents).
|
|
1238
1281
|
...options.image === false ? [] : [nextImagePrimitive(options.image ?? {})],
|
|
1282
|
+
// EC-539: the option is the CONFIG's entry shape (`implementation: unknown`)
|
|
1283
|
+
// so the recommended `{ ...site }` spread compiles. Narrowing here is the
|
|
1284
|
+
// one place that widening is paid for; see the option's doc comment and
|
|
1285
|
+
// EC-541 for the runtime check that should back it.
|
|
1239
1286
|
...options.components ?? []
|
|
1240
1287
|
]);
|
|
1241
1288
|
const emptySource = createStaticContentSource({
|
|
@@ -1305,6 +1352,7 @@ function createElytraHost(options) {
|
|
|
1305
1352
|
};
|
|
1306
1353
|
return {
|
|
1307
1354
|
contentScope,
|
|
1355
|
+
contentMode,
|
|
1308
1356
|
env,
|
|
1309
1357
|
routes,
|
|
1310
1358
|
components,
|
|
@@ -1320,6 +1368,6 @@ function createElytraHost(options) {
|
|
|
1320
1368
|
}
|
|
1321
1369
|
var PACKAGE = "@elytracms/next";
|
|
1322
1370
|
|
|
1323
|
-
export { CanvasRenderer, ELYTRA_HOST_ENV_KEYS, ElytraImage, PACKAGE, REVALIDATE_SIGNATURE_HEADER, assembleLiveSource, canvasPageMetadata, canvasSitemapEntries, collectBindingSourceIds, collectionCacheTag, createAssetImageLoader, createBindingResolver, createCanvasRoute, createCanvasSitemap, createContentSnapshot, createElytraHost, createPreviewDisableRoute, createPreviewRoute, createRevalidateRoute, createStaticContentSource, defaultBindingPayloads, defineHostComponents, docCacheTag, elytraHostImage, evaluatePreviewRequest, evaluateRevalidateRequest, firstBlockFullBleed, isSourcePayloadError, loadCachedEntry, loadLiveContent,
|
|
1371
|
+
export { CanvasRenderer, ELYTRA_HOST_ENV_KEYS, ElytraImage, PACKAGE, REVALIDATE_SIGNATURE_HEADER, assembleLiveSource, bodyItemsOf, canvasPageMetadata, canvasSitemapEntries, collectBindingSourceIds, collectionCacheTag, createAssetImageLoader, createBindingResolver, createCanvasRoute, createCanvasSitemap, createContentSnapshot, createElytraHost, createPreviewDisableRoute, createPreviewRoute, createRevalidateRoute, createStaticContentSource, defaultBindingPayloads, defineHostComponents, docCacheTag, elytraHostImage, evaluatePreviewRequest, evaluateRevalidateRequest, firstBlockFullBleed, isSourcePayloadError, loadCachedEntry, loadLiveContent, materializeSourcePayloads, mergeCacheTags, nextCacheTags, nextImagePrimitive, pathFromSlug, projectSweepTag, resolveCanvasPage, resolveGlobals, resolveHostEnv, resolvePayloadToken, revalidatePayloadSchema, routeCacheTag, safeRedirectTarget, scopeCacheTag, signRevalidateBody, sourcePayloadError };
|
|
1324
1372
|
//# sourceMappingURL=index.js.map
|
|
1325
1373
|
//# sourceMappingURL=index.js.map
|