fuzor 0.5.1 → 0.5.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/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.js +10 -0
- package/dist/cli.js.map +1 -1
- package/dist/compiler/data-document.d.ts +20 -1
- package/dist/compiler/data-document.d.ts.map +1 -1
- package/dist/compiler/data-document.js +80 -7
- package/dist/compiler/data-document.js.map +1 -1
- package/dist/compiler/docs.d.ts.map +1 -1
- package/dist/compiler/docs.js +49 -11
- package/dist/compiler/docs.js.map +1 -1
- package/dist/compiler/index.d.ts +2 -0
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +23 -6
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/islands.d.ts +1 -0
- package/dist/compiler/islands.d.ts.map +1 -1
- package/dist/compiler/native-authoring.d.ts +45 -0
- package/dist/compiler/native-authoring.d.ts.map +1 -0
- package/dist/compiler/native-authoring.js +569 -0
- package/dist/compiler/native-authoring.js.map +1 -0
- package/dist/compiler/native-manifest.d.ts +33 -0
- package/dist/compiler/native-manifest.d.ts.map +1 -0
- package/dist/compiler/native-manifest.js +53 -0
- package/dist/compiler/native-manifest.js.map +1 -0
- package/dist/compiler/native-ranges.d.ts +8 -0
- package/dist/compiler/native-ranges.d.ts.map +1 -0
- package/dist/compiler/native-ranges.js +92 -0
- package/dist/compiler/native-ranges.js.map +1 -0
- package/dist/compiler/native-scripts.js +2 -2
- package/dist/compiler/native-scripts.js.map +1 -1
- package/dist/compiler/page-scripts.d.ts +6 -0
- package/dist/compiler/page-scripts.d.ts.map +1 -1
- package/dist/compiler/page-scripts.js +25 -6
- package/dist/compiler/page-scripts.js.map +1 -1
- package/dist/compiler/route-policy.d.ts +1 -0
- package/dist/compiler/route-policy.d.ts.map +1 -1
- package/dist/compiler/route-policy.js +4 -1
- package/dist/compiler/route-policy.js.map +1 -1
- package/dist/compiler/select-options.d.ts +7 -0
- package/dist/compiler/select-options.d.ts.map +1 -0
- package/dist/compiler/select-options.js +22 -0
- package/dist/compiler/select-options.js.map +1 -0
- package/dist/compiler/server-actions.d.ts +9 -0
- package/dist/compiler/server-actions.d.ts.map +1 -0
- package/dist/compiler/server-actions.js +65 -0
- package/dist/compiler/server-actions.js.map +1 -0
- package/dist/data-bindings.d.ts +4 -0
- package/dist/data-bindings.d.ts.map +1 -0
- package/dist/data-bindings.js +18 -0
- package/dist/data-bindings.js.map +1 -0
- package/dist/dom-ownership.d.ts +5 -0
- package/dist/dom-ownership.d.ts.map +1 -0
- package/dist/dom-ownership.js +49 -0
- package/dist/dom-ownership.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/internal-specifiers.d.ts +3 -0
- package/dist/internal-specifiers.d.ts.map +1 -0
- package/dist/internal-specifiers.js +22 -0
- package/dist/internal-specifiers.js.map +1 -0
- package/dist/islands/react.d.ts +0 -6
- package/dist/islands/react.d.ts.map +1 -1
- package/dist/islands/react.js +9 -26
- package/dist/islands/react.js.map +1 -1
- package/dist/json-value.d.ts +4 -0
- package/dist/json-value.d.ts.map +1 -0
- package/dist/json-value.js +10 -0
- package/dist/json-value.js.map +1 -0
- package/dist/native-expressions.d.ts +34 -0
- package/dist/native-expressions.d.ts.map +1 -0
- package/dist/native-expressions.js +118 -0
- package/dist/native-expressions.js.map +1 -0
- package/dist/native-manifest.d.ts +7 -0
- package/dist/native-manifest.d.ts.map +1 -0
- package/dist/native-manifest.js +4 -0
- package/dist/native-manifest.js.map +1 -0
- package/dist/native-ranges.d.ts +25 -0
- package/dist/native-ranges.d.ts.map +1 -0
- package/dist/native-ranges.js +51 -0
- package/dist/native-ranges.js.map +1 -0
- package/dist/native-state.d.ts +14 -0
- package/dist/native-state.d.ts.map +1 -0
- package/dist/native-state.js +27 -0
- package/dist/native-state.js.map +1 -0
- package/dist/route-path.d.ts +2 -0
- package/dist/route-path.d.ts.map +1 -1
- package/dist/route-path.js +2 -0
- package/dist/route-path.js.map +1 -1
- package/dist/runtime/binding-updates.d.ts +11 -0
- package/dist/runtime/binding-updates.d.ts.map +1 -0
- package/dist/runtime/binding-updates.js +45 -0
- package/dist/runtime/binding-updates.js.map +1 -0
- package/dist/runtime/data.d.ts +28 -1
- package/dist/runtime/data.d.ts.map +1 -1
- package/dist/runtime/data.js +101 -25
- package/dist/runtime/data.js.map +1 -1
- package/dist/runtime/docs-search.d.ts +20 -4
- package/dist/runtime/docs-search.d.ts.map +1 -1
- package/dist/runtime/docs-search.js +135 -159
- package/dist/runtime/docs-search.js.map +1 -1
- package/dist/runtime/docs-ui.d.ts +3 -1
- package/dist/runtime/docs-ui.d.ts.map +1 -1
- package/dist/runtime/docs-ui.js +19 -29
- package/dist/runtime/docs-ui.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/runtime/islands.d.ts.map +1 -1
- package/dist/runtime/islands.js +2 -1
- package/dist/runtime/islands.js.map +1 -1
- package/dist/runtime/native-graph.d.ts +15 -0
- package/dist/runtime/native-graph.d.ts.map +1 -0
- package/dist/runtime/native-graph.js +103 -0
- package/dist/runtime/native-graph.js.map +1 -0
- package/dist/runtime/native-manifest.d.ts +17 -0
- package/dist/runtime/native-manifest.d.ts.map +1 -0
- package/dist/runtime/native-manifest.js +111 -0
- package/dist/runtime/native-manifest.js.map +1 -0
- package/dist/runtime/native-ranges.d.ts +8 -0
- package/dist/runtime/native-ranges.d.ts.map +1 -0
- package/dist/runtime/native-ranges.js +100 -0
- package/dist/runtime/native-ranges.js.map +1 -0
- package/dist/runtime/native-stream-reader.d.ts +7 -0
- package/dist/runtime/native-stream-reader.d.ts.map +1 -0
- package/dist/runtime/native-stream-reader.js +79 -0
- package/dist/runtime/native-stream-reader.js.map +1 -0
- package/dist/runtime/native-stream.d.ts +5 -0
- package/dist/runtime/native-stream.d.ts.map +1 -0
- package/dist/runtime/native-stream.js +14 -0
- package/dist/runtime/native-stream.js.map +1 -0
- package/dist/runtime/native.d.ts +41 -0
- package/dist/runtime/native.d.ts.map +1 -1
- package/dist/runtime/native.js +176 -55
- package/dist/runtime/native.js.map +1 -1
- package/dist/runtime/page-scripts.d.ts.map +1 -1
- package/dist/runtime/page-scripts.js +8 -3
- package/dist/runtime/page-scripts.js.map +1 -1
- package/dist/runtime/route-views.d.ts +15 -0
- package/dist/runtime/route-views.d.ts.map +1 -0
- package/dist/runtime/route-views.js +133 -0
- package/dist/runtime/route-views.js.map +1 -0
- package/dist/runtime/router-embedded.d.ts +1 -0
- package/dist/runtime/router-embedded.d.ts.map +1 -1
- package/dist/runtime/router-navigation-api.d.ts +1 -0
- package/dist/runtime/router-navigation-api.d.ts.map +1 -1
- package/dist/runtime/router.d.ts +1 -0
- package/dist/runtime/router.d.ts.map +1 -1
- package/dist/runtime/router.js +11 -2
- package/dist/runtime/router.js.map +1 -1
- package/dist/runtime/server-actions.d.ts +5 -0
- package/dist/runtime/server-actions.d.ts.map +1 -0
- package/dist/runtime/server-actions.js +79 -0
- package/dist/runtime/server-actions.js.map +1 -0
- package/dist/server-actions.d.ts +18 -0
- package/dist/server-actions.d.ts.map +1 -0
- package/dist/server-actions.js +138 -0
- package/dist/server-actions.js.map +1 -0
- package/dist/server-components/closures.d.ts +1 -12
- package/dist/server-components/closures.d.ts.map +1 -1
- package/dist/server-components/closures.js +0 -75
- package/dist/server-components/closures.js.map +1 -1
- package/dist/server-components/continuation.d.ts +7 -0
- package/dist/server-components/continuation.d.ts.map +1 -0
- package/dist/server-components/continuation.js +17 -0
- package/dist/server-components/continuation.js.map +1 -0
- package/dist/server-components/environment.js +1 -1
- package/dist/server-components/environment.js.map +1 -1
- package/dist/server-components/protocol.d.ts +5 -1
- package/dist/server-components/protocol.d.ts.map +1 -1
- package/dist/server-components/protocol.js +9 -1
- package/dist/server-components/protocol.js.map +1 -1
- package/dist/server-components/server.d.ts +4 -7
- package/dist/server-components/server.d.ts.map +1 -1
- package/dist/server-components/server.js +2 -185
- package/dist/server-components/server.js.map +1 -1
- package/dist/server-components/stream-server.d.ts +6 -0
- package/dist/server-components/stream-server.d.ts.map +1 -0
- package/dist/server-components/stream-server.js +197 -0
- package/dist/server-components/stream-server.js.map +1 -0
- package/dist/server-components/stream.d.ts +16 -3
- package/dist/server-components/stream.d.ts.map +1 -1
- package/dist/server-components/stream.js +31 -4
- package/dist/server-components/stream.js.map +1 -1
- package/dist/server-components/transport.d.ts +20 -0
- package/dist/server-components/transport.d.ts.map +1 -0
- package/dist/server-components/transport.js +2 -0
- package/dist/server-components/transport.js.map +1 -0
- package/dist/server-components/updates.d.ts +56 -0
- package/dist/server-components/updates.d.ts.map +1 -0
- package/dist/server-components/updates.js +319 -0
- package/dist/server-components/updates.js.map +1 -0
- package/dist/server-data-protocol.d.ts +14 -0
- package/dist/server-data-protocol.d.ts.map +1 -0
- package/dist/server-data-protocol.js +15 -0
- package/dist/server-data-protocol.js.map +1 -0
- package/dist/server-data.d.ts +18 -0
- package/dist/server-data.d.ts.map +1 -1
- package/dist/server-data.js.map +1 -1
- package/dist/server-document.d.ts +21 -0
- package/dist/server-document.d.ts.map +1 -0
- package/dist/server-document.js +3 -0
- package/dist/server-document.js.map +1 -0
- package/dist/server-native-document.d.ts +13 -0
- package/dist/server-native-document.d.ts.map +1 -0
- package/dist/server-native-document.js +154 -0
- package/dist/server-native-document.js.map +1 -0
- package/dist/server-native-stream.d.ts +5 -0
- package/dist/server-native-stream.d.ts.map +1 -0
- package/dist/server-native-stream.js +39 -0
- package/dist/server-native-stream.js.map +1 -0
- package/dist/server-native.d.ts +24 -0
- package/dist/server-native.d.ts.map +1 -0
- package/dist/server-native.js +70 -0
- package/dist/server-native.js.map +1 -0
- package/dist/server-reactivity.d.ts +13 -0
- package/dist/server-reactivity.d.ts.map +1 -0
- package/dist/server-reactivity.js +49 -0
- package/dist/server-reactivity.js.map +1 -0
- package/dist/server.d.ts +11 -5
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +68 -16
- package/dist/server.js.map +1 -1
- package/dist/ui/behaviors/accordion.d.ts.map +1 -1
- package/dist/ui/behaviors/accordion.js +4 -3
- package/dist/ui/behaviors/accordion.js.map +1 -1
- package/dist/ui/behaviors/collapsible.d.ts.map +1 -1
- package/dist/ui/behaviors/collapsible.js +2 -1
- package/dist/ui/behaviors/collapsible.js.map +1 -1
- package/dist/ui/behaviors/dialog.d.ts.map +1 -1
- package/dist/ui/behaviors/dialog.js +5 -4
- package/dist/ui/behaviors/dialog.js.map +1 -1
- package/dist/ui/behaviors/menu.d.ts.map +1 -1
- package/dist/ui/behaviors/menu.js +4 -3
- package/dist/ui/behaviors/menu.js.map +1 -1
- package/dist/ui/behaviors/select.d.ts +23 -1
- package/dist/ui/behaviors/select.d.ts.map +1 -1
- package/dist/ui/behaviors/select.js +81 -11
- package/dist/ui/behaviors/select.js.map +1 -1
- package/dist/ui/behaviors/switch.d.ts.map +1 -1
- package/dist/ui/behaviors/switch.js +2 -1
- package/dist/ui/behaviors/switch.js.map +1 -1
- package/dist/ui/behaviors/toolbar.d.ts.map +1 -1
- package/dist/ui/behaviors/toolbar.js +2 -1
- package/dist/ui/behaviors/toolbar.js.map +1 -1
- package/dist/ui/catalogue.d.ts +1 -1
- package/dist/ui/components/accordion/accordion.d.ts.map +1 -1
- package/dist/ui/components/accordion/accordion.js +3 -2
- package/dist/ui/components/accordion/accordion.js.map +1 -1
- package/dist/ui/components/collapsible/collapsible.d.ts.map +1 -1
- package/dist/ui/components/collapsible/collapsible.js +2 -1
- package/dist/ui/components/collapsible/collapsible.js.map +1 -1
- package/dist/ui/components/dialog/dialog.d.ts.map +1 -1
- package/dist/ui/components/dialog/dialog.js +4 -3
- package/dist/ui/components/dialog/dialog.js.map +1 -1
- package/dist/ui/components/navigation/breadcrumbs.d.ts.map +1 -1
- package/dist/ui/components/navigation/breadcrumbs.js +2 -1
- package/dist/ui/components/navigation/breadcrumbs.js.map +1 -1
- package/dist/ui/components/select/select.d.ts +20 -0
- package/dist/ui/components/select/select.d.ts.map +1 -1
- package/dist/ui/components/select/select.js +20 -0
- package/dist/ui/components/select/select.js.map +1 -1
- package/dist/ui/components/tabs/tabs.d.ts.map +1 -1
- package/dist/ui/components/tabs/tabs.js +6 -5
- package/dist/ui/components/tabs/tabs.js.map +1 -1
- package/dist/ui/core/brand.d.ts +33 -0
- package/dist/ui/core/brand.d.ts.map +1 -0
- package/dist/ui/core/brand.js +96 -0
- package/dist/ui/core/brand.js.map +1 -0
- package/dist/ui/core/component-styles.d.ts.map +1 -1
- package/dist/ui/core/component-styles.js +14 -8
- package/dist/ui/core/component-styles.js.map +1 -1
- package/dist/ui/core/element.d.ts.map +1 -1
- package/dist/ui/core/element.js +2 -3
- package/dist/ui/core/element.js.map +1 -1
- package/dist/ui/core/index.d.ts +1 -0
- package/dist/ui/core/index.d.ts.map +1 -1
- package/dist/ui/core/index.js +1 -0
- package/dist/ui/core/index.js.map +1 -1
- package/dist/ui/core/layout-styles.d.ts.map +1 -1
- package/dist/ui/core/layout-styles.js +12 -6
- package/dist/ui/core/layout-styles.js.map +1 -1
- package/dist/ui/core/parts.d.ts.map +1 -1
- package/dist/ui/core/parts.js +5 -4
- package/dist/ui/core/parts.js.map +1 -1
- package/dist/ui/core/portal.d.ts.map +1 -1
- package/dist/ui/core/portal.js +17 -1
- package/dist/ui/core/portal.js.map +1 -1
- package/dist/ui/machine-state.d.ts +11 -11
- package/dist/ui/state.d.ts +1 -1
- package/dist/vite.d.ts +5 -10
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +119 -116
- package/dist/vite.js.map +1 -1
- package/package.json +2 -12
- package/dist/server-components/browser.d.ts +0 -75
- package/dist/server-components/browser.d.ts.map +0 -1
- package/dist/server-components/browser.js +0 -558
- package/dist/server-components/browser.js.map +0 -1
- package/dist/server-components/compiler.d.ts +0 -6
- package/dist/server-components/compiler.d.ts.map +0 -1
- package/dist/server-components/compiler.js +0 -118
- package/dist/server-components/compiler.js.map +0 -1
- package/dist/server-components/navigation.d.ts +0 -10
- package/dist/server-components/navigation.d.ts.map +0 -1
- package/dist/server-components/navigation.js +0 -105
- package/dist/server-components/navigation.js.map +0 -1
- package/dist/server-components/references.d.ts +0 -22
- package/dist/server-components/references.d.ts.map +0 -1
- package/dist/server-components/references.js +0 -94
- package/dist/server-components/references.js.map +0 -1
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { assertBrowserViewImport } from "./environment.js";
|
|
2
|
-
import * as Effect from "effect/Effect";
|
|
3
|
-
import { readFile } from "node:fs/promises";
|
|
4
|
-
import { createHash } from "node:crypto";
|
|
5
|
-
import { parseFragment } from "parse5";
|
|
6
|
-
import { assertName } from "./protocol.js";
|
|
7
|
-
/** Compile once at build time; request rendering copies static byte ranges and fills typed holes. */
|
|
8
|
-
export function compileFragment(html) {
|
|
9
|
-
if (html.length > 1024 * 1024)
|
|
10
|
-
throw new Error("Compiled fragment exceeds 1 MB");
|
|
11
|
-
const root = parseFragment(html, { sourceCodeLocationInfo: true });
|
|
12
|
-
const holes = [];
|
|
13
|
-
const bindings = [];
|
|
14
|
-
const slots = new Set();
|
|
15
|
-
const events = new Set();
|
|
16
|
-
const supported = new Set(["click", "input", "change", "submit", "keydown"]);
|
|
17
|
-
const visit = (node, insideHole = false) => {
|
|
18
|
-
if (!("tagName" in node)) {
|
|
19
|
-
if ("childNodes" in node)
|
|
20
|
-
node.childNodes.forEach(child => visit(child, insideHole));
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
if (["script", "iframe", "object", "embed", "base", "template"].includes(node.tagName))
|
|
24
|
-
throw new Error(`Unsupported compiled fragment element: ${node.tagName}`);
|
|
25
|
-
if (node.namespaceURI !== "http://www.w3.org/1999/xhtml")
|
|
26
|
-
throw new Error("Only HTML fragments are supported");
|
|
27
|
-
const selected = [];
|
|
28
|
-
for (const attr of node.attrs) {
|
|
29
|
-
if (/^on/i.test(attr.name) || attr.name === "srcdoc")
|
|
30
|
-
throw new Error("Executable attributes are not supported in fragments");
|
|
31
|
-
if (["href", "src", "action", "formaction"].includes(attr.name) && /^(?:javascript|vbscript):/i.test(attr.value.replace(/[\u0000-\u0020]/g, "")))
|
|
32
|
-
throw new Error("Unsafe fragment URL");
|
|
33
|
-
const kind = attr.name === "data-fuzor-text" ? "text" : attr.name === "data-fuzor-state" ? "state" : attr.name === "data-fuzor-slot" ? "slot" : attr.name === "data-fuzor-checked" ? "checked" : undefined;
|
|
34
|
-
if (kind) {
|
|
35
|
-
assertName(attr.value);
|
|
36
|
-
selected.push({ kind, name: attr.value });
|
|
37
|
-
}
|
|
38
|
-
if (attr.name.startsWith("data-fuzor-on-")) {
|
|
39
|
-
if (!supported.has(attr.name.slice(14)))
|
|
40
|
-
throw new Error(`Unsupported resumable event: ${attr.name}`);
|
|
41
|
-
assertName(attr.value);
|
|
42
|
-
events.add(attr.value);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
if (selected.length > 1 || (selected.length && insideHole))
|
|
46
|
-
throw new Error("Dynamic bindings cannot overlap");
|
|
47
|
-
const binding = selected[0];
|
|
48
|
-
if (binding) {
|
|
49
|
-
if (binding.kind === "slot") {
|
|
50
|
-
if (slots.has(binding.name))
|
|
51
|
-
throw new Error(`Duplicate slot: ${binding.name}`);
|
|
52
|
-
slots.add(binding.name);
|
|
53
|
-
}
|
|
54
|
-
const location = node.sourceCodeLocation;
|
|
55
|
-
if (!location?.startTag)
|
|
56
|
-
throw new Error("Binding needs a source location");
|
|
57
|
-
if (binding.kind === "checked" && (node.tagName !== "input" || !node.attrs.some(attr => attr.name === "type" && attr.value === "checkbox") || node.attrs.some(attr => attr.name === "checked")))
|
|
58
|
-
throw new Error("Checked bindings require a checkbox without a checked attribute");
|
|
59
|
-
if (node.tagName === "input") {
|
|
60
|
-
if (binding.kind !== "checked" && (binding.kind !== "state" || node.attrs.some(attr => attr.name === "value" || (attr.name === "type" && !["text", "search", "email", "url", "tel", "password"].includes(attr.value)))))
|
|
61
|
-
throw new Error("Inputs need a text state binding without a value attribute");
|
|
62
|
-
const end = location.startTag.endOffset;
|
|
63
|
-
const start = html[end - 2] === "/" ? end - 2 : end - 1;
|
|
64
|
-
holes.push({ start, end: start, binding, attribute: binding.kind === "checked" ? "checked" : "value" });
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
if (!location.endTag)
|
|
68
|
-
throw new Error("Bindings need explicit closing tags");
|
|
69
|
-
holes.push({ start: location.startTag.endOffset, end: location.endTag.startOffset, binding });
|
|
70
|
-
}
|
|
71
|
-
if (binding.kind !== "slot" && !["input", "textarea"].includes(node.tagName) && node.childNodes.some(child => child.nodeName !== "#text"))
|
|
72
|
-
throw new Error("Text/state bindings cannot contain elements");
|
|
73
|
-
if (binding.kind === "slot" && node.childNodes.some(child => child.nodeName !== "#text" || ("value" in child && child.value.trim())))
|
|
74
|
-
throw new Error("Slots must be empty");
|
|
75
|
-
bindings.push(binding);
|
|
76
|
-
}
|
|
77
|
-
node.childNodes.forEach(child => visit(child, insideHole || !!binding));
|
|
78
|
-
};
|
|
79
|
-
visit(root);
|
|
80
|
-
holes.sort((a, b) => a.start - b.start);
|
|
81
|
-
const parts = [];
|
|
82
|
-
let cursor = 0;
|
|
83
|
-
for (const hole of holes) {
|
|
84
|
-
if (hole.start < cursor)
|
|
85
|
-
throw new Error("Overlapping compiled holes");
|
|
86
|
-
parts.push({ kind: "html", value: html.slice(cursor, hole.start) });
|
|
87
|
-
if (hole.attribute === "checked")
|
|
88
|
-
parts.push({ kind: "checked-attribute", name: hole.binding.name });
|
|
89
|
-
else if (hole.attribute)
|
|
90
|
-
parts.push({ kind: "html", value: ' value="' }, { kind: "state-attribute", name: hole.binding.name }, { kind: "html", value: '"' });
|
|
91
|
-
else
|
|
92
|
-
parts.push(hole.binding);
|
|
93
|
-
cursor = hole.end;
|
|
94
|
-
}
|
|
95
|
-
parts.push({ kind: "html", value: html.slice(cursor) });
|
|
96
|
-
return { id: createHash("sha256").update(html).digest("hex").slice(0, 24), html, parts, bindings, events: [...events] };
|
|
97
|
-
}
|
|
98
|
-
/** Standalone Vite integration; the regular Fuzor plugin also recognizes these imports. */
|
|
99
|
-
export function compiledFragmentsPlugin() {
|
|
100
|
-
return {
|
|
101
|
-
name: "fuzor:compiled-fragments", enforce: "pre",
|
|
102
|
-
resolveId(id, importer, options) {
|
|
103
|
-
if (!options.ssr)
|
|
104
|
-
assertBrowserViewImport(id, importer);
|
|
105
|
-
if (!id.endsWith(".fragment.html"))
|
|
106
|
-
return;
|
|
107
|
-
return Effect.runPromise(Effect.tryPromise({ try: () => this.resolve(id, importer, { ...options, skipSelf: true }), catch: error => error }).pipe(Effect.map(file => file ? file.id.startsWith("\0fuzor:fragment:") ? file.id : `\0fuzor:fragment:${file.id}.js` : undefined)));
|
|
108
|
-
},
|
|
109
|
-
load(id) {
|
|
110
|
-
if (!id.startsWith("\0fuzor:fragment:"))
|
|
111
|
-
return;
|
|
112
|
-
const file = id.slice("\0fuzor:fragment:".length, -3);
|
|
113
|
-
this.addWatchFile(file);
|
|
114
|
-
return Effect.runPromise(Effect.tryPromise({ try: () => readFile(file, "utf8"), catch: error => error }).pipe(Effect.map(source => `export default ${JSON.stringify(compileFragment(source))};`)));
|
|
115
|
-
},
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=compiler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../../src/server-components/compiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { createViewRenderer } from "./browser.js";
|
|
2
|
-
import type { RouteRenderer } from "../runtime/router.js";
|
|
3
|
-
/** Navigation commits the prepared shell; subsequent frames share its cancellable owner. */
|
|
4
|
-
export declare function serverViewRoutes(options: Parameters<typeof createViewRenderer>[1] & {
|
|
5
|
-
readonly routes: readonly string[];
|
|
6
|
-
readonly base?: string;
|
|
7
|
-
readonly acceptsRoute?: (path: string) => boolean;
|
|
8
|
-
readonly fetch?: typeof fetch;
|
|
9
|
-
}): (outlet: HTMLElement) => RouteRenderer;
|
|
10
|
-
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/server-components/navigation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAIlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAI1D,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG;IACnF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAG,OAAO,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B,GAAG,CAAC,MAAM,EAAE,WAAW,KAAK,aAAa,CAyEzC"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import { createViewRenderer } from "./browser.js";
|
|
3
|
-
import { readViewStream } from "./stream.js";
|
|
4
|
-
import { makeRoutePatternMatcher } from "../route-patterns.js";
|
|
5
|
-
import { normalizeBase, stripBase } from "../route-path.js";
|
|
6
|
-
const external = (call) => Effect.tryPromise({ try: call, catch: error => error });
|
|
7
|
-
/** Navigation commits the prepared shell; subsequent frames share its cancellable owner. */
|
|
8
|
-
export function serverViewRoutes(options) {
|
|
9
|
-
const match = makeRoutePatternMatcher(Object.fromEntries(options.routes.map(pattern => [pattern, "/"])));
|
|
10
|
-
const base = normalizeBase(options.base);
|
|
11
|
-
return outlet => {
|
|
12
|
-
const renderer = createViewRenderer(outlet, options);
|
|
13
|
-
const document = outlet.ownerDocument;
|
|
14
|
-
let bootstrap = document.querySelector("script[data-fuzor-snapshot]");
|
|
15
|
-
let active;
|
|
16
|
-
let stopDocument;
|
|
17
|
-
const prepared = new WeakMap();
|
|
18
|
-
const stop = () => { active?.abort(); stopDocument?.(); };
|
|
19
|
-
return {
|
|
20
|
-
match: path => { if (options.acceptsRoute && !options.acceptsRoute(path))
|
|
21
|
-
return undefined; const found = match(path); return found && { pattern: found.pattern, params: found.params }; },
|
|
22
|
-
resolve: (href, signal, initial) => {
|
|
23
|
-
stop();
|
|
24
|
-
const controller = new AbortController();
|
|
25
|
-
active = controller;
|
|
26
|
-
const abortResolve = () => controller.abort();
|
|
27
|
-
signal.addEventListener("abort", abortResolve, { once: true });
|
|
28
|
-
const lifetime = controller.signal;
|
|
29
|
-
return Effect.runPromise(Effect.gen(function* () {
|
|
30
|
-
const target = new URL(href, document.baseURI);
|
|
31
|
-
if (target.origin !== new URL(document.baseURI).origin || stripBase(target.pathname, base) === undefined)
|
|
32
|
-
throw new Error("Server view URL must be inside the same-origin deployment base");
|
|
33
|
-
let payload, stream;
|
|
34
|
-
const script = bootstrap;
|
|
35
|
-
if (initial && script && target.href === new URL(document.URL).href && outlet.querySelector("fuzor-fragment,fuzor-client[data-fuzor-component],fuzor-boundary")) {
|
|
36
|
-
payload = JSON.parse(script.textContent ?? "");
|
|
37
|
-
bootstrap = null;
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
const response = yield* external(() => (options.fetch ?? globalThis.fetch)(`${base}_fuzor/render?url=${encodeURIComponent(target.pathname + target.search)}`, { signal: lifetime, credentials: "same-origin", headers: { accept: "application/vnd.fuzor.view-stream+json" } }));
|
|
41
|
-
if (!response.ok)
|
|
42
|
-
throw new Error(`Server view request failed: ${response.status}`);
|
|
43
|
-
if (response.headers.get("content-type")?.includes("application/vnd.fuzor.view-stream+json")) {
|
|
44
|
-
stream = readViewStream(response, lifetime);
|
|
45
|
-
const first = yield* external(() => stream.next());
|
|
46
|
-
if (first.done)
|
|
47
|
-
throw new Error("Missing initial view stream snapshot");
|
|
48
|
-
payload = first.value;
|
|
49
|
-
}
|
|
50
|
-
else
|
|
51
|
-
payload = yield* external(() => response.json());
|
|
52
|
-
}
|
|
53
|
-
if (lifetime.aborted)
|
|
54
|
-
throw new DOMException("Navigation aborted", "AbortError");
|
|
55
|
-
const pending = yield* external(() => renderer.sequence(payload, lifetime));
|
|
56
|
-
const token = {};
|
|
57
|
-
prepared.set(token, commitSignal => {
|
|
58
|
-
const abortCommit = () => controller.abort();
|
|
59
|
-
commitSignal.addEventListener("abort", abortCommit, { once: true });
|
|
60
|
-
return Effect.runPromise(Effect.gen(function* () {
|
|
61
|
-
const result = yield* external(() => pending.commit());
|
|
62
|
-
if (!result) {
|
|
63
|
-
if (stream?.return)
|
|
64
|
-
yield* external(() => stream.return(undefined));
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
script?.remove();
|
|
68
|
-
if (initial && script?.hasAttribute("data-fuzor-streaming"))
|
|
69
|
-
stopDocument = renderer.followDocument(pending.push, lifetime);
|
|
70
|
-
if (stream) {
|
|
71
|
-
const frames = stream;
|
|
72
|
-
void Effect.runPromise(Effect.gen(function* () {
|
|
73
|
-
while (true) {
|
|
74
|
-
const part = yield* external(() => frames.next());
|
|
75
|
-
if (part.done || !(yield* external(() => pending.push(part.value))))
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
}).pipe(Effect.ensuring(external(() => frames.return()).pipe(Effect.catch(error => Effect.logWarning("View stream cleanup failed", error))))), { signal: lifetime }).catch(error => { if (!lifetime.aborted)
|
|
79
|
-
(options.onError ?? console.error)(error); });
|
|
80
|
-
}
|
|
81
|
-
return true;
|
|
82
|
-
}).pipe(Effect.ensuring(Effect.sync(() => commitSignal.removeEventListener("abort", abortCommit)))), { signal: lifetime });
|
|
83
|
-
});
|
|
84
|
-
return token;
|
|
85
|
-
}).pipe(Effect.onExit(exit => Effect.sync(() => { if (exit._tag === "Failure")
|
|
86
|
-
controller.abort(); })), Effect.ensuring(Effect.sync(() => signal.removeEventListener("abort", abortResolve)))), { signal });
|
|
87
|
-
},
|
|
88
|
-
commit: (token, signal) => Effect.runPromise(Effect.gen(function* () {
|
|
89
|
-
if (!token || typeof token !== "object")
|
|
90
|
-
throw new Error("Invalid prepared server view");
|
|
91
|
-
const apply = prepared.get(token);
|
|
92
|
-
if (!apply)
|
|
93
|
-
throw new Error("Unknown prepared server view");
|
|
94
|
-
prepared.delete(token);
|
|
95
|
-
if (signal.aborted)
|
|
96
|
-
return;
|
|
97
|
-
if (!(yield* external(() => apply(signal))) && !signal.aborted)
|
|
98
|
-
throw new Error("Prepared server view was superseded");
|
|
99
|
-
})),
|
|
100
|
-
clear: () => { stop(); return renderer.clear(); },
|
|
101
|
-
dispose: () => { stop(); return renderer.dispose(); },
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=navigation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/server-components/navigation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { type ExtractedClosure } from "./closures.js";
|
|
2
|
-
import type { CompiledFragment } from "./protocol.js";
|
|
3
|
-
export type ViewReferences = {
|
|
4
|
-
readonly closures: readonly ExtractedClosure[];
|
|
5
|
-
readonly templates: Readonly<Record<string, CompiledFragment>>;
|
|
6
|
-
readonly clients: readonly {
|
|
7
|
-
file: string;
|
|
8
|
-
id: string;
|
|
9
|
-
}[];
|
|
10
|
-
readonly handlers: readonly {
|
|
11
|
-
file: string;
|
|
12
|
-
name: string;
|
|
13
|
-
id: string;
|
|
14
|
-
}[];
|
|
15
|
-
};
|
|
16
|
-
export declare function referenceId(file: string, name?: string): string;
|
|
17
|
-
/** Export syntax is inspected at build time; no application module executes during discovery. */
|
|
18
|
-
export declare function handlerExports(code: string, file: string): readonly string[];
|
|
19
|
-
/** A bounded source directory defines admitted references; symlinks cannot widen that boundary. */
|
|
20
|
-
export declare function discoverViewReferences(root: string, directory: string): Promise<ViewReferences>;
|
|
21
|
-
export declare function browserReferencesCode(references: ViewReferences, buildId: string, imports: (file: string) => string): string;
|
|
22
|
-
//# sourceMappingURL=references.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../../src/server-components/references.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAMvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1D,QAAQ,CAAC,QAAQ,EAAE,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1E,CAAC;AACF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAY,UAEzD;AACD,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAqB5E;AACD,mGAAmG;AACnG,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA4B/F;AACD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAI5H"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import * as Effect from "effect/Effect";
|
|
2
|
-
import { extractClosures } from "./closures.js";
|
|
3
|
-
import { readdir, readFile, realpath } from "node:fs/promises";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { createHash } from "node:crypto";
|
|
6
|
-
import { parse } from "@babel/parser";
|
|
7
|
-
import { compileFragment } from "./compiler.js";
|
|
8
|
-
export function referenceId(file, name = "default") {
|
|
9
|
-
return `ref-${createHash("sha256").update(`${file.replaceAll("\\", "/")}#${name}`).digest("hex").slice(0, 24)}`;
|
|
10
|
-
}
|
|
11
|
-
/** Export syntax is inspected at build time; no application module executes during discovery. */
|
|
12
|
-
export function handlerExports(code, file) {
|
|
13
|
-
const program = parse(code, { sourceType: "module", plugins: ["typescript", "jsx"] }).program;
|
|
14
|
-
const names = [];
|
|
15
|
-
for (const node of program.body) {
|
|
16
|
-
if (node.type === "ExportDefaultDeclaration" || node.type === "ExportAllDeclaration")
|
|
17
|
-
throw new Error(`${file}: handlers need explicit named function exports`);
|
|
18
|
-
if (node.type !== "ExportNamedDeclaration" || node.exportKind === "type")
|
|
19
|
-
continue;
|
|
20
|
-
if (node.source)
|
|
21
|
-
throw new Error(`${file}: handler re-exports are not supported`);
|
|
22
|
-
const declaration = node.declaration;
|
|
23
|
-
if (declaration?.type === "FunctionDeclaration" && declaration.id)
|
|
24
|
-
names.push(declaration.id.name);
|
|
25
|
-
else if (declaration?.type === "VariableDeclaration")
|
|
26
|
-
for (const item of declaration.declarations) {
|
|
27
|
-
if (item.id.type !== "Identifier" || !item.init || !["ArrowFunctionExpression", "FunctionExpression"].includes(item.init.type))
|
|
28
|
-
throw new Error(`${file}: exported handlers must be functions`);
|
|
29
|
-
names.push(item.id.name);
|
|
30
|
-
}
|
|
31
|
-
else if (declaration && !["TSTypeAliasDeclaration", "TSInterfaceDeclaration", "TSDeclareFunction"].includes(declaration.type))
|
|
32
|
-
throw new Error(`${file}: exported handlers must be functions`);
|
|
33
|
-
for (const specifier of node.specifiers) {
|
|
34
|
-
if (specifier.type !== "ExportSpecifier" || specifier.exportKind === "type" || specifier.exported.type !== "Identifier")
|
|
35
|
-
throw new Error(`${file}: unsupported handler export`);
|
|
36
|
-
names.push(specifier.exported.name);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
if (new Set(names).size !== names.length)
|
|
40
|
-
throw new Error(`${file}: duplicate handler export`);
|
|
41
|
-
return names;
|
|
42
|
-
}
|
|
43
|
-
/** A bounded source directory defines admitted references; symlinks cannot widen that boundary. */
|
|
44
|
-
export function discoverViewReferences(root, directory) {
|
|
45
|
-
return Effect.runPromise(Effect.gen(function* () {
|
|
46
|
-
const project = yield* Effect.tryPromise({ try: () => realpath(root), catch: error => error });
|
|
47
|
-
const source = yield* Effect.tryPromise({ try: () => realpath(path.resolve(root, directory)), catch: error => error });
|
|
48
|
-
if (source !== project && !source.startsWith(project + path.sep))
|
|
49
|
-
throw new Error("View reference directory must stay inside the project");
|
|
50
|
-
const templates = {};
|
|
51
|
-
const clients = [], handlers = [];
|
|
52
|
-
const closures = [];
|
|
53
|
-
let count = 0;
|
|
54
|
-
const walk = Effect.fnUntraced(function* (folder, depth) {
|
|
55
|
-
if (depth > 32)
|
|
56
|
-
throw new Error("View reference directory exceeds nesting limit");
|
|
57
|
-
for (const entry of (yield* Effect.tryPromise({ try: () => readdir(folder, { withFileTypes: true }), catch: error => error })).sort((a, b) => a.name.localeCompare(b.name))) {
|
|
58
|
-
if (++count > 10000)
|
|
59
|
-
throw new Error("View reference scan exceeds file limit");
|
|
60
|
-
if (entry.name.startsWith(".") || entry.name === "node_modules" || entry.isDirectory() && /^dist(?:-|$)/.test(entry.name))
|
|
61
|
-
continue;
|
|
62
|
-
const file = path.join(folder, entry.name);
|
|
63
|
-
if (entry.isSymbolicLink())
|
|
64
|
-
throw new Error(`View references cannot include symlinks: ${file}`);
|
|
65
|
-
if (entry.isDirectory()) {
|
|
66
|
-
yield* walk(file, depth + 1);
|
|
67
|
-
continue;
|
|
68
|
-
}
|
|
69
|
-
if (!entry.isFile())
|
|
70
|
-
continue;
|
|
71
|
-
const relative = path.relative(project, file).split(path.sep).join("/");
|
|
72
|
-
if (/\.server\.[cm]?[jt]sx?$/.test(entry.name))
|
|
73
|
-
closures.push(...extractClosures(yield* Effect.tryPromise({ try: () => readFile(file, "utf8"), catch: error => error }), relative));
|
|
74
|
-
if (entry.name.endsWith(".fragment.html")) {
|
|
75
|
-
const template = compileFragment(yield* Effect.tryPromise({ try: () => readFile(file, "utf8"), catch: error => error }));
|
|
76
|
-
templates[template.id] = template;
|
|
77
|
-
}
|
|
78
|
-
else if (/\.view-client\.[cm]?[jt]sx?$/.test(entry.name))
|
|
79
|
-
clients.push({ file: relative, id: referenceId(relative) });
|
|
80
|
-
else if (/\.handlers\.[cm]?[jt]sx?$/.test(entry.name))
|
|
81
|
-
for (const name of handlerExports(yield* Effect.tryPromise({ try: () => readFile(file, "utf8"), catch: error => error }), relative))
|
|
82
|
-
handlers.push({ file: relative, name, id: referenceId(relative, name) });
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
yield* walk(source, 0);
|
|
86
|
-
return { templates, clients, handlers, closures };
|
|
87
|
-
}));
|
|
88
|
-
}
|
|
89
|
-
export function browserReferencesCode(references, buildId, imports) {
|
|
90
|
-
const clients = references.clients.map(ref => `${JSON.stringify(ref.id)}:()=>import(${JSON.stringify(imports(ref.file))}).then(module=>module.default)`).join(",");
|
|
91
|
-
const handlers = [...references.closures.map(ref => `${JSON.stringify(ref.id)}:()=>import(${JSON.stringify("virtual:fuzor/closure/" + ref.id)}).then(module=>module.default)`), ...references.handlers.map(ref => `${JSON.stringify(ref.id)}:()=>import(${JSON.stringify(imports(ref.file))}).then(module=>module[${JSON.stringify(ref.name)}])`)].join(",");
|
|
92
|
-
return `export const manifest=${JSON.stringify({ buildId, templates: references.templates })};\nexport const clients={${clients}};\nexport const handlers={${handlers}};\nexport default {manifest,clients,handlers};`;
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=references.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"references.js","sourceRoot":"","sources":["../../src/server-components/references.ts"],"names":[],"mappings":"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"}
|