@nifrajs/web 3.3.0 → 4.0.0
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/backend-only.d.ts +15 -0
- package/dist/backend-only.d.ts.map +1 -0
- package/dist/backend-only.js +16 -0
- package/dist/backend-only.js.map +1 -0
- package/dist/boundary.d.ts +5 -0
- package/dist/boundary.d.ts.map +1 -1
- package/dist/boundary.js +11 -2
- package/dist/boundary.js.map +1 -1
- package/dist/build-plan.d.ts +35 -6
- package/dist/build-plan.d.ts.map +1 -1
- package/dist/build-plan.js +89 -35
- package/dist/build-plan.js.map +1 -1
- package/dist/build-vite.d.ts +18 -0
- package/dist/build-vite.d.ts.map +1 -1
- package/dist/build-vite.js +97 -17
- package/dist/build-vite.js.map +1 -1
- package/dist/build.d.ts +72 -23
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +411 -98
- package/dist/build.js.map +1 -1
- package/dist/bun-dev-entry.d.ts +1 -1
- package/dist/bun-dev-entry.js +1 -1
- package/dist/cdn.d.ts +74 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/cdn.js +132 -0
- package/dist/cdn.js.map +1 -0
- package/dist/client.d.ts +21 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +226 -15
- package/dist/client.js.map +1 -1
- package/dist/conformance.d.ts +4 -3
- package/dist/conformance.d.ts.map +1 -1
- package/dist/conformance.js +12 -3
- package/dist/conformance.js.map +1 -1
- package/dist/csp.d.ts +93 -0
- package/dist/csp.d.ts.map +1 -0
- package/dist/csp.js +122 -0
- package/dist/csp.js.map +1 -0
- package/dist/css-contract.d.ts +21 -0
- package/dist/css-contract.d.ts.map +1 -0
- package/dist/css-contract.js +28 -0
- package/dist/css-contract.js.map +1 -0
- package/dist/dev-client.d.ts +76 -0
- package/dist/dev-client.d.ts.map +1 -0
- package/dist/dev-client.js +280 -0
- package/dist/dev-client.js.map +1 -0
- package/dist/dev-diagnostics.d.ts +26 -2
- package/dist/dev-diagnostics.d.ts.map +1 -1
- package/dist/dev-diagnostics.js +38 -7
- package/dist/dev-diagnostics.js.map +1 -1
- package/dist/dev-error.d.ts +4 -13
- package/dist/dev-error.d.ts.map +1 -1
- package/dist/dev-error.js +46 -4
- package/dist/dev-error.js.map +1 -1
- package/dist/dev-feed.d.ts +298 -0
- package/dist/dev-feed.d.ts.map +1 -0
- package/dist/dev-feed.js +797 -0
- package/dist/dev-feed.js.map +1 -0
- package/dist/dev-indicator.d.ts +38 -0
- package/dist/dev-indicator.d.ts.map +1 -0
- package/dist/dev-indicator.js +93 -0
- package/dist/dev-indicator.js.map +1 -0
- package/dist/dev-session.d.ts +77 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +580 -0
- package/dist/dev-session.js.map +1 -0
- package/dist/dev-sourcemap.d.ts +27 -0
- package/dist/dev-sourcemap.d.ts.map +1 -0
- package/dist/dev-sourcemap.js +235 -0
- package/dist/dev-sourcemap.js.map +1 -0
- package/dist/dev-ssr-graph.d.ts.map +1 -1
- package/dist/dev-ssr-graph.js +13 -5
- package/dist/dev-ssr-graph.js.map +1 -1
- package/dist/dev.d.ts +15 -2
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +69 -44
- package/dist/dev.js.map +1 -1
- package/dist/diagnostic-catalog.d.ts +35 -0
- package/dist/diagnostic-catalog.d.ts.map +1 -0
- package/dist/diagnostic-catalog.js +203 -0
- package/dist/diagnostic-catalog.js.map +1 -0
- package/dist/diagnostic-prompt.d.ts +49 -0
- package/dist/diagnostic-prompt.d.ts.map +1 -0
- package/dist/diagnostic-prompt.js +303 -0
- package/dist/diagnostic-prompt.js.map +1 -0
- package/dist/diagnostic.d.ts +17 -23
- package/dist/diagnostic.d.ts.map +1 -1
- package/dist/diagnostic.js +31 -39
- package/dist/diagnostic.js.map +1 -1
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +4 -1
- package/dist/draft.js.map +1 -1
- package/dist/fn.d.ts +5 -0
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +13 -3
- package/dist/fn.js.map +1 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +4 -2
- package/dist/fs.js.map +1 -1
- package/dist/index.d.ts +15 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/internal/cdn/cloudflare.d.ts +48 -0
- package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
- package/dist/internal/cdn/cloudflare.js +94 -0
- package/dist/internal/cdn/cloudflare.js.map +1 -0
- package/dist/internal/cdn/core.d.ts +91 -0
- package/dist/internal/cdn/core.d.ts.map +1 -0
- package/dist/internal/cdn/core.js +220 -0
- package/dist/internal/cdn/core.js.map +1 -0
- package/dist/internal/cdn/fastly.d.ts +17 -0
- package/dist/internal/cdn/fastly.d.ts.map +1 -0
- package/dist/internal/cdn/fastly.js +43 -0
- package/dist/internal/cdn/fastly.js.map +1 -0
- package/dist/internal/cdn/vercel.d.ts +31 -0
- package/dist/internal/cdn/vercel.d.ts.map +1 -0
- package/dist/internal/cdn/vercel.js +56 -0
- package/dist/internal/cdn/vercel.js.map +1 -0
- package/dist/internal/code-unit-order.d.ts +4 -0
- package/dist/internal/code-unit-order.d.ts.map +1 -0
- package/dist/internal/code-unit-order.js +6 -0
- package/dist/internal/code-unit-order.js.map +1 -0
- package/dist/internal/codegen.d.ts +3 -0
- package/dist/internal/codegen.d.ts.map +1 -1
- package/dist/internal/codegen.js +151 -30
- package/dist/internal/codegen.js.map +1 -1
- package/dist/internal/dev-csp.d.ts +24 -0
- package/dist/internal/dev-csp.d.ts.map +1 -0
- package/dist/internal/dev-csp.js +160 -0
- package/dist/internal/dev-csp.js.map +1 -0
- package/dist/internal/dev-reserved.d.ts +25 -0
- package/dist/internal/dev-reserved.d.ts.map +1 -0
- package/dist/internal/dev-reserved.js +39 -0
- package/dist/internal/dev-reserved.js.map +1 -0
- package/dist/internal/html-spans.d.ts +10 -0
- package/dist/internal/html-spans.d.ts.map +1 -0
- package/dist/internal/html-spans.js +46 -0
- package/dist/internal/html-spans.js.map +1 -0
- package/dist/internal/loading-runtime.d.ts +44 -0
- package/dist/internal/loading-runtime.d.ts.map +1 -0
- package/dist/internal/loading-runtime.js +206 -0
- package/dist/internal/loading-runtime.js.map +1 -0
- package/dist/internal/matches-runtime.d.ts +8 -0
- package/dist/internal/matches-runtime.d.ts.map +1 -0
- package/dist/internal/matches-runtime.js +61 -0
- package/dist/internal/matches-runtime.js.map +1 -0
- package/dist/internal/mount-shadow.d.ts +36 -0
- package/dist/internal/mount-shadow.d.ts.map +1 -0
- package/dist/internal/mount-shadow.js +65 -0
- package/dist/internal/mount-shadow.js.map +1 -0
- package/dist/internal/node-builtins.d.ts +3 -0
- package/dist/internal/node-builtins.d.ts.map +1 -0
- package/dist/internal/node-builtins.js +79 -0
- package/dist/internal/node-builtins.js.map +1 -0
- package/dist/internal/output-guard.d.ts +65 -0
- package/dist/internal/output-guard.d.ts.map +1 -0
- package/dist/internal/output-guard.js +630 -0
- package/dist/internal/output-guard.js.map +1 -0
- package/dist/internal/page-execution.d.ts +69 -0
- package/dist/internal/page-execution.d.ts.map +1 -0
- package/dist/internal/page-execution.js +1021 -0
- package/dist/internal/page-execution.js.map +1 -0
- package/dist/internal/parity.d.ts +21 -0
- package/dist/internal/parity.d.ts.map +1 -1
- package/dist/internal/parity.js +104 -22
- package/dist/internal/parity.js.map +1 -1
- package/dist/internal/private-env.d.ts +12 -0
- package/dist/internal/private-env.d.ts.map +1 -0
- package/dist/internal/private-env.js +335 -0
- package/dist/internal/private-env.js.map +1 -0
- package/dist/internal/public-url.d.ts +3 -0
- package/dist/internal/public-url.d.ts.map +1 -0
- package/dist/internal/public-url.js +18 -0
- package/dist/internal/public-url.js.map +1 -0
- package/dist/internal/render-document.d.ts +37 -21
- package/dist/internal/render-document.d.ts.map +1 -1
- package/dist/internal/render-document.js +104 -65
- package/dist/internal/render-document.js.map +1 -1
- package/dist/internal/request-url.d.ts +3 -0
- package/dist/internal/request-url.d.ts.map +1 -0
- package/dist/internal/request-url.js +14 -0
- package/dist/internal/request-url.js.map +1 -0
- package/dist/internal/response-controls.d.ts +75 -0
- package/dist/internal/response-controls.d.ts.map +1 -0
- package/dist/internal/response-controls.js +256 -0
- package/dist/internal/response-controls.js.map +1 -0
- package/dist/internal/runtime-contract.d.ts +11 -16
- package/dist/internal/runtime-contract.d.ts.map +1 -1
- package/dist/internal/runtime-contract.js.map +1 -1
- package/dist/internal/secret-scan.d.ts +104 -0
- package/dist/internal/secret-scan.d.ts.map +1 -0
- package/dist/internal/secret-scan.js +485 -0
- package/dist/internal/secret-scan.js.map +1 -0
- package/dist/internal/server-boundary.d.ts +6 -29
- package/dist/internal/server-boundary.d.ts.map +1 -1
- package/dist/internal/server-boundary.js +6 -66
- package/dist/internal/server-boundary.js.map +1 -1
- package/dist/internal/source-map.d.ts +47 -0
- package/dist/internal/source-map.d.ts.map +1 -0
- package/dist/internal/source-map.js +225 -0
- package/dist/internal/source-map.js.map +1 -0
- package/dist/internal/target-compat.d.ts +27 -0
- package/dist/internal/target-compat.d.ts.map +1 -0
- package/dist/internal/target-compat.js +77 -0
- package/dist/internal/target-compat.js.map +1 -0
- package/dist/internal/timing-safe-equal.d.ts +6 -0
- package/dist/internal/timing-safe-equal.d.ts.map +1 -1
- package/dist/internal/timing-safe-equal.js +10 -0
- package/dist/internal/timing-safe-equal.js.map +1 -1
- package/dist/internal/vitals-runtime.d.ts +18 -0
- package/dist/internal/vitals-runtime.d.ts.map +1 -0
- package/dist/internal/vitals-runtime.js +38 -0
- package/dist/internal/vitals-runtime.js.map +1 -0
- package/dist/internal/web-app.d.ts +56 -8
- package/dist/internal/web-app.d.ts.map +1 -1
- package/dist/internal/web-app.js +215 -772
- package/dist/internal/web-app.js.map +1 -1
- package/dist/internal/zone-graph.d.ts +89 -0
- package/dist/internal/zone-graph.d.ts.map +1 -0
- package/dist/internal/zone-graph.js +492 -0
- package/dist/internal/zone-graph.js.map +1 -0
- package/dist/isr.d.ts +83 -6
- package/dist/isr.d.ts.map +1 -1
- package/dist/isr.js +301 -39
- package/dist/isr.js.map +1 -1
- package/dist/llms-txt.d.ts +3 -0
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +37 -9
- package/dist/llms-txt.js.map +1 -1
- package/dist/manifest.d.ts +221 -14
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +386 -9
- package/dist/manifest.js.map +1 -1
- package/dist/module-graph.d.ts +26 -5
- package/dist/module-graph.d.ts.map +1 -1
- package/dist/module-graph.js +17 -7
- package/dist/module-graph.js.map +1 -1
- package/dist/navigation.d.ts +17 -3
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +11 -5
- package/dist/navigation.js.map +1 -1
- package/dist/nonce.d.ts +47 -0
- package/dist/nonce.d.ts.map +1 -0
- package/dist/nonce.js +63 -0
- package/dist/nonce.js.map +1 -0
- package/dist/plugins/css-modules.d.ts.map +1 -1
- package/dist/plugins/css-modules.js +4 -3
- package/dist/plugins/css-modules.js.map +1 -1
- package/dist/plugins/kit.d.ts +9 -0
- package/dist/plugins/kit.d.ts.map +1 -1
- package/dist/plugins/kit.js +18 -0
- package/dist/plugins/kit.js.map +1 -1
- package/dist/plugins/svg.d.ts +22 -3
- package/dist/plugins/svg.d.ts.map +1 -1
- package/dist/plugins/svg.js +112 -1
- package/dist/plugins/svg.js.map +1 -1
- package/dist/plugins/vite-leak-guard.d.ts +107 -3
- package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
- package/dist/plugins/vite-leak-guard.js +378 -17
- package/dist/plugins/vite-leak-guard.js.map +1 -1
- package/dist/plugins/vite-zone-guard.d.ts +61 -0
- package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
- package/dist/plugins/vite-zone-guard.js +208 -0
- package/dist/plugins/vite-zone-guard.js.map +1 -0
- package/dist/plugins/zone-guard.d.ts +27 -0
- package/dist/plugins/zone-guard.d.ts.map +1 -0
- package/dist/plugins/zone-guard.js +72 -0
- package/dist/plugins/zone-guard.js.map +1 -0
- package/dist/prerender.d.ts +10 -0
- package/dist/prerender.d.ts.map +1 -1
- package/dist/prerender.js +35 -3
- package/dist/prerender.js.map +1 -1
- package/dist/public-dir.d.ts +9 -0
- package/dist/public-dir.d.ts.map +1 -1
- package/dist/public-dir.js +131 -48
- package/dist/public-dir.js.map +1 -1
- package/dist/pwa-manifest.d.ts +68 -0
- package/dist/pwa-manifest.d.ts.map +1 -0
- package/dist/pwa-manifest.js +178 -0
- package/dist/pwa-manifest.js.map +1 -0
- package/dist/query.js +4 -4
- package/dist/query.js.map +1 -1
- package/dist/render-seam.d.ts +42 -2
- package/dist/render-seam.d.ts.map +1 -1
- package/dist/render-seam.js +6 -0
- package/dist/render-seam.js.map +1 -1
- package/dist/route-manifest.d.ts +3 -0
- package/dist/route-manifest.d.ts.map +1 -1
- package/dist/route-manifest.js +26 -3
- package/dist/route-manifest.js.map +1 -1
- package/dist/route-types.d.ts +24 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +195 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router.d.ts +28 -6
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +129 -40
- package/dist/router.js.map +1 -1
- package/dist/trusted-html.d.ts +34 -0
- package/dist/trusted-html.d.ts.map +1 -0
- package/dist/trusted-html.js +35 -0
- package/dist/trusted-html.js.map +1 -0
- package/dist/vitals.d.ts +33 -0
- package/dist/vitals.d.ts.map +1 -0
- package/dist/vitals.js +16 -0
- package/dist/vitals.js.map +1 -0
- package/dist/vite.d.ts +16 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +187 -36
- package/dist/vite.js.map +1 -1
- package/dist/zones.d.ts +70 -0
- package/dist/zones.d.ts.map +1 -0
- package/dist/zones.js +365 -0
- package/dist/zones.js.map +1 -0
- package/package.json +67 -14
- package/src/backend-only.ts +16 -0
- package/src/boundary.ts +18 -5
- package/src/build-plan.ts +113 -36
- package/src/build-vite.ts +124 -15
- package/src/build.ts +535 -102
- package/src/bun-dev-entry.ts +1 -1
- package/src/cdn.ts +216 -0
- package/src/client.ts +251 -18
- package/src/conformance.ts +16 -3
- package/src/csp.ts +194 -0
- package/src/css-contract.ts +44 -0
- package/src/dev-client.ts +349 -0
- package/src/dev-diagnostics.ts +60 -7
- package/src/dev-error.ts +49 -5
- package/src/dev-feed.ts +1140 -0
- package/src/dev-indicator.ts +113 -0
- package/src/dev-session.ts +729 -0
- package/src/dev-sourcemap.ts +281 -0
- package/src/dev-ssr-graph.ts +16 -5
- package/src/dev.ts +86 -43
- package/src/diagnostic-catalog.ts +243 -0
- package/src/diagnostic-prompt.ts +355 -0
- package/src/diagnostic.ts +63 -66
- package/src/draft.ts +4 -1
- package/src/fn.ts +19 -3
- package/src/fs.ts +13 -2
- package/src/index.ts +57 -10
- package/src/internal/cdn/cloudflare.ts +146 -0
- package/src/internal/cdn/core.ts +316 -0
- package/src/internal/cdn/fastly.ts +62 -0
- package/src/internal/cdn/vercel.ts +95 -0
- package/src/internal/code-unit-order.ts +5 -0
- package/src/internal/codegen.ts +180 -29
- package/src/internal/dev-csp.ts +176 -0
- package/src/internal/dev-reserved.ts +52 -0
- package/src/internal/html-spans.ts +50 -0
- package/src/internal/loading-runtime.ts +244 -0
- package/src/internal/matches-runtime.ts +62 -0
- package/src/internal/mount-shadow.ts +88 -0
- package/src/internal/node-builtins.ts +79 -0
- package/src/internal/output-guard.ts +701 -0
- package/src/internal/page-execution.ts +1371 -0
- package/src/internal/parity.ts +150 -36
- package/src/internal/private-env.ts +334 -0
- package/src/internal/public-url.ts +22 -0
- package/src/internal/render-document.ts +153 -73
- package/src/internal/request-url.ts +14 -0
- package/src/internal/response-controls.ts +284 -0
- package/src/internal/runtime-contract.ts +10 -15
- package/src/internal/secret-scan.ts +623 -0
- package/src/internal/server-boundary.ts +6 -69
- package/src/internal/source-map.ts +256 -0
- package/src/internal/target-compat.ts +92 -0
- package/src/internal/timing-safe-equal.ts +13 -0
- package/src/internal/vitals-runtime.ts +53 -0
- package/src/internal/web-app.ts +290 -879
- package/src/internal/zone-graph.ts +593 -0
- package/src/isr.ts +366 -39
- package/src/llms-txt.ts +44 -8
- package/src/manifest.ts +671 -17
- package/src/module-graph.ts +53 -9
- package/src/navigation.ts +29 -6
- package/src/nonce.ts +104 -0
- package/src/plugins/css-modules.ts +5 -3
- package/src/plugins/kit.ts +24 -0
- package/src/plugins/svg.ts +135 -4
- package/src/plugins/vite-leak-guard.ts +529 -16
- package/src/plugins/vite-zone-guard.ts +263 -0
- package/src/plugins/zone-guard.ts +110 -0
- package/src/prerender.ts +49 -3
- package/src/public-dir.ts +135 -49
- package/src/pwa-manifest.ts +226 -0
- package/src/query.ts +4 -4
- package/src/render-seam.ts +46 -1
- package/src/route-manifest.ts +15 -3
- package/src/route-types.ts +264 -0
- package/src/router.ts +163 -63
- package/src/trusted-html.ts +44 -0
- package/src/vitals.ts +44 -0
- package/src/vite.ts +207 -36
- package/src/zones.ts +430 -0
- package/dist/plugins/vite-server-only.d.ts +0 -49
- package/dist/plugins/vite-server-only.d.ts.map +0 -1
- package/dist/plugins/vite-server-only.js +0 -57
- package/dist/plugins/vite-server-only.js.map +0 -1
- package/dist/server-only.d.ts +0 -21
- package/dist/server-only.d.ts.map +0 -1
- package/dist/server-only.js +0 -25
- package/dist/server-only.js.map +0 -1
- package/src/plugins/vite-server-only.ts +0 -75
- package/src/server-only.ts +0 -25
package/dist/client.js
CHANGED
|
@@ -7,6 +7,20 @@
|
|
|
7
7
|
import { trustedHeadAttributes } from "./internal/head-attributes.js";
|
|
8
8
|
import { EXECUTABLE_SCRIPT_TYPES, INERT_SCRIPT_TYPES } from "./internal/script-types.js";
|
|
9
9
|
import { IDLE_BLOCKER, setBlockerController, setBrowserNavigate, } from "./navigation.js";
|
|
10
|
+
import { redirectOf } from "./router.js";
|
|
11
|
+
/** Read the nonce carried by the current server-rendered document, if any. */
|
|
12
|
+
export function currentDocumentNonce() {
|
|
13
|
+
if (typeof document === "undefined")
|
|
14
|
+
return undefined;
|
|
15
|
+
const documentLike = document;
|
|
16
|
+
const script = documentLike.querySelector?.("script[nonce]");
|
|
17
|
+
if (script === null || script === undefined)
|
|
18
|
+
return undefined;
|
|
19
|
+
const property = script.nonce;
|
|
20
|
+
if (typeof property === "string" && property !== "")
|
|
21
|
+
return property;
|
|
22
|
+
return script.getAttribute("nonce") ?? undefined;
|
|
23
|
+
}
|
|
10
24
|
/**
|
|
11
25
|
* Everything the generated client entry needs, re-exported here so that entry imports ONE module and
|
|
12
26
|
* that module is DOM-only. It used to take these from `@nifrajs/web`, whose graph includes `renderPage`
|
|
@@ -23,6 +37,121 @@ export { createClientRouter, createMatcher } from "./router.js";
|
|
|
23
37
|
// its router/query modules - and every one of those modules is in the browser graph. They are defined
|
|
24
38
|
// in DOM-safe modules already; the only thing wrong was the specifier they were imported through.
|
|
25
39
|
export { searchOf, searchOfChain } from "./search.js";
|
|
40
|
+
const DEFAULT_CSS_WAIT_MS = 4_000;
|
|
41
|
+
const MAX_CSS_WAIT_MS = 30_000;
|
|
42
|
+
// Per-link promises keep repeated calls idempotent without retaining an entire document after a hard
|
|
43
|
+
// navigation. A WeakMap also lets tests and embedded documents replace `globalThis.document` safely.
|
|
44
|
+
const stylesheetWaits = new WeakMap();
|
|
45
|
+
const cssLinkStateOf = (link) => {
|
|
46
|
+
const state = link.getAttribute("data-nifra-css-state");
|
|
47
|
+
return state === "loaded" || state === "error" || state === "timeout" ? state : undefined;
|
|
48
|
+
};
|
|
49
|
+
const hasLoadedStylesheet = (link) => {
|
|
50
|
+
// Accessing `sheet` is safe for cross-origin stylesheets, but a browser may still throw while it is
|
|
51
|
+
// tearing down a document. Treat that as "not observed yet"; the load/error listener or the bounded
|
|
52
|
+
// timer is the authoritative fallback.
|
|
53
|
+
try {
|
|
54
|
+
return link.sheet !== null;
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const stylesheetLabel = (link) => link.getAttribute("href") ?? link.href ?? "<unknown>";
|
|
61
|
+
/**
|
|
62
|
+
* Wait for one server-emitted deferred stylesheet. The promise ALWAYS settles: a failed or slow CSS
|
|
63
|
+
* request must not leave the server-rendered page's loader visible forever. `media="all"` is applied on
|
|
64
|
+
* every terminal state so a late network completion cannot leave a link permanently in print media.
|
|
65
|
+
*/
|
|
66
|
+
const waitForStylesheet = (link, timeoutMs) => new Promise((resolve) => {
|
|
67
|
+
let settled = false;
|
|
68
|
+
let timer;
|
|
69
|
+
const cleanup = () => {
|
|
70
|
+
link.removeEventListener("load", onLoad);
|
|
71
|
+
link.removeEventListener("error", onError);
|
|
72
|
+
if (timer !== undefined)
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
};
|
|
75
|
+
const finish = (state) => {
|
|
76
|
+
if (settled)
|
|
77
|
+
return;
|
|
78
|
+
settled = true;
|
|
79
|
+
cleanup();
|
|
80
|
+
link.setAttribute("data-nifra-css-state", state);
|
|
81
|
+
// Only the coordinator promotes the framework-owned link, after the resource has settled.
|
|
82
|
+
link.media = "all";
|
|
83
|
+
resolve();
|
|
84
|
+
};
|
|
85
|
+
const onLoad = () => finish("loaded");
|
|
86
|
+
const onError = () => {
|
|
87
|
+
console.error(`[nifra/web] stylesheet failed to load: ${stylesheetLabel(link)}`);
|
|
88
|
+
finish("error");
|
|
89
|
+
};
|
|
90
|
+
const prior = cssLinkStateOf(link);
|
|
91
|
+
if (prior !== undefined) {
|
|
92
|
+
finish(prior);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (hasLoadedStylesheet(link)) {
|
|
96
|
+
finish("loaded");
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Attach listeners before the second loaded-sheet check: a cached resource can transition between
|
|
100
|
+
// the first check and listener registration, and the second check closes that small race.
|
|
101
|
+
link.addEventListener("load", onLoad, { once: true });
|
|
102
|
+
link.addEventListener("error", onError, { once: true });
|
|
103
|
+
timer = setTimeout(() => {
|
|
104
|
+
console.warn(`[nifra/web] stylesheet load timed out after ${timeoutMs}ms: ${stylesheetLabel(link)}`);
|
|
105
|
+
finish("timeout");
|
|
106
|
+
}, timeoutMs);
|
|
107
|
+
if (hasLoadedStylesheet(link))
|
|
108
|
+
finish("loaded");
|
|
109
|
+
});
|
|
110
|
+
const validateCssWaitMs = (value) => {
|
|
111
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
112
|
+
throw new RangeError(`[nifra/web] css wait timeout must be a finite positive number, received ${value}`);
|
|
113
|
+
}
|
|
114
|
+
return Math.min(value, MAX_CSS_WAIT_MS);
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Wait for the framework-owned deferred stylesheet links in the initial document, then promote them to
|
|
118
|
+
* `media="all"`. It is safe to call more than once: repeated calls for one document share the same
|
|
119
|
+
* per-link waits, and duplicate framework links are removed before waiting. Blocking links are not
|
|
120
|
+
* touched.
|
|
121
|
+
*
|
|
122
|
+
* This function lives in the browser-only `@nifrajs/web/client` entry. It is nevertheless defensive
|
|
123
|
+
* when imported in a non-DOM environment so an accidental import cannot crash a server process.
|
|
124
|
+
*/
|
|
125
|
+
export function waitForStyles(options = {}) {
|
|
126
|
+
if (typeof document === "undefined")
|
|
127
|
+
return Promise.resolve();
|
|
128
|
+
const timeoutMs = validateCssWaitMs(options.timeoutMs ?? DEFAULT_CSS_WAIT_MS);
|
|
129
|
+
const links = Array.from(document.querySelectorAll('link[data-nifra-css="deferred"]')).filter((link) => link.getAttribute("data-nifra-css") === "deferred" && link.rel.toLowerCase() === "stylesheet");
|
|
130
|
+
const unique = [];
|
|
131
|
+
const seen = new Set();
|
|
132
|
+
for (const link of links) {
|
|
133
|
+
const key = stylesheetLabel(link);
|
|
134
|
+
if (seen.has(key)) {
|
|
135
|
+
// Only remove a duplicate carrying the framework marker; author-owned links are outside this
|
|
136
|
+
// selector and cannot be affected. Keeping the first link preserves its event state and cache.
|
|
137
|
+
link.remove();
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
seen.add(key);
|
|
141
|
+
unique.push(link);
|
|
142
|
+
}
|
|
143
|
+
if (unique.length === 0)
|
|
144
|
+
return Promise.resolve();
|
|
145
|
+
const promises = unique.map((link) => {
|
|
146
|
+
const existing = stylesheetWaits.get(link);
|
|
147
|
+
if (existing !== undefined)
|
|
148
|
+
return existing;
|
|
149
|
+
const promise = waitForStylesheet(link, timeoutMs);
|
|
150
|
+
stylesheetWaits.set(link, promise);
|
|
151
|
+
return promise;
|
|
152
|
+
});
|
|
153
|
+
return Promise.all(promises).then(() => undefined);
|
|
154
|
+
}
|
|
26
155
|
/**
|
|
27
156
|
* Attach history + link interception to a router. Returns a teardown function that removes the
|
|
28
157
|
* listeners. A data-fetch failure during a client navigation falls back to a full-page load, so
|
|
@@ -42,6 +171,8 @@ export function installHistory(router, options = {}) {
|
|
|
42
171
|
let index = history.state?.nifraIndex ?? 0;
|
|
43
172
|
let here = location.pathname + location.search + (location.hash ?? "");
|
|
44
173
|
let reversing = false;
|
|
174
|
+
// The path the router was last seen loading, so a redirect it follows shows up as a change.
|
|
175
|
+
let expected;
|
|
45
176
|
// A single active guard (like react-router, one blocker at a time); the latest registration wins.
|
|
46
177
|
let registration;
|
|
47
178
|
const scrollOf = (state) => {
|
|
@@ -165,10 +296,20 @@ export function installHistory(router, options = {}) {
|
|
|
165
296
|
pendingScroll = url.hash !== "" ? { hash: hashId(url.hash) } : { pos: [0, 0] };
|
|
166
297
|
}
|
|
167
298
|
here = url.pathname + url.search + url.hash;
|
|
299
|
+
expected = routePath;
|
|
168
300
|
// The data layer fetches by path+search; the #hash is client-only (never sent to the server).
|
|
169
|
-
transition(() => router.navigate(routePath).catch(() =>
|
|
301
|
+
transition(() => router.navigate(routePath).catch((error) => leave(error, path)));
|
|
170
302
|
settle();
|
|
171
303
|
};
|
|
304
|
+
// A redirect out of the app replaces the entry it answered, as the browser's own redirect would; any
|
|
305
|
+
// other failure loads the page as a document.
|
|
306
|
+
const leave = (error, path) => {
|
|
307
|
+
const to = redirectOf(error);
|
|
308
|
+
if (to === undefined)
|
|
309
|
+
fallback(path);
|
|
310
|
+
else
|
|
311
|
+
location.replace(to);
|
|
312
|
+
};
|
|
172
313
|
const go = (path, mode, state) => {
|
|
173
314
|
// Validate before the blocker observes the target. A blocker receives parsed locations, so letting a
|
|
174
315
|
// malformed string reach `locationOf` would make an otherwise no-throw navigate unexpectedly throw.
|
|
@@ -193,7 +334,7 @@ export function installHistory(router, options = {}) {
|
|
|
193
334
|
}
|
|
194
335
|
go(to, navOptions?.replace === true ? "replace" : "push", navOptions?.state);
|
|
195
336
|
};
|
|
196
|
-
setBrowserNavigate(navigate);
|
|
337
|
+
setBrowserNavigate(navigate, router);
|
|
197
338
|
// Publish the guard registry through the DOM-free bridge (`@nifrajs/web`'s `registerBlocker`, which an
|
|
198
339
|
// adapter's `useBlocker` calls). One slot, latest registration wins; the unregister clears it only if
|
|
199
340
|
// it's still the current one (so a stale unmount doesn't wipe a newer guard).
|
|
@@ -246,13 +387,45 @@ export function installHistory(router, options = {}) {
|
|
|
246
387
|
event.preventDefault();
|
|
247
388
|
go(href, "push");
|
|
248
389
|
};
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
|
|
390
|
+
// `data-nifra-prefetch` on a link or any ancestor (the nearest wins) says when the link warms its
|
|
391
|
+
// route's chunk and data: `intent` (the default) on hover or focus, `viewport` once it scrolls into
|
|
392
|
+
// view, `render` as soon as a page shows it, `none` never.
|
|
393
|
+
const prefetchModeOf = (el) => el.closest("[data-nifra-prefetch]")?.dataset.nifraPrefetch;
|
|
394
|
+
// Warm an in-app link's route (the store dedupes the spam). The page on screen has nothing to warm.
|
|
395
|
+
const warm = (target) => {
|
|
396
|
+
const href = inAppHref(target);
|
|
252
397
|
if (href === null)
|
|
253
398
|
return;
|
|
254
399
|
const url = new URL(href, location.origin);
|
|
255
|
-
|
|
400
|
+
const path = url.pathname + url.search; // the #hash isn't data
|
|
401
|
+
if (path !== location.pathname + location.search)
|
|
402
|
+
void router.prefetch(path);
|
|
403
|
+
};
|
|
404
|
+
const onPrefetch = (event) => {
|
|
405
|
+
const target = event.target;
|
|
406
|
+
if (target instanceof Element && prefetchModeOf(target) !== "none")
|
|
407
|
+
warm(target);
|
|
408
|
+
};
|
|
409
|
+
// `viewport` and `render` links are looked for when history is installed (the server-rendered page)
|
|
410
|
+
// and whenever the router settles (a navigation, a submit's revalidation). A link the page adds in
|
|
411
|
+
// between warms on intent until the next settle.
|
|
412
|
+
let inView;
|
|
413
|
+
const scan = () => {
|
|
414
|
+
inView?.disconnect();
|
|
415
|
+
for (const anchor of document.querySelectorAll("a[data-nifra-prefetch],[data-nifra-prefetch] a")) {
|
|
416
|
+
const mode = prefetchModeOf(anchor);
|
|
417
|
+
if (mode === "render")
|
|
418
|
+
warm(anchor);
|
|
419
|
+
else if (mode === "viewport") {
|
|
420
|
+
// Scrolling back into view asks again; the store holds a fresh prefetch, so nothing refetches.
|
|
421
|
+
inView ??= new IntersectionObserver((entries) => {
|
|
422
|
+
for (const entry of entries)
|
|
423
|
+
if (entry.isIntersecting)
|
|
424
|
+
warm(entry.target);
|
|
425
|
+
});
|
|
426
|
+
inView.observe(anchor);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
256
429
|
};
|
|
257
430
|
// Back/forward: the entry already exists (no push). The URL has ALSO already changed - a popstate can't
|
|
258
431
|
// be cancelled - so a guard here can only restore-then-prompt: read the delta from our index, and if the
|
|
@@ -275,7 +448,9 @@ export function installHistory(router, options = {}) {
|
|
|
275
448
|
index = newIndex;
|
|
276
449
|
here = dest;
|
|
277
450
|
pendingScroll = { pos: scrollOf(history.state) };
|
|
278
|
-
|
|
451
|
+
const routePath = location.pathname + location.search;
|
|
452
|
+
expected = routePath;
|
|
453
|
+
transition(() => router.navigate(routePath).catch((error) => leave(error, dest)));
|
|
279
454
|
settle();
|
|
280
455
|
};
|
|
281
456
|
// Close / reload / hard navigation away: no in-app destination exists, so consult the guard with the
|
|
@@ -294,28 +469,54 @@ export function installHistory(router, options = {}) {
|
|
|
294
469
|
event.preventDefault();
|
|
295
470
|
event.returnValue = "";
|
|
296
471
|
};
|
|
472
|
+
// The router is loading a page the address bar does not show: a redirect it follows. That replaces the
|
|
473
|
+
// entry a navigation pushed, or adds one after a form post, as the browser would. A redirect from a
|
|
474
|
+
// form post back to the page it was on adds nothing.
|
|
475
|
+
const follow = (path) => {
|
|
476
|
+
if (path !== location.pathname + location.search) {
|
|
477
|
+
if (expected === undefined) {
|
|
478
|
+
history.replaceState({ ...(history.state ?? {}), nifraScroll: [scrollX, scrollY] }, "");
|
|
479
|
+
index += 1;
|
|
480
|
+
history.pushState({ nifraIndex: index }, "", path);
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
history.replaceState(history.state, "", path + location.hash);
|
|
484
|
+
}
|
|
485
|
+
here = location.pathname + location.search + location.hash;
|
|
486
|
+
pendingScroll = location.hash !== "" ? { hash: hashId(location.hash) } : { pos: [0, 0] };
|
|
487
|
+
}
|
|
488
|
+
expected = path;
|
|
489
|
+
};
|
|
297
490
|
// After a navigation settles (content rendered), apply the pending scroll target on the next frame:
|
|
298
491
|
// a fragment's element for a cross-page `#hash`, the saved position for back/forward, else the top.
|
|
299
|
-
//
|
|
300
|
-
|
|
301
|
-
|
|
492
|
+
// A settle with no navigation (a submit's revalidation) scrolls nothing. Either way the rendered
|
|
493
|
+
// page is then scanned for links to warm.
|
|
494
|
+
const settled = () => {
|
|
495
|
+
const { pending, pendingPath } = router.snapshot();
|
|
496
|
+
if (pending) {
|
|
497
|
+
if (pendingPath !== undefined && pendingPath !== expected)
|
|
498
|
+
follow(pendingPath);
|
|
302
499
|
return;
|
|
500
|
+
}
|
|
501
|
+
expected = undefined;
|
|
303
502
|
const target = pendingScroll;
|
|
304
503
|
pendingScroll = null;
|
|
305
504
|
requestAnimationFrame(() => {
|
|
306
|
-
if ("hash" in target) {
|
|
505
|
+
if (target !== null && "hash" in target) {
|
|
307
506
|
const el = findAnchor(target.hash);
|
|
308
507
|
if (el !== null)
|
|
309
508
|
el.scrollIntoView();
|
|
310
509
|
else
|
|
311
510
|
window.scrollTo(0, 0); // fragment not found → top, like a fresh page load
|
|
312
511
|
}
|
|
313
|
-
else {
|
|
512
|
+
else if (target !== null) {
|
|
314
513
|
window.scrollTo(target.pos[0], target.pos[1]);
|
|
315
514
|
}
|
|
515
|
+
scan();
|
|
316
516
|
});
|
|
317
517
|
};
|
|
318
|
-
const unsubscribe = router.subscribe(
|
|
518
|
+
const unsubscribe = router.subscribe(settled);
|
|
519
|
+
scan();
|
|
319
520
|
document.addEventListener("click", onClick);
|
|
320
521
|
document.addEventListener("pointerover", onPrefetch);
|
|
321
522
|
document.addEventListener("focusin", onPrefetch);
|
|
@@ -323,6 +524,7 @@ export function installHistory(router, options = {}) {
|
|
|
323
524
|
window.addEventListener("beforeunload", onBeforeUnload);
|
|
324
525
|
return () => {
|
|
325
526
|
unsubscribe();
|
|
527
|
+
inView?.disconnect();
|
|
326
528
|
setBrowserNavigate(undefined); // stop routing `useNavigate` to a torn-down router
|
|
327
529
|
setBlockerController(undefined); // stop routing `useBlocker` to a torn-down registry
|
|
328
530
|
document.removeEventListener("click", onClick);
|
|
@@ -344,6 +546,7 @@ export function installHistory(router, options = {}) {
|
|
|
344
546
|
* the first navigation cleanly takes over from the server-rendered head.
|
|
345
547
|
*/
|
|
346
548
|
export function applyHead(head) {
|
|
549
|
+
const documentNonce = currentDocumentNonce();
|
|
347
550
|
if (head.title !== undefined)
|
|
348
551
|
document.title = head.title;
|
|
349
552
|
// `<html lang>`/`<html dir>` - applied AUTHORITATIVELY (unlike `title`, which is left alone when the
|
|
@@ -401,6 +604,9 @@ export function applyHead(head) {
|
|
|
401
604
|
if (!EXECUTABLE_SCRIPT_TYPES.has(s.type)) {
|
|
402
605
|
throw new TypeError(`[nifra/web] unsupported executable script type ${JSON.stringify(s.type)}`);
|
|
403
606
|
}
|
|
607
|
+
if (documentNonce !== undefined && s.nonce !== documentNonce) {
|
|
608
|
+
throw new TypeError("[nifra/web] executable head scripts must use the same CSP nonce as the document");
|
|
609
|
+
}
|
|
404
610
|
const el = document.createElement("script");
|
|
405
611
|
el.setAttribute("type", s.type);
|
|
406
612
|
el.setAttribute("nonce", s.nonce);
|
|
@@ -427,8 +633,13 @@ export function installForms(router) {
|
|
|
427
633
|
// `data-nifra-revalidate="false"` opts out of the post-action loader revalidation (the action's
|
|
428
634
|
// actionData drives the update); absent or any other value keeps the default revalidation.
|
|
429
635
|
const revalidate = form.dataset.nifraRevalidate !== "false";
|
|
430
|
-
router.submit(url.pathname + url.search, new FormData(form), { revalidate }).catch(() => {
|
|
431
|
-
|
|
636
|
+
router.submit(url.pathname + url.search, new FormData(form), { revalidate }).catch((error) => {
|
|
637
|
+
const to = redirectOf(error);
|
|
638
|
+
// The action ran: load the page that shows its result rather than run it again.
|
|
639
|
+
if (to !== undefined)
|
|
640
|
+
location.assign(to);
|
|
641
|
+
else
|
|
642
|
+
form.submit(); // data submit failed - fall back to a full-page POST
|
|
432
643
|
});
|
|
433
644
|
};
|
|
434
645
|
document.addEventListener("submit", onSubmit);
|
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/conformance.d.ts
CHANGED
|
@@ -34,9 +34,10 @@ export declare class RenderAdapterConformanceError extends Error {
|
|
|
34
34
|
* Execute the observable {@link RenderAdapter} interface against a framework-specific fixture.
|
|
35
35
|
*
|
|
36
36
|
* The promise resolves only when the adapter proves all shared invariants: page props reach a
|
|
37
|
-
* page-only render, streams contain byte chunks, layout chains nest outermost-first,
|
|
38
|
-
* buffered rendering is byte-for-byte
|
|
39
|
-
* and hydration-head output is a stable
|
|
37
|
+
* page-only render, streams contain byte chunks, layout chains nest outermost-first, a leaf that
|
|
38
|
+
* renders nothing leaves its layouts standing, optional buffered rendering is byte-for-byte
|
|
39
|
+
* hydration-equivalent to streaming for non-deferred content, and hydration-head output is a stable
|
|
40
|
+
* string. It rejects with
|
|
40
41
|
* {@link RenderAdapterConformanceError} naming the first failed check.
|
|
41
42
|
*
|
|
42
43
|
* Framework semantics outside the interface-Suspense scheduling, compiler plugins, DOM hydration,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAElE,kGAAkG;AAClG,MAAM,WAAW,+BAA+B;IAC9C,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAMD,6EAA6E;AAC7E,qBAAa,6BAA8B,SAAQ,KAAK;IAEpD,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO;CAKlB;AA2CD
|
|
1
|
+
{"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAElE,kGAAkG;AAClG,MAAM,WAAW,+BAA+B;IAC9C,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;QACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KACvB,CAAA;CACF;AAMD,6EAA6E;AAC7E,qBAAa,6BAA8B,SAAQ,KAAK;IAEpD,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,KAAK,CAAC,EAAE,OAAO;CAKlB;AA2CD;;;;;;;;;;;;GAYG;AACH,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,IAAI,CAAC,CA8Ef"}
|
package/dist/conformance.js
CHANGED
|
@@ -55,9 +55,10 @@ const readHtml = async (render, check) => {
|
|
|
55
55
|
* Execute the observable {@link RenderAdapter} interface against a framework-specific fixture.
|
|
56
56
|
*
|
|
57
57
|
* The promise resolves only when the adapter proves all shared invariants: page props reach a
|
|
58
|
-
* page-only render, streams contain byte chunks, layout chains nest outermost-first,
|
|
59
|
-
* buffered rendering is byte-for-byte
|
|
60
|
-
* and hydration-head output is a stable
|
|
58
|
+
* page-only render, streams contain byte chunks, layout chains nest outermost-first, a leaf that
|
|
59
|
+
* renders nothing leaves its layouts standing, optional buffered rendering is byte-for-byte
|
|
60
|
+
* hydration-equivalent to streaming for non-deferred content, and hydration-head output is a stable
|
|
61
|
+
* string. It rejects with
|
|
61
62
|
* {@link RenderAdapterConformanceError} naming the first failed check.
|
|
62
63
|
*
|
|
63
64
|
* Framework semantics outside the interface-Suspense scheduling, compiler plugins, DOM hydration,
|
|
@@ -86,6 +87,14 @@ export async function assertRenderAdapterConformance(adapter, fixture) {
|
|
|
86
87
|
if (!(outerAt < innerAt && innerAt < pageAt)) {
|
|
87
88
|
fail("layout order", "expected outer layout → inner layout → page source order");
|
|
88
89
|
}
|
|
90
|
+
// The page slot of an `ssr = false` route with no `HydrateFallback`: a plain function returning
|
|
91
|
+
// `null`, in every framework. The layouts must render around it and the slot must be empty.
|
|
92
|
+
const emptyHtml = await readHtml(() => adapter.renderToStream([outerLayout, innerLayout, () => null], props), "empty leaf");
|
|
93
|
+
contains(emptyHtml, markers.outer, "empty leaf");
|
|
94
|
+
contains(emptyHtml, markers.inner, "empty leaf");
|
|
95
|
+
if (emptyHtml.includes(markers.page)) {
|
|
96
|
+
fail("empty leaf", "a leaf that renders nothing must leave the page slot empty");
|
|
97
|
+
}
|
|
89
98
|
if (adapter.renderToString !== undefined) {
|
|
90
99
|
let buffered;
|
|
91
100
|
try {
|
package/dist/conformance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"AA6BA,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,KAAe,EAAS,EAAE;IACtE,MAAM,IAAI,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AAChE,CAAC,CAAA;AAED,6EAA6E;AAC7E,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IAE3C;IADX,YACW,KAAa,EACtB,OAAe,EACf,KAAe;QAEf,KAAK,CAAC,qCAAqC,KAAK,MAAM,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAA;QAJlE,UAAK,GAAL,KAAK,CAAQ;QAKtB,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAA;IAC7C,CAAC;CACF;AAED,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,KAAa,EAAQ,EAAE;IACrE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,IAAI,CAAC,KAAK,EAAE,4BAA4B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAC/F,CAAC,CAAA;AAED,MAAM,QAAQ,GAAG,KAAK,EACpB,MAAyD,EACzD,KAAa,EACI,EAAE;IACnB,IAAI,MAA8C,CAAA;IAClD,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,EAAE,CAAA;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,KAAK,EAAE,mDAAmD,EAAE,KAAK,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,YAAY,cAAc,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,KAAK,EAAE,iDAAiD,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,MAAM,GAAI,MAAqC,CAAC,SAAS,EAAE,CAAA;IACjE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,IAAI,GAAG,EAAE,CAAA;IACb,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI;gBAAE,MAAK;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC,EAAE,CAAC;gBACnC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAA;gBACrB,IAAI,CAAC,KAAK,EAAE,yCAAyC,CAAC,CAAA;YACxD,CAAC;YACD,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACjD,CAAC;QACD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,6BAA6B;YAAE,MAAM,KAAK,CAAA;QAC/D,OAAO,IAAI,CAAC,KAAK,EAAE,0CAA0C,EAAE,KAAK,CAAC,CAAA;IACvE,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAA;IACtB,CAAC;AACH,CAAC,CAAA;AAED
|
|
1
|
+
{"version":3,"file":"conformance.js","sourceRoot":"","sources":["../src/conformance.ts"],"names":[],"mappings":"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"}
|
package/dist/csp.d.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { type NonceResolver } from "./nonce.js";
|
|
2
|
+
import type { RenderAdapter } from "./render-seam.js";
|
|
3
|
+
/** What {@link CreateCspPolicyOptions.header} receives for one document. */
|
|
4
|
+
export interface CspHeaderContext {
|
|
5
|
+
/**
|
|
6
|
+
* The `script-src` sources this document needs, space-separated: a `'sha256-…'` hash for each
|
|
7
|
+
* constant inline script nifra writes, plus `'nonce-…'` when the document carries a script that is
|
|
8
|
+
* specific to this request. External scripts (the client entry, route chunks, islands) are not
|
|
9
|
+
* listed: allow their origin, usually `'self'`.
|
|
10
|
+
*/
|
|
11
|
+
readonly sources: string;
|
|
12
|
+
/** The nonce, when this document carries one. Such a document is `private, no-store`. */
|
|
13
|
+
readonly nonce?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface CreateCspPolicyOptions {
|
|
16
|
+
/**
|
|
17
|
+
* Build the complete Content-Security-Policy value for one document, or `undefined` to send none:
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* header: ({ sources }) => `default-src 'self'; script-src 'self' ${sources}; object-src 'none'`
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
readonly header: (context: CspHeaderContext) => string | undefined;
|
|
24
|
+
/** Generate the nonce for a document that needs one. Default: 122 random bits, CSP base64-safe. */
|
|
25
|
+
readonly generate?: () => string;
|
|
26
|
+
}
|
|
27
|
+
declare const CSP_POLICY: unique symbol;
|
|
28
|
+
/** How a `createWebApp` app's documents meet a CSP: `"nonce"` (every document carries one, so none is
|
|
29
|
+
* cacheable) or `"hash"` (a {@link CspPolicy}). Read by wrappers that cache documents. */
|
|
30
|
+
export declare const DOCUMENT_POLICY: unique symbol;
|
|
31
|
+
/** The hash sources for one adapter, and the hydration head they were computed from. */
|
|
32
|
+
interface AdapterSources {
|
|
33
|
+
readonly head: string;
|
|
34
|
+
readonly sources: string;
|
|
35
|
+
}
|
|
36
|
+
interface CspPolicyState {
|
|
37
|
+
readonly header: (context: CspHeaderContext) => string | undefined;
|
|
38
|
+
readonly generate: () => string;
|
|
39
|
+
readonly adapters: WeakMap<RenderAdapter, AdapterSources | Promise<AdapterSources>>;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A hash-based Content-Security-Policy for nifra documents - see {@link createCspPolicy}. Opaque: pass
|
|
43
|
+
* it to `createWebApp({ csp })` or `renderPage({ csp })`.
|
|
44
|
+
*/
|
|
45
|
+
export interface CspPolicy {
|
|
46
|
+
readonly [CSP_POLICY]: CspPolicyState;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Create a hash-based Content-Security-Policy for nifra documents, so a page can carry a strict CSP
|
|
50
|
+
* and still be cached.
|
|
51
|
+
*
|
|
52
|
+
* A per-request nonce makes every document unique: nifra marks a nonce-bearing document
|
|
53
|
+
* `private, no-store`, so no shared cache (ISR, a CDN) may store it. Under this policy a document
|
|
54
|
+
* gets a nonce only when it carries a script specific to this request: a page that `defer()`s streams
|
|
55
|
+
* one per settled value, and `unsafeInlineScript` names the nonce. Every other document is nonce-free.
|
|
56
|
+
* Its inline scripts are the constant ones nifra writes, listed by hash, so the CSP header is the
|
|
57
|
+
* same on every request and the page stays cacheable. Page data rides in an inert JSON script, which
|
|
58
|
+
* a CSP does not govern.
|
|
59
|
+
*
|
|
60
|
+
* ```ts
|
|
61
|
+
* const csp = createCspPolicy({
|
|
62
|
+
* header: ({ sources }) => `default-src 'self'; script-src 'self' ${sources}; object-src 'none'`,
|
|
63
|
+
* })
|
|
64
|
+
* const app = createWebApp({ adapter, manifest, clientEntry, csp })
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare function createCspPolicy(options: CreateCspPolicyOptions): CspPolicy;
|
|
68
|
+
/** True for a value made by {@link createCspPolicy}. */
|
|
69
|
+
export declare const isCspPolicy: (value: unknown) => value is CspPolicy;
|
|
70
|
+
/**
|
|
71
|
+
* The `'sha256-…'` sources for the constant inline scripts nifra writes into a document rendered
|
|
72
|
+
* with `adapter`: the pre-hydration form guard and the adapter's hydration head. For a CSP set outside
|
|
73
|
+
* the app (a proxy, a CDN rule); {@link createCspPolicy} computes the same list itself.
|
|
74
|
+
*/
|
|
75
|
+
export declare function nifraScriptHashes(adapter: RenderAdapter): Promise<readonly string[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Compute (once per adapter) the policy's hash sources. Returns `undefined` once they are ready, so
|
|
78
|
+
* the renderer stays synchronous after the first document.
|
|
79
|
+
*/
|
|
80
|
+
export declare function prepareCspPolicy(policy: CspPolicy, adapter: RenderAdapter): Promise<void> | undefined;
|
|
81
|
+
/**
|
|
82
|
+
* The nonce one document carries under `policy`: `undefined` unless the document needs one -
|
|
83
|
+
* `needsNonce` (a deferred value or a head tag naming the nonce), or an adapter whose hydration head
|
|
84
|
+
* no longer matches the one the policy hashed. A needed nonce reuses the caller's, else is generated.
|
|
85
|
+
*/
|
|
86
|
+
export declare function cspDocumentNonce(policy: CspPolicy, adapter: RenderAdapter, hydrate: boolean, needsNonce: boolean, requested: string | undefined): string | undefined;
|
|
87
|
+
/** The Content-Security-Policy value for one document, or `undefined` when the policy sends none. */
|
|
88
|
+
export declare function cspHeaderValue(policy: CspPolicy, adapter: RenderAdapter, nonce: string | undefined): string | undefined;
|
|
89
|
+
/** The per-request nonce source for a page executor under `policy`: generated eagerly so `meta` can
|
|
90
|
+
* name it in `unsafeInlineScript`, and dropped by the renderer from documents that do not need it. */
|
|
91
|
+
export declare const cspNonceResolver: (policy: CspPolicy) => NonceResolver;
|
|
92
|
+
export {};
|
|
93
|
+
//# sourceMappingURL=csp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csp.d.ts","sourceRoot":"","sources":["../src/csp.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,yFAAyF;IACzF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAA;IAClE,mGAAmG;IACnG,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAA;CACjC;AAED,QAAA,MAAM,UAAU,EAAE,OAAO,MAA0C,CAAA;AAEnE;0FAC0F;AAC1F,eAAO,MAAM,eAAe,EAAE,OAAO,MAA+C,CAAA;AAEpF,wFAAwF;AACxF,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAA;IAClE,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAA;CACpF;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CACtC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAa1E;AAED,wDAAwD;AACxD,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,SACc,CAAA;AA2BpE;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAG1F;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAc3B;AAUD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,GAAG,SAAS,CAIpB;AAED,qGAAqG;AACrG,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,MAAM,GAAG,SAAS,CAMpB;AAED;sGACsG;AACtG,eAAO,MAAM,gBAAgB,GAAI,QAAQ,SAAS,KAAG,aACmB,CAAA"}
|