@rivetjs/router 0.0.0-stage → 0.1.0-alpha.1
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/LICENSE +21 -0
- package/README.md +10 -2
- package/adapters/assemble.d.ts +32 -0
- package/adapters/assemble.js +32 -0
- package/adapters/build.d.ts +24 -0
- package/adapters/build.js +43 -0
- package/adapters/bun.d.ts +18 -0
- package/adapters/bun.js +44 -0
- package/adapters/cloudflare.d.ts +5 -0
- package/adapters/cloudflare.js +8 -0
- package/adapters/cluster.d.ts +7 -0
- package/adapters/cluster.js +130 -0
- package/adapters/csr.d.ts +12 -0
- package/adapters/csr.js +11 -0
- package/adapters/deno.d.ts +13 -0
- package/adapters/deno.js +35 -0
- package/adapters/fetch.d.ts +55 -0
- package/adapters/fetch.js +72 -0
- package/adapters/files.d.ts +20 -0
- package/adapters/files.js +155 -0
- package/adapters/idle-memory.d.ts +23 -0
- package/adapters/idle-memory.js +91 -0
- package/adapters/netlify.d.ts +13 -0
- package/adapters/netlify.js +15 -0
- package/adapters/node.d.ts +180 -0
- package/adapters/node.js +986 -0
- package/adapters/pack.d.ts +39 -0
- package/adapters/pack.js +360 -0
- package/adapters/server-target.d.ts +17 -0
- package/adapters/server-target.js +8 -0
- package/adapters/static.d.ts +84 -0
- package/adapters/static.js +231 -0
- package/adapters/target-build.d.ts +95 -0
- package/adapters/target-build.js +118 -0
- package/adapters/vercel-edge.d.ts +7 -0
- package/adapters/vercel-edge.js +9 -0
- package/adapters/vercel.d.ts +35 -0
- package/adapters/vercel.js +45 -0
- package/build/codegen.d.ts +97 -0
- package/build/codegen.js +1037 -0
- package/build/dev-errors.d.ts +23 -0
- package/build/dev-errors.js +247 -0
- package/build/lazy-rows.d.ts +19 -0
- package/build/lazy-rows.js +59 -0
- package/build/migrate.d.ts +31 -0
- package/build/migrate.js +385 -0
- package/build/reach.d.ts +60 -0
- package/build/reach.js +302 -0
- package/build/route-css.d.ts +54 -0
- package/build/route-css.js +216 -0
- package/build/routes.d.ts +55 -0
- package/build/routes.js +219 -0
- package/build/sync.d.ts +20 -0
- package/build/sync.js +16 -0
- package/build/vite.d.ts +208 -0
- package/build/vite.js +861 -0
- package/cli/rivet.d.ts +2 -0
- package/cli/rivet.js +101 -0
- package/client/active.d.ts +6 -0
- package/client/active.js +22 -0
- package/client/announce.d.ts +2 -0
- package/client/announce.js +21 -0
- package/client/dev.d.ts +41 -0
- package/client/dev.js +91 -0
- package/client/index.d.ts +156 -0
- package/client/index.js +714 -0
- package/client/layouts.d.ts +110 -0
- package/client/layouts.js +310 -0
- package/client/leave.d.ts +40 -0
- package/client/leave.js +75 -0
- package/client/link.d.ts +48 -0
- package/client/link.jsx +65 -0
- package/client/live.d.ts +57 -0
- package/client/live.js +170 -0
- package/client/navigate.d.ts +71 -0
- package/client/navigate.js +120 -0
- package/client/navigation.d.ts +28 -0
- package/client/navigation.js +14 -0
- package/client/params.d.ts +16 -0
- package/client/params.js +28 -0
- package/client/route-context.d.ts +32 -0
- package/client/route-context.js +21 -0
- package/client/scroll.d.ts +16 -0
- package/client/scroll.js +80 -0
- package/client/search.d.ts +8 -0
- package/client/search.js +17 -0
- package/client/tailwind.css +8 -0
- package/client/transition-helpers.d.ts +28 -0
- package/client/transition-helpers.js +63 -0
- package/client/transitions.css +90 -0
- package/client/transitions.d.ts +21 -0
- package/client/transitions.js +156 -0
- package/index.d.ts +135 -0
- package/index.js +8 -0
- package/package.json +156 -4
- package/server/app.d.ts +175 -0
- package/server/app.js +335 -0
- package/server/body.d.ts +20 -0
- package/server/body.js +8 -0
- package/server/deferred.d.ts +12 -0
- package/server/deferred.js +60 -0
- package/server/early-hints.d.ts +34 -0
- package/server/early-hints.js +63 -0
- package/server/handler.d.ts +240 -0
- package/server/handler.js +661 -0
- package/server/index.d.ts +9 -0
- package/server/index.js +6 -0
- package/server/inline-styles.d.ts +21 -0
- package/server/inline-styles.js +28 -0
- package/server/module.d.ts +14 -0
- package/server/module.js +96 -0
- package/server/render.d.ts +96 -0
- package/server/render.js +492 -0
- package/server/route-cache.d.ts +245 -0
- package/server/route-cache.js +813 -0
- package/server/security.d.ts +18 -0
- package/server/security.js +47 -0
- package/server/shell-build.d.ts +3 -0
- package/server/shell-build.js +2 -0
- package/server/shell-cache.d.ts +8 -0
- package/server/shell-cache.js +836 -0
- package/server/strict-csp.d.ts +7 -0
- package/server/strict-csp.js +18 -0
- package/server-only.d.ts +1 -0
- package/server-only.js +3 -0
- package/shared/actions.d.ts +10 -0
- package/shared/actions.js +18 -0
- package/shared/base.d.ts +8 -0
- package/shared/base.js +20 -0
- package/shared/cookie.d.ts +7 -0
- package/shared/cookie.js +32 -0
- package/shared/csp-directives.d.ts +9 -0
- package/shared/csp-directives.js +85 -0
- package/shared/csp-hash.d.ts +39 -0
- package/shared/csp-hash.js +121 -0
- package/shared/csp.d.ts +26 -0
- package/shared/csp.js +13 -0
- package/shared/data.d.ts +175 -0
- package/shared/data.js +22 -0
- package/shared/errors.d.ts +31 -0
- package/shared/errors.js +51 -0
- package/shared/head.d.ts +57 -0
- package/shared/head.js +242 -0
- package/shared/nonce.d.ts +2 -0
- package/shared/nonce.js +23 -0
- package/shared/prefetch-fallback.min.d.ts +1 -0
- package/shared/prefetch-fallback.min.js +2 -0
- package/shared/prefetch.d.ts +54 -0
- package/shared/prefetch.js +74 -0
- package/shared/redirect.d.ts +6 -0
- package/shared/redirect.js +25 -0
- package/shared/server-exports.d.ts +78 -0
- package/shared/server-exports.js +77 -0
- package/shared/slash.d.ts +8 -0
- package/shared/slash.js +24 -0
package/package.json
CHANGED
|
@@ -1,6 +1,158 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rivetjs/router",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "File routing for Rivet: loaders, actions, guards, a web-standard request handler, Node / static / edge adapters.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"bin": {
|
|
9
|
+
"rivet": "./cli/rivet.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./index.d.ts",
|
|
14
|
+
"default": "./index.js"
|
|
15
|
+
},
|
|
16
|
+
"./server": {
|
|
17
|
+
"types": "./server/index.d.ts",
|
|
18
|
+
"default": "./server/index.js"
|
|
19
|
+
},
|
|
20
|
+
"./route-cache": {
|
|
21
|
+
"types": "./server/route-cache.d.ts",
|
|
22
|
+
"default": "./server/route-cache.js"
|
|
23
|
+
},
|
|
24
|
+
"./server-only": {
|
|
25
|
+
"types": "./server-only.d.ts",
|
|
26
|
+
"default": "./server-only.js"
|
|
27
|
+
},
|
|
28
|
+
"./client": {
|
|
29
|
+
"types": "./client/index.d.ts",
|
|
30
|
+
"development": "./client/dev.js",
|
|
31
|
+
"default": "./client/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./route-context": {
|
|
34
|
+
"types": "./client/route-context.d.ts",
|
|
35
|
+
"default": "./client/route-context.js"
|
|
36
|
+
},
|
|
37
|
+
"./leave": {
|
|
38
|
+
"types": "./client/leave.d.ts",
|
|
39
|
+
"default": "./client/leave.js"
|
|
40
|
+
},
|
|
41
|
+
"./navigation": {
|
|
42
|
+
"types": "./client/navigation.d.ts",
|
|
43
|
+
"default": "./client/navigation.js"
|
|
44
|
+
},
|
|
45
|
+
"./search": {
|
|
46
|
+
"types": "./client/search.d.ts",
|
|
47
|
+
"default": "./client/search.js"
|
|
48
|
+
},
|
|
49
|
+
"./transitions": {
|
|
50
|
+
"types": "./client/transitions.d.ts",
|
|
51
|
+
"default": "./client/transitions.js"
|
|
52
|
+
},
|
|
53
|
+
"./prefetch": {
|
|
54
|
+
"types": "./shared/prefetch.d.ts",
|
|
55
|
+
"default": "./shared/prefetch.js"
|
|
56
|
+
},
|
|
57
|
+
"./link": {
|
|
58
|
+
"types": "./client/link.d.ts",
|
|
59
|
+
"default": "./client/link.jsx"
|
|
60
|
+
},
|
|
61
|
+
"./transitions.css": "./client/transitions.css",
|
|
62
|
+
"./tailwind.css": "./client/tailwind.css",
|
|
63
|
+
"./routes": {
|
|
64
|
+
"types": "./build/routes.d.ts",
|
|
65
|
+
"default": "./build/routes.js"
|
|
66
|
+
},
|
|
67
|
+
"./node": {
|
|
68
|
+
"types": "./adapters/node.d.ts",
|
|
69
|
+
"default": "./adapters/node.js"
|
|
70
|
+
},
|
|
71
|
+
"./fetch": {
|
|
72
|
+
"types": "./adapters/fetch.d.ts",
|
|
73
|
+
"default": "./adapters/fetch.js"
|
|
74
|
+
},
|
|
75
|
+
"./static": {
|
|
76
|
+
"types": "./adapters/static.d.ts",
|
|
77
|
+
"default": "./adapters/static.js"
|
|
78
|
+
},
|
|
79
|
+
"./csr": {
|
|
80
|
+
"types": "./adapters/csr.d.ts",
|
|
81
|
+
"default": "./adapters/csr.js"
|
|
82
|
+
},
|
|
83
|
+
"./vercel": {
|
|
84
|
+
"types": "./adapters/vercel.d.ts",
|
|
85
|
+
"default": "./adapters/vercel.js"
|
|
86
|
+
},
|
|
87
|
+
"./vercel-edge": {
|
|
88
|
+
"types": "./adapters/vercel-edge.d.ts",
|
|
89
|
+
"default": "./adapters/vercel-edge.js"
|
|
90
|
+
},
|
|
91
|
+
"./netlify": {
|
|
92
|
+
"types": "./adapters/netlify.d.ts",
|
|
93
|
+
"default": "./adapters/netlify.js"
|
|
94
|
+
},
|
|
95
|
+
"./cloudflare": {
|
|
96
|
+
"types": "./adapters/cloudflare.d.ts",
|
|
97
|
+
"default": "./adapters/cloudflare.js"
|
|
98
|
+
},
|
|
99
|
+
"./bun": {
|
|
100
|
+
"types": "./adapters/bun.d.ts",
|
|
101
|
+
"default": "./adapters/bun.js"
|
|
102
|
+
},
|
|
103
|
+
"./deno": {
|
|
104
|
+
"types": "./adapters/deno.d.ts",
|
|
105
|
+
"default": "./adapters/deno.js"
|
|
106
|
+
},
|
|
107
|
+
"./head": {
|
|
108
|
+
"types": "./shared/head.d.ts",
|
|
109
|
+
"default": "./shared/head.js"
|
|
110
|
+
},
|
|
111
|
+
"./vite": {
|
|
112
|
+
"types": "./build/vite.d.ts",
|
|
113
|
+
"default": "./build/vite.js"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"dependencies": {
|
|
117
|
+
"@rivetjs/runtime": "0.1.0-alpha.1",
|
|
118
|
+
"@rivetjs/reactivity": "0.1.0-alpha.1",
|
|
119
|
+
"@rivetjs/compiler": "0.1.0-alpha.1"
|
|
120
|
+
},
|
|
121
|
+
"engines": {
|
|
122
|
+
"node": ">=24"
|
|
123
|
+
},
|
|
124
|
+
"peerDependencies": {
|
|
125
|
+
"vite": "^8.3.2"
|
|
126
|
+
},
|
|
127
|
+
"peerDependenciesMeta": {
|
|
128
|
+
"vite": {
|
|
129
|
+
"optional": true
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
"repository": {
|
|
133
|
+
"type": "git",
|
|
134
|
+
"url": "git+https://github.com/N1XUS/rivetjs.git",
|
|
135
|
+
"directory": "libs/router"
|
|
136
|
+
},
|
|
137
|
+
"homepage": "https://github.com/N1XUS/rivetjs/tree/main/libs/router#readme",
|
|
138
|
+
"bugs": {
|
|
139
|
+
"url": "https://github.com/N1XUS/rivetjs/issues"
|
|
140
|
+
},
|
|
141
|
+
"publishConfig": {
|
|
142
|
+
"access": "public"
|
|
143
|
+
},
|
|
144
|
+
"files": [
|
|
145
|
+
"LICENSE",
|
|
146
|
+
"README.md",
|
|
147
|
+
"adapters",
|
|
148
|
+
"build",
|
|
149
|
+
"cli",
|
|
150
|
+
"client",
|
|
151
|
+
"index.d.ts",
|
|
152
|
+
"index.js",
|
|
153
|
+
"server",
|
|
154
|
+
"server-only.d.ts",
|
|
155
|
+
"server-only.js",
|
|
156
|
+
"shared"
|
|
157
|
+
]
|
|
158
|
+
}
|
package/server/app.d.ts
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import type { ServerValue } from "@rivetjs/runtime/server";
|
|
2
|
+
import type { ResumeManifest } from "@rivetjs/runtime/server-resume";
|
|
3
|
+
import type { RenderCache } from "@rivetjs/runtime/server-cache";
|
|
4
|
+
import type { ActionResult, Head, HeadSink, LoaderDeps } from "../shared/data.js";
|
|
5
|
+
import { type CSPOptions } from "../shared/csp.js";
|
|
6
|
+
import { type InlineStyleManifest } from "./inline-styles.js";
|
|
7
|
+
import type { TrailingSlash } from "../shared/slash.js";
|
|
8
|
+
import { type AppHandler, type AppRoute, type BodyLimit, type ErrorInfo, type ShellPhase } from "./handler.js";
|
|
9
|
+
import { type DocumentShell } from "./render.js";
|
|
10
|
+
import type { EarlyHintsOptions } from "./early-hints.js";
|
|
11
|
+
import type { RouteCacheOptions, RouteRules } from "./route-cache.js";
|
|
12
|
+
/** How a dev page renders (`AppConfig.devResume`). */
|
|
13
|
+
export type DevResumeMode = "check" | "resume";
|
|
14
|
+
/** What the generated page factory receives. */
|
|
15
|
+
export interface PageInput {
|
|
16
|
+
readonly data: readonly unknown[];
|
|
17
|
+
readonly url: URL;
|
|
18
|
+
readonly head: Head | undefined;
|
|
19
|
+
readonly error?: {
|
|
20
|
+
readonly status: number;
|
|
21
|
+
readonly message: string;
|
|
22
|
+
};
|
|
23
|
+
/** Component head collector (entries generated with `@rivetjs/kit`); the app provides it through `ServerData`. */
|
|
24
|
+
readonly headSink?: HeadSink;
|
|
25
|
+
/** The form action this request performed (no-JS POST): pages read it with `actionResult()`. */
|
|
26
|
+
readonly action?: ActionResult;
|
|
27
|
+
/** Layouts whose loader read the request URL (client navigation reloads them on any URL change). */
|
|
28
|
+
readonly byURL?: readonly number[];
|
|
29
|
+
/** Loaders' `event.depends()` keys (absent when none called it): resumed with the layout state for `invalidate(key)`. */
|
|
30
|
+
readonly deps?: LoaderDeps;
|
|
31
|
+
/** A `data` slot is a deferred loader's handle (`load(fn, { defer: true })`): the page streams (out of order) even without `stream`. */
|
|
32
|
+
readonly deferred?: true;
|
|
33
|
+
/** A deferred loader's redirect target, read at the document's end (client redirect). */
|
|
34
|
+
readonly moved?: () => string | undefined;
|
|
35
|
+
/** @internal Route rule `shell`: a shell fill / replay (always streams). */
|
|
36
|
+
readonly shell?: ShellPhase;
|
|
37
|
+
}
|
|
38
|
+
/** Shape of the generated `.rivet/entry.server.tsx` module. */
|
|
39
|
+
export interface GeneratedEntry {
|
|
40
|
+
readonly routes: readonly AppRoute[];
|
|
41
|
+
readonly universal: Readonly<Record<string, () => Promise<[number, {
|
|
42
|
+
head?: unknown;
|
|
43
|
+
}][]>>>;
|
|
44
|
+
page(input: PageInput): () => ServerValue;
|
|
45
|
+
/** The app's document shell, when codegen was given one. */
|
|
46
|
+
readonly document?: DocumentShell;
|
|
47
|
+
/** `createApp` from the same bundle as the app (one runtime instance). */
|
|
48
|
+
readonly createApp?: typeof createApp;
|
|
49
|
+
/** Generated with component head (`@rivetjs/kit`): pages hold the document start until the shell rendered. */
|
|
50
|
+
readonly headComponents?: boolean;
|
|
51
|
+
/** URL base path the route patterns carry (`""` or e.g. `/app`; `rivetRouter({ base })` / Vite `base`). */
|
|
52
|
+
readonly base?: string;
|
|
53
|
+
/** `rivetRouter({ trailingSlash })` when `"never"` / `"always"` (the handler's 308s use the bundle's build-time constant; the static adapter reads this). */
|
|
54
|
+
readonly trailingSlash?: Exclude<TrailingSlash, "ignore">;
|
|
55
|
+
/** `rivetRouter({ preload: { background } })`: the default `preload.background` of this app's pages. */
|
|
56
|
+
readonly preloadBackground?: number;
|
|
57
|
+
/** Document prefetch on (`rivetRouter({ prefetch })`): the default `preload.ahead` of this app's pages. */
|
|
58
|
+
readonly fetchAhead?: boolean;
|
|
59
|
+
/** `rivetRouter({ routeRules })`: the app's route rules (JSON data; `createApp({ routeRules })` replaces them). */
|
|
60
|
+
readonly routeRules?: RouteRules;
|
|
61
|
+
}
|
|
62
|
+
/** Config of the server app built from the generated routes entry. */
|
|
63
|
+
export interface AppConfig {
|
|
64
|
+
readonly entry: GeneratedEntry;
|
|
65
|
+
/** Document shell; defaults to the entry's `document`. */
|
|
66
|
+
readonly document?: DocumentShell;
|
|
67
|
+
/** Stylesheet URLs passed to the document. */
|
|
68
|
+
readonly styles?: readonly string[];
|
|
69
|
+
/**
|
|
70
|
+
* Per-route stylesheets (route modules' CSS), linked after `styles`: the client build's
|
|
71
|
+
* `.vite/rivet-route-css.json` (see `loadBuild`) or, in dev, a lookup of the route's module graph.
|
|
72
|
+
*/
|
|
73
|
+
readonly routeStyles?: Readonly<Record<string, readonly string[]>> | ((routeId: string) => readonly string[] | Promise<readonly string[]>);
|
|
74
|
+
/**
|
|
75
|
+
* Stylesheets pages may write inline instead of linking: the client build's `.vite/rivet-inline-css.json`
|
|
76
|
+
* (`rivetRouter({ inlineStylesheets })`, see `loadBuild`), decided per page from its `styles` + `routeStyles` list
|
|
77
|
+
* (`inlineStylesFor`). Dev links every sheet.
|
|
78
|
+
*/
|
|
79
|
+
readonly inlineStyles?: InlineStyleManifest;
|
|
80
|
+
/** Document defaults below every route (level −1): e.g. `{ titleTemplate: "%s · Shop", meta: [...] }`. */
|
|
81
|
+
readonly head?: Head;
|
|
82
|
+
/** Production resume manifest; omit in dev (see `devResume`). */
|
|
83
|
+
readonly manifest?: ResumeManifest;
|
|
84
|
+
readonly dev?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Dev (no manifest): module scripts that client-render the page (e.g. the Vite client and the
|
|
87
|
+
* generated `entry.dev.tsx`). The app renders inside `[data-rivet-dev]` with its route data embedded.
|
|
88
|
+
* A function gets the page's locale (i18n), e.g. to load that locale's dev module graph.
|
|
89
|
+
*/
|
|
90
|
+
readonly devScripts?: readonly string[] | ((locale: string | undefined) => readonly string[]);
|
|
91
|
+
/**
|
|
92
|
+
* Dev server (`rivetRouter` sets it; no production `manifest`): pages render through the resume
|
|
93
|
+
* recorder with this dev manifest, so serialization and chunk errors surface as in production.
|
|
94
|
+
* `mode` (per page locale when a function): `"check"` leaves the recorded state and loader out of
|
|
95
|
+
* the page and the browser client-renders (`devScripts`, embedded data); `"resume"` serves the
|
|
96
|
+
* page resumable like production, inside `[data-rivet-dev="resume"]` followed by `devScripts`.
|
|
97
|
+
*/
|
|
98
|
+
readonly devResume?: {
|
|
99
|
+
readonly manifest: ResumeManifest;
|
|
100
|
+
readonly mode: DevResumeMode | ((locale: string | undefined) => DevResumeMode);
|
|
101
|
+
};
|
|
102
|
+
readonly stream?: {
|
|
103
|
+
deadline?: number;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Preload planner. `background`: byte budget (minified) of `visible` chunks' static closures also prefetched at idle,
|
|
107
|
+
* in plan order (default 1 MiB, `0` off; Save-Data / 2G never). A function decides per page URL (`undefined`: default),
|
|
108
|
+
* e.g. `0` for embedded frames that a page shows many of. `lean` (per page URL when a function): nothing loads before
|
|
109
|
+
* the first interaction — no scheduled prefetch (eager / idle / visible / background) and no router fetch-ahead;
|
|
110
|
+
* handlers load on intent (pointer dwell, focus, touch) and interaction, as under Save-Data.
|
|
111
|
+
*/
|
|
112
|
+
readonly preload?: {
|
|
113
|
+
readonly background?: number | ((url: URL) => number | undefined);
|
|
114
|
+
readonly lean?: boolean | ((url: URL) => boolean | undefined);
|
|
115
|
+
/**
|
|
116
|
+
* Islands-only lean pages of a file-router app (bridge D-lean: the router's region + link listeners deferred until
|
|
117
|
+
* the first link intent / click) still fetch the runtime + router chunks ahead (low priority after `load`, fetched,
|
|
118
|
+
* never evaluated). On `resume.chunks: "route"` builds every page also fetches its own handler chunks ahead the
|
|
119
|
+
* same way. Default: the app's document prefetch (`rivetRouter({ prefetch })` on → true). Ignored with `lean`.
|
|
120
|
+
*/
|
|
121
|
+
readonly ahead?: boolean;
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Content-Security-Policy for HTML pages, given the response's nonce (inline scripts carry it).
|
|
125
|
+
* Default: strict nonce policy (`strictCSP`); `CSPOptions` (`{ trustedTypes, directives }`): `strictCSP` with them (directives checked at startup);
|
|
126
|
+
* `false` sends none. A `headers()` CSP wins.
|
|
127
|
+
*/
|
|
128
|
+
readonly csp?: false | CSPOptions | ((nonce: string) => string);
|
|
129
|
+
/** Server failures (`digest` set for 5xx responses, matching the message the client sees; `phase`/`route` where it failed). */
|
|
130
|
+
onError?(error: unknown, request: Request, info?: ErrorInfo): void;
|
|
131
|
+
/**
|
|
132
|
+
* i18n: locales in compiler variant order and per-locale resume manifests. A page renders the
|
|
133
|
+
* variant and manifest of `locals.locale` (set by a guard, e.g. `i18nGuard`); `locals.dir` reaches
|
|
134
|
+
* the document as `dir`. Error pages use the request's `locals` too; without a locale there
|
|
135
|
+
* (unmatched URLs, guards that failed first) `resolve(request)` decides, else a first path segment
|
|
136
|
+
* naming a locale, else the first locale.
|
|
137
|
+
*/
|
|
138
|
+
readonly i18n?: {
|
|
139
|
+
readonly locales: readonly string[];
|
|
140
|
+
readonly manifests?: Readonly<Record<string, ResumeManifest>>;
|
|
141
|
+
resolve?(request: Request): string | undefined | Promise<string | undefined>;
|
|
142
|
+
};
|
|
143
|
+
/** Request body limit for unsafe methods (413 past it); default 1 MiB, multipart 10 MiB. */
|
|
144
|
+
readonly maxBody?: BodyLimit;
|
|
145
|
+
/**
|
|
146
|
+
* Route rules by path pattern (`{ "/blog/**": { swr: 60 }, "/about": { isr: true, headers: { … } } }`): response headers,
|
|
147
|
+
* and an in-process cache of rendered pages (fresh, stale-while-revalidate, ISR; ETag / Last-Modified → 304).
|
|
148
|
+
* Defaults to the entry's (`rivetRouter({ routeRules })`). The rules module loads only when there are rules.
|
|
149
|
+
* See `server/route-cache.ts` / docs "Caching".
|
|
150
|
+
*/
|
|
151
|
+
readonly routeRules?: RouteRules;
|
|
152
|
+
/** The route rules' page store: `maxBytes` (default 32 MiB), `maxEntries` (default 5000), `origin` (the public origin pages are stored for; `isr` needs it). */
|
|
153
|
+
readonly routeCache?: RouteCacheOptions;
|
|
154
|
+
/**
|
|
155
|
+
* Cross-request fragment cache (`createRenderCache()` from `@rivetjs/runtime/server-cache`): every page renders inside
|
|
156
|
+
* its scope (`withRenderCache`: locale variant, nonce, abort signal, resumable), so `cached()` / `shell()` / compiler
|
|
157
|
+
* `_cached` components hit across requests. Node-only (AsyncLocalStorage; Workers: `nodejs_als`); loaded only when set.
|
|
158
|
+
*/
|
|
159
|
+
readonly renderCache?: RenderCache;
|
|
160
|
+
/**
|
|
161
|
+
* Early hints for HTML pages (production only): linked stylesheets, the head's build-asset font preloads (learned
|
|
162
|
+
* per route from its last render), `links` (e.g. preconnects), and with `runtime: true` the resume runtime entry. Sent as `103 Early
|
|
163
|
+
* Hints` by the node adapter before guards and loaders run (`start({ earlyHints })`), and as a `Link` header on every
|
|
164
|
+
* page response (proxies such as Cloudflare turn it into 103s). Browsers act on 103s over HTTP/2+ only. Pages served
|
|
165
|
+
* from the route cache get the stored `Link` header but no 103 (no render runs): it helps uncached pages. Default off.
|
|
166
|
+
*/
|
|
167
|
+
readonly earlyHints?: boolean | EarlyHintsOptions;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Merge heads outer → inner: inner wins per key (title; meta by name/property/http-equiv/itemprop
|
|
171
|
+
* + media; one canonical; alternates by hreflang; other links by rel + href; scripts by id/src).
|
|
172
|
+
*/
|
|
173
|
+
export declare function mergeHeads(heads: readonly (Head | undefined)[]): Head | undefined;
|
|
174
|
+
/** Create the app's request handler. */
|
|
175
|
+
export declare function createApp(config: AppConfig): AppHandler;
|