@nifrajs/core 2.14.1 → 3.2.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 (226) hide show
  1. package/README.md +25 -0
  2. package/dist/assurance.d.ts +16 -8
  3. package/dist/assurance.d.ts.map +1 -1
  4. package/dist/assurance.js +33 -0
  5. package/dist/assurance.js.map +1 -1
  6. package/dist/durable-adapters.d.ts.map +1 -1
  7. package/dist/durable-adapters.js +26 -3
  8. package/dist/durable-adapters.js.map +1 -1
  9. package/dist/durable-approval.d.ts +56 -0
  10. package/dist/durable-approval.d.ts.map +1 -0
  11. package/dist/durable-approval.js +233 -0
  12. package/dist/durable-approval.js.map +1 -0
  13. package/dist/durable-effect.d.ts +42 -0
  14. package/dist/durable-effect.d.ts.map +1 -0
  15. package/dist/durable-effect.js +234 -0
  16. package/dist/durable-effect.js.map +1 -0
  17. package/dist/durable-execution.d.ts +8 -346
  18. package/dist/durable-execution.d.ts.map +1 -1
  19. package/dist/durable-execution.js +7 -1150
  20. package/dist/durable-execution.js.map +1 -1
  21. package/dist/durable-saga.d.ts +94 -0
  22. package/dist/durable-saga.d.ts.map +1 -0
  23. package/dist/durable-saga.js +550 -0
  24. package/dist/durable-saga.js.map +1 -0
  25. package/dist/edge-kit.d.ts +27 -0
  26. package/dist/edge-kit.d.ts.map +1 -0
  27. package/dist/edge-kit.js +24 -0
  28. package/dist/edge-kit.js.map +1 -0
  29. package/dist/errors.d.ts +1 -1
  30. package/dist/errors.d.ts.map +1 -1
  31. package/dist/errors.js.map +1 -1
  32. package/dist/index.d.ts +23 -2
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +18 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/internal/durable-approval-protocol.d.ts +1 -1
  37. package/dist/internal/durable-approval-protocol.d.ts.map +1 -1
  38. package/dist/internal/durable-effect-protocol.d.ts +1 -1
  39. package/dist/internal/durable-effect-protocol.d.ts.map +1 -1
  40. package/dist/internal/durable-saga-protocol.d.ts +1 -1
  41. package/dist/internal/durable-saga-protocol.d.ts.map +1 -1
  42. package/dist/internal/durable-shared.d.ts +26 -0
  43. package/dist/internal/durable-shared.d.ts.map +1 -0
  44. package/dist/internal/durable-shared.js +131 -0
  45. package/dist/internal/durable-shared.js.map +1 -0
  46. package/dist/internal/durable-types.d.ts +159 -0
  47. package/dist/internal/durable-types.d.ts.map +1 -0
  48. package/dist/internal/durable-types.js +2 -0
  49. package/dist/internal/durable-types.js.map +1 -0
  50. package/dist/internal/route-compiler.d.ts +61 -0
  51. package/dist/internal/route-compiler.d.ts.map +1 -0
  52. package/dist/internal/route-compiler.js +121 -0
  53. package/dist/internal/route-compiler.js.map +1 -0
  54. package/dist/internal/route-execution.d.ts +17 -9
  55. package/dist/internal/route-execution.d.ts.map +1 -1
  56. package/dist/internal/route-execution.js +4 -18
  57. package/dist/internal/route-execution.js.map +1 -1
  58. package/dist/internal/route-lanes.d.ts +35 -0
  59. package/dist/internal/route-lanes.d.ts.map +1 -0
  60. package/dist/internal/route-lanes.js +150 -0
  61. package/dist/internal/route-lanes.js.map +1 -0
  62. package/dist/internal/route-program.d.ts +67 -0
  63. package/dist/internal/route-program.d.ts.map +1 -0
  64. package/dist/internal/route-program.js +199 -0
  65. package/dist/internal/route-program.js.map +1 -0
  66. package/dist/response-observer.d.ts +25 -0
  67. package/dist/response-observer.d.ts.map +1 -0
  68. package/dist/response-observer.js +40 -0
  69. package/dist/response-observer.js.map +1 -0
  70. package/dist/security/baseline.d.ts +68 -0
  71. package/dist/security/baseline.d.ts.map +1 -0
  72. package/dist/security/baseline.js +118 -0
  73. package/dist/security/baseline.js.map +1 -0
  74. package/dist/server/bare-error-lane.d.ts +26 -0
  75. package/dist/server/bare-error-lane.d.ts.map +1 -0
  76. package/dist/server/bare-error-lane.js +60 -0
  77. package/dist/server/bare-error-lane.js.map +1 -0
  78. package/dist/server/body-lane.d.ts +13 -0
  79. package/dist/server/body-lane.d.ts.map +1 -0
  80. package/dist/server/body-lane.js +134 -0
  81. package/dist/server/body-lane.js.map +1 -0
  82. package/dist/server/body.d.ts +7 -0
  83. package/dist/server/body.d.ts.map +1 -1
  84. package/dist/server/body.js +7 -0
  85. package/dist/server/body.js.map +1 -1
  86. package/dist/server/bridge-markers.d.ts +25 -0
  87. package/dist/server/bridge-markers.d.ts.map +1 -0
  88. package/dist/server/bridge-markers.js +25 -0
  89. package/dist/server/bridge-markers.js.map +1 -0
  90. package/dist/server/context.d.ts +6 -1
  91. package/dist/server/context.d.ts.map +1 -1
  92. package/dist/server/contract.d.ts +40 -14
  93. package/dist/server/contract.d.ts.map +1 -1
  94. package/dist/server/contract.js +7 -0
  95. package/dist/server/contract.js.map +1 -1
  96. package/dist/server/cookies.d.ts.map +1 -1
  97. package/dist/server/cookies.js +16 -2
  98. package/dist/server/cookies.js.map +1 -1
  99. package/dist/server/header-case.d.ts.map +1 -1
  100. package/dist/server/header-case.js +2 -1
  101. package/dist/server/header-case.js.map +1 -1
  102. package/dist/server/http.d.ts +36 -3
  103. package/dist/server/http.d.ts.map +1 -1
  104. package/dist/server/http.js +49 -3
  105. package/dist/server/http.js.map +1 -1
  106. package/dist/server/install.d.ts +6 -8
  107. package/dist/server/install.d.ts.map +1 -1
  108. package/dist/server/install.js +7 -0
  109. package/dist/server/install.js.map +1 -1
  110. package/dist/server/node-outcome-hook.d.ts +2 -1
  111. package/dist/server/node-outcome-hook.d.ts.map +1 -1
  112. package/dist/server/node-outcome-hook.js.map +1 -1
  113. package/dist/server/node-outcome.d.ts +17 -2
  114. package/dist/server/node-outcome.d.ts.map +1 -1
  115. package/dist/server/node-outcome.js +37 -3
  116. package/dist/server/node-outcome.js.map +1 -1
  117. package/dist/server/plugin.d.ts +2 -2
  118. package/dist/server/plugin.d.ts.map +1 -1
  119. package/dist/server/plugin.js +6 -1
  120. package/dist/server/plugin.js.map +1 -1
  121. package/dist/server/query.d.ts +7 -1
  122. package/dist/server/query.d.ts.map +1 -1
  123. package/dist/server/query.js +8 -3
  124. package/dist/server/query.js.map +1 -1
  125. package/dist/server/registry.d.ts +40 -12
  126. package/dist/server/registry.d.ts.map +1 -1
  127. package/dist/server/request-context.d.ts +2 -13
  128. package/dist/server/request-context.d.ts.map +1 -1
  129. package/dist/server/request-context.js +18 -159
  130. package/dist/server/request-context.js.map +1 -1
  131. package/dist/server/respond.d.ts.map +1 -1
  132. package/dist/server/respond.js +58 -4
  133. package/dist/server/respond.js.map +1 -1
  134. package/dist/server/response-contract-lane.d.ts.map +1 -1
  135. package/dist/server/response-contract-lane.js +5 -2
  136. package/dist/server/response-contract-lane.js.map +1 -1
  137. package/dist/server/response-observer-runtime.d.ts +20 -0
  138. package/dist/server/response-observer-runtime.d.ts.map +1 -0
  139. package/dist/server/response-observer-runtime.js +95 -0
  140. package/dist/server/response-observer-runtime.js.map +1 -0
  141. package/dist/server/runtime-core.d.ts +76 -0
  142. package/dist/server/runtime-core.d.ts.map +1 -1
  143. package/dist/server/runtime-core.js +42 -1
  144. package/dist/server/runtime-core.js.map +1 -1
  145. package/dist/server/server-types.d.ts +6 -1
  146. package/dist/server/server-types.d.ts.map +1 -1
  147. package/dist/server/server.d.ts +158 -116
  148. package/dist/server/server.d.ts.map +1 -1
  149. package/dist/server/server.js +707 -844
  150. package/dist/server/server.js.map +1 -1
  151. package/dist/server/validation.d.ts +5 -0
  152. package/dist/server/validation.d.ts.map +1 -0
  153. package/dist/server/validation.js +13 -0
  154. package/dist/server/validation.js.map +1 -0
  155. package/dist/server/websocket.d.ts +20 -4
  156. package/dist/server/websocket.d.ts.map +1 -1
  157. package/dist/server/websocket.js +81 -11
  158. package/dist/server/websocket.js.map +1 -1
  159. package/dist/server/ws-bun.d.ts +12 -4
  160. package/dist/server/ws-bun.d.ts.map +1 -1
  161. package/dist/server/ws-bun.js +50 -16
  162. package/dist/server/ws-bun.js.map +1 -1
  163. package/dist/server/ws-hook.d.ts +3 -2
  164. package/dist/server/ws-hook.d.ts.map +1 -1
  165. package/dist/server.d.ts +3 -2
  166. package/dist/server.d.ts.map +1 -1
  167. package/dist/server.js +2 -1
  168. package/dist/server.js.map +1 -1
  169. package/dist/single-copy-register.d.ts +2 -0
  170. package/dist/single-copy-register.d.ts.map +1 -0
  171. package/dist/single-copy-register.js +24 -0
  172. package/dist/single-copy-register.js.map +1 -0
  173. package/dist/single-copy.d.ts +156 -0
  174. package/dist/single-copy.d.ts.map +1 -0
  175. package/dist/single-copy.js +472 -0
  176. package/dist/single-copy.js.map +1 -0
  177. package/package.json +28 -3
  178. package/src/assurance.ts +58 -1
  179. package/src/durable-adapters.ts +20 -0
  180. package/src/durable-approval.ts +281 -0
  181. package/src/durable-effect.ts +300 -0
  182. package/src/durable-execution.ts +8 -1627
  183. package/src/durable-saga.ts +744 -0
  184. package/src/edge-kit.ts +27 -0
  185. package/src/errors.ts +1 -0
  186. package/src/index.ts +129 -2
  187. package/src/internal/durable-approval-protocol.ts +1 -1
  188. package/src/internal/durable-effect-protocol.ts +1 -1
  189. package/src/internal/durable-saga-protocol.ts +1 -1
  190. package/src/internal/durable-shared.ts +157 -0
  191. package/src/internal/durable-types.ts +194 -0
  192. package/src/internal/route-compiler.ts +234 -0
  193. package/src/internal/route-execution.ts +53 -96
  194. package/src/internal/route-lanes.ts +221 -0
  195. package/src/internal/route-program.ts +404 -0
  196. package/src/response-observer.ts +64 -0
  197. package/src/security/baseline.ts +172 -0
  198. package/src/server/bare-error-lane.ts +77 -0
  199. package/src/server/body-lane.ts +203 -0
  200. package/src/server/body.ts +8 -0
  201. package/src/server/bridge-markers.ts +24 -0
  202. package/src/server/context.ts +6 -1
  203. package/src/server/contract.ts +70 -20
  204. package/src/server/cookies.ts +16 -2
  205. package/src/server/header-case.ts +3 -1
  206. package/src/server/http.ts +53 -3
  207. package/src/server/install.ts +14 -0
  208. package/src/server/node-outcome-hook.ts +2 -1
  209. package/src/server/node-outcome.ts +44 -3
  210. package/src/server/plugin.ts +11 -5
  211. package/src/server/query.ts +10 -4
  212. package/src/server/registry.ts +71 -16
  213. package/src/server/request-context.ts +13 -216
  214. package/src/server/respond.ts +71 -3
  215. package/src/server/response-contract-lane.ts +6 -2
  216. package/src/server/response-observer-runtime.ts +135 -0
  217. package/src/server/runtime-core.ts +124 -1
  218. package/src/server/server-types.ts +6 -1
  219. package/src/server/server.ts +1446 -1485
  220. package/src/server/validation.ts +19 -0
  221. package/src/server/websocket.ts +127 -17
  222. package/src/server/ws-bun.ts +67 -15
  223. package/src/server/ws-hook.ts +3 -2
  224. package/src/server.ts +8 -2
  225. package/src/single-copy-register.ts +24 -0
  226. package/src/single-copy.ts +526 -0
@@ -0,0 +1,121 @@
1
+ import { RouteConfigError } from "../errors.js";
2
+ import { compileRoutePattern } from "../router/pattern.js";
3
+ import { assertByteLimit } from "../server/body.js";
4
+ import { CAPABILITY_GUARD, createCapabilityGuard, normalizeRouteCapabilities, } from "./capability-runtime.js";
5
+ import { assuranceDeclarationsOf, assuranceEvidenceFor, NIFRA_ASSURANCE_IDS, validEvidenceId, } from "./route-assurance.js";
6
+ import { selectRouteLanes } from "./route-lanes.js";
7
+ /** Resolve all registration-time policy and lane facts for one route. */
8
+ export function compileRouteOptions(context, method, path, schema, handler) {
9
+ const pattern = compileRoutePattern(path);
10
+ let bodyLimit = context.maxBodyBytes;
11
+ const invalidBodyLimit = (message) => {
12
+ throw new RouteConfigError("INVALID_BODY_LIMIT", `route ${method} ${path}: ${message}`);
13
+ };
14
+ if (schema?.bodyLimitReason !== undefined && schema.bodyLimit !== "unlimited") {
15
+ invalidBodyLimit('bodyLimitReason is only valid with bodyLimit: "unlimited"');
16
+ }
17
+ if (schema?.bodyLimit === "unlimited") {
18
+ if (typeof schema.bodyLimitReason !== "string" || schema.bodyLimitReason.trim().length === 0) {
19
+ invalidBodyLimit('bodyLimit: "unlimited" requires a non-empty bodyLimitReason');
20
+ }
21
+ if (schema.body !== undefined) {
22
+ invalidBodyLimit('bodyLimit: "unlimited" cannot be used with a body schema; use a finite cap');
23
+ }
24
+ if (schema.idempotency !== undefined) {
25
+ invalidBodyLimit('bodyLimit: "unlimited" cannot be used with idempotency');
26
+ }
27
+ bodyLimit = undefined;
28
+ }
29
+ else if (schema?.bodyLimit !== undefined) {
30
+ try {
31
+ assertByteLimit(schema.bodyLimit, "route bodyLimit");
32
+ }
33
+ catch {
34
+ invalidBodyLimit('bodyLimit must be a non-negative safe integer or "unlimited"');
35
+ }
36
+ bodyLimit = schema.bodyLimit;
37
+ }
38
+ const capabilities = normalizeRouteCapabilities(schema?.capabilities);
39
+ const handlerAssurance = assuranceDeclarationsOf(handler);
40
+ const invalidHandlerScope = handlerAssurance.find((declaration) => declaration.scope !== "plugin");
41
+ if (invalidHandlerScope !== undefined) {
42
+ throw new RouteConfigError("INVALID_ASSURANCE", `route handler assurance must use plugin scope (received ${invalidHandlerScope.scope})`);
43
+ }
44
+ const authenticated = assuranceEvidenceFor([...context.activeAssurance, ...handlerAssurance, ...context.globalAssurance], method, path).some((evidence) => evidence.id === NIFRA_ASSURANCE_IDS.AUTHENTICATED);
45
+ const routeDecorations = { ...context.decorations };
46
+ if (capabilities.length > 0) {
47
+ routeDecorations[CAPABILITY_GUARD] = createCapabilityGuard(capabilities, method, path, context.onCapabilityUse, context.idempotencyRuntime?.trackEffect, Object.freeze([...context.capabilityInterceptors]), Object.freeze([...context.capabilityObservers]));
48
+ }
49
+ const hasDecorations = Reflect.ownKeys(routeDecorations).length > 0;
50
+ if (schema?.idempotency !== undefined && context.idempotencyRuntime === undefined) {
51
+ throw new RouteConfigError("INVALID_IDEMPOTENCY", "route declares idempotency but the idempotency plugin is not installed; add .use(idempotency())");
52
+ }
53
+ const idempotent = context.idempotencyRuntime?.resolve(schema, authenticated, context.maxBodyBytes);
54
+ const ledgered = context.effectLedgerRuntime?.resolve(capabilities, method, path);
55
+ const contracted = context.responseContractRuntime !== undefined && schema?.response !== undefined
56
+ ? { runtime: context.responseContractRuntime, schema: schema.response }
57
+ : undefined;
58
+ const lanes = selectRouteLanes({
59
+ schema,
60
+ hasIdempotency: idempotent !== undefined,
61
+ hasLedger: ledgered !== undefined,
62
+ hasResponseContract: contracted !== undefined,
63
+ hasDecorations,
64
+ derives: context.derives.length,
65
+ beforeHandle: context.beforeHandleHooks.length,
66
+ afterHandle: context.afterHandleHooks.length,
67
+ onError: context.onErrorHooks.length,
68
+ around: context.aroundHooks.length,
69
+ defaultOnValidationError: context.defaultOnValidationError !== undefined,
70
+ });
71
+ const routeAssurance = [...context.activeAssurance, ...handlerAssurance];
72
+ if (contracted?.runtime.mode === "enforce" && schema?.response !== undefined) {
73
+ routeAssurance.push(Object.freeze({
74
+ id: NIFRA_ASSURANCE_IDS.RESPONSE_CONTRACT,
75
+ source: "response-contract",
76
+ scope: "plugin",
77
+ }));
78
+ }
79
+ for (const id of schema?.assurance ?? []) {
80
+ if (!validEvidenceId(id)) {
81
+ throw new Error(`route assurance: invalid evidence id ${JSON.stringify(id)} on ${method} ${path} (use lowercase dot/dash segments)`);
82
+ }
83
+ const declared = { id, source: "declared", scope: "plugin" };
84
+ Object.defineProperty(declared, "provenance", {
85
+ value: "declared",
86
+ enumerable: false,
87
+ configurable: false,
88
+ writable: false,
89
+ });
90
+ routeAssurance.push(Object.freeze(declared));
91
+ }
92
+ const unlimitedBody = schema?.bodyLimit === "unlimited";
93
+ if (!unlimitedBody && (schema?.body !== undefined || typeof schema?.bodyLimit === "number")) {
94
+ routeAssurance.push(Object.freeze({
95
+ id: NIFRA_ASSURANCE_IDS.BODY_BOUNDED,
96
+ source: "route-schema",
97
+ scope: "plugin",
98
+ }));
99
+ }
100
+ if (schema?.idempotency !== undefined) {
101
+ routeAssurance.push(Object.freeze({
102
+ id: NIFRA_ASSURANCE_IDS.IDEMPOTENCY_KEY,
103
+ source: "route-schema",
104
+ scope: "plugin",
105
+ }));
106
+ }
107
+ return {
108
+ pattern,
109
+ bodyLimit,
110
+ capabilities,
111
+ handlerAssurance,
112
+ routeDecorations,
113
+ hasDecorations,
114
+ idempotent,
115
+ ledgered,
116
+ responseContract: contracted,
117
+ lanes,
118
+ routeAssurance: Object.freeze(routeAssurance),
119
+ };
120
+ }
121
+ //# sourceMappingURL=route-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-compiler.js","sourceRoot":"","sources":["../../src/internal/route-compiler.ts"],"names":[],"mappings":"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"}
@@ -23,8 +23,9 @@ import type { ResolvedIdempotency } from "../server/idempotency-lane.js";
23
23
  import type { ResolvedEffectLedger } from "../server/ledger-lane.js";
24
24
  import type { Registry } from "../server/registry.js";
25
25
  import type { ResponseContractRuntime } from "../server/response-contract-lane.js";
26
- import type { HandlerResult } from "../server/runtime-core.js";
26
+ import type { HandlerResult, ResponseResult } from "../server/runtime-core.js";
27
27
  import type { CtxSet, MaybePromise, RawContext, RequestSource, Server } from "../server/server.js";
28
+ import type { RouteProgram } from "./route-program.js";
28
29
  export type InternalHandler = (ctx: RawContext) => MaybePromise<HandlerResult>;
29
30
  /** A `derive` computes per-request context extensions; stored path-erased. */
30
31
  export type RawDerive = (ctx: RawContext) => MaybePromise<object>;
@@ -32,8 +33,8 @@ export type RawBeforeHandle = (ctx: RawContext) => MaybePromise<unknown>;
32
33
  export type RawAfterHandle = (result: unknown, ctx: RawContext) => MaybePromise<unknown>;
33
34
  export type RawErrorHandler = (error: unknown, ctx: RawContext) => MaybePromise<unknown>;
34
35
  export type RawAround = <T>(ctx: RawContext, next: () => MaybePromise<T>) => MaybePromise<T>;
35
- export type RouteExecutionRunner = <T, R extends Registry, Ctx>(runtime: Server<R, Ctx>, entry: RouteEntry, source: RequestSource, params: Record<string, string>, search: string | undefined, signal: AbortSignal, budget: RequestBudget, platform: Platform | undefined, nativeContext: boolean, finalize: (result: unknown, set: CtxSet) => T, wrapResponse: (response: Response) => T) => MaybePromise<T>;
36
- export type ContextRouteRunner = <T, R extends Registry, Ctx>(runtime: Server<R, Ctx>, entry: RouteEntry, source: RequestSource, ctx: RawContext, finalize: (result: unknown, set: CtxSet) => T, wrapResponse: (response: Response) => T) => MaybePromise<T>;
36
+ export type RouteExecutionRunner = <T, R extends Registry, Ctx>(runtime: Server<R, Ctx>, entry: RouteEntry, source: RequestSource, params: Record<string, string>, search: string | undefined, signal: AbortSignal, budget: RequestBudget, platform: Platform | undefined, nativeContext: boolean, finalize: (result: unknown, set: CtxSet) => T, wrapResponse: (response: Response | ResponseResult) => T) => MaybePromise<T>;
37
+ export type ContextRouteRunner = <T, R extends Registry, Ctx>(runtime: Server<R, Ctx>, entry: RouteEntry, source: RequestSource, ctx: RawContext, finalize: (result: unknown, set: CtxSet) => T, wrapResponse: (response: Response | ResponseResult) => T) => MaybePromise<T>;
37
38
  export type RouteExecutionLane = "bare" | "body" | "query" | "lifecycle";
38
39
  export type LifecycleExecutionLane = "hooks" | "query" | "body" | "body-query" | undefined;
39
40
  /** Compile the one immutable route decision at registration time. The request path only invokes the
@@ -45,10 +46,9 @@ export declare function compileRouteExecutionPlan(options: {
45
46
  readonly contextless: boolean;
46
47
  readonly hasAround: boolean;
47
48
  readonly hasLedger: boolean;
48
- readonly lifecycleLane: LifecycleExecutionLane;
49
49
  readonly fusedWeb: FusedWebRunner | undefined;
50
50
  readonly fusedBody: FusedBodyRunner | undefined;
51
- readonly fusedLane: "bare" | "body" | "query" | undefined;
51
+ readonly fusedLane: "bare" | "body" | "query" | "derive-before" | "derive-before-after" | "body-derive-before" | "body-derive-before-after" | undefined;
52
52
  }): RouteExecutionPlan;
53
53
  /** Registration-compiled route behavior. Every adapter invokes the same runner; the optional fused
54
54
  * renderer is only a response-format specialization of that same selected route semantics. */
@@ -59,12 +59,18 @@ export interface RouteExecutionPlan {
59
59
  /** Which builder produced {@link fusedWeb} - a merge rebinds the closure to the executing server
60
60
  * and must rebuild it with the SAME semantics (a query-fused route rebuilt as bare would skip its
61
61
  * validation). `undefined` iff `fusedWeb` is. */
62
- readonly fusedLane: "bare" | "body" | "query" | undefined;
62
+ readonly fusedLane: "bare" | "body" | "query" | "derive-before" | "derive-before-after" | "body-derive-before" | "body-derive-before-after" | undefined;
63
63
  }
64
64
  export interface RouteEntry {
65
65
  readonly handler: InternalHandler;
66
66
  readonly schema: RouteSchema | undefined;
67
- /** Effective transport body cap; `undefined` is an explicit streaming/upload exemption. */
67
+ /**
68
+ * Effective transport body cap, already resolved at registration: the route's own
69
+ * `schema.bodyLimit` when it declared one, the server's `maxBodyBytes` otherwise. `undefined` is
70
+ * an explicit streaming/upload exemption (`bodyLimit: "unlimited"`) and means NO cap - readers
71
+ * must fall back to {@link UNLIMITED_BODY_BYTES}, never to the server default, which would be a
72
+ * tighter bound than the route asked for.
73
+ */
68
74
  readonly bodyLimit: number | undefined;
69
75
  /** Resolved idempotency config; `undefined` = off (the dedupe lane is never entered). */
70
76
  readonly idempotent: ResolvedIdempotency | undefined;
@@ -89,15 +95,17 @@ export interface RouteEntry {
89
95
  readonly afterHandle: ReadonlyArray<RawAfterHandle>;
90
96
  readonly onError: ReadonlyArray<RawErrorHandler>;
91
97
  /** Registration-specialized hook shape for the common derive + before middleware route. */
92
- readonly lifecycleHookLane: "derive-before" | undefined;
98
+ readonly lifecycleHookLane: "derive-before" | "derive-before-after" | undefined;
93
99
  /** Wraps the matched route lifecycle. Empty for the common no-around path. */
94
100
  readonly around: ReadonlyArray<RawAround>;
95
101
  /** The single immutable execution decision consumed by portable, Node-direct, and Bun-native paths. */
96
102
  readonly execution: RouteExecutionPlan;
103
+ /** One immutable general lifecycle program compiled at registration. */
104
+ readonly program: RouteProgram;
97
105
  }
98
106
  /** The fused Web lane: same inputs `routeAndRun` would hand the generic path, a `Response` out. */
99
107
  export type FusedWebRunner = (source: RequestSource, params: Record<string, string>, search: string | undefined, signal: AbortSignal, budget: RequestBudget, platform: Platform | undefined, nativeContext: boolean) => MaybePromise<Response>;
100
108
  /** Registration-compiled body lane. The finalizer receives the live context so Web can preserve lazy
101
109
  * response controls while Node can emit its native outcome directly. */
102
- export type FusedBodyRunner = <T>(source: RequestSource, params: Record<string, string>, search: string | undefined, signal: AbortSignal, budget: RequestBudget, platform: Platform | undefined, nativeContext: boolean, finalize: (result: unknown, set: CtxSet, ctx: RawContext) => T, wrapResponse: (response: Response) => T) => MaybePromise<T>;
110
+ export type FusedBodyRunner = <T>(source: RequestSource, params: Record<string, string>, search: string | undefined, signal: AbortSignal, budget: RequestBudget, platform: Platform | undefined, nativeContext: boolean, finalize: (result: unknown, set: CtxSet, ctx: RawContext) => T, wrapResponse: (response: Response | ResponseResult) => T) => MaybePromise<T>;
103
111
  //# sourceMappingURL=route-execution.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-execution.d.ts","sourceRoot":"","sources":["../../src/internal/route-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-execution.d.ts","sourceRoot":"","sources":["../../src/internal/route-execution.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
+ import { UNLIMITED_BODY_BYTES } from "../server/body.js";
1
2
  import { RequestContext } from "../server/request-context.js";
2
3
  /** Compile the one immutable route decision at registration time. The request path only invokes the
3
4
  * selected closure; it never repeats this eligibility ladder. The closures reach the kernel's private
4
5
  * runners through the {@link RouteExecutionRuntime} mirror - a compile-time cast, not a dispatch
5
6
  * object, so the emitted request path is a direct method call on the server. */
6
7
  export function compileRouteExecutionPlan(options) {
7
- const { lane, contextless, hasAround, hasLedger, lifecycleLane, fusedWeb, fusedBody, fusedLane } = options;
8
+ const { lane, contextless, hasAround, hasLedger, fusedWeb, fusedBody, fusedLane } = options;
8
9
  if (contextless) {
9
10
  const run = (runtime, entry, source, params, search, signal, budget, platform, _nativeContext, finalize, wrapResponse) => runtime.runContextlessBare(entry, source, params, search, signal, budget, platform, finalize, wrapResponse);
10
11
  return Object.freeze({ run, fusedWeb, fusedBody, fusedLane });
@@ -21,29 +22,14 @@ export function compileRouteExecutionPlan(options) {
21
22
  inner = (runtime, entry, _source, ctx, finalize, wrapResponse) => runtime.runQueryOnly(entry, ctx, finalize, wrapResponse);
22
23
  break;
23
24
  default:
24
- switch (lifecycleLane) {
25
- case "hooks":
26
- inner = (runtime, entry, _source, ctx, finalize, wrapResponse) => runtime.runLifecycleHooks(entry, ctx, finalize, wrapResponse);
27
- break;
28
- case "query":
29
- inner = (runtime, entry, _source, ctx, finalize, wrapResponse) => runtime.runLifecycleQuery(entry, ctx, finalize, wrapResponse);
30
- break;
31
- case "body":
32
- inner = (runtime, entry, source, ctx, finalize, wrapResponse) => runtime.runLifecycleBody(entry, source, ctx, finalize, wrapResponse);
33
- break;
34
- case "body-query":
35
- inner = (runtime, entry, source, ctx, finalize, wrapResponse) => runtime.runLifecycleBodyQuery(entry, source, ctx, finalize, wrapResponse);
36
- break;
37
- default:
38
- inner = (runtime, entry, source, ctx, finalize, wrapResponse) => runtime.runLifecycle(entry, source, ctx, finalize, wrapResponse);
39
- }
25
+ inner = (runtime, entry, source, ctx, finalize, wrapResponse) => runtime.runProgram(entry, source, ctx, finalize, wrapResponse);
40
26
  }
41
27
  const execute = hasAround
42
28
  ? (runtime, entry, source, ctx, finalize, wrapResponse) => runtime.runWithAround(entry, ctx, () => inner(runtime, entry, source, ctx, finalize, wrapResponse), finalize, wrapResponse)
43
29
  : inner;
44
30
  const run = (runtime, entry, source, params, search, signal, budget, platform, nativeContext, finalize, wrapResponse) => {
45
31
  const server = runtime;
46
- const maxBodyBytes = entry.bodyLimit ?? server.maxBodyBytes;
32
+ const maxBodyBytes = entry.bodyLimit ?? UNLIMITED_BODY_BYTES;
47
33
  const ctx = nativeContext
48
34
  ? RequestContext.native(source, params, search, maxBodyBytes, platform, server.protoPoisoning)
49
35
  : new RequestContext(source, params, search, signal, budget, platform, maxBodyBytes, server.protoPoisoning);
@@ -1 +1 @@
1
- {"version":3,"file":"route-execution.js","sourceRoot":"","sources":["../../src/internal/route-execution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route-execution.js","sourceRoot":"","sources":["../../src/internal/route-execution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Registration-time route-lane selection.
3
+ *
4
+ * A route's lane is a property of its registered shape, not of an individual request. Keeping this
5
+ * decision in a small internal module gives the server kernel one vocabulary for bare/body/query/
6
+ * lifecycle execution while preserving the important invariant: this module is never called from the
7
+ * request path. The returned booleans are consumed by the existing compiled execution plan and fused
8
+ * builders; no adapter or extra dispatch hop is introduced at runtime.
9
+ */
10
+ import type { RouteSchema } from "../server/context.js";
11
+ import type { LifecycleExecutionLane, RouteExecutionLane } from "./route-execution.js";
12
+ export interface RouteLaneSelection {
13
+ readonly bare: boolean;
14
+ readonly fusedQuery: boolean;
15
+ readonly bodyOnly: boolean;
16
+ readonly fusedBody: boolean;
17
+ readonly lane: RouteExecutionLane;
18
+ readonly lifecycleLane: LifecycleExecutionLane;
19
+ readonly lifecycleHookLane: "derive-before" | "derive-before-after" | undefined;
20
+ readonly fusedLane: "bare" | "body" | "query" | "derive-before" | "derive-before-after" | "body-derive-before" | "body-derive-before-after" | undefined;
21
+ }
22
+ export declare function selectRouteLanes(options: {
23
+ readonly schema: RouteSchema | undefined;
24
+ readonly hasIdempotency: boolean;
25
+ readonly hasLedger: boolean;
26
+ readonly hasResponseContract: boolean;
27
+ readonly hasDecorations: boolean;
28
+ readonly derives: number;
29
+ readonly beforeHandle: number;
30
+ readonly afterHandle: number;
31
+ readonly onError: number;
32
+ readonly around: number;
33
+ readonly defaultOnValidationError: boolean;
34
+ }): RouteLaneSelection;
35
+ //# sourceMappingURL=route-lanes.d.ts.map
@@ -0,0 +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,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,CAiLrB"}
@@ -0,0 +1,150 @@
1
+ export function selectRouteLanes(options) {
2
+ const { schema, hasIdempotency, hasLedger, hasResponseContract, hasDecorations, derives, beforeHandle, afterHandle, onError, around, defaultOnValidationError, } = options;
3
+ const bare = schema?.params === undefined &&
4
+ schema?.headers === undefined &&
5
+ schema?.body === undefined &&
6
+ schema?.query === undefined &&
7
+ !hasIdempotency &&
8
+ !hasLedger &&
9
+ !hasResponseContract &&
10
+ derives === 0 &&
11
+ beforeHandle === 0 &&
12
+ afterHandle === 0 &&
13
+ onError === 0;
14
+ // A route whose ONLY lifecycle step is a query schema can fuse too: the parse + validate + handler +
15
+ // respond collapse into one closure with no lifecycle promise on the sync path. The guards mirror the
16
+ // query lane below PLUS everything the fused dispatch skips: around hooks, the idempotency/ledger
17
+ // wrappers, and validation-error recovery (schema or server default) - the fused invalid path is
18
+ // exactly `validationError(issues)`, so any recovery semantics keep the generic lane.
19
+ const fusedQuery = !bare &&
20
+ !hasResponseContract &&
21
+ schema?.query !== undefined &&
22
+ schema.body === undefined &&
23
+ schema.params === undefined &&
24
+ schema.headers === undefined &&
25
+ schema.onValidationError === undefined &&
26
+ !defaultOnValidationError &&
27
+ !hasIdempotency &&
28
+ !hasLedger &&
29
+ derives === 0 &&
30
+ beforeHandle === 0 &&
31
+ afterHandle === 0 &&
32
+ onError === 0 &&
33
+ around === 0;
34
+ const bodyOnly = !hasResponseContract &&
35
+ schema?.body !== undefined &&
36
+ schema.query === undefined &&
37
+ schema.params === undefined &&
38
+ schema.headers === undefined &&
39
+ derives === 0 &&
40
+ beforeHandle === 0 &&
41
+ afterHandle === 0 &&
42
+ onError === 0;
43
+ const fusedBody = !bare &&
44
+ bodyOnly &&
45
+ schema.onValidationError === undefined &&
46
+ !defaultOnValidationError &&
47
+ !hasIdempotency &&
48
+ !hasLedger &&
49
+ around === 0;
50
+ const lane = bare
51
+ ? "bare"
52
+ : bodyOnly
53
+ ? "body"
54
+ : !hasResponseContract &&
55
+ schema?.body === undefined &&
56
+ schema?.query !== undefined &&
57
+ schema.params === undefined &&
58
+ schema.headers === undefined &&
59
+ derives === 0 &&
60
+ beforeHandle === 0 &&
61
+ afterHandle === 0 &&
62
+ onError === 0
63
+ ? "query"
64
+ : "lifecycle";
65
+ // Lifecycle routes with no params schema are the common middleware shape: derive/before plus an
66
+ // optional query or body schema. Select their complete validation stage at registration so the
67
+ // request path never re-checks params/body presence. Parameter-schema routes retain the generic
68
+ // lifecycle runner until their more involved recovery matrix is selected explicitly.
69
+ const lifecycleLane = lane !== "lifecycle" || schema?.params !== undefined || schema?.headers !== undefined
70
+ ? undefined
71
+ : schema?.body !== undefined
72
+ ? schema.query !== undefined
73
+ ? "body-query"
74
+ : "body"
75
+ : schema?.query !== undefined
76
+ ? "query"
77
+ : "hooks";
78
+ // The realistic middleware shape is commonly exactly one synchronous-or-async derive followed by
79
+ // one before hook. Keep the generic runner for every route that can observe decorations, after hooks,
80
+ // error hooks, or response contracts; this lane only removes the two per-request hook-loop dispatches
81
+ // and preserves the same async continuations and error handling. A params or headers schema routes
82
+ // back to the generic lane because the fused builder has no `params` / `headers` validation step
83
+ // baked in - adding them would be more code than it saves. A `body` schema is the same story
84
+ // because the fused derive-before / derive-before-after builders don't parse the body: routes with a
85
+ // body schema are routed to the `body-derive-before` / `body-derive-before-after` lane below.
86
+ const lifecycleHookLane = lane === "lifecycle" &&
87
+ !hasResponseContract &&
88
+ !hasDecorations &&
89
+ !hasIdempotency &&
90
+ !hasLedger &&
91
+ schema?.onValidationError === undefined &&
92
+ !defaultOnValidationError &&
93
+ schema?.params === undefined &&
94
+ schema?.headers === undefined &&
95
+ schema?.body === undefined &&
96
+ derives === 1 &&
97
+ beforeHandle === 1 &&
98
+ afterHandle <= 1 &&
99
+ onError === 0 &&
100
+ around === 0
101
+ ? afterHandle === 0
102
+ ? "derive-before"
103
+ : "derive-before-after"
104
+ : undefined;
105
+ // Body + lifecycle hooks in a closed shape: a body schema plus the same 1-derive + 1-before +
106
+ // 0-or-1-after + 0-onError shape, with no other body/query/path conflict. The fused closure runs
107
+ // parse → validate → derive → before → handler → after → respond in one function frame, the same
108
+ // win `fusedBody` already gives for the no-hooks body shape.
109
+ const fusedBodyLifecycle = lane === "lifecycle" &&
110
+ schema?.body !== undefined &&
111
+ schema?.query === undefined &&
112
+ schema?.params === undefined &&
113
+ schema?.headers === undefined &&
114
+ schema?.onValidationError === undefined &&
115
+ !defaultOnValidationError &&
116
+ !hasResponseContract &&
117
+ !hasDecorations &&
118
+ !hasIdempotency &&
119
+ !hasLedger &&
120
+ derives === 1 &&
121
+ beforeHandle === 1 &&
122
+ afterHandle <= 1 &&
123
+ onError === 0 &&
124
+ around === 0;
125
+ return {
126
+ bare,
127
+ fusedQuery,
128
+ bodyOnly,
129
+ fusedBody,
130
+ lane,
131
+ lifecycleLane,
132
+ lifecycleHookLane,
133
+ fusedLane: around === 0
134
+ ? fusedQuery
135
+ ? "query"
136
+ : fusedBody
137
+ ? "body"
138
+ : bare
139
+ ? "bare"
140
+ : lifecycleHookLane !== undefined
141
+ ? lifecycleHookLane
142
+ : fusedBodyLifecycle
143
+ ? afterHandle === 0
144
+ ? "body-derive-before"
145
+ : "body-derive-before-after"
146
+ : undefined
147
+ : undefined,
148
+ };
149
+ }
150
+ //# sourceMappingURL=route-lanes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-lanes.js","sourceRoot":"","sources":["../../src/internal/route-lanes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Registration-compiled general route program.
3
+ *
4
+ * This is deliberately a data-and-control-flow compiler, not source generation: user functions and
5
+ * schemas remain opaque references and no request value is ever converted into executable code. The
6
+ * program is frozen at registration so the request path walks one immutable stage sequence instead
7
+ * of rediscovering which lifecycle features are present.
8
+ */
9
+ import type { StandardSchemaV1 } from "../schema/standard.js";
10
+ import type { Registry } from "../server/registry.js";
11
+ import { type ResponseResult } from "../server/runtime-core.js";
12
+ import type { CtxSet, MaybePromise, RawContext, RequestSource, Server } from "../server/server.js";
13
+ import type { InternalHandler, RawAfterHandle, RawBeforeHandle, RawDerive, RawErrorHandler, RouteEntry } from "./route-execution.js";
14
+ export type ProgramValidationKind = "headers" | "params" | "body" | "query";
15
+ export type RouteProgramStage = {
16
+ readonly kind: ProgramValidationKind;
17
+ readonly schema: StandardSchemaV1;
18
+ } | {
19
+ readonly kind: "derive";
20
+ readonly run: RawDerive;
21
+ } | {
22
+ readonly kind: "before";
23
+ readonly run: RawBeforeHandle;
24
+ } | {
25
+ readonly kind: "handler";
26
+ readonly run: InternalHandler;
27
+ } | {
28
+ readonly kind: "after";
29
+ readonly run: RawAfterHandle;
30
+ };
31
+ /** The complete registration-time lifecycle, in semantic execution order. */
32
+ export interface RouteProgram {
33
+ readonly stages: readonly RouteProgramStage[];
34
+ readonly validationStages: readonly Extract<RouteProgramStage, {
35
+ kind: ProgramValidationKind;
36
+ }>[];
37
+ readonly derives: readonly RawDerive[];
38
+ readonly beforeHandle: readonly RawBeforeHandle[];
39
+ readonly afterHandle: readonly RawAfterHandle[];
40
+ readonly onError: readonly RawErrorHandler[];
41
+ readonly handler: InternalHandler;
42
+ readonly decorations: Record<PropertyKey, unknown>;
43
+ readonly hasDecorations: boolean;
44
+ readonly bodySchema: StandardSchemaV1 | undefined;
45
+ readonly bodyLimit: RouteEntry["bodyLimit"];
46
+ readonly responseContract: RouteEntry["responseContract"];
47
+ }
48
+ export interface RouteProgramInput {
49
+ readonly schema: RouteEntry["schema"];
50
+ readonly handler: InternalHandler;
51
+ readonly derives: readonly RawDerive[];
52
+ readonly beforeHandle: readonly RawBeforeHandle[];
53
+ readonly afterHandle: readonly RawAfterHandle[];
54
+ readonly onError: readonly RawErrorHandler[];
55
+ readonly decorations: Record<PropertyKey, unknown>;
56
+ readonly hasDecorations: boolean;
57
+ readonly bodySchema: StandardSchemaV1 | undefined;
58
+ readonly bodyLimit: RouteEntry["bodyLimit"];
59
+ readonly responseContract: RouteEntry["responseContract"];
60
+ }
61
+ /** Build the immutable stage sequence once, while the server is still configurable. */
62
+ export declare function compileRouteProgram(input: RouteProgramInput): RouteProgram;
63
+ type ProgramResult<T> = MaybePromise<T>;
64
+ /** Execute the general program. The first synchronous stage sequence stays synchronous. */
65
+ 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) => T, wrapResponse: (response: Response | ResponseResult) => T): ProgramResult<T>;
66
+ export {};
67
+ //# sourceMappingURL=route-program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-program.d.ts","sourceRoot":"","sources":["../../src/internal/route-program.ts"],"names":[],"mappings":"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"}