@nextwebwg/htmlkit 1.0.0-alpha.55 → 1.0.0-alpha.57
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/application.d.ts +9 -5
- package/dist/application.d.ts.map +1 -1
- package/dist/application.js +58 -22
- package/dist/application.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +11 -9
- package/dist/build.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +80 -30
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/csp.d.ts +23 -0
- package/dist/csp.d.ts.map +1 -0
- package/dist/csp.js +91 -0
- package/dist/csp.js.map +1 -0
- package/dist/document.d.ts +8 -6
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +15 -17
- package/dist/document.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/resource.d.ts +8 -3
- package/dist/resource.d.ts.map +1 -1
- package/dist/resource.js +58 -37
- package/dist/resource.js.map +1 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +23 -4
- package/dist/routes.js.map +1 -1
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +36 -5
- package/dist/serve.js.map +1 -1
- package/dist/server.d.ts +16 -8
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +122 -61
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +54 -8
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/head.d.ts +0 -22
- package/dist/head.d.ts.map +0 -1
- package/dist/head.js +0 -95
- package/dist/head.js.map +0 -1
package/dist/client.js
CHANGED
|
@@ -48,7 +48,7 @@ const loaded = async (url, signal) => {
|
|
|
48
48
|
* component's factory, each page nested in its layout's `page` slot, with each loader's state. Every
|
|
49
49
|
* layer renders, kept layouts included, so a kept layout gets its new props from its rendering.
|
|
50
50
|
*/
|
|
51
|
-
async function render(runtime, payload
|
|
51
|
+
async function render(runtime, payload) {
|
|
52
52
|
if (payload.version !== 1 || payload.layers.length === 0)
|
|
53
53
|
throw new Error("HTMLKit cannot read this page payload.");
|
|
54
54
|
const next = document.implementation.createHTMLDocument("");
|
|
@@ -58,16 +58,12 @@ async function render(runtime, payload, url) {
|
|
|
58
58
|
element.setAttribute(name, value);
|
|
59
59
|
return element;
|
|
60
60
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
append(next.head, element.tag, element.attributes);
|
|
64
|
-
if (payload.head.description !== undefined)
|
|
65
|
-
append(next.head, "meta", { name: "description", content: payload.head.description });
|
|
61
|
+
if (payload.head.canonical !== undefined)
|
|
62
|
+
append(next.head, "link", { rel: "canonical", href: payload.head.canonical });
|
|
66
63
|
for (const href of payload.styles)
|
|
67
64
|
append(next.head, "link", { rel: "stylesheet", href });
|
|
68
65
|
for (const src of payload.modules)
|
|
69
66
|
append(next.head, "script", { type: "module", src });
|
|
70
|
-
next.title = payload.head.title;
|
|
71
67
|
next.documentElement.lang = payload.head.lang;
|
|
72
68
|
// Innermost first: each layer is projected into its layout's `page` slot, as its invocation is on the server.
|
|
73
69
|
const layers = [];
|
|
@@ -101,8 +97,12 @@ async function render(runtime, payload, url) {
|
|
|
101
97
|
function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
102
98
|
/** The path and query whose layers the document shows. A navigation's URL commits before its layers arrive. */
|
|
103
99
|
let rendered = location.pathname + location.search;
|
|
104
|
-
/**
|
|
105
|
-
|
|
100
|
+
/**
|
|
101
|
+
* The links HTMLKit's documents carry: stylesheets and an alias page's canonical link. HTML Next
|
|
102
|
+
* manages head declarations, marked data-component-head; elements that scripts add are never removed.
|
|
103
|
+
*/
|
|
104
|
+
const shell = (head) => [...head.querySelectorAll("link:not([data-component-head])")];
|
|
105
|
+
let owned = shell(document.head);
|
|
106
106
|
const announcer = document.createElement("div");
|
|
107
107
|
announcer.id = "hk-announcer";
|
|
108
108
|
announcer.setAttribute("aria-live", "polite");
|
|
@@ -194,8 +194,8 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
194
194
|
const watch = () => { for (const anchor of document.querySelectorAll("a[href]"))
|
|
195
195
|
visible.observe(anchor); };
|
|
196
196
|
watch();
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
/** A page's document, whose server markup the components adopt. */
|
|
198
|
+
const parse = async (response, url) => {
|
|
199
199
|
if (!response.headers.get("content-type")?.startsWith("text/html"))
|
|
200
200
|
throw new Error(`HTMLKit cannot render ${url.href} in place.`);
|
|
201
201
|
const next = new DOMParser().parseFromString(await response.text(), "text/html");
|
|
@@ -204,6 +204,28 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
204
204
|
layers.push(root);
|
|
205
205
|
return { next, layers, adopt: true };
|
|
206
206
|
};
|
|
207
|
+
const html = async (url, signal) => parse(await loaded(url.pathname + url.search, signal), url);
|
|
208
|
+
/** A submission's redirect, for the navigation to its URL. */
|
|
209
|
+
let redirected;
|
|
210
|
+
/**
|
|
211
|
+
* A form's POST, as the browser would send it: its action's page, or for a redirect, the page it
|
|
212
|
+
* redirects to, which replaces the submission's history entry as a document's POST/redirect/GET does.
|
|
213
|
+
*/
|
|
214
|
+
const submit = async (url, form, submitter, body, signal) => {
|
|
215
|
+
const enctype = submitter?.hasAttribute("formenctype") ? submitter.formEnctype : form?.enctype;
|
|
216
|
+
// An urlencoded form names each file by its name, as the browser does.
|
|
217
|
+
const fields = enctype === "multipart/form-data" ? body : new URLSearchParams([...body].map(([name, value]) => [name, typeof value === "string" ? value : value.name]));
|
|
218
|
+
const response = await fetch(url, { method: "POST", body: fields, signal });
|
|
219
|
+
if (response.redirected) {
|
|
220
|
+
// The redirect's navigation, which aborts this one, renders its page from this response, read
|
|
221
|
+
// first, since the abort ends its body. A page it can't render loads as any visit does.
|
|
222
|
+
redirected = { url: response.url, page: await parse(response, new URL(response.url)).catch(() => undefined) };
|
|
223
|
+
void navigation.navigate(response.url, { history: "replace" });
|
|
224
|
+
signal.throwIfAborted();
|
|
225
|
+
}
|
|
226
|
+
// A validation error renders the page with its status, such as 422, as a document shows it.
|
|
227
|
+
return parse(response, url);
|
|
228
|
+
};
|
|
207
229
|
const payload = async (url, signal) => {
|
|
208
230
|
const cached = prefetched.get(url.pathname + url.search);
|
|
209
231
|
prefetched.delete(url.pathname + url.search);
|
|
@@ -212,27 +234,30 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
212
234
|
// module's identity everywhere: Vite's development server adds ?import to a path, a second URL.
|
|
213
235
|
await Promise.all(data.modules.map(src => import(/* @vite-ignore */ new URL(src, location.href).href)));
|
|
214
236
|
signal.throwIfAborted();
|
|
215
|
-
return render(runtime, data
|
|
237
|
+
return render(runtime, data);
|
|
216
238
|
};
|
|
217
|
-
const visit = async (url, event) => {
|
|
239
|
+
const visit = async (url, event, form) => {
|
|
218
240
|
const { signal } = event;
|
|
219
241
|
const sheets = [];
|
|
220
242
|
let committed = false;
|
|
221
243
|
clearTimeout(intended);
|
|
244
|
+
const handed = redirected?.url === url.href ? redirected.page : undefined;
|
|
245
|
+
redirected = undefined;
|
|
222
246
|
try {
|
|
223
247
|
// The payload carries data, not markup; a page it cannot render loads from its HTML.
|
|
224
|
-
const { next, layers, adopt: hydrate } = await
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
248
|
+
const { next, layers, adopt: hydrate } = await (handed !== undefined ? handed :
|
|
249
|
+
event.formData !== null ? submit(url, form, event.sourceElement, event.formData, signal) : payload(url, signal).catch(error => {
|
|
250
|
+
if (signal.aborted)
|
|
251
|
+
throw error;
|
|
252
|
+
console.warn("HTMLKit renders this page from its HTML:", error);
|
|
253
|
+
return html(url, signal);
|
|
254
|
+
}));
|
|
230
255
|
if (layers.length === 0 || layer(document, 0) === null)
|
|
231
256
|
throw new Error(`HTMLKit cannot render ${url.href} in place: it has no layers.`);
|
|
232
|
-
//
|
|
257
|
+
// Links both documents share stay; the rest are removed or added at the swap.
|
|
233
258
|
const kept = new Set();
|
|
234
259
|
const added = [];
|
|
235
|
-
for (const element of next.head
|
|
260
|
+
for (const element of shell(next.head)) {
|
|
236
261
|
const same = owned.find(candidate => !kept.has(candidate) && candidate.isEqualNode(element));
|
|
237
262
|
if (same === undefined)
|
|
238
263
|
added.push(element);
|
|
@@ -247,7 +272,8 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
247
272
|
const loading = sheets.map(sheet => new Promise(done => { sheet.addEventListener("load", done); sheet.addEventListener("error", done); }));
|
|
248
273
|
document.head.append(...sheets);
|
|
249
274
|
// The next page's components register before its DOM arrives; a conflicting one falls back below.
|
|
250
|
-
|
|
275
|
+
// Resolved against the page's URL: the next document has no <base>, which base-uri 'none' forbids.
|
|
276
|
+
const modules = [...next.head.querySelectorAll('script[type="module"][src]')].map(script => import(/* @vite-ignore */ new URL(script.getAttribute("src"), url).href));
|
|
251
277
|
await Promise.all([...loading, ...modules]);
|
|
252
278
|
const commit = () => {
|
|
253
279
|
signal.throwIfAborted();
|
|
@@ -257,7 +283,6 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
257
283
|
element.remove();
|
|
258
284
|
document.head.append(...added.filter(element => !sheets.includes(element)));
|
|
259
285
|
owned = [...kept, ...added];
|
|
260
|
-
document.title = next.title;
|
|
261
286
|
document.documentElement.lang = next.documentElement.lang;
|
|
262
287
|
// Layouts persist while each depth renders the same component: they keep their DOM, state,
|
|
263
288
|
// and controllers, and take the new rendering's props. The page layer is always replaced.
|
|
@@ -272,10 +297,11 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
272
297
|
if (hydrate)
|
|
273
298
|
adopt(layers[index]);
|
|
274
299
|
rendered = url.pathname + url.search;
|
|
275
|
-
announcer.textContent = document.title;
|
|
276
300
|
watch();
|
|
277
301
|
};
|
|
278
302
|
signal.throwIfAborted();
|
|
303
|
+
// The swap disconnects the old page and connects the new one, and HTML Next reconciles the head
|
|
304
|
+
// once in the microtasks after it, which a view transition's update includes.
|
|
279
305
|
if (typeof document.startViewTransition !== "function" || !transitions(document.styleSheets))
|
|
280
306
|
commit();
|
|
281
307
|
else
|
|
@@ -285,6 +311,9 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
285
311
|
event.scroll();
|
|
286
312
|
else
|
|
287
313
|
scrollTo(...saved);
|
|
314
|
+
// The next task, when the head holds the new page's title, announces it.
|
|
315
|
+
await new Promise(done => setTimeout(done));
|
|
316
|
+
announcer.textContent = document.title;
|
|
288
317
|
}
|
|
289
318
|
catch (error) {
|
|
290
319
|
if (!committed)
|
|
@@ -292,7 +321,8 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
292
321
|
sheet.remove();
|
|
293
322
|
if (signal.aborted)
|
|
294
323
|
return;
|
|
295
|
-
// Anything this document cannot render in place loads as a document instead.
|
|
324
|
+
// Anything this document cannot render in place loads as a document instead. A submission's
|
|
325
|
+
// URL loads with GET, so a failed render never sends its form twice.
|
|
296
326
|
console.error(error);
|
|
297
327
|
location.reload();
|
|
298
328
|
}
|
|
@@ -300,18 +330,38 @@ function navigate(runtime, { base, prefetch: policy, manifest }) {
|
|
|
300
330
|
// ponytail: WebKit 26.6 sometimes restores no position for an intercepted back or forward
|
|
301
331
|
// navigation, so HTMLKit records where each entry was left. Other scrolling stays native.
|
|
302
332
|
const positions = new Map();
|
|
333
|
+
// While a navigation renders in place: data-hk-navigating on <html>, and on a submitting form,
|
|
334
|
+
// data-hk-submitting and aria-busy. Only the latest navigation clears <html>'s.
|
|
335
|
+
let latest = 0;
|
|
303
336
|
navigation.addEventListener("navigate", event => {
|
|
304
337
|
if (navigation.currentEntry !== null)
|
|
305
338
|
positions.set(navigation.currentEntry.key, [scrollX, scrollY]);
|
|
306
339
|
const url = new URL(event.destination.url);
|
|
307
|
-
|
|
308
|
-
//
|
|
309
|
-
|
|
310
|
-
|
|
340
|
+
const source = event.sourceElement;
|
|
341
|
+
// A submission's source is its submitter, or the form itself without one.
|
|
342
|
+
const form = event.formData === null ? undefined : source instanceof HTMLFormElement ? source : source?.form ?? undefined;
|
|
343
|
+
// Reloads, downloads, fragment and history.pushState changes, and other documents stay native.
|
|
344
|
+
// Modified clicks and link and form targets open other browsing contexts without this event.
|
|
345
|
+
if (!event.canIntercept || event.navigationType === "reload" || event.downloadRequest !== null ||
|
|
346
|
+
!local(url, form ?? source) || event.destination.sameDocument && (event.navigationType !== "traverse" || url.pathname + url.search === rendered))
|
|
311
347
|
return;
|
|
312
348
|
// After the swap, a new entry scrolls to its fragment or the top, back and forward return to
|
|
313
349
|
// where the entry was left, and focus resets as after a document load.
|
|
314
|
-
event.intercept({ scroll: "manual", handler
|
|
350
|
+
event.intercept({ scroll: "manual", async handler() {
|
|
351
|
+
const id = ++latest;
|
|
352
|
+
document.documentElement.setAttribute("data-hk-navigating", "");
|
|
353
|
+
form?.setAttribute("data-hk-submitting", "");
|
|
354
|
+
form?.setAttribute("aria-busy", "true");
|
|
355
|
+
try {
|
|
356
|
+
await visit(url, event, form);
|
|
357
|
+
}
|
|
358
|
+
finally {
|
|
359
|
+
form?.removeAttribute("data-hk-submitting");
|
|
360
|
+
form?.removeAttribute("aria-busy");
|
|
361
|
+
if (id === latest)
|
|
362
|
+
document.documentElement.removeAttribute("data-hk-navigating");
|
|
363
|
+
}
|
|
364
|
+
} });
|
|
315
365
|
});
|
|
316
366
|
}
|
|
317
367
|
/** Authors animate navigation with @view-transition { navigation: auto }, as for document navigation. */
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare function configure(options: ApplicationOptions): {
|
|
|
15
15
|
origin: string;
|
|
16
16
|
outDir: string;
|
|
17
17
|
prefetch: import("./types.js").PrefetchPolicy;
|
|
18
|
+
csp: false | import("./types.js").ContentSecurityPolicyOptions;
|
|
18
19
|
};
|
|
19
20
|
/** Plugins' named layouts, kept apart from the site's: a site's app/layouts/<name>.html wins over them. */
|
|
20
21
|
export declare const pluginLayouts: unique symbol;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEhF;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,SAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAalF;AAED,qBAAa,YAAa,SAAQ,KAAK;IACR,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IAArD,YAAY,OAAO,EAAE,MAAM,EAAW,MAAM,CAAC,EAAE,MAAM,YAAA,EAGpD;CACF;AACD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG7D;AACD,wBAAgB,SAAS,CAAC,OAAO,EAAE,kBAAkB;;;;;;;EAoBpD;AAED,2GAA2G;AAC3G,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG;IAAE,QAAQ,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;CAAE,CAAC;AAGrH,yHAAyH;AACzH,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgB1F;AAED,gFAAgF;AAChF,wBAAsB,OAAO,CAAC,IAAI,SAAS,YAAY,GAAG,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,IAAI,EAC3G,OAAO,EAAE,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM;;;IAGrC;AAED,8DAA8D;AAC9D,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAE9F"}
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { isAbsolute, posix, relative, resolve, sep } from "node:path";
|
|
3
|
+
import { checkPolicyOptions } from "./csp.js";
|
|
3
4
|
/**
|
|
4
5
|
* The options htmlkit.config.ts (or .js) at root exports by default, loaded through Vite as the CLI
|
|
5
6
|
* loads them; {} without a config file.
|
|
@@ -61,7 +62,7 @@ export function configure(options) {
|
|
|
61
62
|
throw new HtmlKitError('linkCheck must be "error" or "warn".');
|
|
62
63
|
if (!["undefined", "boolean", "string"].includes(typeof options.robots))
|
|
63
64
|
throw new HtmlKitError("robots must be true, false, or the text of robots.txt.");
|
|
64
|
-
return { root, base, origin: origin.origin, outDir, prefetch };
|
|
65
|
+
return { root, base, origin: origin.origin, outDir, prefetch, csp: checkPolicyOptions(options.csp) };
|
|
65
66
|
}
|
|
66
67
|
/** Plugins' named layouts, kept apart from the site's: a site's app/layouts/<name>.html wins over them. */
|
|
67
68
|
export const pluginLayouts = Symbol("htmlkit.pluginLayouts");
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/csp.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ComponentDefinition } from "@nextwebwg/html-next";
|
|
2
|
+
import type { ContentSecurityPolicyOptions, RenderedPolicy } from "./types.js";
|
|
3
|
+
/** The csp option checked: `false`, or sources per directive in CSP's own grammar. */
|
|
4
|
+
export declare function checkPolicyOptions(csp: unknown): ContentSecurityPolicyOptions | false;
|
|
5
|
+
/** A classic inline script's CSP hash source. */
|
|
6
|
+
export declare function scriptHash(script: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* The site's policy, which every page carries: script-src with 'self' for HTMLKit's own modules and
|
|
9
|
+
* controllers, the origin of each script any component of the site declares, and the hash of each
|
|
10
|
+
* inline head script; object-src and base-uri 'none'; then the csp option's sources, added to each
|
|
11
|
+
* directive. One policy keeps client navigation in place, since a document keeps the policy it loaded
|
|
12
|
+
* with. Undefined with `csp: false`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function sitePolicy(csp: ContentSecurityPolicyOptions | false, definitions: readonly ComponentDefinition[], scripts: readonly string[]): RenderedPolicy | undefined;
|
|
15
|
+
/** The header that delivers the policy. */
|
|
16
|
+
export declare function policyHeader(policy: RenderedPolicy): string;
|
|
17
|
+
/**
|
|
18
|
+
* The csp option for the development server: what Vite needs beside 'self', which already covers its
|
|
19
|
+
* client and modules. Its HMR WebSocket needs connect-src, and the styles it injects for CSS a
|
|
20
|
+
* module imports need style-src 'unsafe-inline', each only where the policy restricts it.
|
|
21
|
+
*/
|
|
22
|
+
export declare function developmentPolicyOptions(csp: ContentSecurityPolicyOptions | false, socket: string): ContentSecurityPolicyOptions | false;
|
|
23
|
+
//# sourceMappingURL=csp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../src/csp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,KAAK,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAK/E,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,4BAA4B,GAAG,KAAK,CAerF;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,4BAA4B,GAAG,KAAK,EAAE,WAAW,EAAE,SAAS,mBAAmB,EAAE,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,GAAG,SAAS,CA0BzK;AAED,2CAA2C;AAC3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,4BAA4B,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,4BAA4B,GAAG,KAAK,CAQxI"}
|
package/dist/csp.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { HtmlKitError } from "./config.js";
|
|
3
|
+
/** Directives a `<meta http-equiv>` policy ignores (CSP 3, §3.3), which only the header carries. */
|
|
4
|
+
const headerOnly = new Set(["frame-ancestors", "report-uri", "sandbox"]);
|
|
5
|
+
/** The csp option checked: `false`, or sources per directive in CSP's own grammar. */
|
|
6
|
+
export function checkPolicyOptions(csp) {
|
|
7
|
+
if (csp === undefined)
|
|
8
|
+
return {};
|
|
9
|
+
if (csp === false)
|
|
10
|
+
return false;
|
|
11
|
+
if (csp === null || typeof csp !== "object" || Array.isArray(csp))
|
|
12
|
+
throw new HtmlKitError("csp must be false or an object of sources per directive.");
|
|
13
|
+
for (const [name, value] of Object.entries(csp)) {
|
|
14
|
+
if (name === "reportOnly") {
|
|
15
|
+
if (typeof value !== "boolean")
|
|
16
|
+
throw new HtmlKitError("csp.reportOnly must be true or false.");
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
if (!/^[a-z][a-z-]*$/.test(name))
|
|
20
|
+
throw new HtmlKitError(`csp directive ${name} must be a lowercase CSP directive name, such as "script-src".`);
|
|
21
|
+
if (!Array.isArray(value) || !value.every(source => typeof source === "string" && /^[^\s;,]+$/.test(source))) {
|
|
22
|
+
throw new HtmlKitError(`csp["${name}"] must be a list of CSP source expressions, such as ["https://cdn.example"], each without spaces, semicolons, or commas.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return csp;
|
|
26
|
+
}
|
|
27
|
+
/** A classic inline script's CSP hash source. */
|
|
28
|
+
export function scriptHash(script) {
|
|
29
|
+
return `'sha256-${createHash("sha256").update(script).digest("base64")}'`;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The site's policy, which every page carries: script-src with 'self' for HTMLKit's own modules and
|
|
33
|
+
* controllers, the origin of each script any component of the site declares, and the hash of each
|
|
34
|
+
* inline head script; object-src and base-uri 'none'; then the csp option's sources, added to each
|
|
35
|
+
* directive. One policy keeps client navigation in place, since a document keeps the policy it loaded
|
|
36
|
+
* with. Undefined with `csp: false`.
|
|
37
|
+
*/
|
|
38
|
+
export function sitePolicy(csp, definitions, scripts) {
|
|
39
|
+
if (csp === false)
|
|
40
|
+
return undefined;
|
|
41
|
+
const origins = new Set();
|
|
42
|
+
for (const definition of definitions) {
|
|
43
|
+
for (const { src } of definition.scripts ?? []) {
|
|
44
|
+
// A relative or root-relative script is HTMLKit's own origin; a bare one resolves through an import map.
|
|
45
|
+
if (!/^(?:[A-Za-z][A-Za-z\d+.-]*:|\/\/)/.test(src))
|
|
46
|
+
continue;
|
|
47
|
+
const url = URL.parse(src, "https://htmlkit.invalid/");
|
|
48
|
+
if (url !== null && /^https?:$/.test(url.protocol))
|
|
49
|
+
origins.add(url.origin);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const directives = new Map([
|
|
53
|
+
["script-src", ["'self'", ...[...origins].sort(), ...scripts.map(scriptHash)]],
|
|
54
|
+
["object-src", ["'none'"]],
|
|
55
|
+
["base-uri", ["'none'"]],
|
|
56
|
+
]);
|
|
57
|
+
for (const [name, sources] of Object.entries(csp)) {
|
|
58
|
+
if (name === "reportOnly" || !Array.isArray(sources))
|
|
59
|
+
continue;
|
|
60
|
+
const merged = directives.get(name) ?? [];
|
|
61
|
+
for (const source of sources)
|
|
62
|
+
if (!merged.includes(source))
|
|
63
|
+
merged.push(source);
|
|
64
|
+
// 'none' allows nothing only when it is a directive's one source.
|
|
65
|
+
directives.set(name, merged.length > 1 ? merged.filter(source => source !== "'none'") : merged);
|
|
66
|
+
}
|
|
67
|
+
const text = (entries) => entries.map(([name, sources]) => [name, ...sources].join(" ")).join("; ");
|
|
68
|
+
const reportOnly = csp.reportOnly === true;
|
|
69
|
+
return { header: text([...directives]), reportOnly, ...(reportOnly ? {} : { meta: text([...directives].filter(([name]) => !headerOnly.has(name))) }) };
|
|
70
|
+
}
|
|
71
|
+
/** The header that delivers the policy. */
|
|
72
|
+
export function policyHeader(policy) {
|
|
73
|
+
return policy.reportOnly ? "content-security-policy-report-only" : "content-security-policy";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* The csp option for the development server: what Vite needs beside 'self', which already covers its
|
|
77
|
+
* client and modules. Its HMR WebSocket needs connect-src, and the styles it injects for CSS a
|
|
78
|
+
* module imports need style-src 'unsafe-inline', each only where the policy restricts it.
|
|
79
|
+
*/
|
|
80
|
+
export function developmentPolicyOptions(csp, socket) {
|
|
81
|
+
if (csp === false)
|
|
82
|
+
return false;
|
|
83
|
+
const added = {};
|
|
84
|
+
for (const [name, source] of [["connect-src", socket], ["style-src", "'unsafe-inline'"]]) {
|
|
85
|
+
const sources = csp[name] ?? csp["default-src"];
|
|
86
|
+
if (Array.isArray(sources))
|
|
87
|
+
added[name] = [...sources, source];
|
|
88
|
+
}
|
|
89
|
+
return { ...csp, ...added };
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=csp.js.map
|
package/dist/csp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.js","sourceRoot":"","sources":["../src/csp.ts"],"names":[],"mappings":"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"}
|
package/dist/document.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
1
|
+
import type { RenderedHead, RenderedPage, RenderedPolicy } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* The application document's own head, which pages and layouts' head declarations start from: the
|
|
4
|
+
* viewport, which a page may replace. The charset and head scripts precede it in every document.
|
|
5
|
+
*/
|
|
6
|
+
export declare const authoredHead = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">";
|
|
3
7
|
/** A page's browser delivery: stylesheet and module URLs, which the serving adapter supplies. */
|
|
4
8
|
export interface PageAssets {
|
|
5
9
|
readonly styles: readonly string[];
|
|
@@ -11,7 +15,7 @@ export declare function documentHTML(body: string, head: RenderedHead, assets?:
|
|
|
11
15
|
* The page at a redirect's old URL, for static hosts without server redirects: a meta refresh and a
|
|
12
16
|
* canonical link to the Location, and a plain link for readers that don't refresh.
|
|
13
17
|
*/
|
|
14
|
-
export declare function redirectPage(location: string): {
|
|
18
|
+
export declare function redirectPage(location: string, policy?: RenderedPolicy): {
|
|
15
19
|
head: RenderedHead;
|
|
16
20
|
body: string;
|
|
17
21
|
html: string;
|
|
@@ -31,9 +35,7 @@ export declare function pagePayload(page: Pick<RenderedPage, "status" | "head" |
|
|
|
31
35
|
version: number;
|
|
32
36
|
head: {
|
|
33
37
|
lang: string;
|
|
34
|
-
|
|
35
|
-
description?: string;
|
|
36
|
-
elements: readonly HeadElement[];
|
|
38
|
+
canonical?: string;
|
|
37
39
|
};
|
|
38
40
|
styles: readonly string[];
|
|
39
41
|
modules: readonly string[];
|
package/dist/document.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC7E;;;GAGG;AACH,eAAO,MAAM,YAAY,6EAAyE,CAAC;AACnG,iGAAiG;AACjG,MAAM,WAAW,UAAU;IAAG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AACD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,GAAE,UAAwC,GAAG,MAAM,CASvH;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc;;;;EAKrE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAElE;AAYD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU;;;;;;;;;cAKrG"}
|
package/dist/document.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The application document's own head, which pages and layouts' head declarations start from: the
|
|
3
|
+
* viewport, which a page may replace. The charset and head scripts precede it in every document.
|
|
4
|
+
*/
|
|
5
|
+
export const authoredHead = '<meta name="viewport" content="width=device-width, initial-scale=1">';
|
|
5
6
|
export function escapeHTML(value) {
|
|
6
7
|
return value.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
7
8
|
}
|
|
8
9
|
export function documentHTML(body, head, assets = { styles: [], modules: [] }) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
(head.scripts ?? []).map(script => `<script>${script}</script>`).join("") + html(elements.filter(element => !charset.includes(element))) +
|
|
15
|
-
`<title>${escapeHTML(head.title ?? "HTMLKit")}</title>` +
|
|
16
|
-
(head.description === undefined ? "" : `<meta name="description" content="${escapeHTML(head.description)}">`) +
|
|
10
|
+
// Head scripts precede stylesheets, which would otherwise delay them until they load.
|
|
11
|
+
// The policy precedes every script it governs.
|
|
12
|
+
const policy = head.csp?.meta === undefined ? "" : `<meta http-equiv="Content-Security-Policy" content="${head.csp.meta.replace(/&/g, "&").replace(/"/g, """)}">`;
|
|
13
|
+
return `<!doctype html>\n<html lang="${escapeHTML(head.lang ?? "en")}"><head><meta charset="utf-8">${policy}` +
|
|
14
|
+
(head.scripts ?? []).map(script => `<script>${script}</script>`).join("") + head.html +
|
|
17
15
|
assets.styles.map(href => `<link rel="stylesheet" href="${escapeHTML(href)}">`).join("") +
|
|
18
16
|
assets.modules.map(src => `<script type="module" src="${escapeHTML(src)}"></script>`).join("") +
|
|
19
17
|
`</head><body>${body}</body></html>`;
|
|
@@ -22,9 +20,9 @@ export function documentHTML(body, head, assets = { styles: [], modules: [] }) {
|
|
|
22
20
|
* The page at a redirect's old URL, for static hosts without server redirects: a meta refresh and a
|
|
23
21
|
* canonical link to the Location, and a plain link for readers that don't refresh.
|
|
24
22
|
*/
|
|
25
|
-
export function redirectPage(location) {
|
|
26
|
-
const head = {
|
|
27
|
-
|
|
23
|
+
export function redirectPage(location, policy) {
|
|
24
|
+
const head = { ...(policy === undefined ? {} : { csp: policy }), html: `${authoredHead}<meta http-equiv="refresh" content="0; url=${escapeHTML(location)}">` +
|
|
25
|
+
`<link rel="canonical" href="${escapeHTML(location)}"><title>Redirecting</title>` };
|
|
28
26
|
const body = `<main><p>This page is now at <a href="${escapeHTML(location)}">${escapeHTML(location)}</a>.</p></main>`;
|
|
29
27
|
return { head, body, html: documentHTML(body, head) };
|
|
30
28
|
}
|
|
@@ -56,8 +54,8 @@ function exact(value, seen) {
|
|
|
56
54
|
export function pagePayload(page, assets) {
|
|
57
55
|
if (page.status !== 200 || !page.layers.every(layer => layer.state === undefined || exact(layer.state, new Set())))
|
|
58
56
|
return undefined;
|
|
59
|
-
const { lang = "en",
|
|
60
|
-
return { version: 1, head: { lang,
|
|
57
|
+
const { lang = "en", canonical } = page.head;
|
|
58
|
+
return { version: 1, head: { lang, ...(canonical === undefined ? {} : { canonical }) },
|
|
61
59
|
styles: assets.styles, modules: assets.modules, layers: page.layers };
|
|
62
60
|
}
|
|
63
61
|
//# sourceMappingURL=document.js.map
|