@nifrajs/web 3.5.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 +18 -6
- package/dist/build-plan.d.ts.map +1 -1
- package/dist/build-plan.js +82 -34
- package/dist/build-plan.js.map +1 -1
- package/dist/build-vite.d.ts +4 -0
- package/dist/build-vite.d.ts.map +1 -1
- package/dist/build-vite.js +68 -13
- package/dist/build-vite.js.map +1 -1
- package/dist/build.d.ts +57 -23
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +356 -85
- 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 +3 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +111 -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/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 +13 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -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.map +1 -1
- package/dist/internal/codegen.js +141 -25
- 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 +20 -8
- package/dist/internal/page-execution.d.ts.map +1 -1
- package/dist/internal/page-execution.js +571 -105
- package/dist/internal/page-execution.js.map +1 -1
- 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 +25 -19
- package/dist/internal/render-document.d.ts.map +1 -1
- package/dist/internal/render-document.js +77 -61
- package/dist/internal/render-document.js.map +1 -1
- 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 +38 -9
- package/dist/internal/web-app.d.ts.map +1 -1
- package/dist/internal/web-app.js +199 -59
- 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 +263 -36
- package/dist/isr.js.map +1 -1
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +31 -6
- package/dist/llms-txt.js.map +1 -1
- package/dist/manifest.d.ts +220 -13
- 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 +67 -9
- 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/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 +90 -35
- package/src/build-vite.ts +77 -11
- package/src/build.ts +466 -96
- package/src/bun-dev-entry.ts +1 -1
- package/src/cdn.ts +216 -0
- package/src/client.ts +111 -18
- package/src/conformance.ts +16 -3
- package/src/csp.ts +194 -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 +42 -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 +161 -24
- 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 +795 -185
- 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 +114 -67
- 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 +262 -84
- package/src/internal/zone-graph.ts +593 -0
- package/src/isr.ts +325 -37
- package/src/llms-txt.ts +28 -4
- package/src/manifest.ts +670 -16
- 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 +69 -8
- 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/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
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MountableApp } from "@nifrajs/core/server";
|
|
2
2
|
import { type ServerOptions, server } from "@nifrajs/core/server";
|
|
3
|
+
import { type CspPolicy } from "../csp.js";
|
|
3
4
|
import type { CssLoadingMode } from "../css-contract.js";
|
|
4
5
|
import type { Manifest } from "../manifest.js";
|
|
5
6
|
import type { RenderAdapter } from "../render-seam.js";
|
|
@@ -20,6 +21,13 @@ export interface CreateWebAppOptions<Env = unknown> {
|
|
|
20
21
|
* policy's allowed sources are app-specific.
|
|
21
22
|
*/
|
|
22
23
|
readonly nonce?: NonceResolver<Env>;
|
|
24
|
+
/**
|
|
25
|
+
* A hash-based Content-Security-Policy from `createCspPolicy`, instead of `nonce`. A document then
|
|
26
|
+
* carries a nonce only when it needs one (it `defer()`s a value, or `meta` names the nonce in
|
|
27
|
+
* `unsafeInlineScript`); every other page is nonce-free, gets the same CSP header on every request,
|
|
28
|
+
* and stays cacheable by `withISR` or a CDN. `meta` still receives a nonce to name.
|
|
29
|
+
*/
|
|
30
|
+
readonly csp?: CspPolicy;
|
|
23
31
|
/**
|
|
24
32
|
* Options for the underlying `server()` - `requestTimeoutMs`, `admission`, `gracefulSignals`, and
|
|
25
33
|
* the rest of {@link ServerOptions}.
|
|
@@ -81,14 +89,26 @@ export interface CreateWebAppOptions<Env = unknown> {
|
|
|
81
89
|
* mount interface from `@nifrajs/core/mount`; `createWebApp` also serves that backend over HTTP at
|
|
82
90
|
* {@link apiPrefix} (default `/api`): a request whose pathname starts with the prefix is dispatched
|
|
83
91
|
* before page routing with the same `env`/`waitUntil` platform context, and the backend's `Response`
|
|
84
|
-
* is returned untouched. The mount runs in `nifra dev` too. Pass `apiPrefix: ""` to disable it.
|
|
92
|
+
* is returned untouched. The mount runs in `nifra dev` too. Pass `apiPrefix: ""` to disable it.
|
|
93
|
+
*
|
|
94
|
+
* **Request-scoped loader calls.** While a page renders, its loaders, actions and boundaries get a
|
|
95
|
+
* `ctx.api` bound to that request's platform identity: a backend handler reached through it sees the
|
|
96
|
+
* visitor's `c.clientIp` (derived under this app's `server.clientIp` trust declaration), `c.env` and
|
|
97
|
+
* `c.waitUntil`, so a per-caller rate limit or audit field keys on the real visitor. `c.clientIp` is
|
|
98
|
+
* the supported way to read the caller - identity travels in the platform, so rebuilding a `Request`
|
|
99
|
+
* does not lose it. Headers do NOT travel: the page request's `cookie` and `authorization` are never
|
|
100
|
+
* copied, so a loader call is anonymous unless the loader passes headers on the call itself. */
|
|
85
101
|
readonly api?: unknown;
|
|
86
102
|
/** HTTP path prefix the {@link api} backend is auto-mounted at (default `"/api"`). A request whose
|
|
87
103
|
* pathname is exactly the prefix or starts with `prefix + "/"` is dispatched to the backend before
|
|
88
104
|
* page routing; the backend therefore defines its routes at the **full** path (`server().post("/api/
|
|
89
105
|
* sync", …)`), matching the in-process `inProcessClient` call sites. Set to `""` to disable the
|
|
90
106
|
* auto-mount entirely (the app serves pages only and `api` stays a loader-only `ctx.api`). Mounting
|
|
91
|
-
* is also a no-op when `api` does not expose the symbol mount.
|
|
107
|
+
* is also a no-op when `api` does not expose the symbol mount.
|
|
108
|
+
*
|
|
109
|
+
* A page file under the prefix (`routes/api/report.tsx`) could never render - the backend answers
|
|
110
|
+
* first and its 404 is final - so `createWebApp` throws, naming the file. The same holds for every
|
|
111
|
+
* other pre-route mount. */
|
|
92
112
|
readonly apiPrefix?: string;
|
|
93
113
|
/**
|
|
94
114
|
* Strip {@link apiPrefix} from the pathname before dispatching to `api` (default `false`).
|
|
@@ -110,14 +130,16 @@ export interface CreateWebAppOptions<Env = unknown> {
|
|
|
110
130
|
*
|
|
111
131
|
* Tried longest-path-first and BEFORE the `api` mount, so a mount at `/api/auth` wins over a backend
|
|
112
132
|
* at `/api` no matter which was declared first. `stripPrefix` is the per-mount form of {@link apiStrip}:
|
|
113
|
-
* leave it off to pass the full path through.
|
|
133
|
+
* leave it off to pass the full path through. `opaque` states why a mount whose routes nifra cannot
|
|
134
|
+
* read (better-auth's handler) is outside assurance; it is then listed as a known gap.
|
|
114
135
|
*/
|
|
115
136
|
readonly mounts?: ReadonlyArray<{
|
|
116
137
|
readonly path: string;
|
|
117
|
-
readonly app:
|
|
118
|
-
fetch(request: Request, platform?: Platform<Env>): Response | Promise<Response>;
|
|
119
|
-
};
|
|
138
|
+
readonly app: MountableApp<Env>;
|
|
120
139
|
readonly stripPrefix?: boolean;
|
|
140
|
+
readonly priority?: number;
|
|
141
|
+
readonly fallbackOn?: 404;
|
|
142
|
+
readonly opaque?: string;
|
|
121
143
|
}>;
|
|
122
144
|
/** Secret for **draft / preview mode** (see `enableDraft`). When set, a request carrying a valid
|
|
123
145
|
* signed `__nifra_draft` cookie gets `ctx.draft === true` in loaders/actions (else always `false`).
|
|
@@ -144,14 +166,19 @@ export interface CreateWebAppOptions<Env = unknown> {
|
|
|
144
166
|
*/
|
|
145
167
|
readonly cssLoading?: CssLoadingMode;
|
|
146
168
|
/** SSG: the prerendered-path set (e.g. `enumerateStaticRoutes(routes).paths` or the build's
|
|
147
|
-
* `prerendered.json`).
|
|
148
|
-
* into a prerendered route fetches its static `_data.json` instead of hitting the worker.
|
|
169
|
+
* `prerendered.json`). Handed over as `window.__NIFRA_PRERENDERED__` on every page so a client soft-nav
|
|
170
|
+
* into a prerendered route fetches its static `_data.json` instead of hitting the worker. A set over
|
|
171
|
+
* 4 KB of JSON is served once from `/__nifra/prerendered.json?v=<version>`, cacheable for good, and
|
|
172
|
+
* pages hand over only that URL; `prerenderRoutes` writes the file into a static output. */
|
|
149
173
|
readonly prerenderedPaths?: readonly string[];
|
|
150
174
|
/** Publish the project's `AGENTS.md` inside `/llms.txt` and `/llms-full.txt`. **Off by default**:
|
|
151
175
|
* those endpoints are public and unauthenticated, while `AGENTS.md` is a repo file written for the
|
|
152
176
|
* team - unreleased feature names, internal hostnames, and "don't touch X yet" notes live there
|
|
153
177
|
* routinely. Turn it on only for a repo whose guidelines you would publish as a page. */
|
|
154
178
|
readonly publishLocalGuidelines?: boolean;
|
|
179
|
+
/** Serve `/llms.txt` and `/llms-full.txt` (default `true`): the page routes, and the backend routes
|
|
180
|
+
* when the backend is mounted over HTTP at {@link apiPrefix}. `false` registers neither path. */
|
|
181
|
+
readonly llmsTxt?: boolean;
|
|
155
182
|
/** SSG: per dynamic route pattern, its `getStaticPaths` `fallback` (from `enumerateStaticRoutes` or
|
|
156
183
|
* the build's `prerendered.json`). A route mapped to `"404"` rejects any path NOT in
|
|
157
184
|
* `prerenderedPaths` with the 404 page - the unlisted path simply doesn't exist. `"ssr"` (the
|
|
@@ -187,4 +214,6 @@ export interface CreateWebAppOptions<Env = unknown> {
|
|
|
187
214
|
* secure default; validate at the trust boundary before use.
|
|
188
215
|
*/
|
|
189
216
|
export declare function createWebApp<Env = unknown>(options: CreateWebAppOptions<Env>): ReturnType<typeof server<Env>>;
|
|
217
|
+
/** Resolve one composed, token-only evidence snapshot for a web app and its mounted surfaces. */
|
|
218
|
+
export declare function webProjectEvidence(source: unknown): Promise<import("@nifrajs/core/evidence").ProjectEvidenceSnapshot>;
|
|
190
219
|
//# sourceMappingURL=web-app.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-app.d.ts","sourceRoot":"","sources":["../../src/internal/web-app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-app.d.ts","sourceRoot":"","sources":["../../src/internal/web-app.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/web-app.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import { NIFRA_BACKEND_MOUNT, } from "@nifrajs/core/mount";
|
|
1
|
+
import { NIFRA_BACKEND_EVIDENCE, NIFRA_BACKEND_MOUNT, NIFRA_BACKEND_WS_MOUNT, NIFRA_BACKEND_WS_RUNTIME, preRouteMountPaths, } from "@nifrajs/core/mount";
|
|
2
2
|
import { server } from "@nifrajs/core/server";
|
|
3
|
+
import { cspNonceResolver, DOCUMENT_POLICY, isCspPolicy } from "../csp.js";
|
|
4
|
+
import { CACHE_CHANNEL } from "../isr.js";
|
|
3
5
|
import { generateLlmsTxt } from "../llms-txt.js";
|
|
6
|
+
import { PRERENDERED_LIST_PATH } from "../router.js";
|
|
7
|
+
import { formatShadowedPages, shadowedPages } from "./mount-shadow.js";
|
|
4
8
|
import { createPageRequestExecutor } from "./page-execution.js";
|
|
5
|
-
import { urlPartsFor } from "./request-url.js";
|
|
6
9
|
/**
|
|
7
10
|
* Re-issue `request` with `prefix` removed from its pathname.
|
|
8
11
|
*
|
|
@@ -16,13 +19,6 @@ import { urlPartsFor } from "./request-url.js";
|
|
|
16
19
|
* The `Request` is rebuilt rather than mutated (`url` is read-only), preserving method, headers, body,
|
|
17
20
|
* and duplex streaming - the body is passed through unread, so a large or streamed upload is untouched.
|
|
18
21
|
*/
|
|
19
|
-
function stripMountPrefix(request, prefix) {
|
|
20
|
-
const url = new URL(request.url);
|
|
21
|
-
const rest = url.pathname.slice(prefix.length);
|
|
22
|
-
url.pathname = rest === "" ? "/" : rest;
|
|
23
|
-
// `url.href`, not the `URL`: this type set only declares the string and Request overloads.
|
|
24
|
-
return new Request(url.href, request);
|
|
25
|
-
}
|
|
26
22
|
/**
|
|
27
23
|
* Resolve the explicit symbol-keyed backend mount interface. The symbol seam forwards platform
|
|
28
24
|
* context without making web depend on client.
|
|
@@ -33,16 +29,37 @@ function backendMountOf(api) {
|
|
|
33
29
|
const explicit = api[NIFRA_BACKEND_MOUNT];
|
|
34
30
|
if (typeof explicit !== "function")
|
|
35
31
|
return undefined;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return "/";
|
|
32
|
+
const websocket = api[NIFRA_BACKEND_WS_MOUNT];
|
|
33
|
+
const runtime = api[NIFRA_BACKEND_WS_RUNTIME];
|
|
34
|
+
const evidence = api[NIFRA_BACKEND_EVIDENCE];
|
|
35
|
+
const mount = {
|
|
36
|
+
fetch: (request, platform) => explicit.call(api, request, platform),
|
|
37
|
+
};
|
|
38
|
+
if (typeof websocket === "function") {
|
|
39
|
+
mount.resolveWebSocketUpgrade = (request, platform) => websocket.call(api, request, platform);
|
|
45
40
|
}
|
|
41
|
+
if (typeof runtime === "function")
|
|
42
|
+
mount[NIFRA_BACKEND_WS_RUNTIME] = runtime;
|
|
43
|
+
if (typeof evidence === "function")
|
|
44
|
+
mount[NIFRA_BACKEND_EVIDENCE] = evidence;
|
|
45
|
+
return mount;
|
|
46
|
+
}
|
|
47
|
+
function evidenceProviderOf(value) {
|
|
48
|
+
if ((typeof value !== "object" && typeof value !== "function") || value === null)
|
|
49
|
+
return undefined;
|
|
50
|
+
const provider = value[NIFRA_BACKEND_EVIDENCE];
|
|
51
|
+
return typeof provider === "function" ? provider : undefined;
|
|
52
|
+
}
|
|
53
|
+
function mountPathPrefix(path) {
|
|
54
|
+
const withoutWildcard = path.endsWith("/*") ? path.slice(0, -2) : path;
|
|
55
|
+
if (withoutWildcard === "" || withoutWildcard === "/")
|
|
56
|
+
return "";
|
|
57
|
+
// Index-scan instead of `/\/+$/`: mount paths can be library input, and the
|
|
58
|
+
// unanchored-start trailing-run replacement can backtrack quadratically.
|
|
59
|
+
let end = withoutWildcard.length;
|
|
60
|
+
while (end > 0 && withoutWildcard.charCodeAt(end - 1) === 47 /* '/' */)
|
|
61
|
+
end--;
|
|
62
|
+
return withoutWildcard.slice(0, end);
|
|
46
63
|
}
|
|
47
64
|
/**
|
|
48
65
|
* Build a nifra app from a route manifest: every route SSRs its layout chain via `renderPage`,
|
|
@@ -60,6 +77,12 @@ function requestPathOf(request) {
|
|
|
60
77
|
*/
|
|
61
78
|
export function createWebApp(options) {
|
|
62
79
|
const { adapter, manifest, clientEntry, title, api } = options;
|
|
80
|
+
if (options.csp !== undefined && options.nonce !== undefined) {
|
|
81
|
+
throw new TypeError("[nifra/web] createWebApp takes `csp` or `nonce`, not both");
|
|
82
|
+
}
|
|
83
|
+
if (options.csp !== undefined && !isCspPolicy(options.csp)) {
|
|
84
|
+
throw new TypeError("[nifra/web] createWebApp `csp` must come from createCspPolicy()");
|
|
85
|
+
}
|
|
63
86
|
// Seed the context with the declared `Env` so `app.fetch(req, { env })` / `toFetchHandler(app)` type
|
|
64
87
|
// the platform bindings (see the `createWebApp` doc). The runtime `env` still arrives per-request via
|
|
65
88
|
// `app.fetch(req, { env })`; this is a compile-time-only seed (`server<Env>()` casts, doesn't store).
|
|
@@ -68,39 +91,58 @@ export function createWebApp(options) {
|
|
|
68
91
|
// `beforeHandle`, assurance evidence) actually bind to them - see the `use` option. A caller
|
|
69
92
|
// cannot do this after the fact: by the time this function returns, the routes are declared.
|
|
70
93
|
options.use?.(app);
|
|
94
|
+
// A resolver created by `createNonceResolver({ header })` carries a paired response hook. Register it
|
|
95
|
+
// after caller middleware so its request-specific CSP value is the last default applied to a page.
|
|
96
|
+
const nonceResponse = options.nonce?.onResponse;
|
|
97
|
+
if (nonceResponse !== undefined)
|
|
98
|
+
app.onResponse(nonceResponse);
|
|
99
|
+
// How this app's documents meet a CSP, for wrappers that cache them (`withISR` warns on "nonce").
|
|
100
|
+
const documentPolicy = options.csp !== undefined ? "hash" : options.nonce !== undefined ? "nonce" : undefined;
|
|
101
|
+
if (documentPolicy !== undefined) {
|
|
102
|
+
Object.defineProperty(app, DOCUMENT_POLICY, { value: documentPolicy });
|
|
103
|
+
}
|
|
104
|
+
const cacheChannel = { enabled: false };
|
|
105
|
+
Object.defineProperty(app, CACHE_CHANNEL, {
|
|
106
|
+
value: () => {
|
|
107
|
+
cacheChannel.enabled = true;
|
|
108
|
+
},
|
|
109
|
+
});
|
|
71
110
|
// Auto-mount the in-process backend over HTTP at `apiPrefix` (default `/api`), BEFORE page routing.
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
//
|
|
76
|
-
//
|
|
77
|
-
//
|
|
78
|
-
//
|
|
111
|
+
// Core's pre-route mount seam runs before the page wildcard `/*`; parent request hooks run first,
|
|
112
|
+
// child request hooks run inside the mount, and parent response hooks still wrap the result.
|
|
113
|
+
// The mount handles every HTTP method and preserves backend 404 responses instead of letting the
|
|
114
|
+
// page catch-all render them. We dispatch the same `Request` object (its body unread), so
|
|
115
|
+
// streamed/large bodies pass through untouched. The backend defines full prefixed paths
|
|
116
|
+
// (`server().post("/api/sync", …)`) unless `apiStrip` is enabled. `apiPrefix: ""` opts out;
|
|
117
|
+
// a non-mountable `api` remains loader-only and pages-only apps keep the no-mount fast path.
|
|
79
118
|
const apiPrefix = options.apiPrefix ?? "/api";
|
|
80
119
|
const apiStrip = options.apiStrip === true;
|
|
81
120
|
const mountedApi = backendMountOf(api);
|
|
82
121
|
// Longest path first, so a more specific mount (`/api/auth`) is tried before a broader one (`/api`)
|
|
83
122
|
// regardless of the order they were declared in.
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
// Exactly the prefix (`/api`) or a sub-path (`/api/…`) - NOT a sibling like `/apixyz` that merely
|
|
97
|
-
// shares the prefix as a string head. Dispatch the original `req` (body intact) to the backend.
|
|
98
|
-
if (mountedApi !== undefined && apiPrefix !== "" && underPrefix(pathname, apiPrefix)) {
|
|
99
|
-
return mountedApi(apiStrip ? stripMountPrefix(req, apiPrefix) : req, platform);
|
|
100
|
-
}
|
|
101
|
-
return undefined; // not an API path → continue to page routing
|
|
102
|
-
});
|
|
123
|
+
const configuredMounts = Object.freeze((options.mounts ?? []).map((mount) => ({
|
|
124
|
+
path: mount.path,
|
|
125
|
+
app: mount.app,
|
|
126
|
+
...(mount.stripPrefix === undefined ? {} : { stripPrefix: mount.stripPrefix }),
|
|
127
|
+
...(mount.priority === undefined ? {} : { priority: mount.priority }),
|
|
128
|
+
...(mount.fallbackOn === undefined ? {} : { fallbackOn: mount.fallbackOn }),
|
|
129
|
+
...(mount.opaque === undefined ? {} : { opaque: mount.opaque }),
|
|
130
|
+
})));
|
|
131
|
+
const mounts = [...configuredMounts];
|
|
132
|
+
if (mountedApi !== undefined && apiPrefix !== "") {
|
|
133
|
+
mounts.push({ path: apiPrefix, app: mountedApi, stripPrefix: apiStrip });
|
|
103
134
|
}
|
|
135
|
+
for (const mount of mounts)
|
|
136
|
+
app.mount(mount);
|
|
137
|
+
// Read back the server's own mount table, so a mount added in `use` counts as well: a page under any
|
|
138
|
+
// pre-route mount is unreachable, and serving it as a silent 404 hides that.
|
|
139
|
+
const shadowed = shadowedPages(manifest, preRouteMountPaths(app));
|
|
140
|
+
if (shadowed.length > 0)
|
|
141
|
+
throw new Error(`[nifra/web] ${formatShadowedPages(shadowed)}`);
|
|
142
|
+
const ownPatterns = new Set(manifest.routes.map((route) => route.pattern));
|
|
143
|
+
const prerenderedList = ownPatterns.has(PRERENDERED_LIST_PATH)
|
|
144
|
+
? undefined
|
|
145
|
+
: servedPrerenderedList(options.prerenderedPaths);
|
|
104
146
|
const pageExecutor = createPageRequestExecutor({
|
|
105
147
|
adapter,
|
|
106
148
|
manifest,
|
|
@@ -115,33 +157,131 @@ export function createWebApp(options) {
|
|
|
115
157
|
...(options.prerenderedPaths === undefined
|
|
116
158
|
? {}
|
|
117
159
|
: { prerenderedPaths: options.prerenderedPaths }),
|
|
160
|
+
...(prerenderedList === undefined ? {} : { prerenderedListUrl: prerenderedList.url }),
|
|
118
161
|
...(options.staticFallbacks === undefined ? {} : { staticFallbacks: options.staticFallbacks }),
|
|
119
162
|
...(options.staticBoundaryCache === undefined
|
|
120
163
|
? {}
|
|
121
164
|
: { staticBoundaryCache: options.staticBoundaryCache }),
|
|
122
165
|
...(options.nonce === undefined ? {} : { nonce: options.nonce }),
|
|
166
|
+
...(options.csp === undefined
|
|
167
|
+
? {}
|
|
168
|
+
: { nonce: cspNonceResolver(options.csp), csp: options.csp }),
|
|
123
169
|
...(options.onLoaderError === undefined ? {} : { onLoaderError: options.onLoaderError }),
|
|
170
|
+
cacheChannel,
|
|
124
171
|
});
|
|
125
172
|
for (const route of manifest.routes) {
|
|
126
173
|
app.register("GET", route.pattern, undefined, pageExecutor.get(route));
|
|
127
174
|
app.register("POST", route.pattern, undefined, pageExecutor.post(route));
|
|
128
175
|
}
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
app
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
176
|
+
// llms.txt & llms-full.txt describe what a visitor can reach: the pages, and the backend only when it
|
|
177
|
+
// is served over HTTP - a backend the loaders call in-process has no public surface to describe. An
|
|
178
|
+
// app route at either path takes precedence, and each text is built once per app.
|
|
179
|
+
if (options.llmsTxt !== false) {
|
|
180
|
+
const llmsOptions = { includeLocalGuidelines: options.publishLocalGuidelines === true };
|
|
181
|
+
const publicApi = mountedApi !== undefined && apiPrefix !== "" ? api : undefined;
|
|
182
|
+
for (const [path, full] of [
|
|
183
|
+
["/llms.txt", false],
|
|
184
|
+
["/llms-full.txt", true],
|
|
185
|
+
]) {
|
|
186
|
+
if (ownPatterns.has(path))
|
|
187
|
+
continue;
|
|
188
|
+
let text;
|
|
189
|
+
app.register("GET", path, undefined, async () => {
|
|
190
|
+
text ??= generateLlmsTxt(full, manifest.routes, publicApi, llmsOptions).catch((error) => {
|
|
191
|
+
text = undefined;
|
|
192
|
+
throw error;
|
|
193
|
+
});
|
|
194
|
+
return new Response(await text, {
|
|
195
|
+
headers: { "content-type": "text/plain; charset=utf-8" },
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
if (prerenderedList !== undefined) {
|
|
201
|
+
const { body, version } = prerenderedList;
|
|
202
|
+
app.register("GET", PRERENDERED_LIST_PATH, undefined, (c) => new Response(body, {
|
|
203
|
+
headers: {
|
|
204
|
+
"content-type": "application/json",
|
|
205
|
+
// Only the versioned URL pages hand over is immutable; a bare request gets today's list.
|
|
206
|
+
"cache-control": new URL(c.req.url).searchParams.get("v") === version
|
|
207
|
+
? "public, max-age=31536000, immutable"
|
|
208
|
+
: "no-cache",
|
|
209
|
+
},
|
|
210
|
+
}));
|
|
211
|
+
}
|
|
212
|
+
// Wildcard catch-all: unmatched paths render the nearest `_404` (404), or a plain text 404 if
|
|
213
|
+
// absent.
|
|
214
|
+
app.register("GET", "/*", undefined, pageExecutor.fallback);
|
|
215
|
+
let evidenceComposing = false;
|
|
216
|
+
const evidenceProvider = async () => {
|
|
217
|
+
if (evidenceComposing) {
|
|
218
|
+
throw new Error("[nifra/web] cyclic composed assurance evidence mount");
|
|
219
|
+
}
|
|
220
|
+
evidenceComposing = true;
|
|
221
|
+
try {
|
|
222
|
+
const { composeProjectEvidence, snapshotProjectEvidence } = await import("@nifrajs/core/evidence");
|
|
223
|
+
const parts = [{ evidence: snapshotProjectEvidence(app) }];
|
|
224
|
+
for (const mount of configuredMounts) {
|
|
225
|
+
const provider = evidenceProviderOf(mount.app);
|
|
226
|
+
if (provider === undefined) {
|
|
227
|
+
// A declared opaque mount reaches the snapshot as a known gap, through this app's own
|
|
228
|
+
// mount reflection above.
|
|
229
|
+
if (mount.opaque !== undefined)
|
|
230
|
+
continue;
|
|
231
|
+
throw new Error(`[nifra/web] cannot compose assurance evidence: mount "${mount.path}" has no token-only evidence provider - declare why it is not analyzed with { opaque: "<reason>" }`);
|
|
232
|
+
}
|
|
233
|
+
parts.push({
|
|
234
|
+
evidence: await provider.call(mount.app),
|
|
235
|
+
...(mount.stripPrefix === true ? { pathPrefix: mountPathPrefix(mount.path) } : {}),
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
if (mountedApi !== undefined && apiPrefix !== "") {
|
|
239
|
+
const provider = evidenceProviderOf(api);
|
|
240
|
+
if (provider === undefined) {
|
|
241
|
+
throw new Error(`[nifra/web] cannot compose assurance evidence: auto-mounted API at "${apiPrefix}" has no token-only evidence provider`);
|
|
242
|
+
}
|
|
243
|
+
parts.push({
|
|
244
|
+
evidence: await provider.call(api),
|
|
245
|
+
...(apiStrip ? { pathPrefix: mountPathPrefix(apiPrefix) } : {}),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
return composeProjectEvidence(parts);
|
|
249
|
+
}
|
|
250
|
+
finally {
|
|
251
|
+
evidenceComposing = false;
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
Object.defineProperty(app, NIFRA_BACKEND_EVIDENCE, {
|
|
255
|
+
configurable: false,
|
|
256
|
+
enumerable: false,
|
|
257
|
+
value: evidenceProvider,
|
|
258
|
+
writable: false,
|
|
142
259
|
});
|
|
143
|
-
// Wildcard catch-all: unmatched paths render `_404` (404), or a plain text 404 if absent.
|
|
144
|
-
app.register("GET", "/*", undefined, (c) => pageExecutor.notFound(c.req, c.env, requestPathOf(c.req)));
|
|
145
260
|
return app;
|
|
146
261
|
}
|
|
262
|
+
/** Resolve one composed, token-only evidence snapshot for a web app and its mounted surfaces. */
|
|
263
|
+
export async function webProjectEvidence(source) {
|
|
264
|
+
const provider = evidenceProviderOf(source);
|
|
265
|
+
if (provider === undefined) {
|
|
266
|
+
throw new TypeError("webProjectEvidence(): expected an app created by createWebApp");
|
|
267
|
+
}
|
|
268
|
+
return provider.call(source);
|
|
269
|
+
}
|
|
270
|
+
// Up to this many characters of JSON, the prerendered set rides inline in each page's handover.
|
|
271
|
+
const INLINE_PRERENDERED_CHARS = 4096;
|
|
272
|
+
/** The prerendered set as a served, content-versioned list, when it is too large to inline. */
|
|
273
|
+
function servedPrerenderedList(paths) {
|
|
274
|
+
if (paths === undefined || paths.length === 0)
|
|
275
|
+
return undefined;
|
|
276
|
+
const body = JSON.stringify(paths);
|
|
277
|
+
if (body.length <= INLINE_PRERENDERED_CHARS)
|
|
278
|
+
return undefined;
|
|
279
|
+
// FNV-1a: a version that changes with the list is all the URL needs; a stale cached list only
|
|
280
|
+
// costs a fallback to the dynamic data request.
|
|
281
|
+
let hash = 0x811c9dc5;
|
|
282
|
+
for (let i = 0; i < body.length; i++)
|
|
283
|
+
hash = Math.imul(hash ^ body.charCodeAt(i), 0x01000193);
|
|
284
|
+
const version = (hash >>> 0).toString(16).padStart(8, "0");
|
|
285
|
+
return { body, version, url: `${PRERENDERED_LIST_PATH}?v=${version}` };
|
|
286
|
+
}
|
|
147
287
|
//# sourceMappingURL=web-app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-app.js","sourceRoot":"","sources":["../../src/internal/web-app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web-app.js","sourceRoot":"","sources":["../../src/internal/web-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { ClientModuleGraph } from "../module-graph.js";
|
|
2
|
+
import { type Classification, type ZoneClassifier } from "../zones.js";
|
|
3
|
+
/** What a graph module id names. */
|
|
4
|
+
export type ModuleSource = {
|
|
5
|
+
readonly kind: "file";
|
|
6
|
+
readonly file: string;
|
|
7
|
+
}
|
|
8
|
+
/** `node:`/`bun:` builtins; the node-builtin guard reports these with its own message. */
|
|
9
|
+
| {
|
|
10
|
+
readonly kind: "builtin";
|
|
11
|
+
}
|
|
12
|
+
/** A plugin's virtual module, with the file it derives from when it names one. */
|
|
13
|
+
| {
|
|
14
|
+
readonly kind: "virtual";
|
|
15
|
+
readonly file?: string;
|
|
16
|
+
};
|
|
17
|
+
/** Bun metafile ids: cwd-relative paths, `node:` builtins, `namespace:path` for plugin modules. */
|
|
18
|
+
export declare function bunModuleSource(cwd: string): (id: string) => ModuleSource;
|
|
19
|
+
/** Rollup/Vite ids: absolute paths, `\0`-prefixed virtual modules, Vite's browser-external shim. */
|
|
20
|
+
export declare function rollupModuleSource(id: string): ModuleSource;
|
|
21
|
+
export interface ZoneLeak {
|
|
22
|
+
/** The refused module, as the report names it. */
|
|
23
|
+
readonly module: string;
|
|
24
|
+
readonly reason: string;
|
|
25
|
+
/** Shortest import path from an entry: `[entry, ...as-written specifiers]`. */
|
|
26
|
+
readonly chain: readonly string[];
|
|
27
|
+
}
|
|
28
|
+
export interface ClientGraphVerdict {
|
|
29
|
+
readonly leaks: readonly ZoneLeak[];
|
|
30
|
+
/** Evidence the graph does not account for. Any entry fails the build. */
|
|
31
|
+
readonly gaps: readonly string[];
|
|
32
|
+
/** Route frontend files whose compiled entry exports a backend-only name. */
|
|
33
|
+
readonly misplacedExports: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export interface VerifyClientGraphOptions {
|
|
36
|
+
readonly classifier: ZoneClassifier;
|
|
37
|
+
readonly sourceOf: (id: string) => ModuleSource;
|
|
38
|
+
/** The private-env denial for a browser-code file (see `privateEnvCheck`); unchecked when absent. */
|
|
39
|
+
readonly privateEnv?: (file: string) => string | undefined;
|
|
40
|
+
/** Files the zone guard refused while the bundler loaded them. Bun keeps the edge to a module
|
|
41
|
+
* tree-shaking removed but drops the module, so such an edge still names a refusal. */
|
|
42
|
+
readonly refused?: ReadonlySet<string>;
|
|
43
|
+
}
|
|
44
|
+
/** Check every module and edge of a client graph against the zone rules. */
|
|
45
|
+
export declare function verifyClientGraph(graph: ClientModuleGraph, options: VerifyClientGraphOptions): ClientGraphVerdict;
|
|
46
|
+
export interface ServerGraphVerdict {
|
|
47
|
+
/** Unzoned files and imports the zone rules refuse, each with the chain from an entry. */
|
|
48
|
+
readonly violations: readonly ZoneLeak[];
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Check a server bundle's graph against the zone rules. Unlike the browser build, backend code is
|
|
52
|
+
* expected here; what is refused is a first-party file in no zone, an import the rules forbid
|
|
53
|
+
* (backend reaching frontend code, shared reaching anything but shared code), and shared code reaching
|
|
54
|
+
* a server built-in or the backend-only marker. The build's own entries and generated modules are
|
|
55
|
+
* `generated`, so they may import both halves.
|
|
56
|
+
*/
|
|
57
|
+
export declare function verifyServerGraph(graph: ClientModuleGraph, options: VerifyClientGraphOptions): ServerGraphVerdict;
|
|
58
|
+
/** The build-failing message for a server graph that breaks the zone rules. */
|
|
59
|
+
export declare function formatServerGraphVerdict(verdict: ServerGraphVerdict): string | undefined;
|
|
60
|
+
/** One emitted file, as the accounting sees it. */
|
|
61
|
+
export interface EmittedFile {
|
|
62
|
+
/** Output path relative to the output directory. */
|
|
63
|
+
readonly name: string;
|
|
64
|
+
readonly kind: "code" | "css" | "asset" | "map";
|
|
65
|
+
/** Source files the bundler says an asset came from, when it says. */
|
|
66
|
+
readonly sources?: readonly string[];
|
|
67
|
+
/** The file's text, for code and maps. */
|
|
68
|
+
readonly text?: string;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Why a file may not ship as an asset - its bytes copied or inlined into the bundle - or `undefined`
|
|
72
|
+
* when it may. A server function reaches the browser only as the stub its import is replaced with, so
|
|
73
|
+
* as an asset it is the server source itself.
|
|
74
|
+
*/
|
|
75
|
+
export declare function assetDenial(classification: Classification): string | undefined;
|
|
76
|
+
/**
|
|
77
|
+
* Trace every emitted file back to the graph. A code or CSS file must be a graph chunk; an asset must
|
|
78
|
+
* name the module it was copied from; a source map (external or inline) may name browser-allowed
|
|
79
|
+
* sources only.
|
|
80
|
+
*/
|
|
81
|
+
export declare function accountEmittedFiles(files: readonly EmittedFile[], graph: ClientModuleGraph, options: VerifyClientGraphOptions & {
|
|
82
|
+
/** Where the files will be written; source map paths resolve against it. */
|
|
83
|
+
readonly outDir: string;
|
|
84
|
+
}): string[];
|
|
85
|
+
/** The build-failing message for a verdict, or `undefined` when the build is clean. */
|
|
86
|
+
export declare function formatClientGraphVerdict(verdict: ClientGraphVerdict): string | undefined;
|
|
87
|
+
/** The build-failing message for emitted files the graph does not account for. */
|
|
88
|
+
export declare function formatUnaccountedOutput(problems: readonly string[]): string | undefined;
|
|
89
|
+
//# sourceMappingURL=zone-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zone-graph.d.ts","sourceRoot":"","sources":["../../src/internal/zone-graph.ts"],"names":[],"mappings":"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"}
|