@nifrajs/core 5.3.0 → 5.5.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.
Files changed (93) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/dist/index.d.ts +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/internal/route-lanes.d.ts.map +1 -1
  5. package/dist/internal/route-lanes.js +2 -1
  6. package/dist/internal/route-lanes.js.map +1 -1
  7. package/dist/internal/route-program.d.ts +5 -0
  8. package/dist/internal/route-program.d.ts.map +1 -1
  9. package/dist/internal/route-program.js +36 -15
  10. package/dist/internal/route-program.js.map +1 -1
  11. package/dist/range.d.ts.map +1 -1
  12. package/dist/range.js +62 -2
  13. package/dist/range.js.map +1 -1
  14. package/dist/router/router.d.ts +3 -2
  15. package/dist/router/router.d.ts.map +1 -1
  16. package/dist/router/router.js +22 -6
  17. package/dist/router/router.js.map +1 -1
  18. package/dist/security/baseline.d.ts.map +1 -1
  19. package/dist/security/baseline.js +4 -3
  20. package/dist/security/baseline.js.map +1 -1
  21. package/dist/server/body-lane.d.ts.map +1 -1
  22. package/dist/server/body-lane.js +4 -3
  23. package/dist/server/body-lane.js.map +1 -1
  24. package/dist/server/body.d.ts +2 -0
  25. package/dist/server/body.d.ts.map +1 -1
  26. package/dist/server/body.js +5 -0
  27. package/dist/server/body.js.map +1 -1
  28. package/dist/server/cookies.d.ts.map +1 -1
  29. package/dist/server/cookies.js +9 -2
  30. package/dist/server/cookies.js.map +1 -1
  31. package/dist/server/core-copies.js +1 -1
  32. package/dist/server/idempotency-lane.d.ts +11 -12
  33. package/dist/server/idempotency-lane.d.ts.map +1 -1
  34. package/dist/server/idempotency-lane.js +301 -151
  35. package/dist/server/idempotency-lane.js.map +1 -1
  36. package/dist/server/methods.d.ts +3 -2
  37. package/dist/server/methods.d.ts.map +1 -1
  38. package/dist/server/methods.js.map +1 -1
  39. package/dist/server/multipart.d.ts.map +1 -1
  40. package/dist/server/multipart.js +42 -13
  41. package/dist/server/multipart.js.map +1 -1
  42. package/dist/server/node-outcome.d.ts.map +1 -1
  43. package/dist/server/node-outcome.js +2 -2
  44. package/dist/server/node-outcome.js.map +1 -1
  45. package/dist/server/query.d.ts +1 -1
  46. package/dist/server/query.d.ts.map +1 -1
  47. package/dist/server/query.js +13 -5
  48. package/dist/server/query.js.map +1 -1
  49. package/dist/server/request-context.d.ts.map +1 -1
  50. package/dist/server/request-context.js +3 -3
  51. package/dist/server/request-context.js.map +1 -1
  52. package/dist/server/respond.d.ts +17 -0
  53. package/dist/server/respond.d.ts.map +1 -1
  54. package/dist/server/respond.js +81 -3
  55. package/dist/server/respond.js.map +1 -1
  56. package/dist/server/runtime-core.d.ts +15 -0
  57. package/dist/server/runtime-core.d.ts.map +1 -1
  58. package/dist/server/runtime-core.js +41 -1
  59. package/dist/server/runtime-core.js.map +1 -1
  60. package/dist/server/server.d.ts +14 -5
  61. package/dist/server/server.d.ts.map +1 -1
  62. package/dist/server/server.js +187 -62
  63. package/dist/server/server.js.map +1 -1
  64. package/dist/server/transport-lane.d.ts +2 -2
  65. package/dist/server/transport-lane.d.ts.map +1 -1
  66. package/dist/server/transport-lane.js +20 -20
  67. package/dist/server/transport-lane.js.map +1 -1
  68. package/dist/static-file.d.ts +127 -0
  69. package/dist/static-file.d.ts.map +1 -0
  70. package/dist/static-file.js +269 -0
  71. package/dist/static-file.js.map +1 -0
  72. package/package.json +6 -1
  73. package/src/index.ts +1 -1
  74. package/src/internal/route-lanes.ts +18 -16
  75. package/src/internal/route-program.ts +76 -12
  76. package/src/range.ts +61 -2
  77. package/src/router/router.ts +26 -5
  78. package/src/security/baseline.ts +4 -3
  79. package/src/server/body-lane.ts +4 -4
  80. package/src/server/body.ts +6 -0
  81. package/src/server/cookies.ts +7 -2
  82. package/src/server/core-copies.ts +1 -1
  83. package/src/server/idempotency-lane.ts +343 -209
  84. package/src/server/methods.ts +3 -2
  85. package/src/server/multipart.ts +62 -14
  86. package/src/server/node-outcome.ts +2 -1
  87. package/src/server/query.ts +12 -5
  88. package/src/server/request-context.ts +6 -3
  89. package/src/server/respond.ts +108 -6
  90. package/src/server/runtime-core.ts +54 -1
  91. package/src/server/server.ts +257 -102
  92. package/src/server/transport-lane.ts +28 -22
  93. package/src/static-file.ts +362 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,70 @@
1
1
  # @nifrajs/core
2
2
 
3
+ ## 5.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - aed4a76: `QUERY` is a standard method. A route registered with `method("QUERY", path, schema, handler)` from `@nifrajs/core/methods` joins the typed registry, validates a `body` schema, and is listed in `METHODS`; `all()` now covers it too. It has no builder of its own. On Bun it is served by the portable router, since Bun's route table has no slot for it, while other routes on the same path stay on the table. `securityBaseline()` holds a QUERY route to its read rules; its body is bounded like any other.
8
+
9
+ ### Patch Changes
10
+
11
+ - 0b095fb: A Response an `onResponse` hook hands back in place of the one it was given, or an `onRequest` hook answers with, gets the single-use check a handler's result gets. One whose body already answered a request, or was handed over for one, now answers 500 without that request's cookies or headers, sync or async hook, on Web and Node-direct rendering alike. A hook returning a cached response could previously replay one user's session cookie to the next.
12
+ - 6b6f027: An `onRequest` hook that throws or rejects now fails the request the way a handler error does. Every `onError` the app registered sees the error, in order, with a context that has no route params, and the first answer is sent; when none answers, the error is logged and the client gets the default `500`. A thrown `Response` or `status()` value is sent as if returned. This covers `app.fetch`, the Node lane (including native `onNodeRequest` twins) and the WebSocket handshake. Previously the failure rejected `app.fetch`, so a rate-limit store outage skipped the app's error handling and the runtime answered with its own bare `500`.
13
+ - 87d8abd: An `onError` hook that throws or rejects no longer makes `app.fetch` reject. The error it was handling and its own error are both logged, later `onError` hooks are skipped, and the client gets the default `500` (a failed `authenticate()` stage keeps its `503`). An `onError` answer that cannot be rendered is logged and answered `500` the same way. A thrown `Response` or `status()` value is sent as if returned, still held to the route's response contract. This covers route errors, `onRequest` failures, the Node lane and the WebSocket handshake. Previously nothing was logged and the runtime answered with its own bare `500`.
14
+ - ba2941c: A `c.text()` response adopted by body hooks remains single-use even when a hook substitutes its body without consuming the original stream. Returning that response again now answers 500 without its earlier request's cookies, on Web and Node-direct rendering alike; compression could previously replay a user's session cookie and send plain bytes with a stale gzip header.
15
+ - e37e683: The router's cache of matched dynamic paths bounds the total length of the paths it holds (256 Ki characters) as well as their count. 2048 paths of 8 KB each used to stay resident as 16 MiB; they now hold under 1 MiB on Bun, Node and Deno, with lookups at the same speed.
16
+ - 3dba57e: On Bun and Deno, `onResponseBody` hooks now receive the body of a `c.text()` response and of a buffered rendered page, as they already did on Node; before, those went to `onResponseRaw`. A middleware that reads bodies, such as `compression()` or `etag()`, no longer drains them as streams there: a gzipped 33 KB text body or page serves 2.31x / 2.40x faster on Bun and the same on Deno and Node.
17
+ - 44ea5a4: Static files answer a `HEAD`, and a `304` for the tag remembered for the file's settled version, from the file's stat without reading it. For files up to 256 KiB these run 1.22-1.59x faster on the Node reader, 1.24-1.89x on `servePublicDir()` under Bun, and 1.11-1.57x on the Deno entry. A snapshot over 4 KiB is now proven unchanged by a restat instead of hashed again, so an 8-24 KiB file serves 1.02-1.15x faster on Node and Bun; the Deno entry keeps 24 KiB, where a stat costs more. `contentTags()` takes the cut as `rehashMax`.
18
+ - 8aa52b5: A body schema now reads an `application/x-www-form-urlencoded` body whatever the media type's case, and with whitespace before its parameters (`Application/X-WWW-Form-Urlencoded`, `application/x-www-form-urlencoded ; charset=UTF-8`), as it already did for JSON. Such requests were refused with 415.
19
+ - 725d489: `multipartBody()` no longer refuses a form with `413 too_many_parts` because of a file input left empty. A part with no content is still counted before the body is parsed, but against a budget of its own (`maxFields + maxFiles` empty parts) rather than the one the filled parts share, matching how such a part is dropped once parsed.
20
+ - 6a525bf: On Bun, `listen()` no longer throws `Invalid route ... Please encode all non-ASCII characters in the path` for a route such as `/café` or `/日本/:id`. Bun's route table now holds such a path under the percent-encoded spelling the portable router matches, so `listen()` answers it as `app.fetch` does.
21
+ - da7f726: On Bun, `app.stop()` now sends every open WebSocket a 1001 "server shutting down" close and gives it the drain window to finish, before `onStop` hooks run, as the Node adapter does. Previously the sockets stayed open after `stop()` resolved, `onStop` hooks ran while their handlers could still fire, and a connected client kept the process alive. `stop()` also removes the SIGTERM and SIGINT handlers that `gracefulSignals` installed, so repeated `listen()`/`stop()` cycles no longer accumulate them.
22
+ - 6cc9e11: On Deno, the `Host` check, the WebSocket upgrade probe and the framework's own header reads (the JSON body lane's `content-type` and `content-length`, `c.header()`, cookies) read the one header they need instead of making Deno build the request's whole header list. A bare route keeps the `Host` check and dot-segment resolution and no longer pays about 4% of its throughput for them; an app with a `ws()` route no longer pays it on every plain request. The answers are unchanged, except that `c.header()` with a name no header can carry now returns `null` on Deno, as it does on Node, instead of throwing. A request Deno did not parse itself - constructed, cloned or rebuilt by a hook - is still read through its `headers`, and a malformed `Host` is still refused with `400 {"ok":false,"error":"invalid_host"}` on HTTP and on the WebSocket handshake.
23
+ - 28dd544: An idempotent route that authenticates first now runs its `authenticate()` stages before the idempotency key is checked or the body is read. A bad credential gets the route's `401` without its body being buffered, and a request with no key is refused only once it has authenticated. The whole dedupe step - namespace resolver, body read, store - now runs under the request deadline, so a stalled resolver or store answers `503` at `requestTimeoutMs` instead of holding the request open. A body decoded by `transportCodecs()` now reaches an idempotent route's body schema intact, and the fingerprint is taken over the bytes the caller sent, so a different payload under the same key is refused with `409 idempotency_key_reused` instead of replaying the first response.
24
+ - 662afb0: An idempotent route that refuses a request - a failed `authenticate()`, a missing or invalid key, a body over the limit, a key conflict, or the request deadline - cancels the request body's producer again, as 5.4.0 did, and releases the caller's stream. Since the body is teed for its fingerprint, a refusal had cancelled only the gate's branch, which leaves the source running. The route's own branch is released once its response is ready, and that cleanup does not wait on a producer whose `cancel()` never settles.
25
+ - 662afb0: A namespace resolver or store that fails on an idempotent route now reaches the app's `onError()` like a handler error, in every validation order, instead of rejecting `app.fetch()`. So does a response body that fails while the gate stores it.
26
+ - 61113d8: Reading `c.query` or the request's cookies takes time linear in the query string or `Cookie` header, including when it holds many segments without an `=` (`?a&a&a...`, `a; a; a...`). Each such segment searched for `=` through the rest of the input, so a long run of them cost time quadratic in its length. `hasDuplicateCookie` scans the same way. Parsed values are unchanged.
27
+ - 389e1b6: Skip the native Node mount preflight when an app has no mounted handlers, avoiding a second route lookup before normal dispatch.
28
+ - 662afb0: A static file's strong `ETag` now always names the bytes sent with it. `servePublicDir()`, `@nifrajs/node`'s `static` option and the generated Deno entry tag a file of up to 256 KiB from the same whole read they serve it from, so an in-place write during the request can no longer pair new bytes with the old tag. A larger file streams without an automatic `ETag`, as a write could reach it after any separate hash pass. Once its last change is more than 2 seconds old it carries `Last-Modified` for `If-Modified-Since` revalidation, but no `If-Range` resumes it: a guarded `Range` request gets the whole file, and an unguarded one still gets its range. A remembered tag is reused without hashing a snapshot over 24 KiB when a second `stat` after the read shows the file unchanged. `contentTags().ofFile()`, which tags a file over `CONTENT_TAG_MAX` by its identity, now mixes a random per-instance salt into that tag, so two servers no longer issue one tag for different files that share an inode, size and times. `@nifrajs/core/static-file` adds `CONTENT_SNAPSHOT_MAX`, `ContentTags.ofSnapshot()` and `streamedLastModifiedOf()`.
29
+ - a11fe77: A request `transportCodecs()` decodes keeps the body and `Content-Type` it was sent with. A route without a body schema, or middleware such as a signature check, used to read a `{}` JSON stand-in from `c.req.text()` or `c.req.json()`; it now reads the payload itself, while a route with a body schema still receives the decoded value as `c.body`.
30
+ - fa5b67c: A response `transportCodecs()` negotiates from `Accept` now carries `Vary: Accept`, the JSON fallback included, as `encodeTransportResponse()` already did. A shared cache, `cache()` among them, no longer stores the representation one client asked for and replays it to a client that asked for another: `cache()` bypasses storage unless `vary` includes `accept`, and keeps one entry per representation when it does.
31
+
32
+ ## 5.4.0
33
+
34
+ ### Minor Changes
35
+
36
+ - 5183c00: The server entry `buildTarget` generates for `deno` now answers static files with the validators the Bun and Node entries send:
37
+
38
+ - an `etag` and `last-modified`, and a `304` with no body for a current copy, HEAD included.
39
+ - `Range` honored only when `If-Range` is absent or names the file's current validator; anything else gets the whole file.
40
+ - a link is typed by the file it resolves to, as on Bun and Node.
41
+
42
+ `@nifrajs/core/static-file` holds the comparisons `servePublicDir`, the Deno entry and `@nifrajs/node`'s `static` reader now share.
43
+ - e589893: The server entry `buildTarget` generates for `node` now passes the app itself to `@nifrajs/node`'s `serve` and serves files with the adapter's own reader. The entry needs the `@nifrajs/node` of the same release, so a `node` build with an older one installed stops before bundling, names both versions and leaves the last deploy dir in place. A 5.3 adapter used to build cleanly and then throw when the server started. It used to wrap `app.fetch` in a plain `{ fetch }` handler. That wrapper hid the node-direct lane, so every page built an undici `Request` and drained a `Response`, and every file went through one too. The entry mounts `/assets` and, at the root, only the `public/` files the build copied, with the same type, cache, range, HEAD and hidden-file answers the Bun entry gives.
44
+
45
+ `serve`'s `static` option on `@nifrajs/node`:
46
+
47
+ - takes an array of mounts; a path goes to the first mount that takes it, by its prefix and, when set, its `files`.
48
+ - `files` lists the only URL paths a mount serves; any other path passes to the next mount, then the app, without that mount touching the disk.
49
+ - `cacheControl` sets `cache-control` for files not served immutable.
50
+ - types files from the same table as `servePublicDir`, so `.pdf`, `.mp4`, `.xml`, `.csv` and other common types are no longer sent as `application/octet-stream`; a link is typed by the file it resolves to.
51
+ - serves `/.well-known` by default, as `servePublicDir` does, and refuses a visible name that links to a dotfile.
52
+ - answers a link that leaves the directory with `404`, the same as a missing file, instead of `403`.
53
+ - sends files up to 256 KiB, and HEAD, `304` and `416` answers, in one write with no `Response` or stream.
54
+
55
+ `@nifrajs/core/static-file` exports `CONTENT_TYPES`, `contentTypeOf` and `isHiddenPath`, which both readers now use.
56
+ - 529f8d2: Static files are tagged by their content on every self-hosting entry: `servePublicDir` (the Bun entry and `nifra dev`), `@nifrajs/node`'s `static` reader and the generated Deno entry. Each sends a strong `ETag` of 128 bits of the file's SHA-256, the same for the same bytes on every instance and runtime. A replacement that keeps a file's size and modification time (`cp -p`, `rsync -a`, tar, a container image layer, SOURCE_DATE_EPOCH, the Nix store's 1 s) is no longer answered with a `304` for the old copy, and a resumed download is no longer spliced from two versions. The Node reader's `"<mtime>-<size>"` tag is gone; the Bun and Deno entries send a tag for the first time.
57
+
58
+ - A tag is remembered per process for the file version it was read from (device, inode, size, mtime and ctime), so a known file costs no extra read. The first request for a file reads it once, and a file within the buffered size is then served from those bytes. Concurrent first requests share one read. A file changed in the last 2 s is read again until its ctime settles. A file over 256 MiB (`CONTENT_TAG_MAX`) is tagged by that identity instead: still strong, but different on each instance.
59
+ - `Last-Modified` is sent only while the file's mtime is the time of its own last change (within 1 s of its ctime). A file whose mtime a copy or build set, such as every file in a container image, is sent without it, so `If-Modified-Since` cannot validate it.
60
+ - An `If-Range` date no longer keeps a range for a file with a strong tag; a client resumes by the tag. On Node a configured strong `ETag` likewise sends the whole file for a date, while a configured weak one still lets a configured `Last-Modified` resume by its exact date.
61
+ - `@nifrajs/core/static-file` exports `contentTags`, `CONTENT_TAG_MAX`, `lastModifiedOf` and `isNotModified`, the `If-None-Match` and `If-Modified-Since` check all three readers share. `ifRangeAllowsPartial` now takes the file's tag.
62
+
63
+ ### Patch Changes
64
+
65
+ - 01b97ec: A server no longer reads `process.env.NODE_ENV` on every request. The development check for order-scoped hooks that cover no route still runs on each server's first request. Once every server in the process has run it (or called `listen()`), and always in production, a request skips it with one integer compare. On Node, reading `process.env` is a native call of about 130 ns, so an app that runs core without a bundler replacing `NODE_ENV` (a plain `node server.js` install) paid it on every request. Builds made with `nifra build` already replaced it and are unchanged.
66
+ - ff66db6: `parseByteRange` from `@nifrajs/core/range` answers a single `bytes=<first>-<last>` range with one scan of the header, about 5x faster on Node and 4x on Bun. Every answer is unchanged. Range sets, spaces around `=` and anything else still go through the full parser. `@nifrajs/node`'s `static` reader runs the same parser.
67
+
3
68
  ## 5.3.0
4
69
 
5
70
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@
15
15
  * read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
16
16
  * `check:publish` asserts it equals `@nifrajs/core`'s package version.
17
17
  */
18
- export declare const VERSION: "5.3.0";
18
+ export declare const VERSION: "5.5.0";
19
19
  export type Version = typeof VERSION;
20
20
  export { FrameworkError, RouteConfigError, type RouteConfigErrorCode } from "./errors.js";
21
21
  export { FRAMEWORK_NAME, type FrameworkName } from "./internal/brand.js";
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@
15
15
  * read its own package.json at runtime. `scripts/version.ts` rewrites it on every release bump and
16
16
  * `check:publish` asserts it equals `@nifrajs/core`'s package version.
17
17
  */
18
- export const VERSION = "5.3.0";
18
+ export const VERSION = "5.5.0";
19
19
  export { FrameworkError, RouteConfigError } from "./errors.js";
20
20
  export { FRAMEWORK_NAME } from "./internal/brand.js";
21
21
  export { isSameOriginForm, isSameOriginRequest } from "./internal/same-origin.js";
@@ -1 +1 @@
1
- {"version":3,"file":"route-lanes.d.ts","sourceRoot":"","sources":["../../src/internal/route-lanes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEtF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAA;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS,CAAA;IAC/E,QAAQ,CAAC,SAAS,EACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,eAAe,GACf,qBAAqB,GACrB,oBAAoB,GACpB,0BAA0B,GAC1B,SAAS,CAAA;CACd;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAA;CAC3C,GAAG,kBAAkB,CAyLrB"}
1
+ {"version":3,"file":"route-lanes.d.ts","sourceRoot":"","sources":["../../src/internal/route-lanes.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEtF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,aAAa,EAAE,sBAAsB,CAAA;IAC9C,QAAQ,CAAC,iBAAiB,EAAE,eAAe,GAAG,qBAAqB,GAAG,SAAS,CAAA;IAC/E,QAAQ,CAAC,SAAS,EACd,MAAM,GACN,MAAM,GACN,OAAO,GACP,eAAe,GACf,qBAAqB,GACrB,oBAAoB,GACpB,0BAA0B,GAC1B,SAAS,CAAA;CACd;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,CAAA;IACrC,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAA;CAC3C,GAAG,kBAAkB,CA2LrB"}
@@ -51,7 +51,8 @@ export function selectRouteLanes(options) {
51
51
  !hasIdempotency &&
52
52
  !hasLedger &&
53
53
  around === 0;
54
- const lane = authBeforeValidation
54
+ // The idempotency gate lives in the general program, so an idempotent route always runs it.
55
+ const lane = authBeforeValidation || hasIdempotency
55
56
  ? "lifecycle"
56
57
  : bare
57
58
  ? "bare"
@@ -1 +1 @@
1
- {"version":3,"file":"route-lanes.js","sourceRoot":"","sources":["../../src/internal/route-lanes.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,gBAAgB,CAAC,OAahC;IACC,MAAM,EACJ,MAAM,EACN,cAAc,EACd,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,OAAO,EACP,YAAY,EACZ,WAAW,EACX,OAAO,EACP,MAAM,EACN,wBAAwB,GACzB,GAAG,OAAO,CAAA;IAEX,MAAM,oBAAoB,GACxB,OAAO,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,eAAe,KAAK,wBAAwB,CAAA;IAClF,oGAAoG;IACpG,MAAM,KAAK,GACT,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,CAAA;IAEhG,MAAM,IAAI,GACR,CAAC,oBAAoB;QACrB,KAAK;QACL,MAAM,EAAE,IAAI,KAAK,SAAS;QAC1B,MAAM,EAAE,KAAK,KAAK,SAAS;QAC3B,CAAC,cAAc;QACf,CAAC,SAAS;QACV,CAAC,mBAAmB;QACpB,OAAO,KAAK,CAAC;QACb,YAAY,KAAK,CAAC;QAClB,WAAW,KAAK,CAAC;QACjB,OAAO,KAAK,CAAC,CAAA;IAEf,qGAAqG;IACrG,sGAAsG;IACtG,kGAAkG;IAClG,iGAAiG;IACjG,sFAAsF;IACtF,MAAM,UAAU,GACd,CAAC,IAAI;QACL,CAAC,oBAAoB;QACrB,CAAC,mBAAmB;QACpB,MAAM,EAAE,KAAK,KAAK,SAAS;QAC3B,MAAM,CAAC,IAAI,KAAK,SAAS;QACzB,KAAK;QACL,MAAM,CAAC,iBAAiB,KAAK,SAAS;QACtC,CAAC,wBAAwB;QACzB,CAAC,cAAc;QACf,CAAC,SAAS;QACV,OAAO,KAAK,CAAC;QACb,YAAY,KAAK,CAAC;QAClB,WAAW,KAAK,CAAC;QACjB,OAAO,KAAK,CAAC;QACb,MAAM,KAAK,CAAC,CAAA;IAEd,MAAM,QAAQ,GACZ,CAAC,oBAAoB;QACrB,CAAC,mBAAmB;QACpB,MAAM,EAAE,IAAI,KAAK,SAAS;QAC1B,MAAM,CAAC,KAAK,KAAK,SAAS;QAC1B,KAAK;QACL,OAAO,KAAK,CAAC;QACb,YAAY,KAAK,CAAC;QAClB,WAAW,KAAK,CAAC;QACjB,OAAO,KAAK,CAAC,CAAA;IAEf,MAAM,SAAS,GACb,CAAC,IAAI;QACL,CAAC,oBAAoB;QACrB,QAAQ;QACR,MAAM,CAAC,iBAAiB,KAAK,SAAS;QACtC,CAAC,wBAAwB;QACzB,CAAC,cAAc;QACf,CAAC,SAAS;QACV,MAAM,KAAK,CAAC,CAAA;IAEd,MAAM,IAAI,GAAuB,oBAAoB;QACnD,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,IAAI;YACJ,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,QAAQ;gBACR,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,mBAAmB;oBAClB,MAAM,EAAE,IAAI,KAAK,SAAS;oBAC1B,MAAM,EAAE,KAAK,KAAK,SAAS;oBAC3B,KAAK;oBACL,OAAO,KAAK,CAAC;oBACb,YAAY,KAAK,CAAC;oBAClB,WAAW,KAAK,CAAC;oBACjB,OAAO,KAAK,CAAC;oBACf,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,WAAW,CAAA;IAErB,gGAAgG;IAChG,+FAA+F;IAC/F,gGAAgG;IAChG,qFAAqF;IACrF,MAAM,aAAa,GACjB,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK;QAC5B,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,EAAE,IAAI,KAAK,SAAS;YAC1B,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS;gBAC1B,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,MAAM;YACV,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS;gBAC3B,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,OAAO,CAAA;IAEjB,iGAAiG;IACjG,sGAAsG;IACtG,sGAAsG;IACtG,sGAAsG;IACtG,4FAA4F;IAC5F,6FAA6F;IAC7F,qGAAqG;IACrG,8FAA8F;IAC9F,MAAM,iBAAiB,GACrB,IAAI,KAAK,WAAW;QACpB,CAAC,oBAAoB;QACrB,CAAC,mBAAmB;QACpB,CAAC,cAAc;QACf,CAAC,cAAc;QACf,CAAC,SAAS;QACV,MAAM,EAAE,iBAAiB,KAAK,SAAS;QACvC,CAAC,wBAAwB;QACzB,KAAK;QACL,MAAM,EAAE,IAAI,KAAK,SAAS;QAC1B,OAAO,KAAK,CAAC;QACb,YAAY,KAAK,CAAC;QAClB,WAAW,IAAI,CAAC;QAChB,OAAO,KAAK,CAAC;QACb,MAAM,KAAK,CAAC;QACV,CAAC,CAAC,WAAW,KAAK,CAAC;YACjB,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,qBAAqB;QACzB,CAAC,CAAC,SAAS,CAAA;IAEf,8FAA8F;IAC9F,iGAAiG;IACjG,iGAAiG;IACjG,6DAA6D;IAC7D,MAAM,kBAAkB,GACtB,IAAI,KAAK,WAAW;QACpB,CAAC,oBAAoB;QACrB,MAAM,EAAE,IAAI,KAAK,SAAS;QAC1B,MAAM,EAAE,KAAK,KAAK,SAAS;QAC3B,KAAK;QACL,MAAM,EAAE,iBAAiB,KAAK,SAAS;QACvC,CAAC,wBAAwB;QACzB,CAAC,mBAAmB;QACpB,CAAC,cAAc;QACf,CAAC,cAAc;QACf,CAAC,SAAS;QACV,OAAO,KAAK,CAAC;QACb,YAAY,KAAK,CAAC;QAClB,WAAW,IAAI,CAAC;QAChB,OAAO,KAAK,CAAC;QACb,MAAM,KAAK,CAAC,CAAA;IAEd,OAAO;QACL,IAAI;QACJ,UAAU;QACV,QAAQ;QACR,SAAS;QACT,IAAI;QACJ,aAAa;QACb,iBAAiB;QACjB,SAAS,EACP,MAAM,KAAK,CAAC;YACV,CAAC,CAAC,UAAU;gBACV,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,SAAS;oBACT,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,IAAI;wBACJ,CAAC,CAAC,MAAM;wBACR,CAAC,CAAC,iBAAiB,KAAK,SAAS;4BAC/B,CAAC,CAAE,iBAA6D;4BAChE,CAAC,CAAC,kBAAkB;gCAClB,CAAC,CAAC,WAAW,KAAK,CAAC;oCACjB,CAAC,CAAC,oBAAoB;oCACtB,CAAC,CAAC,0BAA0B;gCAC9B,CAAC,CAAC,SAAS;YACrB,CAAC,CAAC,SAAS;KAChB,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"route-lanes.js","sourceRoot":"","sources":["../../src/internal/route-lanes.ts"],"names":[],"mappings":"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"}
@@ -68,6 +68,11 @@ export interface RouteProgramInput {
68
68
  }
69
69
  /** Build the immutable stage sequence once, while the server is still configurable. */
70
70
  export declare function compileRouteProgram(input: RouteProgramInput): RouteProgram;
71
+ /**
72
+ * The rest of a program after the idempotency gate. The gate continues it with the request it
73
+ * buffered, and with a replay entry and program when the key already holds a response.
74
+ */
75
+ export type IdempotencyResume<T> = (entry: RouteEntry, program: RouteProgram) => ProgramResult<T>;
71
76
  type ProgramResult<T> = MaybePromise<T>;
72
77
  /** Execute the general program. The first synchronous stage sequence stays synchronous. */
73
78
  export declare function executeRouteProgram<T, R extends Registry, Ctx>(runtime: Server<R, Ctx>, entry: RouteEntry, program: RouteProgram, source: RequestSource, ctx: RawContext, finalize: (result: unknown, set: CtxSet, ctx?: RawContext) => T, wrapResponse: (response: Response | ResponseResult) => T): ProgramResult<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"route-program.d.ts","sourceRoot":"","sources":["../../src/internal/route-program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-program.d.ts","sourceRoot":"","sources":["../../src/internal/route-program.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,10 @@ export function compileRouteProgram(input) {
58
58
  responseContract: input.responseContract,
59
59
  });
60
60
  }
61
+ /** Idempotency infrastructure failures use the same boundary as the resumed route program. */
62
+ function runIdempotencyGate(host, entry, ctx, finalize, wrapResponse, resume) {
63
+ return host.idempotencyRuntime.gate(entry, ctx, wrapResponse, resume, (error) => host.handleProgramError(entry, error, ctx, finalize, wrapResponse));
64
+ }
61
65
  function responseSet(ctx) {
62
66
  return ctx[CONTEXT_SET]() ?? EMPTY_RESPONSE_CONTROLS;
63
67
  }
@@ -135,6 +139,11 @@ function failAuthentication(host, entry, ctx, finalize, wrapResponse, error) {
135
139
  }
136
140
  function runAuthenticationStages(host, entry, program, source, ctx, finalize, wrapResponse, start = 0, validationComplete = false) {
137
141
  if (start >= program.authStages.length) {
142
+ // Auth-first: the idempotency gate buffers the body, so it waits for every stage to pass. It
143
+ // resumes on an entry without the gate, so the program does not meet it twice.
144
+ if (entry.idempotent !== undefined && !validationComplete) {
145
+ return runIdempotencyGate(host, entry, ctx, finalize, wrapResponse, (e, p) => runAuthenticationStages(host, e, p, source, ctx, finalize, wrapResponse, p.authStages.length));
146
+ }
138
147
  if (program.authFastLane) {
139
148
  const validationIndex = validationComplete ? program.validationStages.length : 0;
140
149
  return runFastAuthenticatedProgram(host, entry, program, source, ctx, finalize, wrapResponse, validationIndex);
@@ -264,22 +273,29 @@ function runValidatedProgram(host, entry, program, source, ctx, finalize, wrapRe
264
273
  return runSync(host, entry, program, source, ctx, finalize, wrapResponse, 0, undefined);
265
274
  }
266
275
  /** Opt-in sensitive-route lane: run authentication/policy hooks before parsing untrusted input. */
267
- async function runAuthBeforeValidation(host, entry, program, source, ctx, finalize, wrapResponse) {
276
+ async function runAuthBeforeValidation(host, entry, program, source, ctx, finalize, wrapResponse, gated = false) {
268
277
  try {
269
- if (program.hasDecorations)
270
- Object.assign(ctx, program.decorations);
271
- for (const derive of program.derives) {
272
- const result = derive(ctx);
273
- const settled = result instanceof Promise ? await result : result;
274
- if (isEarly(settled))
275
- return finishEarly(host, entry, ctx, settled, finalize, wrapResponse);
276
- Object.assign(ctx, settled);
277
- }
278
- for (const before of program.beforeHandle) {
279
- const result = before(ctx);
280
- const settled = result instanceof Promise ? await result : result;
281
- if (settled !== undefined)
282
- return finishEarly(host, entry, ctx, settled, finalize, wrapResponse);
278
+ if (!gated) {
279
+ if (program.hasDecorations)
280
+ Object.assign(ctx, program.decorations);
281
+ for (const derive of program.derives) {
282
+ const result = derive(ctx);
283
+ const settled = result instanceof Promise ? await result : result;
284
+ if (isEarly(settled))
285
+ return finishEarly(host, entry, ctx, settled, finalize, wrapResponse);
286
+ Object.assign(ctx, settled);
287
+ }
288
+ for (const before of program.beforeHandle) {
289
+ const result = before(ctx);
290
+ const settled = result instanceof Promise ? await result : result;
291
+ if (settled !== undefined)
292
+ return finishEarly(host, entry, ctx, settled, finalize, wrapResponse);
293
+ }
294
+ // The policy hooks have passed, so the idempotency gate may buffer the body now. Not awaited:
295
+ // the gate reports its own failures, and one the resumed program let escape must skip this catch.
296
+ if (entry.idempotent !== undefined) {
297
+ return runIdempotencyGate(host, entry, ctx, finalize, wrapResponse, (e, p) => runAuthBeforeValidation(host, e, p, source, ctx, finalize, wrapResponse, true));
298
+ }
283
299
  }
284
300
  for (const stage of program.validationStages) {
285
301
  const result = stage.kind === "body"
@@ -303,6 +319,11 @@ async function runAuthBeforeValidation(host, entry, program, source, ctx, finali
303
319
  /** Execute the general program. The first synchronous stage sequence stays synchronous. */
304
320
  export function executeRouteProgram(runtime, entry, program, source, ctx, finalize, wrapResponse) {
305
321
  const host = runtime;
322
+ // An auth-first program meets the idempotency gate once authentication has passed, so the gate
323
+ // never buffers a body for a caller it would refuse. Every other program meets it first.
324
+ if (entry.idempotent !== undefined && !program.authBeforeValidation) {
325
+ return runIdempotencyGate(host, entry, ctx, finalize, wrapResponse, (e, p) => executeRouteProgram(runtime, e, p, source, ctx, finalize, wrapResponse));
326
+ }
306
327
  try {
307
328
  if (program.authStages.length > 0) {
308
329
  if (program.hasDecorations)
@@ -1 +1 @@
1
- {"version":3,"file":"route-program.js","sourceRoot":"","sources":["../../src/internal/route-program.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-program.js","sourceRoot":"","sources":["../../src/internal/route-program.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAClC;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAA;AAY3E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAsDlF"}
1
+ {"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE,GAClC;IAAE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAA;CAAE,CAAA;AAqE3E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAwDlF"}
package/dist/range.js CHANGED
@@ -19,6 +19,63 @@ function validSize(size) {
19
19
  throw new RangeError("parseByteRange: size must be a non-negative safe integer");
20
20
  }
21
21
  }
22
+ /**
23
+ * `bytes=<digits>-<digits>`, the one form clients send, answered with a single scan; `undefined`
24
+ * for anything else, which the general path below answers. The answers must stay the general path's:
25
+ * test/range.test.ts compares both against a frozen copy of it.
26
+ */
27
+ function parseSingleRange(value, size) {
28
+ const length = value.length;
29
+ // `| 0x20` folds only ASCII case, which is all the general path's /bytes/i matches.
30
+ if (length < 7 ||
31
+ value.charCodeAt(5) !== 0x3d ||
32
+ (value.charCodeAt(0) | 0x20) !== 0x62 ||
33
+ (value.charCodeAt(1) | 0x20) !== 0x79 ||
34
+ (value.charCodeAt(2) | 0x20) !== 0x74 ||
35
+ (value.charCodeAt(3) | 0x20) !== 0x65 ||
36
+ (value.charCodeAt(4) | 0x20) !== 0x73) {
37
+ return undefined;
38
+ }
39
+ let dash = -1;
40
+ for (let index = 6; index < length; index++) {
41
+ const code = value.charCodeAt(index);
42
+ if (code === 0x2d) {
43
+ if (dash !== -1)
44
+ return undefined;
45
+ dash = index;
46
+ }
47
+ else if (code < 0x30 || code > 0x39) {
48
+ return undefined;
49
+ }
50
+ }
51
+ if (dash === -1)
52
+ return undefined;
53
+ const leftDigits = dash - 6;
54
+ const rightDigits = length - dash - 1;
55
+ // INTEGER: no leading zero.
56
+ if ((leftDigits > 1 && value.charCodeAt(6) === 0x30) ||
57
+ (rightDigits > 1 && value.charCodeAt(dash + 1) === 0x30)) {
58
+ return { kind: "none" };
59
+ }
60
+ let start;
61
+ let end;
62
+ if (leftDigits === 0) {
63
+ // A suffix with no length, or a zero one, is ignored.
64
+ if (rightDigits === 0 || (rightDigits === 1 && value.charCodeAt(dash + 1) === 0x30)) {
65
+ return { kind: "none" };
66
+ }
67
+ const suffix = Number(value.slice(dash + 1));
68
+ start = suffix >= size ? 0 : size - suffix;
69
+ end = size - 1;
70
+ }
71
+ else {
72
+ start = Number(value.slice(6, dash));
73
+ end = rightDigits === 0 ? size - 1 : Math.min(Number(value.slice(dash + 1)), size - 1);
74
+ }
75
+ if (start > end || start >= size || size === 0)
76
+ return { kind: "unsatisfiable" };
77
+ return { kind: "satisfiable", ranges: [{ start, end }] };
78
+ }
22
79
  /**
23
80
  * Parse an HTTP `Range: bytes=...` header against a known representation size.
24
81
  *
@@ -34,13 +91,16 @@ export function parseByteRange(value, size) {
34
91
  // matcher in the first place.
35
92
  if (value.length > MAX_RANGE_HEADER_LENGTH)
36
93
  return { kind: "none" };
94
+ const single = parseSingleRange(value, size);
95
+ if (single !== undefined)
96
+ return single;
37
97
  const match = /^bytes\s*=\s*(.+)$/i.exec(value);
38
98
  if (match === null)
39
99
  return { kind: "none" };
40
100
  const source = match[1];
41
101
  let separators = 0;
42
- for (const character of source) {
43
- if (character === "," && ++separators >= MAX_RANGE_SPECIFIERS)
102
+ for (let comma = source.indexOf(","); comma !== -1; comma = source.indexOf(",", comma + 1)) {
103
+ if (++separators >= MAX_RANGE_SPECIFIERS)
44
104
  return { kind: "none" };
45
105
  }
46
106
  const ranges = [];
package/dist/range.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"range.js","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"range.js","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { type CompiledRoutePattern } from "./pattern.js";
2
- /** The standard HTTP methods: the ones with a builder on the server and a call on the typed client. */
3
- export declare const METHODS: readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"];
2
+ /** The standard HTTP methods: the ones the typed registry and the typed client know. Each has a server
3
+ * builder except `QUERY` (RFC 9110's safe, idempotent read with a body), which `method()` registers. */
4
+ export declare const METHODS: readonly ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS", "QUERY"];
4
5
  export type Method = (typeof METHODS)[number];
5
6
  /**
6
7
  * A method a route is registered under: a standard {@link Method}, or another token that
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAQ1B,MAAM,cAAc,CAAA;AAErB,uGAAuG;AACvG,eAAO,MAAM,OAAO,uEAAwE,CAAA;AAE5F,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAOhD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D;AAGD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB,CAAA;AAGrE;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAgPhG;;;;;;;;GAQG;AACH,qBAAa,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;;IAQ7C;;;;;;;;OAQG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAsF7E;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAelD,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,sBAAsB;CAwB/B"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAQ1B,MAAM,cAAc,CAAA;AAErB;wGACwG;AACxG,eAAO,MAAM,OAAO,gFASV,CAAA;AAEV,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7C;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAOhD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D;AAGD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAqB,CAAA;AAKrE;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IACrB;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACtF;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,GACvD;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAmPhG;;;;;;;;GAQG;AACH,qBAAa,MAAM,CAAC,CAAC;IACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IACnC;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;;IAQ7C;;;;;;;;OAQG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,oBAAoB,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAsF7E;;;OAGG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC;IAelD,OAAO,CAAC,WAAW;IA8BnB,OAAO,CAAC,sBAAsB;CA8B/B"}
@@ -1,7 +1,17 @@
1
1
  import { RouteConfigError } from "../errors.js";
2
2
  import { compareMixedPartsSpecificity, compileRoutePattern, constrainedParts, matchMixedSegment, mixedSegmentShape, } from "./pattern.js";
3
- /** The standard HTTP methods: the ones with a builder on the server and a call on the typed client. */
4
- export const METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"];
3
+ /** The standard HTTP methods: the ones the typed registry and the typed client know. Each has a server
4
+ * builder except `QUERY` (RFC 9110's safe, idempotent read with a body), which `method()` registers. */
5
+ export const METHODS = [
6
+ "GET",
7
+ "POST",
8
+ "PUT",
9
+ "PATCH",
10
+ "DELETE",
11
+ "HEAD",
12
+ "OPTIONS",
13
+ "QUERY",
14
+ ];
5
15
  // A method token is 1-32 characters of `A-Z`, `0-9` and `-`, starting with a letter. TRACE, CONNECT
6
16
  // and TRACK are left out: TRACE (and its alias TRACK) asks a server to echo the request back,
7
17
  // headers included, and CONNECT asks for a tunnel. Neither is something a route handler answers.
@@ -16,6 +26,8 @@ export function isRegistrableMethod(method) {
16
26
  const SLASH = 47;
17
27
  export const EMPTY_PARAMS = Object.freeze({});
18
28
  const DYNAMIC_MATCH_CACHE_MAX = 2048;
29
+ // The client picks every key, so their length is bounded too: 2048 paths of 8 KiB held 16 MiB.
30
+ const DYNAMIC_MATCH_CACHE_CHARS = 256 * 1024;
19
31
  const DYNAMIC_MATCH_CACHES = new WeakMap();
20
32
  function dynamicMatchCacheStateFor(owner) {
21
33
  const existing = DYNAMIC_MATCH_CACHES.get(owner);
@@ -24,6 +36,7 @@ function dynamicMatchCacheStateFor(owner) {
24
36
  }
25
37
  const state = {
26
38
  cache: undefined,
39
+ chars: 0,
27
40
  pendingPath: undefined,
28
41
  };
29
42
  DYNAMIC_MATCH_CACHES.set(owner, state);
@@ -348,15 +361,18 @@ export class Router {
348
361
  cache = new Map();
349
362
  state.cache = cache;
350
363
  }
351
- if (cache.size >= DYNAMIC_MATCH_CACHE_MAX) {
352
- const oldest = cache.keys().next().value;
353
- if (oldest !== undefined)
354
- cache.delete(oldest);
364
+ for (const oldest of cache.keys()) {
365
+ if (cache.size < DYNAMIC_MATCH_CACHE_MAX &&
366
+ state.chars + path.length <= DYNAMIC_MATCH_CACHE_CHARS)
367
+ break;
368
+ cache.delete(oldest);
369
+ state.chars -= oldest.length;
355
370
  }
356
371
  cache.set(path, {
357
372
  terminal,
358
373
  values: values.slice(0, terminal.paramNames.length),
359
374
  });
375
+ state.chars += path.length;
360
376
  }
361
377
  }
362
378
  //# sourceMappingURL=router.js.map