@uniweb/runtime 1.2.1 → 1.2.3
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 +19 -4
- package/dist/ssr.js.map +1 -1
- package/package.json +3 -3
- package/src/load-page-data.js +18 -2
- package/src/page-renderer.js +33 -8
- package/src/ssr-renderer.js +8 -2
package/dist/ssr.js
CHANGED
|
@@ -697,10 +697,12 @@ async function prefetchIcons(siteContent, uniweb, onProgress = () => {
|
|
|
697
697
|
const url = iconUrl(family, name, cdnBase);
|
|
698
698
|
const response = await fetch(url);
|
|
699
699
|
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
700
|
-
|
|
701
|
-
uniweb.iconCache.set(`${family}:${name}`, svg);
|
|
700
|
+
return [`${family}:${name}`, await response.text()];
|
|
702
701
|
})
|
|
703
702
|
);
|
|
703
|
+
for (const result of results) {
|
|
704
|
+
if (result.status === "fulfilled") uniweb.iconCache.set(...result.value);
|
|
705
|
+
}
|
|
704
706
|
const succeeded = results.filter((r) => r.status === "fulfilled").length;
|
|
705
707
|
const failedRefs = icons.filter((_, i) => results[i].status === "rejected");
|
|
706
708
|
if (failedRefs.length > 0) {
|
|
@@ -1188,6 +1190,7 @@ async function loadPageData({ website, route, fetch: fetch2, dev = false, locale
|
|
|
1188
1190
|
`loadPageData: this Website renders ${JSON.stringify(active)} and the caller asked for ${JSON.stringify(locale)}. A Website is locale-sliced — build one per locale (\`initPrerenderForLocale\`) rather than asking this step for another language.`
|
|
1189
1191
|
);
|
|
1190
1192
|
}
|
|
1193
|
+
website.makeCurrent();
|
|
1191
1194
|
const resolved = typeof route === "string" ? resolvePage(website, route) : route;
|
|
1192
1195
|
if (!resolved) return [];
|
|
1193
1196
|
const page = typeof resolved.getRenderableSelf === "function" ? resolved.getRenderableSelf() : resolved;
|
|
@@ -1203,15 +1206,19 @@ async function loadPageData({ website, route, fetch: fetch2, dev = false, locale
|
|
|
1203
1206
|
const key = deriveCacheKey$1(request);
|
|
1204
1207
|
if (!entries.has(key)) entries.set(key, entry);
|
|
1205
1208
|
};
|
|
1209
|
+
const answered = new DataStore();
|
|
1206
1210
|
const recording = {
|
|
1207
1211
|
peek: (request, ctx) => dispatcher.peek(request, ctx),
|
|
1208
|
-
peekRecord: (id) =>
|
|
1212
|
+
peekRecord: (id) => answered.getRecord(id),
|
|
1209
1213
|
dispatch: async (request, ctx) => {
|
|
1210
1214
|
if (prerender === "author" && request?.prerender === false) {
|
|
1211
1215
|
record(request, { config: request, outcome: "skipped", data: null });
|
|
1212
1216
|
return { data: null };
|
|
1213
1217
|
}
|
|
1214
1218
|
const result = await dispatcher.dispatch(request, ctx);
|
|
1219
|
+
if (!result?.error && result?.data != null) {
|
|
1220
|
+
answered.set(deriveCacheKey$1(request), result.meta ? { data: result.data, meta: result.meta } : { data: result.data });
|
|
1221
|
+
}
|
|
1215
1222
|
record(request, result?.error ? { config: request, outcome: "failed", data: null, error: result.error } : { config: request, outcome: "fetched", data: result?.data ?? null, ...result?.meta ? { meta: result.meta } : {} });
|
|
1216
1223
|
return result;
|
|
1217
1224
|
}
|
|
@@ -1228,7 +1235,15 @@ async function loadPageData({ website, route, fetch: fetch2, dev = false, locale
|
|
|
1228
1235
|
function createPageRenderer({ website, shell }) {
|
|
1229
1236
|
if (!website) throw new Error("createPageRenderer: `website` is required");
|
|
1230
1237
|
if (typeof shell !== "string") throw new Error("createPageRenderer: `shell` must be an HTML string");
|
|
1231
|
-
function render(target, { inject = {} } = {}) {
|
|
1238
|
+
function render(target, { inject = {}, fetchedData } = {}) {
|
|
1239
|
+
if (fetchedData !== void 0 && !Array.isArray(fetchedData)) {
|
|
1240
|
+
throw new Error("createPageRenderer: `fetchedData` must be the array of entries the page carries");
|
|
1241
|
+
}
|
|
1242
|
+
website.makeCurrent();
|
|
1243
|
+
if (fetchedData !== void 0) {
|
|
1244
|
+
website.forgetData();
|
|
1245
|
+
hydrateDataStore(website, fetchedData);
|
|
1246
|
+
}
|
|
1232
1247
|
const resolved = typeof target === "string" ? resolvePage(website, target) : target;
|
|
1233
1248
|
if (!resolved) return { outcome: "notFound", html: null, page: null, error: null };
|
|
1234
1249
|
const page = typeof resolved.getRenderableSelf === "function" ? resolved.getRenderableSelf() : resolved;
|