@nifrajs/web 3.3.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/backend-only.d.ts +15 -0
- package/dist/backend-only.d.ts.map +1 -0
- package/dist/backend-only.js +16 -0
- package/dist/backend-only.js.map +1 -0
- package/dist/boundary.d.ts +5 -0
- package/dist/boundary.d.ts.map +1 -1
- package/dist/boundary.js +11 -2
- package/dist/boundary.js.map +1 -1
- package/dist/build-plan.d.ts +35 -6
- package/dist/build-plan.d.ts.map +1 -1
- package/dist/build-plan.js +89 -35
- package/dist/build-plan.js.map +1 -1
- package/dist/build-vite.d.ts +18 -0
- package/dist/build-vite.d.ts.map +1 -1
- package/dist/build-vite.js +97 -17
- package/dist/build-vite.js.map +1 -1
- package/dist/build.d.ts +72 -23
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +411 -98
- package/dist/build.js.map +1 -1
- package/dist/bun-dev-entry.d.ts +1 -1
- package/dist/bun-dev-entry.js +1 -1
- package/dist/cdn.d.ts +74 -0
- package/dist/cdn.d.ts.map +1 -0
- package/dist/cdn.js +132 -0
- package/dist/cdn.js.map +1 -0
- package/dist/client.d.ts +21 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +226 -15
- package/dist/client.js.map +1 -1
- package/dist/conformance.d.ts +4 -3
- package/dist/conformance.d.ts.map +1 -1
- package/dist/conformance.js +12 -3
- package/dist/conformance.js.map +1 -1
- package/dist/csp.d.ts +93 -0
- package/dist/csp.d.ts.map +1 -0
- package/dist/csp.js +122 -0
- package/dist/csp.js.map +1 -0
- package/dist/css-contract.d.ts +21 -0
- package/dist/css-contract.d.ts.map +1 -0
- package/dist/css-contract.js +28 -0
- package/dist/css-contract.js.map +1 -0
- package/dist/dev-client.d.ts +76 -0
- package/dist/dev-client.d.ts.map +1 -0
- package/dist/dev-client.js +280 -0
- package/dist/dev-client.js.map +1 -0
- package/dist/dev-diagnostics.d.ts +26 -2
- package/dist/dev-diagnostics.d.ts.map +1 -1
- package/dist/dev-diagnostics.js +38 -7
- package/dist/dev-diagnostics.js.map +1 -1
- package/dist/dev-error.d.ts +4 -13
- package/dist/dev-error.d.ts.map +1 -1
- package/dist/dev-error.js +46 -4
- package/dist/dev-error.js.map +1 -1
- package/dist/dev-feed.d.ts +298 -0
- package/dist/dev-feed.d.ts.map +1 -0
- package/dist/dev-feed.js +797 -0
- package/dist/dev-feed.js.map +1 -0
- package/dist/dev-indicator.d.ts +38 -0
- package/dist/dev-indicator.d.ts.map +1 -0
- package/dist/dev-indicator.js +93 -0
- package/dist/dev-indicator.js.map +1 -0
- package/dist/dev-session.d.ts +77 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +580 -0
- package/dist/dev-session.js.map +1 -0
- package/dist/dev-sourcemap.d.ts +27 -0
- package/dist/dev-sourcemap.d.ts.map +1 -0
- package/dist/dev-sourcemap.js +235 -0
- package/dist/dev-sourcemap.js.map +1 -0
- package/dist/dev-ssr-graph.d.ts.map +1 -1
- package/dist/dev-ssr-graph.js +13 -5
- package/dist/dev-ssr-graph.js.map +1 -1
- package/dist/dev.d.ts +15 -2
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +69 -44
- package/dist/dev.js.map +1 -1
- package/dist/diagnostic-catalog.d.ts +35 -0
- package/dist/diagnostic-catalog.d.ts.map +1 -0
- package/dist/diagnostic-catalog.js +203 -0
- package/dist/diagnostic-catalog.js.map +1 -0
- package/dist/diagnostic-prompt.d.ts +49 -0
- package/dist/diagnostic-prompt.d.ts.map +1 -0
- package/dist/diagnostic-prompt.js +303 -0
- package/dist/diagnostic-prompt.js.map +1 -0
- package/dist/diagnostic.d.ts +17 -23
- package/dist/diagnostic.d.ts.map +1 -1
- package/dist/diagnostic.js +31 -39
- package/dist/diagnostic.js.map +1 -1
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +4 -1
- package/dist/draft.js.map +1 -1
- package/dist/fn.d.ts +5 -0
- package/dist/fn.d.ts.map +1 -1
- package/dist/fn.js +13 -3
- package/dist/fn.js.map +1 -1
- package/dist/fs.d.ts.map +1 -1
- package/dist/fs.js +4 -2
- package/dist/fs.js.map +1 -1
- package/dist/index.d.ts +15 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -12
- package/dist/index.js.map +1 -1
- package/dist/internal/cdn/cloudflare.d.ts +48 -0
- package/dist/internal/cdn/cloudflare.d.ts.map +1 -0
- package/dist/internal/cdn/cloudflare.js +94 -0
- package/dist/internal/cdn/cloudflare.js.map +1 -0
- package/dist/internal/cdn/core.d.ts +91 -0
- package/dist/internal/cdn/core.d.ts.map +1 -0
- package/dist/internal/cdn/core.js +220 -0
- package/dist/internal/cdn/core.js.map +1 -0
- package/dist/internal/cdn/fastly.d.ts +17 -0
- package/dist/internal/cdn/fastly.d.ts.map +1 -0
- package/dist/internal/cdn/fastly.js +43 -0
- package/dist/internal/cdn/fastly.js.map +1 -0
- package/dist/internal/cdn/vercel.d.ts +31 -0
- package/dist/internal/cdn/vercel.d.ts.map +1 -0
- package/dist/internal/cdn/vercel.js +56 -0
- package/dist/internal/cdn/vercel.js.map +1 -0
- package/dist/internal/code-unit-order.d.ts +4 -0
- package/dist/internal/code-unit-order.d.ts.map +1 -0
- package/dist/internal/code-unit-order.js +6 -0
- package/dist/internal/code-unit-order.js.map +1 -0
- package/dist/internal/codegen.d.ts +3 -0
- package/dist/internal/codegen.d.ts.map +1 -1
- package/dist/internal/codegen.js +151 -30
- package/dist/internal/codegen.js.map +1 -1
- package/dist/internal/dev-csp.d.ts +24 -0
- package/dist/internal/dev-csp.d.ts.map +1 -0
- package/dist/internal/dev-csp.js +160 -0
- package/dist/internal/dev-csp.js.map +1 -0
- package/dist/internal/dev-reserved.d.ts +25 -0
- package/dist/internal/dev-reserved.d.ts.map +1 -0
- package/dist/internal/dev-reserved.js +39 -0
- package/dist/internal/dev-reserved.js.map +1 -0
- package/dist/internal/html-spans.d.ts +10 -0
- package/dist/internal/html-spans.d.ts.map +1 -0
- package/dist/internal/html-spans.js +46 -0
- package/dist/internal/html-spans.js.map +1 -0
- package/dist/internal/loading-runtime.d.ts +44 -0
- package/dist/internal/loading-runtime.d.ts.map +1 -0
- package/dist/internal/loading-runtime.js +206 -0
- package/dist/internal/loading-runtime.js.map +1 -0
- package/dist/internal/matches-runtime.d.ts +8 -0
- package/dist/internal/matches-runtime.d.ts.map +1 -0
- package/dist/internal/matches-runtime.js +61 -0
- package/dist/internal/matches-runtime.js.map +1 -0
- package/dist/internal/mount-shadow.d.ts +36 -0
- package/dist/internal/mount-shadow.d.ts.map +1 -0
- package/dist/internal/mount-shadow.js +65 -0
- package/dist/internal/mount-shadow.js.map +1 -0
- package/dist/internal/node-builtins.d.ts +3 -0
- package/dist/internal/node-builtins.d.ts.map +1 -0
- package/dist/internal/node-builtins.js +79 -0
- package/dist/internal/node-builtins.js.map +1 -0
- package/dist/internal/output-guard.d.ts +65 -0
- package/dist/internal/output-guard.d.ts.map +1 -0
- package/dist/internal/output-guard.js +630 -0
- package/dist/internal/output-guard.js.map +1 -0
- package/dist/internal/page-execution.d.ts +69 -0
- package/dist/internal/page-execution.d.ts.map +1 -0
- package/dist/internal/page-execution.js +1021 -0
- package/dist/internal/page-execution.js.map +1 -0
- package/dist/internal/parity.d.ts +21 -0
- package/dist/internal/parity.d.ts.map +1 -1
- package/dist/internal/parity.js +104 -22
- package/dist/internal/parity.js.map +1 -1
- package/dist/internal/private-env.d.ts +12 -0
- package/dist/internal/private-env.d.ts.map +1 -0
- package/dist/internal/private-env.js +335 -0
- package/dist/internal/private-env.js.map +1 -0
- package/dist/internal/public-url.d.ts +3 -0
- package/dist/internal/public-url.d.ts.map +1 -0
- package/dist/internal/public-url.js +18 -0
- package/dist/internal/public-url.js.map +1 -0
- package/dist/internal/render-document.d.ts +37 -21
- package/dist/internal/render-document.d.ts.map +1 -1
- package/dist/internal/render-document.js +104 -65
- package/dist/internal/render-document.js.map +1 -1
- package/dist/internal/request-url.d.ts +3 -0
- package/dist/internal/request-url.d.ts.map +1 -0
- package/dist/internal/request-url.js +14 -0
- package/dist/internal/request-url.js.map +1 -0
- package/dist/internal/response-controls.d.ts +75 -0
- package/dist/internal/response-controls.d.ts.map +1 -0
- package/dist/internal/response-controls.js +256 -0
- package/dist/internal/response-controls.js.map +1 -0
- package/dist/internal/runtime-contract.d.ts +11 -16
- package/dist/internal/runtime-contract.d.ts.map +1 -1
- package/dist/internal/runtime-contract.js.map +1 -1
- package/dist/internal/secret-scan.d.ts +104 -0
- package/dist/internal/secret-scan.d.ts.map +1 -0
- package/dist/internal/secret-scan.js +485 -0
- package/dist/internal/secret-scan.js.map +1 -0
- package/dist/internal/server-boundary.d.ts +6 -29
- package/dist/internal/server-boundary.d.ts.map +1 -1
- package/dist/internal/server-boundary.js +6 -66
- package/dist/internal/server-boundary.js.map +1 -1
- package/dist/internal/source-map.d.ts +47 -0
- package/dist/internal/source-map.d.ts.map +1 -0
- package/dist/internal/source-map.js +225 -0
- package/dist/internal/source-map.js.map +1 -0
- package/dist/internal/target-compat.d.ts +27 -0
- package/dist/internal/target-compat.d.ts.map +1 -0
- package/dist/internal/target-compat.js +77 -0
- package/dist/internal/target-compat.js.map +1 -0
- package/dist/internal/timing-safe-equal.d.ts +6 -0
- package/dist/internal/timing-safe-equal.d.ts.map +1 -1
- package/dist/internal/timing-safe-equal.js +10 -0
- package/dist/internal/timing-safe-equal.js.map +1 -1
- package/dist/internal/vitals-runtime.d.ts +18 -0
- package/dist/internal/vitals-runtime.d.ts.map +1 -0
- package/dist/internal/vitals-runtime.js +38 -0
- package/dist/internal/vitals-runtime.js.map +1 -0
- package/dist/internal/web-app.d.ts +56 -8
- package/dist/internal/web-app.d.ts.map +1 -1
- package/dist/internal/web-app.js +215 -772
- package/dist/internal/web-app.js.map +1 -1
- package/dist/internal/zone-graph.d.ts +89 -0
- package/dist/internal/zone-graph.d.ts.map +1 -0
- package/dist/internal/zone-graph.js +492 -0
- package/dist/internal/zone-graph.js.map +1 -0
- package/dist/isr.d.ts +83 -6
- package/dist/isr.d.ts.map +1 -1
- package/dist/isr.js +301 -39
- package/dist/isr.js.map +1 -1
- package/dist/llms-txt.d.ts +3 -0
- package/dist/llms-txt.d.ts.map +1 -1
- package/dist/llms-txt.js +37 -9
- package/dist/llms-txt.js.map +1 -1
- package/dist/manifest.d.ts +221 -14
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +386 -9
- package/dist/manifest.js.map +1 -1
- package/dist/module-graph.d.ts +26 -5
- package/dist/module-graph.d.ts.map +1 -1
- package/dist/module-graph.js +17 -7
- package/dist/module-graph.js.map +1 -1
- package/dist/navigation.d.ts +17 -3
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +11 -5
- package/dist/navigation.js.map +1 -1
- package/dist/nonce.d.ts +47 -0
- package/dist/nonce.d.ts.map +1 -0
- package/dist/nonce.js +63 -0
- package/dist/nonce.js.map +1 -0
- package/dist/plugins/css-modules.d.ts.map +1 -1
- package/dist/plugins/css-modules.js +4 -3
- package/dist/plugins/css-modules.js.map +1 -1
- package/dist/plugins/kit.d.ts +9 -0
- package/dist/plugins/kit.d.ts.map +1 -1
- package/dist/plugins/kit.js +18 -0
- package/dist/plugins/kit.js.map +1 -1
- package/dist/plugins/svg.d.ts +22 -3
- package/dist/plugins/svg.d.ts.map +1 -1
- package/dist/plugins/svg.js +112 -1
- package/dist/plugins/svg.js.map +1 -1
- package/dist/plugins/vite-leak-guard.d.ts +107 -3
- package/dist/plugins/vite-leak-guard.d.ts.map +1 -1
- package/dist/plugins/vite-leak-guard.js +378 -17
- package/dist/plugins/vite-leak-guard.js.map +1 -1
- package/dist/plugins/vite-zone-guard.d.ts +61 -0
- package/dist/plugins/vite-zone-guard.d.ts.map +1 -0
- package/dist/plugins/vite-zone-guard.js +208 -0
- package/dist/plugins/vite-zone-guard.js.map +1 -0
- package/dist/plugins/zone-guard.d.ts +27 -0
- package/dist/plugins/zone-guard.d.ts.map +1 -0
- package/dist/plugins/zone-guard.js +72 -0
- package/dist/plugins/zone-guard.js.map +1 -0
- package/dist/prerender.d.ts +10 -0
- package/dist/prerender.d.ts.map +1 -1
- package/dist/prerender.js +35 -3
- package/dist/prerender.js.map +1 -1
- package/dist/public-dir.d.ts +9 -0
- package/dist/public-dir.d.ts.map +1 -1
- package/dist/public-dir.js +131 -48
- package/dist/public-dir.js.map +1 -1
- package/dist/pwa-manifest.d.ts +68 -0
- package/dist/pwa-manifest.d.ts.map +1 -0
- package/dist/pwa-manifest.js +178 -0
- package/dist/pwa-manifest.js.map +1 -0
- package/dist/query.js +4 -4
- package/dist/query.js.map +1 -1
- package/dist/render-seam.d.ts +42 -2
- package/dist/render-seam.d.ts.map +1 -1
- package/dist/render-seam.js +6 -0
- package/dist/render-seam.js.map +1 -1
- package/dist/route-manifest.d.ts +3 -0
- package/dist/route-manifest.d.ts.map +1 -1
- package/dist/route-manifest.js +26 -3
- package/dist/route-manifest.js.map +1 -1
- package/dist/route-types.d.ts +24 -0
- package/dist/route-types.d.ts.map +1 -0
- package/dist/route-types.js +195 -0
- package/dist/route-types.js.map +1 -0
- package/dist/router.d.ts +28 -6
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +129 -40
- package/dist/router.js.map +1 -1
- package/dist/trusted-html.d.ts +34 -0
- package/dist/trusted-html.d.ts.map +1 -0
- package/dist/trusted-html.js +35 -0
- package/dist/trusted-html.js.map +1 -0
- package/dist/vitals.d.ts +33 -0
- package/dist/vitals.d.ts.map +1 -0
- package/dist/vitals.js +16 -0
- package/dist/vitals.js.map +1 -0
- package/dist/vite.d.ts +16 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +187 -36
- package/dist/vite.js.map +1 -1
- package/dist/zones.d.ts +70 -0
- package/dist/zones.d.ts.map +1 -0
- package/dist/zones.js +365 -0
- package/dist/zones.js.map +1 -0
- package/package.json +67 -14
- package/src/backend-only.ts +16 -0
- package/src/boundary.ts +18 -5
- package/src/build-plan.ts +113 -36
- package/src/build-vite.ts +124 -15
- package/src/build.ts +535 -102
- package/src/bun-dev-entry.ts +1 -1
- package/src/cdn.ts +216 -0
- package/src/client.ts +251 -18
- package/src/conformance.ts +16 -3
- package/src/csp.ts +194 -0
- package/src/css-contract.ts +44 -0
- package/src/dev-client.ts +349 -0
- package/src/dev-diagnostics.ts +60 -7
- package/src/dev-error.ts +49 -5
- package/src/dev-feed.ts +1140 -0
- package/src/dev-indicator.ts +113 -0
- package/src/dev-session.ts +729 -0
- package/src/dev-sourcemap.ts +281 -0
- package/src/dev-ssr-graph.ts +16 -5
- package/src/dev.ts +86 -43
- package/src/diagnostic-catalog.ts +243 -0
- package/src/diagnostic-prompt.ts +355 -0
- package/src/diagnostic.ts +63 -66
- package/src/draft.ts +4 -1
- package/src/fn.ts +19 -3
- package/src/fs.ts +13 -2
- package/src/index.ts +57 -10
- package/src/internal/cdn/cloudflare.ts +146 -0
- package/src/internal/cdn/core.ts +316 -0
- package/src/internal/cdn/fastly.ts +62 -0
- package/src/internal/cdn/vercel.ts +95 -0
- package/src/internal/code-unit-order.ts +5 -0
- package/src/internal/codegen.ts +180 -29
- package/src/internal/dev-csp.ts +176 -0
- package/src/internal/dev-reserved.ts +52 -0
- package/src/internal/html-spans.ts +50 -0
- package/src/internal/loading-runtime.ts +244 -0
- package/src/internal/matches-runtime.ts +62 -0
- package/src/internal/mount-shadow.ts +88 -0
- package/src/internal/node-builtins.ts +79 -0
- package/src/internal/output-guard.ts +701 -0
- package/src/internal/page-execution.ts +1371 -0
- package/src/internal/parity.ts +150 -36
- package/src/internal/private-env.ts +334 -0
- package/src/internal/public-url.ts +22 -0
- package/src/internal/render-document.ts +153 -73
- package/src/internal/request-url.ts +14 -0
- package/src/internal/response-controls.ts +284 -0
- package/src/internal/runtime-contract.ts +10 -15
- package/src/internal/secret-scan.ts +623 -0
- package/src/internal/server-boundary.ts +6 -69
- package/src/internal/source-map.ts +256 -0
- package/src/internal/target-compat.ts +92 -0
- package/src/internal/timing-safe-equal.ts +13 -0
- package/src/internal/vitals-runtime.ts +53 -0
- package/src/internal/web-app.ts +290 -879
- package/src/internal/zone-graph.ts +593 -0
- package/src/isr.ts +366 -39
- package/src/llms-txt.ts +44 -8
- package/src/manifest.ts +671 -17
- package/src/module-graph.ts +53 -9
- package/src/navigation.ts +29 -6
- package/src/nonce.ts +104 -0
- package/src/plugins/css-modules.ts +5 -3
- package/src/plugins/kit.ts +24 -0
- package/src/plugins/svg.ts +135 -4
- package/src/plugins/vite-leak-guard.ts +529 -16
- package/src/plugins/vite-zone-guard.ts +263 -0
- package/src/plugins/zone-guard.ts +110 -0
- package/src/prerender.ts +49 -3
- package/src/public-dir.ts +135 -49
- package/src/pwa-manifest.ts +226 -0
- package/src/query.ts +4 -4
- package/src/render-seam.ts +46 -1
- package/src/route-manifest.ts +15 -3
- package/src/route-types.ts +264 -0
- package/src/router.ts +163 -63
- package/src/trusted-html.ts +44 -0
- package/src/vitals.ts +44 -0
- package/src/vite.ts +207 -36
- package/src/zones.ts +430 -0
- package/dist/plugins/vite-server-only.d.ts +0 -49
- package/dist/plugins/vite-server-only.d.ts.map +0 -1
- package/dist/plugins/vite-server-only.js +0 -57
- package/dist/plugins/vite-server-only.js.map +0 -1
- package/dist/server-only.d.ts +0 -21
- package/dist/server-only.d.ts.map +0 -1
- package/dist/server-only.js +0 -25
- package/dist/server-only.js.map +0 -1
- package/src/plugins/vite-server-only.ts +0 -75
- package/src/server-only.ts +0 -25
package/dist/render-seam.d.ts
CHANGED
|
@@ -28,6 +28,38 @@ export interface RenderProps {
|
|
|
28
28
|
readonly search?: Record<string, unknown>;
|
|
29
29
|
/** Neutral named-boundary states; adapters choose how each boundary's `render` UI is mounted. */
|
|
30
30
|
readonly boundaries?: BoundaryStates;
|
|
31
|
+
/** The rendered chain's module ids and `handle` exports, for the adapter's `useMatches`. */
|
|
32
|
+
readonly matchChain?: MatchChain;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The modules a render stacks, as `useMatches` needs them: each one's id and `handle` export,
|
|
36
|
+
* outermost layout first and the page (or status page) last. Built by the server for SSR and by the
|
|
37
|
+
* generated client entry per route, from the same manifest, so both sides report the same matches.
|
|
38
|
+
*/
|
|
39
|
+
export interface MatchChain {
|
|
40
|
+
/** Layout ids (`orgs/[org]/_layout`), then the page's route id. */
|
|
41
|
+
readonly ids: readonly string[];
|
|
42
|
+
/** Each module's `handle` export, index-aligned with {@link ids}. */
|
|
43
|
+
readonly handles: readonly unknown[];
|
|
44
|
+
}
|
|
45
|
+
/** One module of the rendered chain, as `useMatches` returns it. */
|
|
46
|
+
export interface UIMatch {
|
|
47
|
+
/** The module's id: a layout's (`orgs/[org]/_layout`), or the page's route id last. */
|
|
48
|
+
readonly id: string;
|
|
49
|
+
/** The part of the URL path this module wraps: a layout's directory prefix, the whole path for the
|
|
50
|
+
* page. Raw, as it appears in the URL. */
|
|
51
|
+
readonly pathname: string;
|
|
52
|
+
/** The params this module's loader receives: a layout's own, every route param for the page. */
|
|
53
|
+
readonly params: Readonly<Record<string, string>>;
|
|
54
|
+
/** This module's loader data: `null` for a layout without a loader. */
|
|
55
|
+
readonly data: unknown;
|
|
56
|
+
/** The module's `handle` export - any value, commonly a breadcrumb label or a render function. */
|
|
57
|
+
readonly handle: unknown;
|
|
58
|
+
}
|
|
59
|
+
/** Per-document options for {@link RenderAdapter.renderToStream}. */
|
|
60
|
+
export interface RenderStreamOptions {
|
|
61
|
+
/** The document's CSP nonce, for every executable `<script>` the framework streams. */
|
|
62
|
+
readonly nonce?: string;
|
|
31
63
|
}
|
|
32
64
|
/**
|
|
33
65
|
* The seam every render adapter implements. New adapters should prove these invariants with
|
|
@@ -36,9 +68,11 @@ export interface RenderProps {
|
|
|
36
68
|
export interface RenderAdapter {
|
|
37
69
|
/**
|
|
38
70
|
* Render a route's layout `chain` (outermost layout → page) to a Web stream of HTML bytes,
|
|
39
|
-
* including the framework's hydration markers.
|
|
71
|
+
* including the framework's hydration markers. When `options.nonce` is set, every executable
|
|
72
|
+
* `<script>` the framework streams (out-of-order Suspense runtimes, serialized resources) must
|
|
73
|
+
* carry it, or a nonce-based Content-Security-Policy blocks it and the boundary never resolves.
|
|
40
74
|
*/
|
|
41
|
-
renderToStream(chain: readonly unknown[], props: RenderProps): ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
|
|
75
|
+
renderToStream(chain: readonly unknown[], props: RenderProps, options?: RenderStreamOptions): ReadableStream<Uint8Array> | Promise<ReadableStream<Uint8Array>>;
|
|
42
76
|
/** Render the chain to a complete HTML string when no content is deferred. */
|
|
43
77
|
renderToString?(chain: readonly unknown[], props: RenderProps): string | Promise<string>;
|
|
44
78
|
/** Per-document bootstrap markup injected into `<head>` for client hydration. */
|
|
@@ -50,6 +84,12 @@ export type SsrModuleLoader = (id: string) => Promise<unknown>;
|
|
|
50
84
|
export declare function setSsrModuleLoader(load: SsrModuleLoader | undefined): void;
|
|
51
85
|
/** Return the dev server's SSR module loader, when one owns SSR resolution. */
|
|
52
86
|
export declare function ssrModuleLoader(): SsrModuleLoader | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* `id` of the inert `<script type="application/json">` a hydrating document hands its page state over
|
|
89
|
+
* in: one JSON object keyed by the `*_GLOBAL` names below, which the client entry assigns onto
|
|
90
|
+
* `window` before anything reads them. Data the browser never executes needs no CSP nonce or hash.
|
|
91
|
+
*/
|
|
92
|
+
export declare const HANDOVER_ID = "__nifra-handover";
|
|
53
93
|
/** Global the server serializes loader data into; the client reads it to hydrate. */
|
|
54
94
|
export declare const DATA_GLOBAL = "__NIFRA_DATA__";
|
|
55
95
|
/** Per-layout loader data for hydration. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-seam.d.ts","sourceRoot":"","sources":["../src/render-seam.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,4CAA4C;AAC5C,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,yFAAyF;IACzF,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAA;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,gGAAgG;IAChG,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,qGAAqG;IACrG,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,mFAAmF;IACnF,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,uDAAuD;IACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,iGAAiG;IACjG,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B
|
|
1
|
+
{"version":3,"file":"render-seam.d.ts","sourceRoot":"","sources":["../src/render-seam.ts"],"names":[],"mappings":"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"}
|
package/dist/render-seam.js
CHANGED
|
@@ -16,6 +16,12 @@ export function setSsrModuleLoader(load) {
|
|
|
16
16
|
export function ssrModuleLoader() {
|
|
17
17
|
return loaderSlot[SSR_MODULE_LOADER_SLOT];
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* `id` of the inert `<script type="application/json">` a hydrating document hands its page state over
|
|
21
|
+
* in: one JSON object keyed by the `*_GLOBAL` names below, which the client entry assigns onto
|
|
22
|
+
* `window` before anything reads them. Data the browser never executes needs no CSP nonce or hash.
|
|
23
|
+
*/
|
|
24
|
+
export const HANDOVER_ID = "__nifra-handover";
|
|
19
25
|
/** Global the server serializes loader data into; the client reads it to hydrate. */
|
|
20
26
|
export const DATA_GLOBAL = "__NIFRA_DATA__";
|
|
21
27
|
/** Per-layout loader data for hydration. */
|
package/dist/render-seam.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-seam.js","sourceRoot":"","sources":["../src/render-seam.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"render-seam.js","sourceRoot":"","sources":["../src/render-seam.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAuFH,MAAM,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAA;AACxE,MAAM,UAAU,GAAG,UAAwE,CAAA;AAE3F,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,IAAiC;IAClE,UAAU,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAAA;AAC3C,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAA;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAA;AAE7C,qFAAqF;AACrF,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAA;AAC3C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAA;AACzD,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAA;AAC7C;+EAC+E;AAC/E,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAA;AAC/C,yFAAyF;AACzF,MAAM,CAAC,MAAM,eAAe,GAAG,sBAAsB,CAAA;AACrD,uEAAuE;AACvE,MAAM,CAAC,MAAM,cAAc,GAAG,iBAAiB,CAAA"}
|
package/dist/route-manifest.d.ts
CHANGED
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
* `Manifest` so it runs at build time, in `nifra routes`, and in a test with a hand-built manifest.
|
|
18
18
|
*/
|
|
19
19
|
import type { Manifest, RouteModule } from "./manifest.js";
|
|
20
|
+
export { formatShadowedPages, normalizeMountPath, type ShadowedPage, shadowedPages, } from "./internal/mount-shadow.js";
|
|
21
|
+
/** Which half of a route each export belongs in: the frontend file or its `x.backend.ts`. */
|
|
22
|
+
export { BACKEND_ROUTE_EXPORTS, FRONTEND_ROUTE_EXPORTS } from "./manifest.js";
|
|
20
23
|
/**
|
|
21
24
|
* How a route produces its HTML.
|
|
22
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-manifest.d.ts","sourceRoot":"","sources":["../src/route-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;
|
|
1
|
+
{"version":3,"file":"route-manifest.d.ts","sourceRoot":"","sources":["../src/route-manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE1D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,KAAK,YAAY,EACjB,aAAa,GACd,MAAM,4BAA4B,CAAA;AACnC,6FAA6F;AAC7F,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAE7E;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAA;AAEjD,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,cAAc,CAAA;AAEvD,sCAAsC;AACtC,MAAM,WAAW,kBAAkB;IACjC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,iGAAiG;IACjG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3C;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC7C,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C;AAED,wGAAwG;AACxG,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAA;IACpC,sFAAsF;IACtF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED,2FAA2F;AAC3F,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAA;IACpD,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;CACtD;AAKD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,IAAI,CACV,WAAW,EACX,WAAW,GAAG,gBAAgB,GAAG,YAAY,GAAG,gBAAgB,GAAG,SAAS,CAC7E,EACD,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,GACnC,kBAAkB,CA8BpB;AA0BD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,GAAE;IACP,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,CAAA;IAClE,mGAAmG;IACnG,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;CAC9C,GACL,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CA2CnE"}
|
package/dist/route-manifest.js
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@nifrajs/web/route-manifest` - what each route actually DOES, as one artifact.
|
|
3
|
+
*
|
|
4
|
+
* The facts are already in the route modules: `prerender`, `getStaticPaths`, `revalidate`, `hydrate`.
|
|
5
|
+
* What has never existed is anywhere to read them together. To answer "which pages are static?", "which
|
|
6
|
+
* ones revalidate, and how often?", "which ship no JS?", you open every route file and hold the answer in
|
|
7
|
+
* your head - and the answer changes on the target you deploy to, which is nowhere near the route file.
|
|
8
|
+
*
|
|
9
|
+
* That gap is not just inconvenient. The interesting cases are the ones where a route's declaration and
|
|
10
|
+
* its deploy target disagree, and there is currently nothing that can notice: an ISR route on a target
|
|
11
|
+
* with no revalidation story regenerates on every request; a `static` build containing a route that was
|
|
12
|
+
* never prerenderable ships a page that 404s. Both are silent, and both are decided at build time by
|
|
13
|
+
* information no single place holds.
|
|
14
|
+
*
|
|
15
|
+
* So this derives one record per route - render mode, hydration, cache policy - resolves it against the
|
|
16
|
+
* target, and reports what the target cannot honour. Pure and fs-free: it takes an already-built
|
|
17
|
+
* `Manifest` so it runs at build time, in `nifra routes`, and in a test with a hand-built manifest.
|
|
18
|
+
*/
|
|
19
|
+
import { codeUnitOrder } from "./internal/code-unit-order.js";
|
|
20
|
+
export { formatShadowedPages, normalizeMountPath, shadowedPages, } from "./internal/mount-shadow.js";
|
|
21
|
+
/** Which half of a route each export belongs in: the frontend file or its `x.backend.ts`. */
|
|
22
|
+
export { BACKEND_ROUTE_EXPORTS, FRONTEND_ROUTE_EXPORTS } from "./manifest.js";
|
|
1
23
|
/** A route is dynamic when its pattern carries a param or wildcard segment. */
|
|
2
24
|
const isDynamic = (pattern) => /[:*]/.test(pattern);
|
|
3
25
|
/**
|
|
@@ -24,7 +46,8 @@ export function deriveRouteEntry(id, pattern, module, prerenderedPaths) {
|
|
|
24
46
|
const entry = { id, pattern, mode, hydrate: module.hydrate !== false, requires };
|
|
25
47
|
if (mode === "isr" && module.revalidate !== undefined)
|
|
26
48
|
entry.revalidate = module.revalidate;
|
|
27
|
-
|
|
49
|
+
// A function's tags exist per request; the manifest records only a fixed list.
|
|
50
|
+
if (mode === "isr" && Array.isArray(module.revalidateTags)) {
|
|
28
51
|
entry.revalidateTags = module.revalidateTags;
|
|
29
52
|
}
|
|
30
53
|
if (prerenderedPaths !== undefined)
|
|
@@ -43,7 +66,7 @@ const TARGET_CAPABILITIES = {
|
|
|
43
66
|
bun: ["server"],
|
|
44
67
|
node: ["server"],
|
|
45
68
|
deno: ["server"],
|
|
46
|
-
|
|
69
|
+
cloudflare: ["server"],
|
|
47
70
|
vercel: ["server"],
|
|
48
71
|
static: [],
|
|
49
72
|
};
|
|
@@ -66,7 +89,7 @@ export async function buildRouteManifest(manifest, options = {}) {
|
|
|
66
89
|
const module = (await route.load());
|
|
67
90
|
entries.push(deriveRouteEntry(route.id, route.pattern, module, options.prerendered?.[route.id]));
|
|
68
91
|
}
|
|
69
|
-
entries.sort((a, b) => a.pattern
|
|
92
|
+
entries.sort((a, b) => codeUnitOrder(a.pattern, b.pattern));
|
|
70
93
|
const conflicts = [];
|
|
71
94
|
const capabilities = options.capabilities ??
|
|
72
95
|
(options.target === undefined ? undefined : TARGET_CAPABILITIES[options.target]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route-manifest.js","sourceRoot":"","sources":["../src/route-manifest.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"route-manifest.js","sourceRoot":"","sources":["../src/route-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Where the generated types live, relative to the app root. */
|
|
2
|
+
export declare const ROUTE_TYPES_DIR = ".nifra/types";
|
|
3
|
+
export interface RouteTypesOptions {
|
|
4
|
+
/** The app root: where `.nifra/` and `backend/app.ts` live. */
|
|
5
|
+
readonly appRoot: string;
|
|
6
|
+
/** The routes directory. Defaults to `<appRoot>/routes`. */
|
|
7
|
+
readonly routesDir?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Every generated types file for the app, by absolute path. */
|
|
10
|
+
export declare function routeTypeFiles(options: RouteTypesOptions): ReadonlyMap<string, string>;
|
|
11
|
+
/** Generated files missing or different on disk, and files on disk the app no longer generates. */
|
|
12
|
+
export declare function staleRouteTypes(options: RouteTypesOptions): readonly string[];
|
|
13
|
+
export interface RouteTypesResult {
|
|
14
|
+
/** Files written because they were missing or out of date. */
|
|
15
|
+
readonly written: readonly string[];
|
|
16
|
+
/** Files removed because no route generates them any more. */
|
|
17
|
+
readonly removed: readonly string[];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Bring `.nifra/types` up to date with the app's routes. Unchanged files are left alone, so an
|
|
21
|
+
* editor watching them sees only real changes. Owns the directory: anything else in it is removed.
|
|
22
|
+
*/
|
|
23
|
+
export declare function writeRouteTypes(options: RouteTypesOptions): RouteTypesResult;
|
|
24
|
+
//# sourceMappingURL=route-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-types.d.ts","sourceRoot":"","sources":["../src/route-types.ts"],"names":[],"mappings":"AAwCA,gEAAgE;AAChE,eAAO,MAAM,eAAe,iBAAiB,CAAA;AAK7C,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAqID,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BtF;AAED,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,SAAS,MAAM,EAAE,CAU7E;AASD,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;CACpC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAgB5E"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@nifrajs/web/route-types` - the generated `./+types/<route>` modules.
|
|
3
|
+
*
|
|
4
|
+
* Every route file gets `.nifra/types/<routes>/<dir>/+types/<name>.d.ts`, declaring a `Route`
|
|
5
|
+
* namespace: the route's `Params`, the `LoaderData` and `ActionData` its output schemas let through,
|
|
6
|
+
* the `LoaderArgs` its backend half receives, and its component's props. With
|
|
7
|
+
* `"rootDirs": [".", "./.nifra/types"]` in tsconfig, both halves of a route import it as
|
|
8
|
+
* `./+types/<name>`:
|
|
9
|
+
*
|
|
10
|
+
* // routes/blog/[slug].tsx
|
|
11
|
+
* import type { Route } from "./+types/[slug]"
|
|
12
|
+
* export default function Post({ data }: Route.ComponentProps) { ... }
|
|
13
|
+
*
|
|
14
|
+
* // routes/blog/[slug].backend.ts
|
|
15
|
+
* export async function loader({ api, params }: Route.LoaderArgs) { ... }
|
|
16
|
+
*
|
|
17
|
+
* `LoaderData` is the output type of `loaderOutput`, not the loader's return type: the data guard
|
|
18
|
+
* projects the loader's value through that schema, so the schema is what the component receives.
|
|
19
|
+
* `.nifra/types/register.d.ts` registers `backend/app.ts`'s `backend` with `@nifrajs/client`, so `api`
|
|
20
|
+
* is typed without a route importing the backend.
|
|
21
|
+
*/
|
|
22
|
+
import { existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
|
|
23
|
+
import { dirname, join, relative } from "node:path";
|
|
24
|
+
import { codeUnitOrder } from "./internal/code-unit-order.js";
|
|
25
|
+
import { buildManifest, isMiddlewareFile, isRouteBackendFile, } from "./manifest.js";
|
|
26
|
+
/** Where the generated types live, relative to the app root. */
|
|
27
|
+
export const ROUTE_TYPES_DIR = ".nifra/types";
|
|
28
|
+
const BACKEND_APP = "backend/app";
|
|
29
|
+
const SCRIPT_EXTS = [".ts", ".tsx", ".js", ".jsx"];
|
|
30
|
+
const posix = (path) => path.replaceAll("\\", "/");
|
|
31
|
+
/** Every route file the router serves, once each: pages, layouts and the special pages. */
|
|
32
|
+
function routeFiles(manifest) {
|
|
33
|
+
const files = new Map();
|
|
34
|
+
const add = (entry, kind) => {
|
|
35
|
+
if (!files.has(entry.file))
|
|
36
|
+
files.set(entry.file, { file: entry.file, backend: entry.backend, kind });
|
|
37
|
+
};
|
|
38
|
+
for (const route of manifest.routes)
|
|
39
|
+
add(route, "page");
|
|
40
|
+
for (const layout of Object.values(manifest.layouts))
|
|
41
|
+
add(layout, "layout");
|
|
42
|
+
for (const group of [
|
|
43
|
+
manifest.errors,
|
|
44
|
+
manifest.notFounds,
|
|
45
|
+
manifest.statusPages,
|
|
46
|
+
manifest.loadings,
|
|
47
|
+
]) {
|
|
48
|
+
for (const entry of Object.values(group ?? {}))
|
|
49
|
+
add(entry, "page");
|
|
50
|
+
}
|
|
51
|
+
if (manifest.notFound !== undefined)
|
|
52
|
+
add(manifest.notFound, "page");
|
|
53
|
+
return [...files.values()].sort((a, b) => codeUnitOrder(a.file, b.file));
|
|
54
|
+
}
|
|
55
|
+
const PARAM = /^\[([A-Za-z_][A-Za-z0-9_]*)\]$/;
|
|
56
|
+
const OPTIONAL = /^\[\[([A-Za-z_][A-Za-z0-9_]*)\]\]$/;
|
|
57
|
+
const CATCH_ALL = /^\[\.\.\.([A-Za-z_][A-Za-z0-9_]*)\]$/;
|
|
58
|
+
/** The params a route file's URL carries: its directories', plus its own name's for a page. */
|
|
59
|
+
function paramsType(file, kind) {
|
|
60
|
+
const segments = file.replace(/\.[^./]+$/, "").split("/");
|
|
61
|
+
const own = kind === "page" && !segments.at(-1)?.startsWith("_") ? segments : segments.slice(0, -1);
|
|
62
|
+
const fields = [];
|
|
63
|
+
for (const segment of own) {
|
|
64
|
+
const optional = OPTIONAL.exec(segment);
|
|
65
|
+
const name = optional?.[1] ?? PARAM.exec(segment)?.[1] ?? CATCH_ALL.exec(segment)?.[1];
|
|
66
|
+
if (name !== undefined)
|
|
67
|
+
fields.push(`readonly ${name}${optional === null ? "" : "?"}: string`);
|
|
68
|
+
}
|
|
69
|
+
return fields.length === 0 ? "Record<string, never>" : `{ ${fields.join("; ")} }`;
|
|
70
|
+
}
|
|
71
|
+
/** A module specifier for `target` from a file in `fromDir`, without a script extension. */
|
|
72
|
+
function specifier(fromDir, target) {
|
|
73
|
+
let path = posix(relative(fromDir, target));
|
|
74
|
+
for (const ext of SCRIPT_EXTS)
|
|
75
|
+
if (path.endsWith(ext))
|
|
76
|
+
path = path.slice(0, -ext.length);
|
|
77
|
+
return path.startsWith(".") ? path : `./${path}`;
|
|
78
|
+
}
|
|
79
|
+
const backendAppOf = (appRoot) => SCRIPT_EXTS.map((ext) => join(appRoot, `${BACKEND_APP}${ext}`)).find((path) => existsSync(path));
|
|
80
|
+
function routeTypesModule(route, out, routesDir, label, register) {
|
|
81
|
+
const dir = dirname(out);
|
|
82
|
+
const backend = route.backend === undefined ? undefined : join(routesDir, route.backend);
|
|
83
|
+
// Only a script module's exports are visible to TypeScript; a .svelte/.vue/.mdx one is an ambient shim.
|
|
84
|
+
const frontend = /\.[jt]sx?$/.test(route.file) ? join(routesDir, route.file) : undefined;
|
|
85
|
+
const lines = [`// Generated by nifra from ${label}. Do not edit: \`nifra types\` rewrites it.`];
|
|
86
|
+
if (register !== undefined)
|
|
87
|
+
lines.push(`/// <reference path="${posix(relative(dir, register))}" />`);
|
|
88
|
+
lines.push('import type { OutputOf, RouteLoaderArgs, SearchSchemaOf } from "@nifrajs/client"');
|
|
89
|
+
if (route.kind === "page")
|
|
90
|
+
lines.push('import type { RenderProps } from "@nifrajs/web"');
|
|
91
|
+
lines.push("");
|
|
92
|
+
if (backend !== undefined)
|
|
93
|
+
lines.push(`type Backend = typeof import("${specifier(dir, backend)}")`);
|
|
94
|
+
if (frontend !== undefined)
|
|
95
|
+
lines.push(`type Frontend = typeof import("${specifier(dir, frontend)}")`);
|
|
96
|
+
if (backend !== undefined || frontend !== undefined)
|
|
97
|
+
lines.push("");
|
|
98
|
+
const output = (name) => (backend === undefined ? "null" : `OutputOf<Backend, "${name}">`);
|
|
99
|
+
lines.push("export namespace Route {", " /** The URL params this route's path carries. */", ` export type Params = ${paramsType(route.file, route.kind)}`, " /** What the loader sends to the browser: the output type of `loaderOutput`. */", ` export type LoaderData = ${output("loaderOutput")}`, " /** What the action sends back: the output type of `actionOutput`. */", ` export type ActionData = ${output("actionOutput")}`, " /** The context the backend half's loader receives. */", ` export type LoaderArgs = RouteLoaderArgs<Params${frontend === undefined ? "" : ", SearchSchemaOf<Frontend>"}>`, " /** The context the backend half's action receives. */", " export type ActionArgs = LoaderArgs");
|
|
100
|
+
if (route.kind === "page") {
|
|
101
|
+
lines.push(" /** The page component's props. */", ' export type ComponentProps = Omit<RenderProps, "data" | "actionData" | "params"> & {', " readonly data: LoaderData", " readonly actionData?: ActionData", " readonly params: Params", " }");
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
lines.push(" /** The layout component's props; `Children` is the adapter's children type. */", " export type ComponentProps<Children = unknown> = {", " readonly data: LoaderData", " readonly children?: Children", " }");
|
|
105
|
+
}
|
|
106
|
+
lines.push("}", "");
|
|
107
|
+
return lines.join("\n");
|
|
108
|
+
}
|
|
109
|
+
function registerModule(out, backendApp, label) {
|
|
110
|
+
return [
|
|
111
|
+
`// Generated by nifra from ${label}. Do not edit: \`nifra types\` rewrites it.`,
|
|
112
|
+
`import type { backend } from "${specifier(dirname(out), backendApp)}"`,
|
|
113
|
+
"",
|
|
114
|
+
'declare module "@nifrajs/client" {',
|
|
115
|
+
" interface Register {",
|
|
116
|
+
" readonly backend: typeof backend",
|
|
117
|
+
" }",
|
|
118
|
+
"}",
|
|
119
|
+
"",
|
|
120
|
+
].join("\n");
|
|
121
|
+
}
|
|
122
|
+
/** Every generated types file for the app, by absolute path. */
|
|
123
|
+
export function routeTypeFiles(options) {
|
|
124
|
+
const appRoot = options.appRoot;
|
|
125
|
+
const routesDir = options.routesDir ?? join(appRoot, "routes");
|
|
126
|
+
const typesRoot = join(appRoot, ROUTE_TYPES_DIR);
|
|
127
|
+
const files = new Map();
|
|
128
|
+
const backendApp = backendAppOf(appRoot);
|
|
129
|
+
const register = backendApp === undefined ? undefined : join(typesRoot, "register.d.ts");
|
|
130
|
+
if (backendApp !== undefined && register !== undefined) {
|
|
131
|
+
files.set(register, registerModule(register, backendApp, posix(relative(appRoot, backendApp))));
|
|
132
|
+
}
|
|
133
|
+
if (!existsSync(routesDir))
|
|
134
|
+
return files;
|
|
135
|
+
const listed = readdirSync(routesDir, { recursive: true })
|
|
136
|
+
.map(posix)
|
|
137
|
+
.filter((file) => /\.(?:tsx|jsx|svelte|vue|mdx)$/.test(file) ||
|
|
138
|
+
isRouteBackendFile(file) ||
|
|
139
|
+
isMiddlewareFile(file));
|
|
140
|
+
// Discovery only: the importer is never called.
|
|
141
|
+
const manifest = buildManifest(listed, () => () => Promise.reject(new Error("not loaded")));
|
|
142
|
+
const routesRel = posix(relative(appRoot, routesDir));
|
|
143
|
+
for (const route of routeFiles(manifest)) {
|
|
144
|
+
const dir = dirname(route.file);
|
|
145
|
+
const name = route.file.slice(dir === "." ? 0 : dir.length + 1).replace(/\.[^.]+$/, "");
|
|
146
|
+
const out = join(typesRoot, routesRel, dir === "." ? "" : dir, "+types", `${name}.d.ts`);
|
|
147
|
+
files.set(out, routeTypesModule(route, out, routesDir, `${routesRel}/${route.file}`, register));
|
|
148
|
+
}
|
|
149
|
+
return files;
|
|
150
|
+
}
|
|
151
|
+
/** Generated files missing or different on disk, and files on disk the app no longer generates. */
|
|
152
|
+
export function staleRouteTypes(options) {
|
|
153
|
+
const files = routeTypeFiles(options);
|
|
154
|
+
const stale = [];
|
|
155
|
+
for (const [path, content] of files) {
|
|
156
|
+
if (!existsSync(path) || readFileSync(path, "utf8") !== content)
|
|
157
|
+
stale.push(path);
|
|
158
|
+
}
|
|
159
|
+
for (const path of onDisk(join(options.appRoot, ROUTE_TYPES_DIR))) {
|
|
160
|
+
if (!files.has(path))
|
|
161
|
+
stale.push(path);
|
|
162
|
+
}
|
|
163
|
+
return stale.sort();
|
|
164
|
+
}
|
|
165
|
+
function onDisk(dir) {
|
|
166
|
+
if (!existsSync(dir))
|
|
167
|
+
return [];
|
|
168
|
+
return readdirSync(dir, { recursive: true, withFileTypes: true })
|
|
169
|
+
.filter((entry) => entry.isFile())
|
|
170
|
+
.map((entry) => join(entry.parentPath, entry.name));
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Bring `.nifra/types` up to date with the app's routes. Unchanged files are left alone, so an
|
|
174
|
+
* editor watching them sees only real changes. Owns the directory: anything else in it is removed.
|
|
175
|
+
*/
|
|
176
|
+
export function writeRouteTypes(options) {
|
|
177
|
+
const files = routeTypeFiles(options);
|
|
178
|
+
const written = [];
|
|
179
|
+
const removed = [];
|
|
180
|
+
for (const [path, content] of files) {
|
|
181
|
+
if (existsSync(path) && readFileSync(path, "utf8") === content)
|
|
182
|
+
continue;
|
|
183
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
184
|
+
writeFileSync(path, content);
|
|
185
|
+
written.push(path);
|
|
186
|
+
}
|
|
187
|
+
for (const path of onDisk(join(options.appRoot, ROUTE_TYPES_DIR))) {
|
|
188
|
+
if (files.has(path))
|
|
189
|
+
continue;
|
|
190
|
+
rmSync(path);
|
|
191
|
+
removed.push(path);
|
|
192
|
+
}
|
|
193
|
+
return { written: written.sort(), removed: removed.sort() };
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=route-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-types.js","sourceRoot":"","sources":["../src/route-types.ts"],"names":[],"mappings":"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"}
|
package/dist/router.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from "@nifrajs/core/server";
|
|
2
2
|
import type { BoundaryStates } from "./boundary.js";
|
|
3
3
|
import type { ClientRouteHooks } from "./manifest.js";
|
|
4
|
+
import type { MatchChain } from "./render-seam.js";
|
|
4
5
|
/**
|
|
5
6
|
* Request header that asks a nifra route's GET to return just the loader data as JSON (instead of
|
|
6
7
|
* the full HTML document). Set by client-side navigation; read by `createWebApp`'s GET handler.
|
|
@@ -12,6 +13,9 @@ export declare const DATA_HEADER = "x-nifra-data";
|
|
|
12
13
|
* `<path>/_data.json` (a CDN file - no worker round-trip) instead of the dynamic header-GET.
|
|
13
14
|
*/
|
|
14
15
|
export declare const PRERENDERED_GLOBAL = "__NIFRA_PRERENDERED__";
|
|
16
|
+
/** Where `createWebApp` serves a prerendered set too large to inline; the global then holds this URL
|
|
17
|
+
* plus a `?v=` content version, so the browser may cache it for good. */
|
|
18
|
+
export declare const PRERENDERED_LIST_PATH = "/__nifra/prerendered.json";
|
|
15
19
|
/**
|
|
16
20
|
* Response header a data-mode action POST uses to convey a redirect (`redirect(...)`) to the
|
|
17
21
|
* client - fetch would otherwise silently follow a 3xx to its HTML, losing the target. The
|
|
@@ -109,8 +113,9 @@ export interface RouterState {
|
|
|
109
113
|
readonly actionData?: unknown;
|
|
110
114
|
/** True while a navigation or submit is in flight (drives loading UI). */
|
|
111
115
|
readonly pending: boolean;
|
|
112
|
-
/** The path a navigation is
|
|
113
|
-
* `NavLink` know whether its own `to` is the one loading;
|
|
116
|
+
/** The path a navigation or a submit's redirect is loading while `pending`; a redirect the router
|
|
117
|
+
* follows moves it to the target. Lets a `NavLink` know whether its own `to` is the one loading;
|
|
118
|
+
* `undefined` when idle. */
|
|
114
119
|
readonly pendingPath?: string | undefined;
|
|
115
120
|
/** The in-flight submit (set during a `submit`, cleared when it settles) - for optimistic UI. */
|
|
116
121
|
readonly submission?: Submission;
|
|
@@ -134,8 +139,10 @@ export type FetchRouteData = (path: string, match: RouteMatch, signal?: AbortSig
|
|
|
134
139
|
}) => Promise<unknown>;
|
|
135
140
|
/** Per-submit options. `revalidate: false` opts out of the post-action loader re-fetch. */
|
|
136
141
|
export interface SubmitOptions {
|
|
137
|
-
/** Re-run the active route's
|
|
138
|
-
* keep the current `data` and rely on the action's `actionData` alone.
|
|
142
|
+
/** Re-run the active route's loaders after the action settles (default `true`). Set `false` to
|
|
143
|
+
* keep the current `data` and rely on the action's `actionData` alone. When the action redirects,
|
|
144
|
+
* the target's layouts all re-run by default; with `false` it keeps the layout data an ordinary
|
|
145
|
+
* navigation would. */
|
|
139
146
|
readonly revalidate?: boolean;
|
|
140
147
|
}
|
|
141
148
|
/** A fetcher's observable state - independent of the main router. `pending` covers its in-flight
|
|
@@ -172,7 +179,11 @@ export interface ClientRouter {
|
|
|
172
179
|
snapshot: () => RouterState;
|
|
173
180
|
/** Subscribe to transitions; returns an unsubscribe fn. */
|
|
174
181
|
subscribe: (listener: () => void) => () => void;
|
|
175
|
-
/**
|
|
182
|
+
/**
|
|
183
|
+
* Navigate to a path: match → fetch loader data → publish. No-op for an unmatched path. A loader
|
|
184
|
+
* redirect to another route is followed; one that leaves the app (another origin, a `#fragment`, no
|
|
185
|
+
* route) rejects with its target as `redirectTo`.
|
|
186
|
+
*/
|
|
176
187
|
navigate: (path: string) => Promise<void>;
|
|
177
188
|
/**
|
|
178
189
|
* Submit an action (POST `body` to `action` in data mode): a redirect becomes a client
|
|
@@ -180,7 +191,8 @@ export interface ClientRouter {
|
|
|
180
191
|
* loader is revalidated so the mutation is reflected. Pass `{ revalidate: false }` to SKIP that
|
|
181
192
|
* revalidation - keep the current `data` and just publish the action's `actionData` (useful when
|
|
182
193
|
* the action already returned everything that changed, saving the extra round-trip). A redirect
|
|
183
|
-
* always loads its target regardless. Rejects on failure (caller falls back)
|
|
194
|
+
* always loads its target regardless. Rejects on failure (caller falls back); once the action has
|
|
195
|
+
* run, the rejection's `redirectTo` names the page to load instead of posting again.
|
|
184
196
|
*/
|
|
185
197
|
submit: (action: string, body: NonNullable<RequestInit["body"]>, opts?: SubmitOptions) => Promise<void>;
|
|
186
198
|
/** Run the initial route's client loader after the adapter has hydrated the SSR markup. */
|
|
@@ -247,8 +259,18 @@ export interface MountRouterOptions {
|
|
|
247
259
|
* `ctx.search`/`RenderProps.search`. Omitted by callers with no typed search (tests, a hand-built mount)
|
|
248
260
|
* ⇒ every route sees the raw parsed query. */
|
|
249
261
|
readonly searchSchemas?: Readonly<Record<string, readonly (StandardSchemaV1 | undefined)[]>>;
|
|
262
|
+
/** routeId → the ids and `handle` exports `useMatches` reports for that chain; built by
|
|
263
|
+
* `generateClientEntry` as each route's modules load. The mount hands the current route's entry to
|
|
264
|
+
* the render as `RenderProps.matchChain`. Omitted ⇒ `useMatches` returns an empty list. */
|
|
265
|
+
readonly matchChains?: Readonly<Record<string, MatchChain>>;
|
|
250
266
|
/** Hydration container (opaque - the adapter casts it to its DOM element type). */
|
|
251
267
|
readonly container: unknown;
|
|
252
268
|
}
|
|
269
|
+
/**
|
|
270
|
+
* The page to load as a document, when that is why a navigation or submit rejected. Only an `http:` or
|
|
271
|
+
* `https:` target: the caller hands it to `location`, which runs a `javascript:` URL in this page,
|
|
272
|
+
* where the same target in a real redirect's `Location` never runs.
|
|
273
|
+
*/
|
|
274
|
+
export declare const redirectOf: (error: unknown) => string | undefined;
|
|
253
275
|
export declare function createClientRouter(options: ClientRouterOptions): ClientRouter;
|
|
254
276
|
//# sourceMappingURL=router.d.ts.map
|
package/dist/router.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvE,OAAO,KAAK,EAAyC,gBAAgB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"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"}
|