@uniweb/runtime 1.2.4 → 1.2.6
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/ssr.js +18 -20
- package/dist/ssr.js.map +1 -1
- package/package.json +4 -6
- package/src/components/PageRenderer.jsx +1 -2
- package/src/hooks/useHeadMeta.js +1 -17
- package/src/load-page-data.js +9 -4
- package/src/page-renderer.js +43 -15
- package/src/resolve-page.js +19 -0
- package/src/ssr-renderer.js +19 -13
- package/src/start-page.js +26 -0
- package/src/head-meta.js +0 -38
package/dist/ssr.js
CHANGED
|
@@ -9,7 +9,6 @@ import { DEFAULT_ICON_BASE, iconUrl } from "@uniweb/core/icon-corpus";
|
|
|
9
9
|
import { buildTheme, FONT_LINKS_MARKER, buildSectionOverrides } from "@uniweb/theming";
|
|
10
10
|
import "@uniweb/core/services";
|
|
11
11
|
import "@uniweb/core/tracker";
|
|
12
|
-
import { pageMarkdownUrls } from "@uniweb/projections/markdown-urls";
|
|
13
12
|
import { escapeHtml } from "@uniweb/core/page-shell";
|
|
14
13
|
import { escapeHtml as escapeHtml2, foundationCssUrl, pageShell } from "@uniweb/core/page-shell";
|
|
15
14
|
import DataStore, { deriveCacheKey as deriveCacheKey$1 } from "@uniweb/core/datastore";
|
|
@@ -496,23 +495,19 @@ function documentTitle(pageTitle, siteName) {
|
|
|
496
495
|
const title = String(pageTitle);
|
|
497
496
|
return siteName ? `${title} | ${siteName}` : title;
|
|
498
497
|
}
|
|
499
|
-
const
|
|
500
|
-
function
|
|
501
|
-
|
|
498
|
+
const startPages = /* @__PURE__ */ new WeakMap();
|
|
499
|
+
function recordStartPage(website) {
|
|
500
|
+
if (website && !startPages.has(website)) startPages.set(website, website.activePage);
|
|
502
501
|
}
|
|
503
|
-
function
|
|
504
|
-
|
|
505
|
-
if (!website) return null;
|
|
506
|
-
let urls = urlsOfPages.get(website.pages);
|
|
507
|
-
if (!urls) {
|
|
508
|
-
urls = pageMarkdownUrls({ pages: website.getContentPages(), config: website.config });
|
|
509
|
-
urlsOfPages.set(website.pages, urls);
|
|
510
|
-
}
|
|
511
|
-
return urls.get(page.route) ?? null;
|
|
502
|
+
function restoreStartPage(website) {
|
|
503
|
+
if (startPages.has(website)) website.activePage = startPages.get(website);
|
|
512
504
|
}
|
|
513
505
|
function resolvePage(website, route) {
|
|
514
506
|
return website.getPage(route);
|
|
515
507
|
}
|
|
508
|
+
function resolveRequestedPage(website, route) {
|
|
509
|
+
return website.resolveRoute(route).kind === "rewrite" ? void 0 : resolvePage(website, route);
|
|
510
|
+
}
|
|
516
511
|
const VALID_CONTEXTS = ["light", "medium", "dark"];
|
|
517
512
|
function getWrapperProps(block) {
|
|
518
513
|
const theme = block.themeName;
|
|
@@ -671,6 +666,7 @@ function initPrerender(content, foundation, extensionsOrOptions, maybeOptions) {
|
|
|
671
666
|
} } = options;
|
|
672
667
|
onProgress("Initializing runtime...");
|
|
673
668
|
const uniweb = createUniweb(content, foundation, extensions);
|
|
669
|
+
recordStartPage(uniweb.activeWebsite);
|
|
674
670
|
if (content.config?.base && uniweb.activeWebsite?.setBasePath) {
|
|
675
671
|
uniweb.activeWebsite.setBasePath(content.config.base);
|
|
676
672
|
}
|
|
@@ -750,7 +746,7 @@ function classifyRenderError(err) {
|
|
|
750
746
|
};
|
|
751
747
|
}
|
|
752
748
|
function renderPage(page, website) {
|
|
753
|
-
website.setActivePage(page.route);
|
|
749
|
+
if (page !== website.getNotFoundPage()) website.setActivePage(page.route);
|
|
754
750
|
if (page.hasContent?.() && page.getBodyBlocks().length === 0) {
|
|
755
751
|
return {
|
|
756
752
|
error: {
|
|
@@ -820,7 +816,7 @@ ${options.sectionOverrideCSS}
|
|
|
820
816
|
return result;
|
|
821
817
|
}
|
|
822
818
|
function writeHeadMeta(html, page) {
|
|
823
|
-
const meta = typeof page?.getHeadMeta === "function" ?
|
|
819
|
+
const meta = typeof page?.getHeadMeta === "function" ? page.getHeadMeta() : { description: page?.description || null };
|
|
824
820
|
const end = html.indexOf("</head>");
|
|
825
821
|
if (!meta || end === -1) return html;
|
|
826
822
|
const og = meta.og || {};
|
|
@@ -853,8 +849,6 @@ function writeHeadMeta(html, page) {
|
|
|
853
849
|
for (const { hreflang, url } of meta.alternates || []) {
|
|
854
850
|
written.push(`<link rel="alternate" hreflang="${escapeHtml(hreflang)}" href="${escapeHtml(url)}">`);
|
|
855
851
|
}
|
|
856
|
-
head = head.replace(/<link\b(?=[^>]*\brel=["']alternate["'])(?=[^>]*\btype=["']text\/markdown["'])[^>]*>\s*/gi, "");
|
|
857
|
-
if (meta.markdown) written.push(`<link rel="alternate" type="text/markdown" href="${escapeHtml(meta.markdown)}">`);
|
|
858
852
|
return `${head}${written.join("\n")}
|
|
859
853
|
${html.slice(end)}`;
|
|
860
854
|
}
|
|
@@ -1208,7 +1202,8 @@ async function loadPageData({ website, route, fetch: fetch2, dev = false, locale
|
|
|
1208
1202
|
);
|
|
1209
1203
|
}
|
|
1210
1204
|
website.makeCurrent();
|
|
1211
|
-
const
|
|
1205
|
+
const named = typeof route === "string" ? resolveRequestedPage(website, route) : route;
|
|
1206
|
+
const resolved = named ?? (typeof route === "string" ? website.getNotFoundPage() : null);
|
|
1212
1207
|
if (!resolved) return [];
|
|
1213
1208
|
const page = typeof resolved.getRenderableSelf === "function" ? resolved.getRenderableSelf() : resolved;
|
|
1214
1209
|
if (typeof page.getBodyBlocks !== "function") {
|
|
@@ -1261,10 +1256,13 @@ function createPageRenderer({ website, shell }) {
|
|
|
1261
1256
|
website.forgetData();
|
|
1262
1257
|
hydrateDataStore(website, fetchedData);
|
|
1263
1258
|
}
|
|
1264
|
-
const
|
|
1259
|
+
const named = typeof target === "string" ? resolveRequestedPage(website, target) : target;
|
|
1260
|
+
const resolved = named ?? (typeof target === "string" ? website.getNotFoundPage() : null);
|
|
1265
1261
|
if (!resolved) return { outcome: "notFound", html: null, page: null, error: null };
|
|
1266
1262
|
const page = typeof resolved.getRenderableSelf === "function" ? resolved.getRenderableSelf() : resolved;
|
|
1267
|
-
const missing = page?.notFound === true;
|
|
1263
|
+
const missing = !named || page?.notFound === true;
|
|
1264
|
+
restoreStartPage(website);
|
|
1265
|
+
if (typeof target === "string") website.setActivePage(target);
|
|
1268
1266
|
let result;
|
|
1269
1267
|
try {
|
|
1270
1268
|
result = renderPage(page, website);
|