@rivetjs/router 0.0.0-stage → 0.1.0-alpha.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/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 +7 -0
- package/adapters/files.js +103 -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 +163 -0
- package/adapters/node.js +940 -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 +92 -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 +33 -0
- package/adapters/vercel.js +45 -0
- package/build/codegen.d.ts +84 -0
- package/build/codegen.js +920 -0
- package/build/dev-errors.d.ts +19 -0
- package/build/dev-errors.js +236 -0
- package/build/migrate.d.ts +15 -0
- package/build/migrate.js +146 -0
- package/build/route-css.d.ts +54 -0
- package/build/route-css.js +216 -0
- package/build/routes.d.ts +50 -0
- package/build/routes.js +202 -0
- package/build/sync.d.ts +20 -0
- package/build/sync.js +16 -0
- package/build/vite.d.ts +195 -0
- package/build/vite.js +703 -0
- package/cli/rivet.d.ts +2 -0
- package/cli/rivet.js +100 -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 +74 -0
- package/client/index.d.ts +152 -0
- package/client/index.js +680 -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 +138 -0
- package/index.js +7 -0
- package/package.json +156 -4
- package/server/app.d.ts +169 -0
- package/server/app.js +302 -0
- package/server/body.d.ts +20 -0
- package/server/body.js +8 -0
- package/server/early-hints.d.ts +34 -0
- package/server/early-hints.js +63 -0
- package/server/handler.d.ts +196 -0
- package/server/handler.js +623 -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 +78 -0
- package/server/render.d.ts +94 -0
- package/server/render.js +489 -0
- package/server/route-cache.d.ts +175 -0
- package/server/route-cache.js +742 -0
- package/server/security.d.ts +18 -0
- package/server/security.js +47 -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/slash.d.ts +8 -0
- package/shared/slash.js +24 -0
package/build/vite.d.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import type { Plugin } from "vite";
|
|
2
|
+
import { type ImagesConfig, type RivetCSSOptions, type RivetOptions, type RivetResumeOptions } from "@rivetjs/compiler/vite";
|
|
3
|
+
import { type RouteTable } from "./routes.js";
|
|
4
|
+
import { type CodegenOptions } from "./codegen.js";
|
|
5
|
+
import { type TrailingSlash } from "../shared/slash.js";
|
|
6
|
+
import { type RouteRules } from "../server/route-cache.js";
|
|
7
|
+
import type { DocumentPrefetch, PrefetchEagerness } from "../shared/prefetch.js";
|
|
8
|
+
export type { InlineStylesheets } from "./route-css.js";
|
|
9
|
+
/** Build-time helper for other Vite plugins (docs-kit example frames): one merged sheet per stylesheet list. */
|
|
10
|
+
export { mergeRouteCSS } from "./route-css.js";
|
|
11
|
+
import { type InlineStylesheets } from "./route-css.js";
|
|
12
|
+
import { type AdapterName, type AdapterOptions } from "../adapters/target-build.js";
|
|
13
|
+
/** Options of the `rivetRouter()` Vite plugin. */
|
|
14
|
+
export interface RivetRouterOptions {
|
|
15
|
+
/** Routes directory, root-relative (default `src/routes`). */
|
|
16
|
+
routes?: string;
|
|
17
|
+
/**
|
|
18
|
+
* URL base path the app is served under (`/app`); sets Vite's `base`. Default: Vite's `base`.
|
|
19
|
+
* Route patterns, `<Link to>`, `navigate()`, data requests, prefetch and the adapters follow it.
|
|
20
|
+
*/
|
|
21
|
+
base?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Trailing-slash policy. `"ignore"` (default): `/a` and `/a/` serve the same page as requested.
|
|
24
|
+
* `"never"` / `"always"`: one canonical form — page GET/HEAD requests for the other answer 308,
|
|
25
|
+
* `<Link>` / `navigate()` write hrefs in it, the static adapter writes `a.html` (`never`) or
|
|
26
|
+
* `a/index.html`. `/` itself never changes; endpoints and other methods are never redirected.
|
|
27
|
+
*/
|
|
28
|
+
trailingSlash?: TrailingSlash;
|
|
29
|
+
/**
|
|
30
|
+
* Preload planner default for this app's pages (`createApp` / adapter `preload` options override it per server):
|
|
31
|
+
* `background` = byte budget (minified closures) of below-the-fold `visible` chunks also prefetched at idle; `0` off.
|
|
32
|
+
* Default 1 MiB. Dev pages keep `visible` chunks viewport-only (dev manifests have no bundle sizes).
|
|
33
|
+
*/
|
|
34
|
+
preload?: {
|
|
35
|
+
background?: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Route rules by path pattern (`/about`, `/blog/*`, `/docs/**`): `headers`, and `cache` / `swr` / `isr` — rendered pages
|
|
39
|
+
* stored in process (fresh for `maxAge` s, then served stale while one render refreshes them; `isr: true` until
|
|
40
|
+
* `revalidate()`), with ETag / Last-Modified → 304 and `s-maxage` / `stale-while-revalidate` for CDNs. JSON data:
|
|
41
|
+
* the server entry exports it, every adapter applies it (`createApp` / adapter `routeRules` replace it). Dev applies
|
|
42
|
+
* `headers` only. See `@rivetjs/router/route-cache`.
|
|
43
|
+
*/
|
|
44
|
+
routeRules?: RouteRules;
|
|
45
|
+
/** Codegen output directory, root-relative (default `.rivet`). */
|
|
46
|
+
outDir?: string;
|
|
47
|
+
/** Root-relative module whose default export is the `DocumentShell` (default `src/document.ts`). */
|
|
48
|
+
document?: string;
|
|
49
|
+
/** Root-relative stylesheets: client build inputs, linked by the document (`styles`). */
|
|
50
|
+
styles?: string[];
|
|
51
|
+
/**
|
|
52
|
+
* Stylesheets written into the page as `<style>` instead of linked (Astro's `build.inlineStylesheets`), production
|
|
53
|
+
* server / static pages, decided per page. `"auto"` (default): all of the page's sheets (global + route) when their
|
|
54
|
+
* brotli sizes add up to at most 6 KB (the page then has no render-blocking stylesheet request), else each sheet of
|
|
55
|
+
* at most Vite's `build.assetsInlineLimit` (4096 raw bytes; a function limit counts as 4096). `{ maxTotalBrotli }`:
|
|
56
|
+
* `auto` with another total (bytes). `"always"`: every sheet; `"never"`: all linked. Sheets with relative `url()` /
|
|
57
|
+
* `@import` references stay linked. Inline styles carry the page's CSP nonce (static pages: hashed into a
|
|
58
|
+
* `style-src` you set).
|
|
59
|
+
*/
|
|
60
|
+
inlineStylesheets?: InlineStylesheets;
|
|
61
|
+
/** `server` (default) and `static` resume server-rendered pages; `csr` mounts a single-page app. */
|
|
62
|
+
mode?: NonNullable<CodegenOptions["mode"]>;
|
|
63
|
+
/** Resume options; generated route modules are added to `modules`. */
|
|
64
|
+
resume?: Partial<RivetResumeOptions>;
|
|
65
|
+
/** `?image` / `?jsx` imports (`rivet({ images })`); build with the app builder so server-only images reach the client output. */
|
|
66
|
+
images?: ImagesConfig | true;
|
|
67
|
+
/** DevTools on the dev server when `@rivetjs/devtools` is installed (default true; see `rivet()`). */
|
|
68
|
+
devtools?: boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Framework bridges (`rivet({ bridges })`: `react()` from `@rivetjs/bridge-react/vite`, `preact()` from
|
|
71
|
+
* `@rivetjs/bridge-preact/vite`, …): those frameworks' components render as islands inside the routed pages.
|
|
72
|
+
* Server / static modes only.
|
|
73
|
+
*/
|
|
74
|
+
bridges?: RivetOptions["bridges"];
|
|
75
|
+
/**
|
|
76
|
+
* Component head (`@rivetjs/kit` `<Title>`, `<Meta>`, …): `components` holds each page's document
|
|
77
|
+
* start until its shell rendered; on by default when the kit Vite plugin (`kit()`) is installed.
|
|
78
|
+
* `early` keeps route `head` exports only (document start written first).
|
|
79
|
+
*/
|
|
80
|
+
head?: "components" | "early";
|
|
81
|
+
/** Scoped styles options passed to `rivet({ css })`. */
|
|
82
|
+
css?: RivetCSSOptions;
|
|
83
|
+
/** Compile-time `<Icon>` from `@rivetjs/kit/icon` (`rivet({ staticIcons })`, default true); `false` keeps every component call. */
|
|
84
|
+
staticIcons?: boolean;
|
|
85
|
+
/**
|
|
86
|
+
* Route transitions (View Transitions) + pending UI. Off by default; `true` = defaults. The
|
|
87
|
+
* transitions module loads on the first navigation intent; the generated resume entry provides
|
|
88
|
+
* the navigation context (a custom `resume.entry` must add `[Navigation, navigation]` itself).
|
|
89
|
+
*/
|
|
90
|
+
transitions?: CodegenOptions["transitions"];
|
|
91
|
+
/** Route announcer for screen readers after client navigation (default true; `false` opts out). */
|
|
92
|
+
announce?: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* The app reads search params (`useSearchParams()` / `SearchParams`): the server provides the
|
|
95
|
+
* request's, the resume entry the browser's. Default: detected from the project's sources
|
|
96
|
+
* (`routerUsage`); set `true` when only a published dependency reads them.
|
|
97
|
+
*/
|
|
98
|
+
searchParams?: boolean;
|
|
99
|
+
/** The app calls `navigate()` / `invalidate()` / `revalidate()` / `setSearchParams()`. Default: detected (`routerUsage`). */
|
|
100
|
+
navigate?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* The app uses `@rivetjs/forms` (directly or through `@rivetjs/ui` `Form`): enhanced submits reach the router
|
|
103
|
+
* through `Symbol.for("rivet.router")` (implies `navigate`). Default: detected (`routerUsage`).
|
|
104
|
+
*/
|
|
105
|
+
forms?: boolean;
|
|
106
|
+
/** The app reads `useParams()`. Default: detected (`routerUsage`). */
|
|
107
|
+
params?: boolean;
|
|
108
|
+
/** The app renders `<Link active>`: active links are re-marked after client navigation. Default: detected (`routerUsage`). */
|
|
109
|
+
activeLinks?: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Document prefetch for navigations that load a document (`@rivetjs/router/prefetch`): every page's
|
|
112
|
+
* head gets Speculation Rules (Chromium) + a ~1 kB inline intent fallback. `"document"` / `"prerender"`:
|
|
113
|
+
* also the default for every same-origin link without its own `prefetch` / `data-rivet-prefetch`
|
|
114
|
+
* (plain `<a>` included; `"none"` opts one out). `true`: only links marked `prefetch="document"` /
|
|
115
|
+
* `"prerender"`. Default: detected (`routerUsage`: such a mark in the sources); `false`: off.
|
|
116
|
+
* Server / static modes (ignored in `csr`).
|
|
117
|
+
*/
|
|
118
|
+
prefetch?: boolean | DocumentPrefetch;
|
|
119
|
+
/**
|
|
120
|
+
* When Chromium starts a document prefetch / prerender (Speculation Rules `eagerness`):
|
|
121
|
+
* `"conservative"` (pointer / touch down), `"moderate"` (default: also a ~200 ms hover), `"eager"`
|
|
122
|
+
* (sooner). Applies only while `prefetch` is on; the fallback keeps its 65 ms / focus / down timing.
|
|
123
|
+
*/
|
|
124
|
+
prefetchEagerness?: PrefetchEagerness;
|
|
125
|
+
/**
|
|
126
|
+
* Which links of a client-routed app take part in document prefetch. Default `true`: `data-rivet-reload` /
|
|
127
|
+
* `rel=external` links and links whose path no route matches (every page carries the route-path RegExp, in the
|
|
128
|
+
* Speculation Rules and in the fallback call). `false`: only `data-rivet-reload` / `rel=external` links — for apps
|
|
129
|
+
* whose document links all carry `reload` (the docs sites: −7.7 KB of route patterns per page).
|
|
130
|
+
*/
|
|
131
|
+
prefetchPaths?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Client-side navigation on pages with nothing else to resume (Astro's `<ClientRouter />` model).
|
|
134
|
+
* `true`: every resumed page ships the router (link clicks / intent prefetch / back-forward served in
|
|
135
|
+
* place). `false`: the router's listeners alone do not make a page resumable — a page without resumable
|
|
136
|
+
* symbols, client effects or forms ships zero JS (no loader, state script or modulepreloads) and its
|
|
137
|
+
* links load documents; interactive pages still route in place. Default: `false` in `static` mode,
|
|
138
|
+
* `true` in `server` mode (ignored in `csr`).
|
|
139
|
+
*/
|
|
140
|
+
clientRouter?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Deploy target besides node (name or options object): `vite build --ssr` also emits the target's
|
|
143
|
+
* entry (client manifests inlined, dependencies bundled). `"fetch"`: `dist/server/fetch.js`
|
|
144
|
+
* (`export default { fetch }`, any web-standard runtime). Platforms, packaged after the server build:
|
|
145
|
+
* `"vercel"` (`.vercel/output`, Build Output API v3), `"netlify"` (`.netlify/v1` + `dist/netlify`),
|
|
146
|
+
* `"cloudflare"` (`dist/cloudflare`, Workers + static assets), `"bun"` (`dist/server/bun.js`),
|
|
147
|
+
* `"deno"` (`dist/server/deno.js`).
|
|
148
|
+
*/
|
|
149
|
+
adapter?: AdapterName | AdapterOptions;
|
|
150
|
+
/**
|
|
151
|
+
* Dev server. `resume` (default true): pages resume like production (recorder state, inline loader,
|
|
152
|
+
* symbol chunks served by Vite); the first hot update switches the page to client rendering, after
|
|
153
|
+
* which components hot-replace in place. `false`: pages client-render over the server HTML (the
|
|
154
|
+
* recorder still runs, so serialization errors still reach the overlay).
|
|
155
|
+
*/
|
|
156
|
+
dev?: {
|
|
157
|
+
resume?: boolean;
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/** Router features generated code provides only when the app uses them (`routerUsage`). */
|
|
161
|
+
export interface RouterUsage {
|
|
162
|
+
/** `useSearchParams` / `SearchParams`. */
|
|
163
|
+
searchParams: boolean;
|
|
164
|
+
/** `navigate` / `invalidate` / `revalidate` / `setSearchParams`, or forms (below). */
|
|
165
|
+
navigate: boolean;
|
|
166
|
+
/** `@rivetjs/forms`, or `Form` in a file importing `@rivetjs/ui` (its `Form` is built on forms). */
|
|
167
|
+
forms: boolean;
|
|
168
|
+
/** `useParams`. */
|
|
169
|
+
params: boolean;
|
|
170
|
+
/** `<Link active>` (an `active` attribute on a `<Link>`). */
|
|
171
|
+
activeLinks: boolean;
|
|
172
|
+
/** `prefetch="document"` / `"prerender"` (`<Link>` prop or `data-rivet-prefetch` attribute). */
|
|
173
|
+
prefetch: boolean;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Which router features the project's sources use: every source under `root` (skipping
|
|
177
|
+
* `node_modules`, `dist` and dot directories) plus the sources of linked (workspace / `npm link`)
|
|
178
|
+
* dependencies of `root/package.json`, except `@rivetjs/*` packages. Text based: a name that appears
|
|
179
|
+
* in a file importing `@rivetjs/router` counts (false positives only cost bytes); published
|
|
180
|
+
* dependencies are not scanned (set `rivetRouter({ navigate, params, searchParams })`).
|
|
181
|
+
*/
|
|
182
|
+
export declare function routerUsage(root: string, options?: {
|
|
183
|
+
exclude?: readonly string[];
|
|
184
|
+
}): Promise<RouterUsage>;
|
|
185
|
+
/** Regenerate `.rivet/` for a project root; returns the resume modules and whether files changed. */
|
|
186
|
+
export declare function generateRoutes(root: string, options?: Pick<RivetRouterOptions, "routes" | "outDir" | "document" | "mode" | "transitions" | "announce" | "base" | "searchParams" | "navigate" | "forms" | "params" | "activeLinks" | "trailingSlash" | "prefetch" | "prefetchEagerness" | "prefetchPaths" | "preload" | "routeRules" | "clientRouter"> & {
|
|
187
|
+
head?: "components" | undefined;
|
|
188
|
+
}): Promise<{
|
|
189
|
+
table: RouteTable;
|
|
190
|
+
resumeModules: readonly string[];
|
|
191
|
+
changed: boolean;
|
|
192
|
+
resumeEntry: boolean;
|
|
193
|
+
}>;
|
|
194
|
+
/** The router's Vite plugins: file routes, typed routes, server code split, data requests and build adapters. */
|
|
195
|
+
export declare function rivetRouter(options?: RivetRouterOptions): Plugin[];
|