@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.
Files changed (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -2
  3. package/adapters/assemble.d.ts +32 -0
  4. package/adapters/assemble.js +32 -0
  5. package/adapters/build.d.ts +24 -0
  6. package/adapters/build.js +43 -0
  7. package/adapters/bun.d.ts +18 -0
  8. package/adapters/bun.js +44 -0
  9. package/adapters/cloudflare.d.ts +5 -0
  10. package/adapters/cloudflare.js +8 -0
  11. package/adapters/cluster.d.ts +7 -0
  12. package/adapters/cluster.js +130 -0
  13. package/adapters/csr.d.ts +12 -0
  14. package/adapters/csr.js +11 -0
  15. package/adapters/deno.d.ts +13 -0
  16. package/adapters/deno.js +35 -0
  17. package/adapters/fetch.d.ts +55 -0
  18. package/adapters/fetch.js +72 -0
  19. package/adapters/files.d.ts +20 -0
  20. package/adapters/files.js +155 -0
  21. package/adapters/idle-memory.d.ts +23 -0
  22. package/adapters/idle-memory.js +91 -0
  23. package/adapters/netlify.d.ts +13 -0
  24. package/adapters/netlify.js +15 -0
  25. package/adapters/node.d.ts +180 -0
  26. package/adapters/node.js +986 -0
  27. package/adapters/pack.d.ts +39 -0
  28. package/adapters/pack.js +360 -0
  29. package/adapters/server-target.d.ts +17 -0
  30. package/adapters/server-target.js +8 -0
  31. package/adapters/static.d.ts +84 -0
  32. package/adapters/static.js +231 -0
  33. package/adapters/target-build.d.ts +95 -0
  34. package/adapters/target-build.js +118 -0
  35. package/adapters/vercel-edge.d.ts +7 -0
  36. package/adapters/vercel-edge.js +9 -0
  37. package/adapters/vercel.d.ts +35 -0
  38. package/adapters/vercel.js +45 -0
  39. package/build/codegen.d.ts +97 -0
  40. package/build/codegen.js +1037 -0
  41. package/build/dev-errors.d.ts +23 -0
  42. package/build/dev-errors.js +247 -0
  43. package/build/lazy-rows.d.ts +19 -0
  44. package/build/lazy-rows.js +59 -0
  45. package/build/migrate.d.ts +31 -0
  46. package/build/migrate.js +385 -0
  47. package/build/reach.d.ts +60 -0
  48. package/build/reach.js +302 -0
  49. package/build/route-css.d.ts +54 -0
  50. package/build/route-css.js +216 -0
  51. package/build/routes.d.ts +55 -0
  52. package/build/routes.js +219 -0
  53. package/build/sync.d.ts +20 -0
  54. package/build/sync.js +16 -0
  55. package/build/vite.d.ts +208 -0
  56. package/build/vite.js +861 -0
  57. package/cli/rivet.d.ts +2 -0
  58. package/cli/rivet.js +101 -0
  59. package/client/active.d.ts +6 -0
  60. package/client/active.js +22 -0
  61. package/client/announce.d.ts +2 -0
  62. package/client/announce.js +21 -0
  63. package/client/dev.d.ts +41 -0
  64. package/client/dev.js +91 -0
  65. package/client/index.d.ts +156 -0
  66. package/client/index.js +714 -0
  67. package/client/layouts.d.ts +110 -0
  68. package/client/layouts.js +310 -0
  69. package/client/leave.d.ts +40 -0
  70. package/client/leave.js +75 -0
  71. package/client/link.d.ts +48 -0
  72. package/client/link.jsx +65 -0
  73. package/client/live.d.ts +57 -0
  74. package/client/live.js +170 -0
  75. package/client/navigate.d.ts +71 -0
  76. package/client/navigate.js +120 -0
  77. package/client/navigation.d.ts +28 -0
  78. package/client/navigation.js +14 -0
  79. package/client/params.d.ts +16 -0
  80. package/client/params.js +28 -0
  81. package/client/route-context.d.ts +32 -0
  82. package/client/route-context.js +21 -0
  83. package/client/scroll.d.ts +16 -0
  84. package/client/scroll.js +80 -0
  85. package/client/search.d.ts +8 -0
  86. package/client/search.js +17 -0
  87. package/client/tailwind.css +8 -0
  88. package/client/transition-helpers.d.ts +28 -0
  89. package/client/transition-helpers.js +63 -0
  90. package/client/transitions.css +90 -0
  91. package/client/transitions.d.ts +21 -0
  92. package/client/transitions.js +156 -0
  93. package/index.d.ts +135 -0
  94. package/index.js +8 -0
  95. package/package.json +156 -4
  96. package/server/app.d.ts +175 -0
  97. package/server/app.js +335 -0
  98. package/server/body.d.ts +20 -0
  99. package/server/body.js +8 -0
  100. package/server/deferred.d.ts +12 -0
  101. package/server/deferred.js +60 -0
  102. package/server/early-hints.d.ts +34 -0
  103. package/server/early-hints.js +63 -0
  104. package/server/handler.d.ts +240 -0
  105. package/server/handler.js +661 -0
  106. package/server/index.d.ts +9 -0
  107. package/server/index.js +6 -0
  108. package/server/inline-styles.d.ts +21 -0
  109. package/server/inline-styles.js +28 -0
  110. package/server/module.d.ts +14 -0
  111. package/server/module.js +96 -0
  112. package/server/render.d.ts +96 -0
  113. package/server/render.js +492 -0
  114. package/server/route-cache.d.ts +245 -0
  115. package/server/route-cache.js +813 -0
  116. package/server/security.d.ts +18 -0
  117. package/server/security.js +47 -0
  118. package/server/shell-build.d.ts +3 -0
  119. package/server/shell-build.js +2 -0
  120. package/server/shell-cache.d.ts +8 -0
  121. package/server/shell-cache.js +836 -0
  122. package/server/strict-csp.d.ts +7 -0
  123. package/server/strict-csp.js +18 -0
  124. package/server-only.d.ts +1 -0
  125. package/server-only.js +3 -0
  126. package/shared/actions.d.ts +10 -0
  127. package/shared/actions.js +18 -0
  128. package/shared/base.d.ts +8 -0
  129. package/shared/base.js +20 -0
  130. package/shared/cookie.d.ts +7 -0
  131. package/shared/cookie.js +32 -0
  132. package/shared/csp-directives.d.ts +9 -0
  133. package/shared/csp-directives.js +85 -0
  134. package/shared/csp-hash.d.ts +39 -0
  135. package/shared/csp-hash.js +121 -0
  136. package/shared/csp.d.ts +26 -0
  137. package/shared/csp.js +13 -0
  138. package/shared/data.d.ts +175 -0
  139. package/shared/data.js +22 -0
  140. package/shared/errors.d.ts +31 -0
  141. package/shared/errors.js +51 -0
  142. package/shared/head.d.ts +57 -0
  143. package/shared/head.js +242 -0
  144. package/shared/nonce.d.ts +2 -0
  145. package/shared/nonce.js +23 -0
  146. package/shared/prefetch-fallback.min.d.ts +1 -0
  147. package/shared/prefetch-fallback.min.js +2 -0
  148. package/shared/prefetch.d.ts +54 -0
  149. package/shared/prefetch.js +74 -0
  150. package/shared/redirect.d.ts +6 -0
  151. package/shared/redirect.js +25 -0
  152. package/shared/server-exports.d.ts +78 -0
  153. package/shared/server-exports.js +77 -0
  154. package/shared/slash.d.ts +8 -0
  155. package/shared/slash.js +24 -0
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reject cross-site unsafe requests: `Origin` must equal the app origin; without it `Sec-Fetch-Site`
3
+ * must be `same-origin`; with neither, form content types are rejected outside dev (browsers send at
4
+ * least one header; non-browser JSON clients send none; dev keeps `curl -d` working).
5
+ */
6
+ export declare function crossSite(request: Request, origin: string, dev: boolean): boolean;
7
+ /** Request body limit: bytes for every body, or per kind (`multipart` uploads usually get more). */
8
+ export type BodyLimit = number | {
9
+ readonly default?: number;
10
+ readonly multipart?: number;
11
+ };
12
+ /**
13
+ * The request with its body limited to `limit` bytes: 413 at once for a larger `Content-Length`,
14
+ * else the body stream errors (and `state.exceeded` is set) once it passes the limit.
15
+ */
16
+ export declare function limitBody(request: Request, limit: BodyLimit | undefined, state: {
17
+ exceeded: boolean;
18
+ }): Request;
@@ -0,0 +1,47 @@
1
+ // Request hardening the handler applies to state-changing requests: cross-site request rejection
2
+ // (Origin / Fetch Metadata) and a request body size limit.
3
+ import { HttpError } from "../shared/errors.js";
4
+ /** Content types a cross-site HTML form (or a CORS "simple" request) can send. */
5
+ const FORM_TYPES = new Set(["application/x-www-form-urlencoded", "multipart/form-data", "text/plain"]);
6
+ const MiB = 1024 * 1024;
7
+ /**
8
+ * Reject cross-site unsafe requests: `Origin` must equal the app origin; without it `Sec-Fetch-Site`
9
+ * must be `same-origin`; with neither, form content types are rejected outside dev (browsers send at
10
+ * least one header; non-browser JSON clients send none; dev keeps `curl -d` working).
11
+ */
12
+ export function crossSite(request, origin, dev) {
13
+ const header = request.headers.get("origin");
14
+ if (header !== null)
15
+ return header !== origin;
16
+ const site = request.headers.get("sec-fetch-site");
17
+ if (site !== null)
18
+ return site !== "same-origin";
19
+ return !dev && FORM_TYPES.has(mediaType(request));
20
+ }
21
+ const mediaType = (request) => (request.headers.get("content-type") ?? "").split(";", 1)[0].trim().toLowerCase();
22
+ const TOO_LARGE = "Payload too large";
23
+ /**
24
+ * The request with its body limited to `limit` bytes: 413 at once for a larger `Content-Length`,
25
+ * else the body stream errors (and `state.exceeded` is set) once it passes the limit.
26
+ */
27
+ export function limitBody(request, limit, state) {
28
+ const max = typeof limit === "number" ? limit : mediaType(request) === "multipart/form-data" ? (limit?.multipart ?? 10 * MiB) : (limit?.default ?? MiB);
29
+ const declared = request.headers.get("content-length");
30
+ if (declared !== null && Number(declared) > max) {
31
+ state.exceeded = true;
32
+ throw new HttpError(413, TOO_LARGE);
33
+ }
34
+ if (!request.body || max === Infinity)
35
+ return request;
36
+ let size = 0;
37
+ const body = request.body.pipeThrough(new TransformStream({
38
+ transform(chunk, controller) {
39
+ size += chunk.byteLength;
40
+ if (size <= max)
41
+ return controller.enqueue(chunk);
42
+ state.exceeded = true;
43
+ controller.error(new HttpError(413, TOO_LARGE));
44
+ },
45
+ }));
46
+ return new Request(request, { body, duplex: "half" });
47
+ }
@@ -0,0 +1,3 @@
1
+ import type * as ShellCache from "./shell-cache.js";
2
+ /** Loads the shell cache module, or undefined when this bundle has none (rewritten by `build/vite.ts`). */
3
+ export declare const SHELL_BUILD: (() => Promise<typeof ShellCache>) | undefined;
@@ -0,0 +1,2 @@
1
+ /** Loads the shell cache module, or undefined when this bundle has none (rewritten by `build/vite.ts`). */
2
+ export const SHELL_BUILD = undefined;
@@ -0,0 +1,8 @@
1
+ import type { ShellHost, ShellServe } from "./route-cache.js";
2
+ /**
3
+ * Where the shell ends in `text` (latin1 view of the document so far): after the root state tail — the state script,
4
+ * the loader script and (with pending boundaries, `data-stream`) the stream add-on. -1: not yet (or never).
5
+ */
6
+ export declare function shellCut(text: string): number;
7
+ /** The route rules' shell entry point (`withRouteRules`): undefined = render without the shell. */
8
+ export declare function createShells(host: ShellHost): ShellServe;