@nextwebwg/htmlkit 1.0.0-alpha.54 → 1.0.0-alpha.56
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 +41 -19
- 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 +19 -15
- 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 +9 -8
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +40 -49
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +42 -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/head.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { parseComponent } from "@nextwebwg/html-next";
|
|
2
|
-
import { parseFragment, serialize } from "parse5";
|
|
3
|
-
import { HtmlKitError } from "./config.js";
|
|
4
|
-
import { defaultHeadElements } from "./document.js";
|
|
5
|
-
function identity(element) {
|
|
6
|
-
const attrs = element.attributes;
|
|
7
|
-
if (element.tag === "meta") {
|
|
8
|
-
if (attrs.charset !== undefined)
|
|
9
|
-
return "charset";
|
|
10
|
-
const name = attrs.name ?? attrs.property;
|
|
11
|
-
// Social image arrays and their structured properties preserve authored order.
|
|
12
|
-
if (name?.toLowerCase().startsWith("og:image"))
|
|
13
|
-
return "meta:property:og:image";
|
|
14
|
-
return name === undefined ? undefined : `meta:${attrs.name === undefined ? "property" : "name"}:${name.toLowerCase()}`;
|
|
15
|
-
}
|
|
16
|
-
const relations = attrs.rel?.toLowerCase().split(/\s+/) ?? [];
|
|
17
|
-
if (relations.includes("canonical"))
|
|
18
|
-
return "canonical";
|
|
19
|
-
if (relations.includes("alternate") && attrs.hreflang !== undefined)
|
|
20
|
-
return `alternate:${attrs.hreflang}:${attrs.type ?? ""}:${attrs.media ?? ""}`;
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* A page or layout's head bindings as a component of its own, named tag, which renders in the same
|
|
25
|
-
* HTML Next render as the page with the layer's props. No state, data reads, controllers, or browser
|
|
26
|
-
* subscriptions enter this head scope. Component bodies exclude head elements, so inert spans carry
|
|
27
|
-
* the same attribute and text bindings through the renderer, and mergeHead turns them into native
|
|
28
|
-
* metadata. Undefined when the component has no head elements.
|
|
29
|
-
*/
|
|
30
|
-
export function headCarrier(metadata, definition, tag) {
|
|
31
|
-
if (metadata.head === "")
|
|
32
|
-
return undefined;
|
|
33
|
-
const fragment = parseFragment(metadata.head);
|
|
34
|
-
for (const node of fragment.childNodes) {
|
|
35
|
-
if (!("tagName" in node))
|
|
36
|
-
continue;
|
|
37
|
-
node.attrs.push({ name: "data-hk-head", value: node.tagName });
|
|
38
|
-
node.tagName = "span";
|
|
39
|
-
node.nodeName = "span";
|
|
40
|
-
}
|
|
41
|
-
return parseComponent(`<template component="${tag}"><defs>${metadata.propDeclarations}</defs><div>${serialize(fragment)}</div></template>`, definition.source.file);
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* The head after a layer: its rendered carrier's metadata merged onto the previous layers' by identity,
|
|
45
|
-
* then its loader's head fields.
|
|
46
|
-
*/
|
|
47
|
-
export function mergeHead(root, definition, result, previous) {
|
|
48
|
-
let title = previous.title;
|
|
49
|
-
let description = previous.description;
|
|
50
|
-
const elements = [...(previous.elements ?? defaultHeadElements)];
|
|
51
|
-
if (root !== undefined) {
|
|
52
|
-
const text = (node) => "value" in node ? node.value : "childNodes" in node ? node.childNodes.map(text).join("") : "";
|
|
53
|
-
const current = [];
|
|
54
|
-
for (const node of root.childNodes) {
|
|
55
|
-
if (!("tagName" in node))
|
|
56
|
-
continue;
|
|
57
|
-
const tag = node.attrs.find(attribute => attribute.name === "data-hk-head")?.value;
|
|
58
|
-
if (tag === "title") {
|
|
59
|
-
title = text(node);
|
|
60
|
-
continue;
|
|
61
|
-
}
|
|
62
|
-
if (tag !== "meta" && tag !== "link")
|
|
63
|
-
throw new HtmlKitError("Head content must render title, meta, or link elements.", definition.source.file);
|
|
64
|
-
const attributes = Object.fromEntries(node.attrs.filter(attribute => attribute.name !== "data-hk-head").map(attribute => [attribute.name, attribute.value]));
|
|
65
|
-
if (Object.keys(attributes).some(name => name.startsWith("on")) || (tag === "meta" && attributes["http-equiv"] !== undefined)) {
|
|
66
|
-
throw new HtmlKitError("Head metadata cannot activate event handlers or http-equiv policies.", definition.source.file);
|
|
67
|
-
}
|
|
68
|
-
if (tag === "meta" && attributes.name?.toLowerCase() === "description") {
|
|
69
|
-
description = attributes.content ?? "";
|
|
70
|
-
continue;
|
|
71
|
-
}
|
|
72
|
-
current.push({ tag, attributes });
|
|
73
|
-
}
|
|
74
|
-
const singletons = new Set();
|
|
75
|
-
for (let i = current.length - 1; i >= 0; i--) {
|
|
76
|
-
const key = identity(current[i]);
|
|
77
|
-
if (key === undefined || key === "meta:property:og:image")
|
|
78
|
-
continue;
|
|
79
|
-
if (singletons.has(key))
|
|
80
|
-
current.splice(i, 1);
|
|
81
|
-
else
|
|
82
|
-
singletons.add(key);
|
|
83
|
-
}
|
|
84
|
-
const replaced = new Set(current.flatMap(element => identity(element) ?? []));
|
|
85
|
-
for (let i = elements.length - 1; i >= 0; i--)
|
|
86
|
-
if (replaced.has(identity(elements[i]) ?? ""))
|
|
87
|
-
elements.splice(i, 1);
|
|
88
|
-
elements.push(...current);
|
|
89
|
-
}
|
|
90
|
-
// Only PageHead fields: an untyped loader's extra head keys must not reach the document assembler.
|
|
91
|
-
const loaded = Object.entries(result.head ?? {}).filter(([name]) => name === "title" || name === "description" || name === "lang");
|
|
92
|
-
return { ...previous, ...(title === undefined ? {} : { title }), ...(description === undefined ? {} : { description }), ...Object.fromEntries(loaded),
|
|
93
|
-
elements };
|
|
94
|
-
}
|
|
95
|
-
//# sourceMappingURL=head.js.map
|
package/dist/head.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"head.js","sourceRoot":"","sources":["../src/head.ts"],"names":[],"mappings":"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"}
|