@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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The private environment reads in one browser-reachable file, as written (`process.env.SECRET`).
|
|
3
|
+
* `publicPrefix` is the app's public-env prefix; `""` makes every variable but `NODE_ENV` private.
|
|
4
|
+
*/
|
|
5
|
+
export declare function privateEnvReads(file: string, source: string, publicPrefix: string): string[];
|
|
6
|
+
/** The denial reason for a file's private environment reads. */
|
|
7
|
+
export declare function privateEnvReason(reads: readonly string[], publicPrefix: string): string;
|
|
8
|
+
/** The denial reason for one file's source, or `undefined` when it reads no private variable. */
|
|
9
|
+
export declare function privateEnvDenial(file: string, source: string, publicPrefix: string): string | undefined;
|
|
10
|
+
/** A per-file check for a finished build, reading each file once. */
|
|
11
|
+
export declare function privateEnvCheck(publicPrefix: string): (file: string) => string | undefined;
|
|
12
|
+
//# sourceMappingURL=private-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private-env.d.ts","sourceRoot":"","sources":["../../src/internal/private-env.ts"],"names":[],"mappings":"AA6QA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAqB5F;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAMvF;AAED,iGAAiG;AACjG,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAGpB;AAED,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAiB1F"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Private environment reads in browser-reachable code. Browser code (a route's frontend half,
|
|
3
|
+
* `frontend/`, `shared/`) may read `NODE_ENV`, the bundler's own `import.meta.env` flags and variables
|
|
4
|
+
* named with the public prefix; any other `process.env`, `import.meta.env`, `Bun.env` or `Deno.env`
|
|
5
|
+
* read is a secret on its way to a browser, or a value that is silently `undefined` there.
|
|
6
|
+
*
|
|
7
|
+
* Detection works on tokens, not text, so a string or comment that mentions `process.env.X` is not a
|
|
8
|
+
* read. TypeScript and JSX go through Bun's transpiler first: JSX prose becomes string literals and type
|
|
9
|
+
* positions disappear. SFC and MDX files contribute only their code: scripts, markup expressions and
|
|
10
|
+
* ESM lines.
|
|
11
|
+
*/
|
|
12
|
+
import { readFileSync } from "node:fs";
|
|
13
|
+
import { delimitedSpans, withoutComments, withoutMatches } from "./html-spans.js";
|
|
14
|
+
const IMPORT_META_FLAGS = new Set(["MODE", "DEV", "PROD", "SSR", "BASE_URL"]);
|
|
15
|
+
/** Words after which a `/` starts a regular expression rather than a division. */
|
|
16
|
+
const BEFORE_EXPRESSION = new Set([
|
|
17
|
+
"return",
|
|
18
|
+
"typeof",
|
|
19
|
+
"case",
|
|
20
|
+
"do",
|
|
21
|
+
"else",
|
|
22
|
+
"in",
|
|
23
|
+
"of",
|
|
24
|
+
"new",
|
|
25
|
+
"delete",
|
|
26
|
+
"void",
|
|
27
|
+
"throw",
|
|
28
|
+
"yield",
|
|
29
|
+
"await",
|
|
30
|
+
"instanceof",
|
|
31
|
+
]);
|
|
32
|
+
/** JavaScript tokens, with strings, template text, comments and regular expressions skipped. */
|
|
33
|
+
function tokenize(code) {
|
|
34
|
+
const tokens = [];
|
|
35
|
+
// One entry per open `${`: how many `{` are open inside it.
|
|
36
|
+
const templates = [];
|
|
37
|
+
let i = 0;
|
|
38
|
+
const readTemplate = (from) => {
|
|
39
|
+
let j = from;
|
|
40
|
+
while (j < code.length) {
|
|
41
|
+
const c = code[j];
|
|
42
|
+
if (c === "\\")
|
|
43
|
+
j += 2;
|
|
44
|
+
else if (c === "`") {
|
|
45
|
+
tokens.push({ kind: "other" });
|
|
46
|
+
return j + 1;
|
|
47
|
+
}
|
|
48
|
+
else if (c === "$" && code[j + 1] === "{") {
|
|
49
|
+
templates.push(0);
|
|
50
|
+
return j + 2;
|
|
51
|
+
}
|
|
52
|
+
else
|
|
53
|
+
j++;
|
|
54
|
+
}
|
|
55
|
+
return j;
|
|
56
|
+
};
|
|
57
|
+
const regexAllowed = () => {
|
|
58
|
+
const prev = tokens.at(-1);
|
|
59
|
+
if (prev === undefined)
|
|
60
|
+
return true;
|
|
61
|
+
if (prev.kind === "id")
|
|
62
|
+
return BEFORE_EXPRESSION.has(prev.value);
|
|
63
|
+
if (prev.kind === "punct")
|
|
64
|
+
return prev.value !== ")" && prev.value !== "]" && prev.value !== "}";
|
|
65
|
+
return false;
|
|
66
|
+
};
|
|
67
|
+
while (i < code.length) {
|
|
68
|
+
const c = code[i];
|
|
69
|
+
if (/\s/.test(c)) {
|
|
70
|
+
i++;
|
|
71
|
+
}
|
|
72
|
+
else if (c === "/" && code[i + 1] === "/") {
|
|
73
|
+
const end = code.indexOf("\n", i);
|
|
74
|
+
i = end === -1 ? code.length : end;
|
|
75
|
+
}
|
|
76
|
+
else if (c === "/" && code[i + 1] === "*") {
|
|
77
|
+
const end = code.indexOf("*/", i + 2);
|
|
78
|
+
i = end === -1 ? code.length : end + 2;
|
|
79
|
+
}
|
|
80
|
+
else if (c === "'" || c === '"') {
|
|
81
|
+
let j = i + 1;
|
|
82
|
+
let value = "";
|
|
83
|
+
while (j < code.length && code[j] !== c && code[j] !== "\n") {
|
|
84
|
+
if (code[j] === "\\") {
|
|
85
|
+
value += code[j + 1] ?? "";
|
|
86
|
+
j += 2;
|
|
87
|
+
}
|
|
88
|
+
else
|
|
89
|
+
value += code[j++];
|
|
90
|
+
}
|
|
91
|
+
tokens.push({ kind: "string", value });
|
|
92
|
+
i = j + 1;
|
|
93
|
+
}
|
|
94
|
+
else if (c === "`") {
|
|
95
|
+
i = readTemplate(i + 1);
|
|
96
|
+
}
|
|
97
|
+
else if (c === "}" && templates.at(-1) === 0) {
|
|
98
|
+
templates.pop();
|
|
99
|
+
i = readTemplate(i + 1);
|
|
100
|
+
}
|
|
101
|
+
else if (/[A-Za-z_$\u0080-]/.test(c)) {
|
|
102
|
+
let j = i + 1;
|
|
103
|
+
while (j < code.length && /[\w$\u0080-]/.test(code[j]))
|
|
104
|
+
j++;
|
|
105
|
+
tokens.push({ kind: "id", value: code.slice(i, j) });
|
|
106
|
+
i = j;
|
|
107
|
+
}
|
|
108
|
+
else if (/\d/.test(c) || (c === "." && /\d/.test(code[i + 1] ?? ""))) {
|
|
109
|
+
let j = i + 1;
|
|
110
|
+
while (j < code.length && /[\w.]/.test(code[j]))
|
|
111
|
+
j++;
|
|
112
|
+
tokens.push({ kind: "other" });
|
|
113
|
+
i = j;
|
|
114
|
+
}
|
|
115
|
+
else if (c === "/" && regexAllowed()) {
|
|
116
|
+
let j = i + 1;
|
|
117
|
+
let inClass = false;
|
|
118
|
+
while (j < code.length && code[j] !== "\n") {
|
|
119
|
+
const d = code[j];
|
|
120
|
+
if (d === "\\")
|
|
121
|
+
j++;
|
|
122
|
+
else if (d === "[")
|
|
123
|
+
inClass = true;
|
|
124
|
+
else if (d === "]")
|
|
125
|
+
inClass = false;
|
|
126
|
+
else if (d === "/" && !inClass)
|
|
127
|
+
break;
|
|
128
|
+
j++;
|
|
129
|
+
}
|
|
130
|
+
j++;
|
|
131
|
+
while (j < code.length && /[a-z]/i.test(code[j]))
|
|
132
|
+
j++;
|
|
133
|
+
tokens.push({ kind: "other" });
|
|
134
|
+
i = j;
|
|
135
|
+
}
|
|
136
|
+
else if (c === "?" && code[i + 1] === "." && !/\d/.test(code[i + 2] ?? "")) {
|
|
137
|
+
// Optional chaining reads the same property: `process?.env?.X` is `process.env.X`.
|
|
138
|
+
tokens.push({ kind: "punct", value: "." });
|
|
139
|
+
i += 2;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
const open = templates.length - 1;
|
|
143
|
+
if (c === "{" && open >= 0)
|
|
144
|
+
templates[open] = templates[open] + 1;
|
|
145
|
+
if (c === "}" && open >= 0)
|
|
146
|
+
templates[open] = templates[open] - 1;
|
|
147
|
+
tokens.push({ kind: "punct", value: c });
|
|
148
|
+
i++;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return tokens;
|
|
152
|
+
}
|
|
153
|
+
function envReads(tokens) {
|
|
154
|
+
const reads = [];
|
|
155
|
+
const is = (at, kind, value) => {
|
|
156
|
+
const token = tokens[at];
|
|
157
|
+
return token !== undefined && token.kind === kind && token.value === value;
|
|
158
|
+
};
|
|
159
|
+
const stringAt = (at) => {
|
|
160
|
+
const token = tokens[at];
|
|
161
|
+
return token?.kind === "string" ? token.value : undefined;
|
|
162
|
+
};
|
|
163
|
+
const idAt = (at) => {
|
|
164
|
+
const token = tokens[at];
|
|
165
|
+
return token?.kind === "id" ? token.value : undefined;
|
|
166
|
+
};
|
|
167
|
+
/** A property read after an env object that ends at `at`: `.X` or `["X"]`. */
|
|
168
|
+
const member = (base, at, importMeta) => {
|
|
169
|
+
const property = is(at, "punct", ".") ? idAt(at + 1) : undefined;
|
|
170
|
+
if (property !== undefined)
|
|
171
|
+
return { expression: `${base}.${property}`, name: property, importMeta };
|
|
172
|
+
const key = is(at, "punct", "[") && is(at + 2, "punct", "]") ? stringAt(at + 1) : undefined;
|
|
173
|
+
if (key !== undefined)
|
|
174
|
+
return { expression: `${base}[${JSON.stringify(key)}]`, name: key, importMeta };
|
|
175
|
+
return { expression: base, importMeta };
|
|
176
|
+
};
|
|
177
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
178
|
+
const head = idAt(i);
|
|
179
|
+
if ((head === "process" || head === "Bun") &&
|
|
180
|
+
is(i + 1, "punct", ".") &&
|
|
181
|
+
is(i + 2, "id", "env")) {
|
|
182
|
+
reads.push(member(`${head}.env`, i + 3, false));
|
|
183
|
+
}
|
|
184
|
+
else if (head === "import" &&
|
|
185
|
+
is(i + 1, "punct", ".") &&
|
|
186
|
+
is(i + 2, "id", "meta") &&
|
|
187
|
+
is(i + 3, "punct", ".") &&
|
|
188
|
+
is(i + 4, "id", "env")) {
|
|
189
|
+
reads.push(member("import.meta.env", i + 5, true));
|
|
190
|
+
}
|
|
191
|
+
else if (head === "Deno" && is(i + 1, "punct", ".") && is(i + 2, "id", "env")) {
|
|
192
|
+
const method = is(i + 3, "punct", ".") ? idAt(i + 4) : undefined;
|
|
193
|
+
const name = (method === "get" || method === "has") && is(i + 5, "punct", "(")
|
|
194
|
+
? stringAt(i + 6)
|
|
195
|
+
: undefined;
|
|
196
|
+
reads.push(name !== undefined && is(i + 7, "punct", ")")
|
|
197
|
+
? { expression: `Deno.env.${method}(${JSON.stringify(name)})`, name, importMeta: false }
|
|
198
|
+
: {
|
|
199
|
+
expression: method === undefined ? "Deno.env" : `Deno.env.${method}()`,
|
|
200
|
+
importMeta: false,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
return reads;
|
|
205
|
+
}
|
|
206
|
+
// A closing tag ends at any space, slash or `>` after its name, as a browser and the compilers read it.
|
|
207
|
+
const SCRIPT_ELEMENT = /<script\b[^>]*>([\s\S]*?)<\/script(?=[\s/>])[^>]*>/gi;
|
|
208
|
+
const STYLE_ELEMENT = /<style\b[^>]*>[\s\S]*?<\/style(?=[\s/>])[^>]*>/gi;
|
|
209
|
+
/** The code of a Svelte or Vue file: its scripts as modules, its markup expressions one by one. */
|
|
210
|
+
function sfcCode(source, vue) {
|
|
211
|
+
const scripts = [];
|
|
212
|
+
const withoutScripts = withoutMatches(source, SCRIPT_ELEMENT, (match) => {
|
|
213
|
+
scripts.push(match[1] ?? "");
|
|
214
|
+
});
|
|
215
|
+
const markup = withoutComments(withoutMatches(withoutScripts, STYLE_ELEMENT));
|
|
216
|
+
const expressions = [];
|
|
217
|
+
if (vue) {
|
|
218
|
+
expressions.push(...delimitedSpans(markup, "{{", "}}"));
|
|
219
|
+
for (const match of markup.matchAll(/\s(?::|@|v-|#)[\w:.[\]-]*\s*=\s*("([^"]*)"|'([^']*)')/g))
|
|
220
|
+
expressions.push(match[2] ?? match[3] ?? "");
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
expressions.push(...braceExpressions(markup));
|
|
224
|
+
}
|
|
225
|
+
return { scripts, expressions };
|
|
226
|
+
}
|
|
227
|
+
/** Every top-level `{...}` region of markup, braces balanced. */
|
|
228
|
+
function braceExpressions(markup) {
|
|
229
|
+
const out = [];
|
|
230
|
+
let depth = 0;
|
|
231
|
+
let start = -1;
|
|
232
|
+
for (let i = 0; i < markup.length; i++) {
|
|
233
|
+
if (markup[i] === "{") {
|
|
234
|
+
if (depth++ === 0)
|
|
235
|
+
start = i + 1;
|
|
236
|
+
}
|
|
237
|
+
else if (markup[i] === "}" && depth > 0 && --depth === 0) {
|
|
238
|
+
out.push(markup.slice(start, i));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return out;
|
|
242
|
+
}
|
|
243
|
+
/** The code of an MDX file: its import/export lines and `{...}` expressions, never its prose or code. */
|
|
244
|
+
function mdxCode(source) {
|
|
245
|
+
const text = source
|
|
246
|
+
.replace(/^(```|~~~)[^\n]*\n[\s\S]*?^\1[^\n]*$/gm, "")
|
|
247
|
+
.replace(/`[^`\n]*`/g, "");
|
|
248
|
+
const esm = text.split("\n").filter((line) => /^(?:import|export)\b/.test(line));
|
|
249
|
+
return [...esm, ...braceExpressions(text)];
|
|
250
|
+
}
|
|
251
|
+
const SCRIPT = /\.(?:[cm]?[jt]sx?)$/;
|
|
252
|
+
function transpile(code, loader) {
|
|
253
|
+
if (typeof Bun === "undefined")
|
|
254
|
+
return code;
|
|
255
|
+
try {
|
|
256
|
+
return new Bun.Transpiler({ loader }).transformSync(code);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
// Code the transpiler cannot parse fails the real build anyway; scan it as written.
|
|
260
|
+
return code;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const loaderFor = (file) => /\.[cm]?tsx$/.test(file)
|
|
264
|
+
? "tsx"
|
|
265
|
+
: /\.[cm]?ts$/.test(file)
|
|
266
|
+
? "ts"
|
|
267
|
+
: /\.jsx$/.test(file)
|
|
268
|
+
? "jsx"
|
|
269
|
+
: "js";
|
|
270
|
+
/**
|
|
271
|
+
* The private environment reads in one browser-reachable file, as written (`process.env.SECRET`).
|
|
272
|
+
* `publicPrefix` is the app's public-env prefix; `""` makes every variable but `NODE_ENV` private.
|
|
273
|
+
*/
|
|
274
|
+
export function privateEnvReads(file, source, publicPrefix) {
|
|
275
|
+
if (!/\benv\b/.test(source))
|
|
276
|
+
return [];
|
|
277
|
+
const chunks = [];
|
|
278
|
+
if (SCRIPT.test(file))
|
|
279
|
+
chunks.push(transpile(source, loaderFor(file)));
|
|
280
|
+
else if (/\.(?:svelte|vue)$/.test(file)) {
|
|
281
|
+
const { scripts, expressions } = sfcCode(source, file.endsWith(".vue"));
|
|
282
|
+
chunks.push(...scripts.map((script) => transpile(script, "ts")), ...expressions);
|
|
283
|
+
}
|
|
284
|
+
else if (/\.mdx?$/.test(file))
|
|
285
|
+
chunks.push(...mdxCode(source));
|
|
286
|
+
else
|
|
287
|
+
return [];
|
|
288
|
+
const allowed = (read) => {
|
|
289
|
+
if (read.name === undefined)
|
|
290
|
+
return false;
|
|
291
|
+
if (read.name === "NODE_ENV")
|
|
292
|
+
return true;
|
|
293
|
+
if (read.importMeta && IMPORT_META_FLAGS.has(read.name))
|
|
294
|
+
return true;
|
|
295
|
+
return publicPrefix !== "" && read.name.startsWith(publicPrefix);
|
|
296
|
+
};
|
|
297
|
+
const found = new Set();
|
|
298
|
+
for (const chunk of chunks) {
|
|
299
|
+
if (!/\benv\b/.test(chunk))
|
|
300
|
+
continue;
|
|
301
|
+
for (const read of envReads(tokenize(chunk)))
|
|
302
|
+
if (!allowed(read))
|
|
303
|
+
found.add(read.expression);
|
|
304
|
+
}
|
|
305
|
+
return [...found].sort();
|
|
306
|
+
}
|
|
307
|
+
/** The denial reason for a file's private environment reads. */
|
|
308
|
+
export function privateEnvReason(reads, publicPrefix) {
|
|
309
|
+
const allowed = publicPrefix === "" ? "NODE_ENV" : `NODE_ENV and variables named ${publicPrefix}*`;
|
|
310
|
+
return (`it reads private environment ${reads.length === 1 ? "variable" : "variables"} ${reads.join(", ")}. ` +
|
|
311
|
+
`Browser code may read only ${allowed}; read the rest in a loader, an action or under backend/`);
|
|
312
|
+
}
|
|
313
|
+
/** The denial reason for one file's source, or `undefined` when it reads no private variable. */
|
|
314
|
+
export function privateEnvDenial(file, source, publicPrefix) {
|
|
315
|
+
const reads = privateEnvReads(file, source, publicPrefix);
|
|
316
|
+
return reads.length === 0 ? undefined : privateEnvReason(reads, publicPrefix);
|
|
317
|
+
}
|
|
318
|
+
/** A per-file check for a finished build, reading each file once. */
|
|
319
|
+
export function privateEnvCheck(publicPrefix) {
|
|
320
|
+
const seen = new Map();
|
|
321
|
+
return (file) => {
|
|
322
|
+
if (!seen.has(file)) {
|
|
323
|
+
let source;
|
|
324
|
+
try {
|
|
325
|
+
source = readFileSync(file, "utf8");
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
source = undefined;
|
|
329
|
+
}
|
|
330
|
+
seen.set(file, source === undefined ? undefined : privateEnvDenial(file, source, publicPrefix));
|
|
331
|
+
}
|
|
332
|
+
return seen.get(file);
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=private-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"private-env.js","sourceRoot":"","sources":["../../src/internal/private-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-url.d.ts","sourceRoot":"","sources":["../../src/internal/public-url.ts"],"names":[],"mappings":"AAkBA,sGAAsG;AACtG,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { sep } from "node:path";
|
|
2
|
+
/**
|
|
3
|
+
* Percent-encode one path segment exactly the way a browser encodes it into a request URL.
|
|
4
|
+
*
|
|
5
|
+
* NOT `encodeURIComponent`. That escapes the sub-delimiters `, @ + = & ; $`, which a browser sends raw -
|
|
6
|
+
* so a file named `report,2026.csv` would be recorded as `/report%2C2026.csv` while the request arrives
|
|
7
|
+
* as `/report,2026.csv`, the allowlist lookup misses, and the file 404s in production only. `encodeURI`
|
|
8
|
+
* agrees with `URL.pathname` on every character except `?` and `#`, which terminate a path and so must
|
|
9
|
+
* be escaped explicitly here.
|
|
10
|
+
*/
|
|
11
|
+
function encodePathSegment(segment) {
|
|
12
|
+
return encodeURI(segment).replace(/[?#]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`);
|
|
13
|
+
}
|
|
14
|
+
/** The URL path a browser requests for a file at `rel` (OS separators) under the public directory. */
|
|
15
|
+
export function publicUrlPath(rel) {
|
|
16
|
+
return `/${rel.split(sep).map(encodePathSegment).join("/")}`;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=public-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-url.js","sourceRoot":"","sources":["../../src/internal/public-url.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAE/B;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAAC,OAAe;IACxC,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAC/B,OAAO,EACP,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAC9D,CAAA;AACH,CAAC;AAED,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;AAC9D,CAAC"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { type ResponseResult } from "@nifrajs/core/server";
|
|
2
2
|
import type { BoundaryRegistration, BoundaryStates } from "../boundary.js";
|
|
3
|
+
import { type CspPolicy } from "../csp.js";
|
|
4
|
+
import { type CssLoadingMode } from "../css-contract.js";
|
|
3
5
|
import type { Loader as LayoutLoader, LinkDescriptor, Meta, MetaDescriptor, MetaInput, RouteModule, ScriptDescriptor, UnsafeScriptDescriptor } from "../manifest.js";
|
|
4
|
-
import type { RenderAdapter } from "../render-seam.js";
|
|
6
|
+
import type { MatchChain, RenderAdapter } from "../render-seam.js";
|
|
5
7
|
type MaybePromise<T> = T | Promise<T>;
|
|
6
8
|
declare const RESPONSE_RESULT: unique symbol;
|
|
9
|
+
/**
|
|
10
|
+
* A control-flow value that renders as plain data - what `redirect()` returns, and what core's
|
|
11
|
+
* `status(...)` returns. Recognized here rather than imported: core keeps its own predicate internal,
|
|
12
|
+
* and the registry symbol is the contract between them (two copies of core must still agree).
|
|
13
|
+
*/
|
|
14
|
+
export declare const isResponseResult: (value: unknown) => value is ResponseResult;
|
|
7
15
|
/** A returned/thrown value that ends the request as-is: either shape of control-flow signal. */
|
|
8
16
|
export declare const isControlFlow: (value: unknown) => value is Response | ResponseResult;
|
|
9
17
|
export interface RenderedPage {
|
|
@@ -40,9 +48,19 @@ export interface RenderPageOptions {
|
|
|
40
48
|
* `BuildManifest.css`) - injected as `<link rel="stylesheet">` in `<head>` so styles arrive with the
|
|
41
49
|
* first paint (no FOUC). Rendered even on non-hydrated pages. Empty/omitted ⇒ none (unchanged). */
|
|
42
50
|
readonly styles?: readonly string[];
|
|
51
|
+
/**
|
|
52
|
+
* Activation policy for these framework-owned stylesheet links (default `"blocking"`). In
|
|
53
|
+
* `"deferred"` mode, hydrating pages fetch with `media="print"` and the generated client promotes
|
|
54
|
+
* them to `media="all"` after load/error/timeout. Non-hydrated pages remain blocking so JS-off pages
|
|
55
|
+
* and terminal documents are styled.
|
|
56
|
+
*/
|
|
57
|
+
readonly cssLoading?: CssLoadingMode;
|
|
43
58
|
/** SSG: the prerendered-path set, serialized to `window.__NIFRA_PRERENDERED__` so the client fetches
|
|
44
59
|
* a static `_data.json` on soft-nav into a prerendered route. Empty/omitted ⇒ not injected. */
|
|
45
60
|
readonly prerenderedPaths?: readonly string[];
|
|
61
|
+
/** SSG: the URL of a JSON array of the prerendered paths, handed over in place of
|
|
62
|
+
* {@link prerenderedPaths} so a large set is fetched once instead of riding in every page. */
|
|
63
|
+
readonly prerenderedListUrl?: string;
|
|
46
64
|
/** ISR: route freshness in seconds, emitted as the `x-nifra-isr-revalidate` header for a `withISR`
|
|
47
65
|
* wrapper to read. Omit ⇒ no header (the wrapper's default TTL applies). */
|
|
48
66
|
readonly revalidate?: number;
|
|
@@ -67,6 +85,8 @@ export interface RenderPageOptions {
|
|
|
67
85
|
readonly layoutData?: readonly unknown[];
|
|
68
86
|
/** Dynamic-boundary states, forwarded to the adapter and serialized for hydration when present. */
|
|
69
87
|
readonly boundaries?: BoundaryStates;
|
|
88
|
+
/** The chain's ids and `handle` exports, forwarded as `RenderProps.matchChain` for `useMatches`. */
|
|
89
|
+
readonly matchChain?: MatchChain;
|
|
70
90
|
/** HTTP status for the response (default 200; e.g. 404 for a not-found page). */
|
|
71
91
|
readonly status?: number;
|
|
72
92
|
/** Extra response headers - e.g. the `cache-control` a terminal status page wants. `content-type`
|
|
@@ -100,15 +120,23 @@ export interface RenderPageOptions {
|
|
|
100
120
|
* tail - emitted **regardless of `hydrate`**, so a static (`hydrate: false`) page can still mount
|
|
101
121
|
* no-framework islands. URLs are attribute-escaped. Empty/omitted ⇒ none (unchanged output). */
|
|
102
122
|
readonly islandScripts?: readonly string[];
|
|
103
|
-
/** CSP nonce applied to every framework-owned executable script in this document.
|
|
123
|
+
/** CSP nonce applied to every framework-owned executable script in this document. Nonce-bearing
|
|
124
|
+
* documents are marked `private, no-store` so a request-specific nonce is never replayed. */
|
|
104
125
|
readonly nonce?: string;
|
|
126
|
+
/**
|
|
127
|
+
* A hash-based Content-Security-Policy from `createCspPolicy`. The document then carries `nonce`
|
|
128
|
+
* only when it needs one (it defers a value, or a head tag names the nonce); otherwise it renders
|
|
129
|
+
* nonce-free and cacheable. The policy's header is set on the response either way.
|
|
130
|
+
*/
|
|
131
|
+
readonly csp?: CspPolicy;
|
|
105
132
|
/**
|
|
106
133
|
* Advanced: a per-route slot the renderer fills with the request-invariant document pieces (shell
|
|
107
134
|
* prefix/suffix, tail statics) on the first render and reuses afterwards, skipping their re-assembly.
|
|
108
135
|
*
|
|
109
136
|
* Only pass a cache when every shell-shaping input is IDENTICAL across the requests sharing it:
|
|
110
137
|
* same `head` content (a static meta chain - never a `meta(data)` function), `title`, `styles`,
|
|
111
|
-
* `preload`, `islandScripts`, `clientEntry`, `rootId`, `hydrate`, and `prerenderedPaths`.
|
|
138
|
+
* `cssLoading`, `preload`, `islandScripts`, `clientEntry`, `rootId`, `hydrate`, and `prerenderedPaths`.
|
|
139
|
+
* Per-request
|
|
112
140
|
* values (`data`, `params`, `search`, `actionData`, `layoutData`, deferred state) are always assembled
|
|
113
141
|
* fresh and safe. A per-request `nonce` disables the cache automatically. `createWebApp` wires this
|
|
114
142
|
* per route, gated on the route + layout metas being static.
|
|
@@ -121,13 +149,10 @@ export interface RenderAssemblyCache {
|
|
|
121
149
|
shellPre?: string;
|
|
122
150
|
/** Shell from after the deferred-runtime insertion point through the open `#root` container. */
|
|
123
151
|
shellPost?: string;
|
|
124
|
-
/** Tail opener: the
|
|
152
|
+
/** Tail opener: the handover script open tag + the data member's key. */
|
|
125
153
|
tailPre?: string;
|
|
126
|
-
/** Tail
|
|
127
|
-
|
|
128
|
-
/** Tail data prefix: the `window.<data global>=` assignment head. */
|
|
129
|
-
tailData?: string;
|
|
130
|
-
/** Tail from after the serialized data through `</html>`. */
|
|
154
|
+
/** Tail from after the per-request handover members (the route id, prerendered paths, the handover
|
|
155
|
+
* close) through `</html>`. */
|
|
131
156
|
tailPost?: string;
|
|
132
157
|
}
|
|
133
158
|
/**
|
|
@@ -160,7 +185,7 @@ export interface RedirectOptions {
|
|
|
160
185
|
* attacker-controlled input straight through. Set `true` for a deliberate external redirect. */
|
|
161
186
|
readonly external?: boolean;
|
|
162
187
|
/** Extra response headers. A redirect is no longer a `Response`, so there is no `.headers` to
|
|
163
|
-
* mutate after the fact - name them here. Cookies
|
|
188
|
+
* mutate after the fact - name them here. Cookies queued with `ctx.set.cookie()` still ride it. */
|
|
164
189
|
readonly headers?: Readonly<Record<string, string>>;
|
|
165
190
|
}
|
|
166
191
|
/** A same-origin destination is an absolute path: one leading `/`, but NOT `//` (protocol-relative →
|
|
@@ -213,17 +238,6 @@ export type HeadersLike = ConstructorParameters<typeof Headers>[0];
|
|
|
213
238
|
* signature does not match, so an ordinary render error reads exactly as before.
|
|
214
239
|
*/
|
|
215
240
|
export declare function withDuplicateInstanceHint(err: unknown): unknown;
|
|
216
|
-
/**
|
|
217
|
-
* An action's control-flow value passes straight through - except a redirect on a client-submit data
|
|
218
|
-
* request: fetch would follow the 3xx into HTML the client can't use, so the redirect rides the
|
|
219
|
-
* X-Nifra-Redirect header on a 204 and the client navigates. One conversion shared by the returned-
|
|
220
|
-
* and thrown- paths, so `return redirect()` and `throw redirect()` agree.
|
|
221
|
-
*
|
|
222
|
-
* Takes either shape: `redirect()` is a plain render, while a hand-rolled `new Response(...)` from an
|
|
223
|
-
* action still arrives as a `Response`. The rewrite stays on the lane its input was on - a plain
|
|
224
|
-
* redirect converts to a plain 204, and never materializes the `Response` it is replacing.
|
|
225
|
-
*/
|
|
226
|
-
export declare function actionResponse(result: Response | ResponseResult, isDataRequest: boolean): Response | ResponseResult;
|
|
227
241
|
/** A loaded layout module. `loader`/`gate` are the layout-loader surface; `meta` predates it. */
|
|
228
242
|
export type LoadedLayoutModules = ReadonlyArray<{
|
|
229
243
|
default: unknown;
|
|
@@ -231,6 +245,8 @@ export type LoadedLayoutModules = ReadonlyArray<{
|
|
|
231
245
|
loader?: LayoutLoader;
|
|
232
246
|
action?: unknown;
|
|
233
247
|
gate?: boolean;
|
|
248
|
+
shouldRevalidate?: unknown;
|
|
249
|
+
handle?: unknown;
|
|
234
250
|
searchSchema?: RouteModule["searchSchema"];
|
|
235
251
|
boundaries?: readonly BoundaryRegistration[];
|
|
236
252
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-document.d.ts","sourceRoot":"","sources":["../../src/internal/render-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAA0B,MAAM,sBAAsB,CAAA;AACpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"render-document.d.ts","sourceRoot":"","sources":["../../src/internal/render-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,cAAc,EAA0B,MAAM,sBAAsB,CAAA;AACpG,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,EAAE,KAAK,SAAS,EAAsD,MAAM,WAAW,CAAA;AAC9F,OAAO,EAAE,KAAK,cAAc,EAA4C,MAAM,oBAAoB,CAAA;AAGlG,OAAO,KAAK,EACV,MAAM,IAAI,YAAY,EACtB,cAAc,EACd,IAAI,EACJ,cAAc,EACd,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAe,MAAM,mBAAmB,CAAA;AAkB/E,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAgBrC,QAAA,MAAM,eAAe,eAAsC,CAAA;AAE3D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,cAIoB,CAAA;AAE/E,gGAAgG;AAChG,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,QAAQ,GAAG,cACb,CAAA;AAEtD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;IAChC,UAAU,IAAI,QAAQ,CAAA;IACtB,UAAU,CAAC,IAAI;QACb,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAA;QAClF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAA;KACnC,CAAA;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,6FAA6F;IAC7F,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;IAClC,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB;sEACkE;IAClE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B;;mGAE+F;IAC/F,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACpC;;uGAEmG;IACnG,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;IACpC;mGAC+F;IAC/F,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C;kGAC8F;IAC9F,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IACpC;gFAC4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C,+FAA+F;IAC/F,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB;;4BAEwB;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD;;eAEW;IACX,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;oFAEgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC;kFAC8E;IAC9E,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IACxC,mGAAmG;IACnG,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;IACpC,oGAAoG;IACpG,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;iDAE6C;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;;;;;mGAU+F;IAC/F,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB;;4EAEwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;;8EAG0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B;;oGAEgG;IAChG,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC1C;iGAC6F;IAC7F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAA;IACxB;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAA;CAC7C;AAED,yGAAyG;AACzG,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,gGAAgG;IAChG,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;mCAC+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAC7C,CAAC;IAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE3F;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC,CAG3E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,GAAG,YAAY,CAAC,YAAY,CAAC,CAoSrF;AA4ID,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB;;oGAEgG;IAChG,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B;uGACmG;IACnG,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACpD;AAED;;;;yBAIyB;AAEzB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,cAAc,CAkBxF;AAED;;;;;;;;;;;;GAYG;AACH;;sFAEsF;AACtF,MAAM,MAAM,WAAW,GAAG,qBAAqB,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAkBlE;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAY/D;AAED,iGAAiG;AACjG,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAE1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAGhB,YAAY,CAAC,EAAE,WAAW,CAAC,cAAc,CAAC,CAAA;IAC1C,UAAU,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAA;CAC7C,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACnC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxB;AAID,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAA;AAYlE,eAAO,MAAM,cAAc,GAAI,KAAK,OAAO,EAAE,UAAU,MAAM,KAAG,OAK/D,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,KAAK,OAAO,KAAG,MAAM,GAAG,SAGvC,CAAA;AAEf,eAAO,MAAM,aAAa,eAAwC,CAAA;AAElE;;yFAEyF;AACzF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASxD,CAAA;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,QAAQ,CAAC,CAAC,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE,CAAA;CACtF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE;AAiBD,gFAAgF;AAChF,MAAM,WAAW,iBAAiB;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAA;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,OAAO,GAAE,iBAAsB,GAAG,KAAK,CAE/D;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,KAAK,CAE3D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,KAAK,CAEjF;AAED;;;oDAGoD;AACpD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAEpF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAiBnD;AA2ID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAEtD;AAED;uDACuD;AACvD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,EAAE,CAYjE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAEtE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,iBAAiB,CAAA;CAAE,GAChF,sBAAsB,CAgBxB"}
|