@alxia/core 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -355,7 +355,8 @@ response, which the hook returns — or a reply of its own, typed like a
355
355
  Hooks run before validation: `pathParams` holds the path's parameters as
356
356
  they arrived. `onError` turns a thrown
357
357
  error into a reply the same way; an `HttpError` is answered as it says, and
358
- anything else is a 500 that leaks nothing. `onRefusal` answers a request
358
+ anything else is a 500 that leaks nothing, but for a client that hung up
359
+ mid-request, a 499 nobody reads. `onRefusal` answers a request
359
360
  the route's schemas refuse, or whose body passes its `bodyLimit`
360
361
  ([Requests](#requests)); the last one declared
361
362
  before a route is the one it uses.
@@ -477,7 +478,7 @@ covers all three kinds.
477
478
  | `Refusal`, `ValidationRefusal`, `BodyLimitRefusal`, `RequestPart` | what an `onRefusal` hook reads: the refusal by `kind` — `validation`, with the `part` that failed first and its `issues`, or `body_limit`, with the route's `limit` |
478
479
  | `RefusalSchema`, `RefusalResponses` | what an `onRefusal` hook may declare: the schema of each 4xx it answers, and its `contentType` |
479
480
  | `RefusalHook`, `RefusalHandler` | an `onRefusal` hook, and the one in force for a route: `RouteDefinition['refusal']`, what `@alxia/openapi` documents |
480
- | `Refusing`, `FallsBack`, `DefaultRefusalOutcome`, `DefaultLimitOutcome`, `RefusalOutcome`, `ThenShortcuts`, `BehindShortcuts`, `BodyLimited`, `BodyLimitShortcut`, `IsLimited` | how an app's type carries its `onRefusal` hook and its `bodyLimit()`: the mark of the hook's replies, of the default it falls back to, the default 400 and 413 a plugin's route keeps, how a later scope's and a using app's hooks replace them, the mark of a `bodyLimit()` in force and the shortcut it adds, and whether a route is under a limit. Exported so an app's type can be named in a declaration file |
481
+ | `Refusing`, `FallsBack`, `DefaultRefusalOutcome`, `DefaultLimitOutcome`, `RefusalOutcome`, `RefusalsOf`, `DeclaredRefusal`, `ThenShortcuts`, `BehindShortcuts`, `BodyLimited`, `BodyLimitShortcut`, `IsLimited` | how an app's type carries its `onRefusal` hook and its `bodyLimit()`: the mark of the hook's replies, of the default it falls back to, the default 400 and 413 a plugin's route keeps, how a later scope's and a using app's hooks replace them, the mark of a `bodyLimit()` in force and the shortcut it adds, whether a route is under a limit, the outcomes a refused request may get (`RefusalOutcome`), the replies a hook may answer (`RefusalsOf`) and, for a hook declaring schemas, those replies as its schemas give them back (`DeclaredRefusal`). Exported so an app's type can be named in a declaration file |
481
482
  | `problem(details, init?)`, `ProblemDetails` | a reply whose body is an RFC 9457 problem — `type`, `title`, `status`, `detail`, `instance` and typed extension members — sent with its `status` as `application/problem+json` |
482
483
  | `RoutePath`, `JoinPath`, `PathParams`, `PathParamName` | paths: an absolute path, a prefix joined to a path, the parameters a path declares |
483
484
  | `StatusCode`, `InformationalStatus`, `SuccessStatus`, `RedirectStatus`, `ClientErrorStatus`, `ServerErrorStatus` | every status a route may declare, and each class of them |
@@ -1 +1 @@
1
- {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/app/chain.ts"],"names":[],"mappings":"AAYA,OAAO,EACN,KAAK,UAAU,EAKf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGtE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAC/B,UAAU,EAAE,eAAe,GAAG,gBAAgB,EAC9C,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,EAC1C,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,iBAAiB,EAAE,OAAO,EAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAClC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAiC1B;AA4DD,sEAAsE;AACtE,wBAAsB,MAAM,CAC3B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,iBAAiB,EAAE,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,CAiCnB;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CACzB,UAAU,EAAE,eAAe,GAAG,gBAAgB,EAC9C,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,WAAW,EAChB,iBAAiB,UAAO,GACtB,OAAO,CAAC,QAAQ,CAAC,CA0BnB"}
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../../src/app/chain.ts"],"names":[],"mappings":"AAYA,OAAO,EACN,KAAK,UAAU,EAKf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGtE,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAC/B,UAAU,EAAE,eAAe,GAAG,gBAAgB,EAC9C,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,GAAG,EAAE,gBAAgB,EACrB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,EAC1C,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,iBAAiB,EAAE,OAAO,EAC1B,IAAI,EAAE,MAAM,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAClC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAiC1B;AA4DD,sEAAsE;AACtE,wBAAsB,MAAM,CAC3B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,iBAAiB,EAAE,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,CAiCnB;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CACzB,UAAU,EAAE,eAAe,GAAG,gBAAgB,EAC9C,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,WAAW,EAChB,iBAAiB,UAAO,GACtB,OAAO,CAAC,QAAQ,CAAC,CA2BnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/app/pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;AAKxD,4EAA4E;AAC5E,wBAAsB,KAAK,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,QAAQ,CAAC,CAwBnB"}
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/app/pipeline.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,cAAc,CAAC;AAKxD,4EAA4E;AAC5E,wBAAsB,KAAK,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,EACvC,IAAI,EAAE,MAAM,GAAG,SAAS,GACtB,OAAO,CAAC,QAAQ,CAAC,CAuBnB"}
@@ -9,6 +9,22 @@ import type { RouteDefinition } from './definition';
9
9
  import type { ResponseSchemas, ResponseSettings } from './types';
10
10
  /** The 500 of a request that failed: its body says no more than `internal`. */
11
11
  export declare function internalError(): Response;
12
+ /**
13
+ * Whether `error` is the client hanging up: the request's signal is
14
+ * aborted and the error is that abort, as Bun's body read throws it (an
15
+ * `AbortError`, not the signal's own reason). Any other error raised after
16
+ * the client left, a bug included, is the app's.
17
+ */
18
+ export declare function clientGone(error: unknown, request: Request): boolean;
19
+ /**
20
+ * What a request that failed with `error` gets. The client hanging up
21
+ * mid-request (`clientGone`) is no app error: nothing is logged, and the
22
+ * 499 nobody reads is only what an `onResponse` hook, a logger's, sees. Any
23
+ * other error is logged and answered 500.
24
+ */
25
+ export declare function failed(error: unknown, request: Request): Response;
26
+ /** nginx's "client closed request": the status of a request its client left. */
27
+ export declare const CLIENT_GONE = 499;
12
28
  /** A reply as it is, with what the route set on its response. */
13
29
  export declare function send(reply: AnyReply, set: ResponseSettings, signal?: AbortSignal): Response;
14
30
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/app/send.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAGN,KAAK,gBAAgB,EACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAIlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIjE,+EAA+E;AAC/E,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AAED,iEAAiE;AACjE,wBAAgB,IAAI,CACnB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,gBAAgB,EACrB,MAAM,CAAC,EAAE,WAAW,GAClB,QAAQ,CAmBV;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CACjC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,WAAW,EACnB,iBAAiB,EAAE,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,CAanB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,QAAQ,EACf,iBAAiB,EAAE,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,CAkBnB;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAC3B,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACvB,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GACzB,QAAQ,CAKV"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../src/app/send.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAGN,KAAK,gBAAgB,EACrB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAIlE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIjE,+EAA+E;AAC/E,wBAAgB,aAAa,IAAI,QAAQ,CAExC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAMpE;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,CAMjE;AAED,gFAAgF;AAChF,eAAO,MAAM,WAAW,MAAM,CAAC;AAE/B,iEAAiE;AACjE,wBAAgB,IAAI,CACnB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,gBAAgB,EACrB,MAAM,CAAC,EAAE,WAAW,GAClB,QAAQ,CAmBV;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CACjC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,gBAAgB,EACrB,MAAM,EAAE,WAAW,EACnB,iBAAiB,EAAE,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,CAanB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,QAAQ,EACf,iBAAiB,EAAE,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,CAkBnB;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAC3B,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EACvB,KAAK,EAAE,gBAAgB,CAAC,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GACzB,QAAQ,CAKV"}
package/dist/index.d.ts CHANGED
@@ -2,7 +2,7 @@ export { Alxia, type AlxiaOptions, type AnyAlxia, alxia, type ContextOf, type Li
2
2
  export { definePlugin } from './app/define-plugin';
3
3
  export type { AroundHook, RefusalHandler, RefusalHook, RequestHook, ResponseHook, RouteDefinition, SocketDefinition, StartHook, StopHook, } from './app/definition';
4
4
  export type { OperationMethod, OperationSchema, RouteOperation, } from './app/route-operation';
5
- export type { BaseContext, BehindShortcuts, BodyLimited, BodyLimitShortcut, Context, DeclaredReply, DefaultLimitOutcome, DefaultRefusalOutcome, Empty, FallsBack, HandlerResult, IsLimited, MaybePromise, Method, Outcome, OutcomeOf, ProvidedBy, RedirectFunction, RefusalResponses, RefusalSchema, Refusing, RequestContext, RequiresOf, Requiring, ResponseSchemas, ResponseSettings, RouteDetail, RouteEntryOf, RouteInput, RouteOutput, RouteRecord, RouteSchema, RouteTable, ThenShortcuts, TypedReplyFunction, TypedShortcuts, ValidSchema, } from './app/types';
5
+ export type { BaseContext, BehindShortcuts, BodyLimited, BodyLimitShortcut, Context, DeclaredRefusal, DeclaredReply, DefaultLimitOutcome, DefaultRefusalOutcome, Empty, FallsBack, HandlerResult, IsLimited, MaybePromise, Method, Outcome, OutcomeOf, ProvidedBy, RedirectFunction, RefusalOutcome, RefusalResponses, RefusalSchema, RefusalsOf, Refusing, RequestContext, RequiresOf, Requiring, ResponseSchemas, ResponseSettings, RouteDetail, RouteEntryOf, RouteInput, RouteOutput, RouteRecord, RouteSchema, RouteTable, ThenShortcuts, TypedReplyFunction, TypedShortcuts, ValidSchema, } from './app/types';
6
6
  export { type BodyLimitRefusal, type ContentTooLargeBody, ContentTooLargeError, HttpError, type InternalErrorBody, type Refusal, type RequestPart, ResponseValidationError, type RoutingErrorBody, type ValidationErrorBody, type ValidationIssue, type ValidationRefusal, type ValidationTarget, } from './errors/errors';
7
7
  export { vary, withHeaders } from './reply/headers';
8
8
  export { type ProblemDetails, problem } from './reply/problem';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -991,6 +991,19 @@ var internal = { error: "internal" };
991
991
  function internalError() {
992
992
  return toResponse(500, internal, new Headers);
993
993
  }
994
+ function clientGone(error, request) {
995
+ if (!request.signal.aborted)
996
+ return false;
997
+ return error === request.signal.reason || error instanceof DOMException && error.name === "AbortError";
998
+ }
999
+ function failed(error, request) {
1000
+ if (clientGone(error, request)) {
1001
+ return new Response(null, { status: CLIENT_GONE });
1002
+ }
1003
+ console.error(error);
1004
+ return internalError();
1005
+ }
1006
+ var CLIENT_GONE = 499;
994
1007
  function send2(reply, set, signal) {
995
1008
  const headers = new Headers(set.headers);
996
1009
  if (reply.headers !== undefined) {
@@ -1193,6 +1206,8 @@ async function handle(route, request, rawParams, parsers, validateResponses) {
1193
1206
  }
1194
1207
  }
1195
1208
  async function fail(definition, error, ctx, validateResponses = true) {
1209
+ if (clientGone(error, ctx.request))
1210
+ return failed(error, ctx.request);
1196
1211
  if (error instanceof ContentTooLargeError) {
1197
1212
  try {
1198
1213
  return await refuse(definition, { kind: "body_limit", limit: error.limit }, ctx.set, ctx, validateResponses);
@@ -1211,8 +1226,7 @@ async function fail(definition, error, ctx, validateResponses = true) {
1211
1226
  if (error instanceof HttpError) {
1212
1227
  return send2(new Reply(error.status, error.body), ctx.set);
1213
1228
  }
1214
- console.error(error);
1215
- return internalError();
1229
+ return failed(error, ctx.request);
1216
1230
  }
1217
1231
 
1218
1232
  // src/app/socket.ts
@@ -1355,8 +1369,7 @@ async function serve(runtime, request, server, path) {
1355
1369
  try {
1356
1370
  return await run(0);
1357
1371
  } catch (error) {
1358
- console.error(error);
1359
- return internalError();
1372
+ return failed(error, ctx.request);
1360
1373
  }
1361
1374
  }
1362
1375
  async function pipeline(runtime, ctx, path) {
@@ -1373,8 +1386,7 @@ async function pipeline(runtime, ctx, path) {
1373
1386
  }
1374
1387
  response ??= await route(runtime, ctx, path);
1375
1388
  } catch (error) {
1376
- console.error(error);
1377
- response = internalError();
1389
+ response = failed(error, ctx.request);
1378
1390
  }
1379
1391
  if (response === UPGRADED)
1380
1392
  return;
@@ -1771,5 +1783,5 @@ export {
1771
1783
  withHeaders
1772
1784
  };
1773
1785
 
1774
- //# debugId=62C2FCF982C60F6964756E2164756E21
1786
+ //# debugId=B38C455B7CE36AB464756E2164756E21
1775
1787
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -20,16 +20,16 @@
20
20
  "/**\n * The conditional and range requests of a static file: whether the client's\n * copy is current, whether a range applies to it, and the range asked for.\n */\n\n/** Whether the client's copy is current: `If-None-Match` first, `If-Modified-Since` without it. */\nexport function fresh(\n\theaders: Headers,\n\tetag: string | undefined,\n\tmodified: number | undefined,\n): boolean {\n\tconst match = headers.get('if-none-match');\n\tif (match !== null) {\n\t\tif (etag === undefined) return false;\n\t\tconst weak = (tag: string) => tag.trim().replace(/^W\\//, '');\n\t\treturn match\n\t\t\t.split(',')\n\t\t\t.some((tag) => tag.trim() === '*' || weak(tag) === weak(etag));\n\t}\n\tconst since = headers.get('if-modified-since');\n\tif (since === null || modified === undefined) return false;\n\tconst time = Date.parse(since);\n\treturn !Number.isNaN(time) && Math.floor(modified / 1000) * 1000 <= time;\n}\n\n/** Whether a range applies: always without `If-Range`, else only to the copy it names. */\nexport function ifRange(\n\tvalue: string | null,\n\tetag: string | undefined,\n\tmodified: number | undefined,\n): boolean {\n\tif (value === null) return true;\n\tif (value.startsWith('\"') || value.startsWith('W/')) {\n\t\t// A weak tag never validates a range.\n\t\treturn etag !== undefined && !etag.startsWith('W/') && value === etag;\n\t}\n\tconst time = Date.parse(value);\n\treturn (\n\t\tmodified !== undefined &&\n\t\t!Number.isNaN(time) &&\n\t\tMath.floor(modified / 1000) * 1000 <= time\n\t);\n}\n\n/**\n * One byte range of `size`: its first and last byte, `unsatisfiable`, or\n * `undefined` — a header this server ignores, several ranges included —\n * which serves the whole file.\n */\nexport function parseRange(\n\theader: string,\n\tsize: number,\n):\n\t| { readonly start: number; readonly end: number }\n\t| 'unsatisfiable'\n\t| undefined {\n\tconst match = /^bytes=(\\d*)-(\\d*)$/.exec(header.trim());\n\tif (match === null) return undefined;\n\tconst [, from = '', to = ''] = match;\n\tif (from === '' && to === '') return undefined;\n\tif (from === '') {\n\t\tconst suffix = Number(to);\n\t\tif (suffix === 0) return 'unsatisfiable';\n\t\treturn { start: Math.max(0, size - suffix), end: size - 1 };\n\t}\n\tconst start = Number(from);\n\tconst end = to === '' ? size - 1 : Math.min(Number(to), size - 1);\n\tif (start >= size || start > end) return 'unsatisfiable';\n\treturn { start, end };\n}\n",
21
21
  "import { ContentTooLargeError, type ValidationIssue } from '../errors/errors';\n\n/**\n * The query string as an object. A key given once is a string, a key given\n * more than once an array of them, so `z.array(...)` reads `?tag=a&tag=b`;\n * for a list that may hold one item, accept both (see the README).\n */\nexport function readQuery(url: URL): Record<string, string | string[]> {\n\tconst query: Record<string, string | string[]> = {};\n\tfor (const [key, value] of url.searchParams) {\n\t\tconst seen = query[key];\n\t\tif (seen === undefined) query[key] = value;\n\t\telse if (typeof seen === 'string') query[key] = [seen, value];\n\t\telse seen.push(value);\n\t}\n\treturn query;\n}\n\n/** The request headers as an object, names lowercased. */\nexport function readHeaders(headers: Headers): Record<string, string> {\n\tconst read: Record<string, string> = {};\n\tfor (const [key, value] of headers) read[key] = value;\n\treturn read;\n}\n\n/** The request cookies as an object. */\nexport function readCookies(headers: Headers): Record<string, string> {\n\tconst cookie = headers.get('cookie');\n\tif (cookie === null) return {};\n\treturn Object.fromEntries(new Bun.CookieMap(cookie));\n}\n\n/** A body parser an app adds, tried before the built-in ones. */\nexport interface BodyParser {\n\t/** A `content-type` it reads: a prefix, or a pattern. */\n\treadonly type: string | RegExp;\n\treadonly parse: (request: Request) => unknown;\n}\n\nfunction parserFor(\n\tparsers: readonly BodyParser[],\n\ttype: string,\n): BodyParser | undefined {\n\treturn parsers.find((parser) =>\n\t\ttypeof parser.type === 'string'\n\t\t\t? type.startsWith(parser.type)\n\t\t\t: parser.type.test(type),\n\t);\n}\n\nexport type ReadBody =\n\t| { readonly ok: true; readonly value: unknown }\n\t| { readonly ok: false; readonly issue: ValidationIssue };\n\n/**\n * The request body, read by its `content-type`: by a parser the app added,\n * else JSON, a form (an object of its fields, a field given more than once\n * an array), text, or the bytes. A body past the route's `bodyLimit` throws\n * a `ContentTooLargeError`, a custom parser's included.\n */\nexport async function readBody(\n\trequest: Request,\n\tparsers: readonly BodyParser[] = [],\n): Promise<ReadBody> {\n\tconst type = request.headers.get('content-type')?.toLowerCase() ?? '';\n\tconst custom = parserFor(parsers, type);\n\tif (custom !== undefined) {\n\t\ttry {\n\t\t\treturn { ok: true, value: await custom.parse(request) };\n\t\t} catch (error) {\n\t\t\tif (error instanceof ContentTooLargeError) throw error;\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\tissue: {\n\t\t\t\t\ttarget: 'body',\n\t\t\t\t\tpath: [],\n\t\t\t\t\tcode: 'unreadable_body',\n\t\t\t\t\tmessage:\n\t\t\t\t\t\terror instanceof Error ? error.message : 'The body cannot be read',\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\tif (type.includes('json')) {\n\t\tconst text = await request.text();\n\t\tif (text === '') return { ok: true, value: undefined };\n\t\ttry {\n\t\t\treturn { ok: true, value: JSON.parse(text) };\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tok: false,\n\t\t\t\tissue: {\n\t\t\t\t\ttarget: 'body',\n\t\t\t\t\tpath: [],\n\t\t\t\t\tcode: 'invalid_json',\n\t\t\t\t\tmessage: 'The body is not valid JSON',\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t}\n\tif (\n\t\ttype.startsWith('multipart/form-data') ||\n\t\ttype.startsWith('application/x-www-form-urlencoded')\n\t) {\n\t\tconst form = await request.formData();\n\t\tconst value: Record<string, FormDataEntryValue | FormDataEntryValue[]> = {};\n\t\tfor (const [key, entry] of form) {\n\t\t\tconst seen = value[key];\n\t\t\tif (seen === undefined) value[key] = entry;\n\t\t\telse if (Array.isArray(seen)) seen.push(entry);\n\t\t\telse value[key] = [seen, entry];\n\t\t}\n\t\treturn { ok: true, value };\n\t}\n\tif (type.startsWith('text/'))\n\t\treturn { ok: true, value: await request.text() };\n\tif (request.body === null) return { ok: true, value: undefined };\n\treturn { ok: true, value: await request.arrayBuffer() };\n}\n",
22
22
  "/**\n * The context a route's hooks and handler read: the request, bounded by\n * the route's `bodyLimit`, its path parameters as they arrived, and what\n * it sets on its response.\n */\nimport { createReply, Reply } from '../reply/reply';\nimport { limitBody } from '../request/limit';\nimport type { RedirectStatus } from '../types/status';\nimport type { RouteDefinition, SocketDefinition } from './definition';\nimport type {\n\tBaseContext,\n\tRedirectFunction,\n\tRequestContext,\n\tResponseSettings,\n} from './types';\n\nconst redirect: RedirectFunction = (location, status) =>\n\tnew Reply(status ?? (302 as RedirectStatus), undefined, {\n\t\theaders: { location: String(location) },\n\t}) as never;\n\n/**\n * The context a route's hooks and handler read, and what they set on its\n * response. Under a `bodyLimit`, its `request` is the one whose body is\n * bounded: every reader of the body, core's or the handler's, counts.\n */\nexport function routeContext(\n\tdefinition: RouteDefinition | SocketDefinition,\n\trequest: RequestContext,\n\tpathParams: Record<string, string>,\n): { ctx: Record<string, unknown> & BaseContext; set: ResponseSettings } {\n\tlet cookies: Bun.CookieMap | undefined;\n\tconst set: ResponseSettings & { readonly touched: () => boolean } = {\n\t\theaders: new Headers(),\n\t\tget cookies() {\n\t\t\tcookies ??= new Bun.CookieMap();\n\t\t\treturn cookies;\n\t\t},\n\t\ttouched: () => cookies !== undefined,\n\t};\n\tconst limit = 'bodyLimit' in definition ? definition.bodyLimit : undefined;\n\tconst ctx: Record<string, unknown> & BaseContext = {\n\t\t...request,\n\t\t...(limit === undefined\n\t\t\t? {}\n\t\t\t: { request: limitBody(request.request, limit) }),\n\t\troute: definition.path,\n\t\tpathParams,\n\t\tset,\n\t\treply: createReply,\n\t\tredirect,\n\t};\n\treturn { ctx, set };\n}\n",
23
- "/**\n * How a reply becomes a response: the headers and cookies the route set\n * merged with the reply's own, the body checked by the schema the route\n * declares for its status, and the answers the router gives on its own.\n */\nimport {\n\ttype InternalErrorBody,\n\tResponseValidationError,\n\ttype RoutingErrorBody,\n} from '../errors/errors';\nimport { vary } from '../reply/headers';\nimport { type AnyReply, Reply, toResponse } from '../reply/reply';\nimport { check, type StandardSchemaV1 } from '../schema/standard-schema';\nimport { isAsyncIterable } from '../sse/async-iterable';\nimport { isNamedEventStreamSchema, toFrames } from '../sse/named-events';\nimport type { RouteDefinition } from './definition';\nimport type { ResponseSchemas, ResponseSettings } from './types';\n\nconst internal: InternalErrorBody = { error: 'internal' };\n\n/** The 500 of a request that failed: its body says no more than `internal`. */\nexport function internalError(): Response {\n\treturn toResponse(500, internal, new Headers());\n}\n\n/** A reply as it is, with what the route set on its response. */\nexport function send(\n\treply: AnyReply,\n\tset: ResponseSettings,\n\tsignal?: AbortSignal,\n): Response {\n\tconst headers = new Headers(set.headers);\n\tif (reply.headers !== undefined) {\n\t\tfor (const [key, value] of new Headers(reply.headers)) {\n\t\t\t// A reply's Vary adds to the plugins': each said what it read.\n\t\t\tif (key === 'vary') {\n\t\t\t\tfor (const name of value.split(',')) vary(headers, name);\n\t\t\t} else if (key === 'set-cookie') {\n\t\t\t\t// Each cookie is its own header: setting would keep the last.\n\t\t\t\theaders.append(key, value);\n\t\t\t} else headers.set(key, value);\n\t\t}\n\t}\n\tif ((set as { touched?: () => boolean }).touched?.()) {\n\t\tfor (const cookie of set.cookies.toSetCookieHeaders()) {\n\t\t\theaders.append('set-cookie', cookie);\n\t\t}\n\t}\n\treturn toResponse(reply.status, reply.body, headers, signal);\n}\n\n/**\n * A handler's reply, checked against the schema its route declares for its\n * status and sent as that schema's output. A status the route does not\n * declare, or a body its schema refuses, throws a `ResponseValidationError`.\n */\nexport async function sendDeclared(\n\troute: RouteDefinition,\n\treply: AnyReply,\n\tset: ResponseSettings,\n\tsignal: AbortSignal,\n\tvalidateResponses: boolean,\n): Promise<Response> {\n\tconst responses = route.schema.response;\n\tif (responses === undefined || isRedirect(reply)) {\n\t\treturn send(reply, set, signal);\n\t}\n\tconst checked = await checkReply(\n\t\troute.method,\n\t\troute.path,\n\t\tresponses,\n\t\treply,\n\t\tvalidateResponses,\n\t);\n\treturn send(checked, set, signal);\n}\n\n/**\n * `reply` checked against the schema `responses` declares for its status,\n * as that schema's output: what a handler's reply and an `onRefusal`\n * hook's go through. A status with no schema, or a body its schema\n * refuses, throws a `ResponseValidationError`.\n */\nexport async function checkReply(\n\tmethod: string,\n\tpath: string,\n\tresponses: ResponseSchemas,\n\treply: AnyReply,\n\tvalidateResponses: boolean,\n): Promise<AnyReply> {\n\tconst schema = responses[reply.status as keyof typeof responses];\n\tif (schema === undefined) {\n\t\tthrow ResponseValidationError.undeclared(method, path, reply.status);\n\t}\n\tif (!validateResponses) return framed(schema, reply);\n\tconst checked = await check(schema, reply.body, 'body');\n\tif (!checked.ok) {\n\t\tthrow new ResponseValidationError(\n\t\t\tmethod,\n\t\t\tpath,\n\t\t\treply.status,\n\t\t\tchecked.issues,\n\t\t);\n\t}\n\treturn new Reply(reply.status, checked.value, {\n\t\theaders: reply.headers ?? {},\n\t});\n}\n\n/** What the router answers when no route takes the request. */\nexport function routingError(\n\tstatus: 404 | 405 | 426,\n\terror: RoutingErrorBody['error'],\n\tallowed?: readonly string[],\n): Response {\n\tconst headers = new Headers();\n\tif (allowed !== undefined) headers.set('allow', allowed.join(', '));\n\tconst body: RoutingErrorBody = { error };\n\treturn toResponse(status, body, headers);\n}\n\n/**\n * An unchecked reply as it is, but for a named event stream: its events\n * still need their `event:` lines, and their fields still refuse a line\n * break.\n */\nfunction framed(schema: StandardSchemaV1, reply: AnyReply): AnyReply {\n\tif (!isNamedEventStreamSchema(schema) || !isAsyncIterable(reply.body)) {\n\t\treturn reply;\n\t}\n\treturn new Reply(\n\t\treply.status,\n\t\ttoFrames(schema['~events'], reply.body, false),\n\t\t{ headers: reply.headers ?? {} },\n\t);\n}\n\nfunction isRedirect(reply: AnyReply): boolean {\n\treturn reply.status >= 300 && reply.status < 400 && reply.body === undefined;\n}\n",
23
+ "/**\n * How a reply becomes a response: the headers and cookies the route set\n * merged with the reply's own, the body checked by the schema the route\n * declares for its status, and the answers the router gives on its own.\n */\nimport {\n\ttype InternalErrorBody,\n\tResponseValidationError,\n\ttype RoutingErrorBody,\n} from '../errors/errors';\nimport { vary } from '../reply/headers';\nimport { type AnyReply, Reply, toResponse } from '../reply/reply';\nimport { check, type StandardSchemaV1 } from '../schema/standard-schema';\nimport { isAsyncIterable } from '../sse/async-iterable';\nimport { isNamedEventStreamSchema, toFrames } from '../sse/named-events';\nimport type { RouteDefinition } from './definition';\nimport type { ResponseSchemas, ResponseSettings } from './types';\n\nconst internal: InternalErrorBody = { error: 'internal' };\n\n/** The 500 of a request that failed: its body says no more than `internal`. */\nexport function internalError(): Response {\n\treturn toResponse(500, internal, new Headers());\n}\n\n/**\n * Whether `error` is the client hanging up: the request's signal is\n * aborted and the error is that abort, as Bun's body read throws it (an\n * `AbortError`, not the signal's own reason). Any other error raised after\n * the client left, a bug included, is the app's.\n */\nexport function clientGone(error: unknown, request: Request): boolean {\n\tif (!request.signal.aborted) return false;\n\treturn (\n\t\terror === request.signal.reason ||\n\t\t(error instanceof DOMException && error.name === 'AbortError')\n\t);\n}\n\n/**\n * What a request that failed with `error` gets. The client hanging up\n * mid-request (`clientGone`) is no app error: nothing is logged, and the\n * 499 nobody reads is only what an `onResponse` hook, a logger's, sees. Any\n * other error is logged and answered 500.\n */\nexport function failed(error: unknown, request: Request): Response {\n\tif (clientGone(error, request)) {\n\t\treturn new Response(null, { status: CLIENT_GONE });\n\t}\n\tconsole.error(error);\n\treturn internalError();\n}\n\n/** nginx's \"client closed request\": the status of a request its client left. */\nexport const CLIENT_GONE = 499;\n\n/** A reply as it is, with what the route set on its response. */\nexport function send(\n\treply: AnyReply,\n\tset: ResponseSettings,\n\tsignal?: AbortSignal,\n): Response {\n\tconst headers = new Headers(set.headers);\n\tif (reply.headers !== undefined) {\n\t\tfor (const [key, value] of new Headers(reply.headers)) {\n\t\t\t// A reply's Vary adds to the plugins': each said what it read.\n\t\t\tif (key === 'vary') {\n\t\t\t\tfor (const name of value.split(',')) vary(headers, name);\n\t\t\t} else if (key === 'set-cookie') {\n\t\t\t\t// Each cookie is its own header: setting would keep the last.\n\t\t\t\theaders.append(key, value);\n\t\t\t} else headers.set(key, value);\n\t\t}\n\t}\n\tif ((set as { touched?: () => boolean }).touched?.()) {\n\t\tfor (const cookie of set.cookies.toSetCookieHeaders()) {\n\t\t\theaders.append('set-cookie', cookie);\n\t\t}\n\t}\n\treturn toResponse(reply.status, reply.body, headers, signal);\n}\n\n/**\n * A handler's reply, checked against the schema its route declares for its\n * status and sent as that schema's output. A status the route does not\n * declare, or a body its schema refuses, throws a `ResponseValidationError`.\n */\nexport async function sendDeclared(\n\troute: RouteDefinition,\n\treply: AnyReply,\n\tset: ResponseSettings,\n\tsignal: AbortSignal,\n\tvalidateResponses: boolean,\n): Promise<Response> {\n\tconst responses = route.schema.response;\n\tif (responses === undefined || isRedirect(reply)) {\n\t\treturn send(reply, set, signal);\n\t}\n\tconst checked = await checkReply(\n\t\troute.method,\n\t\troute.path,\n\t\tresponses,\n\t\treply,\n\t\tvalidateResponses,\n\t);\n\treturn send(checked, set, signal);\n}\n\n/**\n * `reply` checked against the schema `responses` declares for its status,\n * as that schema's output: what a handler's reply and an `onRefusal`\n * hook's go through. A status with no schema, or a body its schema\n * refuses, throws a `ResponseValidationError`.\n */\nexport async function checkReply(\n\tmethod: string,\n\tpath: string,\n\tresponses: ResponseSchemas,\n\treply: AnyReply,\n\tvalidateResponses: boolean,\n): Promise<AnyReply> {\n\tconst schema = responses[reply.status as keyof typeof responses];\n\tif (schema === undefined) {\n\t\tthrow ResponseValidationError.undeclared(method, path, reply.status);\n\t}\n\tif (!validateResponses) return framed(schema, reply);\n\tconst checked = await check(schema, reply.body, 'body');\n\tif (!checked.ok) {\n\t\tthrow new ResponseValidationError(\n\t\t\tmethod,\n\t\t\tpath,\n\t\t\treply.status,\n\t\t\tchecked.issues,\n\t\t);\n\t}\n\treturn new Reply(reply.status, checked.value, {\n\t\theaders: reply.headers ?? {},\n\t});\n}\n\n/** What the router answers when no route takes the request. */\nexport function routingError(\n\tstatus: 404 | 405 | 426,\n\terror: RoutingErrorBody['error'],\n\tallowed?: readonly string[],\n): Response {\n\tconst headers = new Headers();\n\tif (allowed !== undefined) headers.set('allow', allowed.join(', '));\n\tconst body: RoutingErrorBody = { error };\n\treturn toResponse(status, body, headers);\n}\n\n/**\n * An unchecked reply as it is, but for a named event stream: its events\n * still need their `event:` lines, and their fields still refuse a line\n * break.\n */\nfunction framed(schema: StandardSchemaV1, reply: AnyReply): AnyReply {\n\tif (!isNamedEventStreamSchema(schema) || !isAsyncIterable(reply.body)) {\n\t\treturn reply;\n\t}\n\treturn new Reply(\n\t\treply.status,\n\t\ttoFrames(schema['~events'], reply.body, false),\n\t\t{ headers: reply.headers ?? {} },\n\t);\n}\n\nfunction isRedirect(reply: AnyReply): boolean {\n\treturn reply.status >= 300 && reply.status < 400 && reply.body === undefined;\n}\n",
24
24
  "/**\n * A request the app refused before its handler ran, answered: by the\n * route's `onRefusal` hook, or by the default.\n */\nimport type {\n\tContentTooLargeBody,\n\tRefusal,\n\tValidationErrorBody,\n} from '../errors/errors';\nimport { Reply } from '../reply/reply';\nimport type { RouteDefinition, SocketDefinition } from './definition';\nimport { checkReply, send } from './send';\nimport type { BaseContext, ResponseSettings } from './types';\n\n/**\n * A refused request, answered by the route's `onRefusal` hook — its reply\n * checked by the schemas the hook declares — or, when it has none or\n * returns nothing, by the default of its kind: a 400 with the issues of a\n * `validation`, the 413 of a `body_limit`.\n */\nexport async function refuse(\n\tdefinition: RouteDefinition | SocketDefinition,\n\trefusal: Refusal,\n\tset: ResponseSettings,\n\tctx: BaseContext,\n\tvalidateResponses: boolean,\n): Promise<Response> {\n\tconst handler = definition.refusal;\n\tif (handler !== undefined) {\n\t\tlet reply = handler.hook(refusal, ctx);\n\t\tif (reply instanceof Promise) reply = await reply;\n\t\tconst method = 'method' in definition ? definition.method : 'WS';\n\t\tif (reply instanceof Reply) {\n\t\t\tif (handler.response !== undefined) {\n\t\t\t\treply = await checkReply(\n\t\t\t\t\tmethod,\n\t\t\t\t\tdefinition.path,\n\t\t\t\t\thandler.response,\n\t\t\t\t\treply,\n\t\t\t\t\tvalidateResponses,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn send(withContentType(reply, handler.contentType), set);\n\t\t}\n\t\tif (reply !== undefined) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`${method} ${definition.path}: the onRefusal hook returned neither a reply nor nothing.`,\n\t\t\t);\n\t\t}\n\t}\n\treturn send(byDefault(refusal), set);\n}\n\n/** The reply a refusal gets when no hook answers it. */\nfunction byDefault(refusal: Refusal): Reply {\n\tswitch (refusal.kind) {\n\t\tcase 'validation': {\n\t\t\tconst body: ValidationErrorBody = {\n\t\t\t\terror: 'validation',\n\t\t\t\tissues: refusal.issues,\n\t\t\t};\n\t\t\treturn new Reply(400, body);\n\t\t}\n\t\tcase 'body_limit': {\n\t\t\tconst body: ContentTooLargeBody = {\n\t\t\t\terror: 'content_too_large',\n\t\t\t\tlimit: refusal.limit,\n\t\t\t};\n\t\t\treturn new Reply(413, body);\n\t\t}\n\t}\n}\n\n/** `reply` with `content-type` set to `type`, unless it sets one. */\nfunction withContentType(reply: Reply, type: string | undefined): Reply {\n\tif (type === undefined) return reply;\n\tconst headers = new Headers(reply.headers);\n\tif (headers.has('content-type')) return reply;\n\theaders.set('content-type', type);\n\treturn new Reply(reply.status, reply.body, { headers });\n}\n",
25
- "/**\n * A route's own run, once the router has found it: its context, its hooks\n * in the order declared, the request validated, the handler, and the\n * `onError` hooks when any of it throws.\n */\nimport {\n\tContentTooLargeError,\n\tHttpError,\n\ttype RequestPart,\n\ttype ValidationIssue,\n} from '../errors/errors';\nimport { Reply } from '../reply/reply';\nimport {\n\ttype BodyParser,\n\treadBody,\n\treadCookies,\n\treadHeaders,\n\treadQuery,\n} from '../request/read';\nimport { check } from '../schema/standard-schema';\nimport { routeContext } from './context';\nimport type { RouteDefinition, SocketDefinition } from './definition';\nimport { refuse } from './refusal';\nimport { internalError, send, sendDeclared } from './send';\nimport type { BaseContext, RequestContext, ResponseSettings } from './types';\n\n/**\n * Runs the hooks of a route in order — a `derive` adds to the context or\n * ends the request, a `wrap` runs the rest inside it — then validates the\n * request, then `last`. A socket's upgrade skips the `wrap` hooks: it has\n * no response to wrap.\n */\nexport async function chain<Last>(\n\tdefinition: RouteDefinition | SocketDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tset: ResponseSettings,\n\tctx: Record<string, unknown> & BaseContext,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n\tlast: () => Promise<Response | Last>,\n): Promise<Response | Last> {\n\tconst hooks = definition.derive;\n\tconst socket = !('method' in definition);\n\tconst signal = request.request.signal;\n\tconst step = async (index: number): Promise<Response | Last> => {\n\t\tconst hook = hooks[index];\n\t\tif (hook === undefined) {\n\t\t\tconst refused = await validate(\n\t\t\t\tdefinition,\n\t\t\t\trequest,\n\t\t\t\trawParams,\n\t\t\t\tset,\n\t\t\t\tctx,\n\t\t\t\tparsers,\n\t\t\t\tvalidateResponses,\n\t\t\t);\n\t\t\treturn refused ?? last();\n\t\t}\n\t\tif (hook.kind === 'wrap') {\n\t\t\tif (socket) return step(index + 1);\n\t\t\tlet wrapped = hook.run(ctx, () => step(index + 1) as Promise<Response>);\n\t\t\tif (wrapped instanceof Promise) wrapped = await wrapped;\n\t\t\treturn wrapped instanceof Reply ? send(wrapped, set, signal) : wrapped;\n\t\t}\n\t\tlet added = hook.run(ctx);\n\t\tif (added instanceof Promise) added = await added;\n\t\tif (added instanceof Reply) return send(added, set, signal);\n\t\tif (added !== null && typeof added === 'object') {\n\t\t\tObject.assign(ctx, added);\n\t\t}\n\t\treturn step(index + 1);\n\t};\n\treturn step(0);\n}\n\n/** The request checked by the route's schemas: the response that refuses it, or nothing. */\nasync function validate(\n\tdefinition: RouteDefinition | SocketDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tset: ResponseSettings,\n\tctx: Record<string, unknown> & BaseContext,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n): Promise<Response | undefined> {\n\tconst { schema } = definition;\n\tconst issues: ValidationIssue[] = [];\n\tlet part: RequestPart | undefined;\n\tconst parts = [\n\t\t['params', schema.params, () => rawParams],\n\t\t['query', schema.query, () => readQuery(request.url)],\n\t\t['headers', schema.headers, () => readHeaders(request.request.headers)],\n\t\t['cookies', schema.cookies, () => readCookies(request.request.headers)],\n\t] as const;\n\tfor (const [target, partSchema, read] of parts) {\n\t\tconst raw = read();\n\t\tif (partSchema === undefined) {\n\t\t\tctx[target] = raw;\n\t\t\tcontinue;\n\t\t}\n\t\tconst checked = await check(partSchema, raw, target);\n\t\tif (checked.ok) ctx[target] = checked.value;\n\t\telse {\n\t\t\tpart ??= target;\n\t\t\tissues.push(...checked.issues);\n\t\t}\n\t}\n\tctx['body'] = undefined;\n\tconst bodySchema = 'body' in schema ? schema.body : undefined;\n\tif (bodySchema !== undefined) {\n\t\tconst body = await readBody(ctx.request, parsers);\n\t\tif (!body.ok) {\n\t\t\tpart ??= 'body';\n\t\t\tissues.push(body.issue);\n\t\t} else {\n\t\t\tconst checked = await check(bodySchema, body.value, 'body');\n\t\t\tif (checked.ok) ctx['body'] = checked.value;\n\t\t\telse {\n\t\t\t\tpart ??= 'body';\n\t\t\t\tissues.push(...checked.issues);\n\t\t\t}\n\t\t}\n\t}\n\tif (part === undefined) return undefined;\n\treturn refuse(\n\t\tdefinition,\n\t\t{ kind: 'validation', part, issues },\n\t\tset,\n\t\tctx,\n\t\tvalidateResponses,\n\t);\n}\n\n/** A route's request, from its hooks to its handler's reply, sent. */\nexport async function handle(\n\troute: RouteDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n): Promise<Response> {\n\tconst { ctx, set } = routeContext(route, request, rawParams);\n\ttry {\n\t\treturn await chain(\n\t\t\troute,\n\t\t\trequest,\n\t\t\trawParams,\n\t\t\tset,\n\t\t\tctx,\n\t\t\tparsers,\n\t\t\tvalidateResponses,\n\t\t\tasync () => {\n\t\t\t\tlet reply = route.handler(ctx as never);\n\t\t\t\tif (reply instanceof Promise) reply = await reply;\n\t\t\t\tif (!(reply instanceof Reply)) {\n\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t`${route.method} ${route.path}: the handler returned no reply. ` +\n\t\t\t\t\t\t\t'Return ctx.reply(status, body).',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn sendDeclared(\n\t\t\t\t\troute,\n\t\t\t\t\treply,\n\t\t\t\t\tset,\n\t\t\t\t\trequest.request.signal,\n\t\t\t\t\tvalidateResponses,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t} catch (error) {\n\t\t(request as { error: unknown }).error = error;\n\t\treturn fail(route, error, ctx, validateResponses);\n\t}\n}\n\n/**\n * An error a route threw, answered by its `onError` hooks in order; past\n * the last, an `HttpError` as it says and anything else as a 500. A body\n * past the route's `bodyLimit` is a refusal instead, answered as\n * `refuse` answers one: by the `onRefusal` hook in force, or its 413.\n */\nexport async function fail(\n\tdefinition: RouteDefinition | SocketDefinition,\n\terror: unknown,\n\tctx: BaseContext,\n\tvalidateResponses = true,\n): Promise<Response> {\n\tif (error instanceof ContentTooLargeError) {\n\t\ttry {\n\t\t\treturn await refuse(\n\t\t\t\tdefinition,\n\t\t\t\t{ kind: 'body_limit', limit: error.limit },\n\t\t\t\tctx.set,\n\t\t\t\tctx,\n\t\t\t\tvalidateResponses,\n\t\t\t);\n\t\t} catch (thrown) {\n\t\t\t// The hook threw answering it: a 500, as a validation refusal's is.\n\t\t\tconsole.error(thrown);\n\t\t\treturn internalError();\n\t\t}\n\t}\n\tfor (const hook of definition.onError) {\n\t\tlet handled = hook(error, ctx);\n\t\tif (handled instanceof Promise) handled = await handled;\n\t\tif (handled instanceof Reply) return send(handled, ctx.set);\n\t}\n\tif (error instanceof HttpError) {\n\t\treturn send(new Reply(error.status, error.body), ctx.set);\n\t}\n\tconsole.error(error);\n\treturn internalError();\n}\n",
25
+ "/**\n * A route's own run, once the router has found it: its context, its hooks\n * in the order declared, the request validated, the handler, and the\n * `onError` hooks when any of it throws.\n */\nimport {\n\tContentTooLargeError,\n\tHttpError,\n\ttype RequestPart,\n\ttype ValidationIssue,\n} from '../errors/errors';\nimport { Reply } from '../reply/reply';\nimport {\n\ttype BodyParser,\n\treadBody,\n\treadCookies,\n\treadHeaders,\n\treadQuery,\n} from '../request/read';\nimport { check } from '../schema/standard-schema';\nimport { routeContext } from './context';\nimport type { RouteDefinition, SocketDefinition } from './definition';\nimport { refuse } from './refusal';\nimport { clientGone, failed, internalError, send, sendDeclared } from './send';\nimport type { BaseContext, RequestContext, ResponseSettings } from './types';\n\n/**\n * Runs the hooks of a route in order — a `derive` adds to the context or\n * ends the request, a `wrap` runs the rest inside it — then validates the\n * request, then `last`. A socket's upgrade skips the `wrap` hooks: it has\n * no response to wrap.\n */\nexport async function chain<Last>(\n\tdefinition: RouteDefinition | SocketDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tset: ResponseSettings,\n\tctx: Record<string, unknown> & BaseContext,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n\tlast: () => Promise<Response | Last>,\n): Promise<Response | Last> {\n\tconst hooks = definition.derive;\n\tconst socket = !('method' in definition);\n\tconst signal = request.request.signal;\n\tconst step = async (index: number): Promise<Response | Last> => {\n\t\tconst hook = hooks[index];\n\t\tif (hook === undefined) {\n\t\t\tconst refused = await validate(\n\t\t\t\tdefinition,\n\t\t\t\trequest,\n\t\t\t\trawParams,\n\t\t\t\tset,\n\t\t\t\tctx,\n\t\t\t\tparsers,\n\t\t\t\tvalidateResponses,\n\t\t\t);\n\t\t\treturn refused ?? last();\n\t\t}\n\t\tif (hook.kind === 'wrap') {\n\t\t\tif (socket) return step(index + 1);\n\t\t\tlet wrapped = hook.run(ctx, () => step(index + 1) as Promise<Response>);\n\t\t\tif (wrapped instanceof Promise) wrapped = await wrapped;\n\t\t\treturn wrapped instanceof Reply ? send(wrapped, set, signal) : wrapped;\n\t\t}\n\t\tlet added = hook.run(ctx);\n\t\tif (added instanceof Promise) added = await added;\n\t\tif (added instanceof Reply) return send(added, set, signal);\n\t\tif (added !== null && typeof added === 'object') {\n\t\t\tObject.assign(ctx, added);\n\t\t}\n\t\treturn step(index + 1);\n\t};\n\treturn step(0);\n}\n\n/** The request checked by the route's schemas: the response that refuses it, or nothing. */\nasync function validate(\n\tdefinition: RouteDefinition | SocketDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tset: ResponseSettings,\n\tctx: Record<string, unknown> & BaseContext,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n): Promise<Response | undefined> {\n\tconst { schema } = definition;\n\tconst issues: ValidationIssue[] = [];\n\tlet part: RequestPart | undefined;\n\tconst parts = [\n\t\t['params', schema.params, () => rawParams],\n\t\t['query', schema.query, () => readQuery(request.url)],\n\t\t['headers', schema.headers, () => readHeaders(request.request.headers)],\n\t\t['cookies', schema.cookies, () => readCookies(request.request.headers)],\n\t] as const;\n\tfor (const [target, partSchema, read] of parts) {\n\t\tconst raw = read();\n\t\tif (partSchema === undefined) {\n\t\t\tctx[target] = raw;\n\t\t\tcontinue;\n\t\t}\n\t\tconst checked = await check(partSchema, raw, target);\n\t\tif (checked.ok) ctx[target] = checked.value;\n\t\telse {\n\t\t\tpart ??= target;\n\t\t\tissues.push(...checked.issues);\n\t\t}\n\t}\n\tctx['body'] = undefined;\n\tconst bodySchema = 'body' in schema ? schema.body : undefined;\n\tif (bodySchema !== undefined) {\n\t\tconst body = await readBody(ctx.request, parsers);\n\t\tif (!body.ok) {\n\t\t\tpart ??= 'body';\n\t\t\tissues.push(body.issue);\n\t\t} else {\n\t\t\tconst checked = await check(bodySchema, body.value, 'body');\n\t\t\tif (checked.ok) ctx['body'] = checked.value;\n\t\t\telse {\n\t\t\t\tpart ??= 'body';\n\t\t\t\tissues.push(...checked.issues);\n\t\t\t}\n\t\t}\n\t}\n\tif (part === undefined) return undefined;\n\treturn refuse(\n\t\tdefinition,\n\t\t{ kind: 'validation', part, issues },\n\t\tset,\n\t\tctx,\n\t\tvalidateResponses,\n\t);\n}\n\n/** A route's request, from its hooks to its handler's reply, sent. */\nexport async function handle(\n\troute: RouteDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n): Promise<Response> {\n\tconst { ctx, set } = routeContext(route, request, rawParams);\n\ttry {\n\t\treturn await chain(\n\t\t\troute,\n\t\t\trequest,\n\t\t\trawParams,\n\t\t\tset,\n\t\t\tctx,\n\t\t\tparsers,\n\t\t\tvalidateResponses,\n\t\t\tasync () => {\n\t\t\t\tlet reply = route.handler(ctx as never);\n\t\t\t\tif (reply instanceof Promise) reply = await reply;\n\t\t\t\tif (!(reply instanceof Reply)) {\n\t\t\t\t\tthrow new TypeError(\n\t\t\t\t\t\t`${route.method} ${route.path}: the handler returned no reply. ` +\n\t\t\t\t\t\t\t'Return ctx.reply(status, body).',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn sendDeclared(\n\t\t\t\t\troute,\n\t\t\t\t\treply,\n\t\t\t\t\tset,\n\t\t\t\t\trequest.request.signal,\n\t\t\t\t\tvalidateResponses,\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t} catch (error) {\n\t\t(request as { error: unknown }).error = error;\n\t\treturn fail(route, error, ctx, validateResponses);\n\t}\n}\n\n/**\n * An error a route threw, answered by its `onError` hooks in order; past\n * the last, an `HttpError` as it says and anything else as a 500. A body\n * past the route's `bodyLimit` is a refusal instead, answered as\n * `refuse` answers one: by the `onRefusal` hook in force, or its 413.\n */\nexport async function fail(\n\tdefinition: RouteDefinition | SocketDefinition,\n\terror: unknown,\n\tctx: BaseContext,\n\tvalidateResponses = true,\n): Promise<Response> {\n\t// The client left: no hook answers a request nobody reads.\n\tif (clientGone(error, ctx.request)) return failed(error, ctx.request);\n\tif (error instanceof ContentTooLargeError) {\n\t\ttry {\n\t\t\treturn await refuse(\n\t\t\t\tdefinition,\n\t\t\t\t{ kind: 'body_limit', limit: error.limit },\n\t\t\t\tctx.set,\n\t\t\t\tctx,\n\t\t\t\tvalidateResponses,\n\t\t\t);\n\t\t} catch (thrown) {\n\t\t\t// The hook threw answering it: a 500, as a validation refusal's is.\n\t\t\tconsole.error(thrown);\n\t\t\treturn internalError();\n\t\t}\n\t}\n\tfor (const hook of definition.onError) {\n\t\tlet handled = hook(error, ctx);\n\t\tif (handled instanceof Promise) handled = await handled;\n\t\tif (handled instanceof Reply) return send(handled, ctx.set);\n\t}\n\tif (error instanceof HttpError) {\n\t\treturn send(new Reply(error.status, error.body), ctx.set);\n\t}\n\treturn failed(error, ctx.request);\n}\n",
26
26
  "/**\n * A socket route: the upgrade request, run through the route's hooks and\n * validated as a route's, then each message checked by its schema and each\n * one sent checked by its own.\n */\nimport {\n\tResponseValidationError,\n\ttype ValidationErrorBody,\n} from '../errors/errors';\nimport type { BodyParser } from '../request/read';\nimport { check, type StandardSchemaV1 } from '../schema/standard-schema';\nimport type { Socket } from '../ws/types';\nimport { chain, fail } from './chain';\nimport { routeContext } from './context';\nimport type { SocketDefinition } from './definition';\nimport { routingError } from './send';\nimport type { MaybePromise, RequestContext } from './types';\n\n/** What the pipeline returns once a socket is open: Bun wants no response then. */\nexport const UPGRADED = Symbol('upgraded');\n\n/** What Bun keeps on each socket: its route, the context its hooks built, and its `Socket`. */\nexport interface SocketData {\n\treadonly definition: SocketDefinition;\n\treadonly ctx: Record<string, unknown>;\n\tsocket?: Socket<unknown, unknown>;\n}\n\n/** The upgrade request of a socket route: its hooks, its validation, then the upgrade. */\nexport async function upgradeSocket(\n\tdefinition: SocketDefinition,\n\trequest: RequestContext,\n\trawParams: Record<string, string>,\n\tparsers: readonly BodyParser[],\n\tvalidateResponses: boolean,\n): Promise<Response | typeof UPGRADED> {\n\tconst { ctx, set } = routeContext(definition, request, rawParams);\n\tconst server = request.server;\n\ttry {\n\t\treturn await chain<typeof UPGRADED>(\n\t\t\tdefinition,\n\t\t\trequest,\n\t\t\trawParams,\n\t\t\tset,\n\t\t\tctx,\n\t\t\tparsers,\n\t\t\tvalidateResponses,\n\t\t\tasync () => {\n\t\t\t\tif (server === undefined) {\n\t\t\t\t\treturn routingError(426, 'upgrade_required');\n\t\t\t\t}\n\t\t\t\tconst headers = new Headers(set.headers);\n\t\t\t\tif ((set as { touched?: () => boolean }).touched?.()) {\n\t\t\t\t\tfor (const cookie of set.cookies.toSetCookieHeaders()) {\n\t\t\t\t\t\theaders.append('set-cookie', cookie);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst data: SocketData = { definition, ctx };\n\t\t\t\tconst upgraded = server.upgrade(request.request, { headers, data });\n\t\t\t\treturn upgraded ? UPGRADED : routingError(426, 'upgrade_required');\n\t\t\t},\n\t\t);\n\t} catch (error) {\n\t\treturn fail(definition, error, ctx);\n\t}\n}\n\n/** The `websocket` handler `Bun.serve` runs every open socket through. */\nexport function websocketHandler(\n\tvalidate: boolean,\n): Bun.WebSocketHandler<SocketData> {\n\tconst socketOf = (ws: Bun.ServerWebSocket<SocketData>) => {\n\t\tws.data.socket ??= createSocket(ws, validate);\n\t\treturn ws.data.socket;\n\t};\n\tconst guard = async (\n\t\tws: Bun.ServerWebSocket<SocketData>,\n\t\trun: () => MaybePromise<void>,\n\t) => {\n\t\ttry {\n\t\t\tawait run();\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\tws.close(1011, 'internal error');\n\t\t}\n\t};\n\treturn {\n\t\topen: (ws) =>\n\t\t\tguard(ws, () =>\n\t\t\t\tws.data.definition.handlers.open?.(socketOf(ws) as never),\n\t\t\t),\n\t\tmessage: (ws, raw) =>\n\t\t\tguard(ws, async () => {\n\t\t\t\tconst { definition } = ws.data;\n\t\t\t\tconst socket = socketOf(ws);\n\t\t\t\tconst schema = definition.schema.message;\n\t\t\t\tlet message: unknown =\n\t\t\t\t\ttypeof raw === 'string' ? raw : new Uint8Array(raw);\n\t\t\t\tif (schema !== undefined) {\n\t\t\t\t\tconst parsed = parseMessage(message);\n\t\t\t\t\tif (!parsed.ok) {\n\t\t\t\t\t\tws.send(JSON.stringify(parsed.error));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst checked = await check(schema, parsed.value, 'message');\n\t\t\t\t\tif (!checked.ok) {\n\t\t\t\t\t\tconst error: ValidationErrorBody = {\n\t\t\t\t\t\t\terror: 'validation',\n\t\t\t\t\t\t\tissues: checked.issues,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tws.send(JSON.stringify(error));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tmessage = checked.value;\n\t\t\t\t}\n\t\t\t\tawait definition.handlers.message(socket as never, message as never);\n\t\t\t}),\n\t\tclose: (ws, code, reason) =>\n\t\t\tguard(ws, () =>\n\t\t\t\tws.data.definition.handlers.close?.(\n\t\t\t\t\tsocketOf(ws) as never,\n\t\t\t\t\tcode,\n\t\t\t\t\treason,\n\t\t\t\t),\n\t\t\t),\n\t\tdrain: (ws) =>\n\t\t\tguard(ws, () =>\n\t\t\t\tws.data.definition.handlers.drain?.(socketOf(ws) as never),\n\t\t\t),\n\t};\n}\n\nfunction parseMessage(\n\tmessage: unknown,\n):\n\t| { readonly ok: true; readonly value: unknown }\n\t| { readonly ok: false; readonly error: ValidationErrorBody } {\n\tif (typeof message !== 'string') return { ok: true, value: message };\n\ttry {\n\t\treturn { ok: true, value: JSON.parse(message) };\n\t} catch {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\terror: 'validation',\n\t\t\t\tissues: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget: 'message',\n\t\t\t\t\t\tpath: [],\n\t\t\t\t\t\tcode: 'invalid_json',\n\t\t\t\t\t\tmessage: 'The message is not valid JSON',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction createSocket(\n\tws: Bun.ServerWebSocket<SocketData>,\n\tvalidate: boolean,\n): Socket<unknown, unknown> {\n\tconst schema: StandardSchemaV1 | undefined = ws.data.definition.schema.send;\n\tconst encode = async (message: unknown): Promise<string> => {\n\t\tif (schema === undefined || !validate) return JSON.stringify(message);\n\t\tconst checked = await check(schema, message, 'body');\n\t\tif (!checked.ok) {\n\t\t\tthrow new ResponseValidationError(\n\t\t\t\t'WS',\n\t\t\t\tws.data.definition.path,\n\t\t\t\t101,\n\t\t\t\tchecked.issues,\n\t\t\t);\n\t\t}\n\t\treturn JSON.stringify(checked.value);\n\t};\n\treturn {\n\t\tdata: ws.data.ctx,\n\t\tasync send(message) {\n\t\t\tws.send(await encode(message));\n\t\t},\n\t\tasync publish(topic, message) {\n\t\t\tws.publish(topic, await encode(message));\n\t\t},\n\t\tsubscribe: (topic) => ws.subscribe(topic),\n\t\tunsubscribe: (topic) => ws.unsubscribe(topic),\n\t\tisSubscribed: (topic) => ws.isSubscribed(topic),\n\t\tclose: (code, reason) => ws.close(code, reason),\n\t\traw: ws as Bun.ServerWebSocket<unknown>,\n\t};\n}\n",
27
- "/**\n * The whole of a request: the global hooks around it, routing, then the\n * route's own run or the socket's upgrade.\n */\nimport { handle } from './chain';\nimport type { Definition, Runtime } from './definition';\nimport { internalError, routingError } from './send';\nimport { UPGRADED, upgradeSocket } from './socket';\nimport type { RequestContext } from './types';\n\n/** The whole of a request: global hooks around the route's own pipeline. */\nexport async function serve(\n\truntime: Runtime,\n\trequest: Request,\n\tserver: Bun.Server<unknown> | undefined,\n\tpath: string | undefined,\n): Promise<Response> {\n\tconst url = new URL(request.url);\n\tconst ctx: RequestContext = {\n\t\trequest,\n\t\turl,\n\t\tserver,\n\t\tip: runtime.ip(request, server),\n\t\troute: undefined,\n\t\terror: undefined,\n\t};\n\tconst around = runtime.globals.around;\n\tconst upgrade = request.headers.get('upgrade')?.toLowerCase() === 'websocket';\n\tif (around.length === 0 || upgrade) return pipeline(runtime, ctx, path);\n\tconst run = (index: number): Promise<Response> => {\n\t\tconst hook = around[index];\n\t\tif (hook === undefined) return pipeline(runtime, ctx, path);\n\t\treturn hook(ctx, () => run(index + 1));\n\t};\n\ttry {\n\t\treturn await run(0);\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\treturn internalError();\n\t}\n}\n\n/** The `onRequest` hooks, the route, then the `onResponse` hooks. */\nasync function pipeline(\n\truntime: Runtime,\n\tctx: RequestContext,\n\tpath: string | undefined,\n): Promise<Response> {\n\tlet response: Response | typeof UPGRADED | undefined;\n\ttry {\n\t\tfor (const hook of runtime.globals.onRequest) {\n\t\t\tlet early = hook(ctx);\n\t\t\tif (early instanceof Promise) early = await early;\n\t\t\tif (early instanceof Response) {\n\t\t\t\tresponse = early;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tresponse ??= await route(runtime, ctx, path);\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\tresponse = internalError();\n\t}\n\tif (response === UPGRADED) return undefined as never;\n\tfor (const hook of runtime.globals.onResponse) {\n\t\ttry {\n\t\t\tlet replaced = hook(response, ctx);\n\t\t\tif (replaced instanceof Promise) replaced = await replaced;\n\t\t\tif (replaced instanceof Response) response = replaced;\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\treturn response;\n}\n\n/**\n * The route the request reached, run: the socket a `websocket` upgrade\n * asks for, a `GET` for a `HEAD` no route takes, or the 404, 405 or 426\n * when none answers.\n */\nasync function route(\n\truntime: Runtime,\n\tctx: RequestContext,\n\tpath: string | undefined,\n): Promise<Response | typeof UPGRADED> {\n\tconst { router, globals } = runtime;\n\tconst { request, url } = ctx;\n\tconst upgrade = request.headers.get('upgrade')?.toLowerCase() === 'websocket';\n\tconst find = (\n\t\tmethod: string,\n\t):\n\t\t| { readonly value: Definition; readonly params: Record<string, string> }\n\t\t| { readonly allowed: readonly string[] }\n\t\t| undefined => {\n\t\tif (path === undefined) {\n\t\t\tconst pages = globals.pages.size === 0 ? undefined : globals.pages.keys();\n\t\t\treturn router.match(method, url.pathname, pages);\n\t\t}\n\t\tconst methods = router.methodsAt(path);\n\t\tif (methods === undefined) return undefined;\n\t\tconst value = methods.get(method);\n\t\tif (value !== undefined) {\n\t\t\treturn { value, params: router.paramsAt(path, url.pathname) };\n\t\t}\n\t\treturn { allowed: [...methods.keys()] };\n\t};\n\n\tif (upgrade) {\n\t\tconst socket = find('WS');\n\t\tif (\n\t\t\tsocket !== undefined &&\n\t\t\t'value' in socket &&\n\t\t\tsocket.value.kind === 'ws'\n\t\t) {\n\t\t\t(ctx as { route: string | undefined }).route = socket.value.path;\n\t\t\treturn upgradeSocket(\n\t\t\t\tsocket.value,\n\t\t\t\tctx,\n\t\t\t\tsocket.params,\n\t\t\t\tglobals.parsers,\n\t\t\t\truntime.validateResponses,\n\t\t\t);\n\t\t}\n\t}\n\tlet match = find(request.method);\n\tlet head = false;\n\tif (request.method === 'HEAD' && match !== undefined && 'allowed' in match) {\n\t\tconst get = find('GET');\n\t\tif (get !== undefined && 'value' in get) {\n\t\t\tmatch = get;\n\t\t\thead = true;\n\t\t}\n\t}\n\tif (match === undefined) return routingError(404, 'not_found');\n\tif ('allowed' in match) {\n\t\tconst allowed = match.allowed.filter((method) => method !== 'WS');\n\t\tif (allowed.length === 0) return routingError(426, 'upgrade_required');\n\t\treturn routingError(405, 'method_not_allowed', allowed);\n\t}\n\tconst definition = match.value;\n\t(ctx as { route: string | undefined }).route = definition.path;\n\tif (definition.kind === 'ws') return routingError(426, 'upgrade_required');\n\tconst response = await handle(\n\t\tdefinition,\n\t\tctx,\n\t\tmatch.params,\n\t\tglobals.parsers,\n\t\truntime.validateResponses,\n\t);\n\treturn head\n\t\t? new Response(null, {\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t})\n\t\t: response;\n}\n",
27
+ "/**\n * The whole of a request: the global hooks around it, routing, then the\n * route's own run or the socket's upgrade.\n */\nimport { handle } from './chain';\nimport type { Definition, Runtime } from './definition';\nimport { failed, routingError } from './send';\nimport { UPGRADED, upgradeSocket } from './socket';\nimport type { RequestContext } from './types';\n\n/** The whole of a request: global hooks around the route's own pipeline. */\nexport async function serve(\n\truntime: Runtime,\n\trequest: Request,\n\tserver: Bun.Server<unknown> | undefined,\n\tpath: string | undefined,\n): Promise<Response> {\n\tconst url = new URL(request.url);\n\tconst ctx: RequestContext = {\n\t\trequest,\n\t\turl,\n\t\tserver,\n\t\tip: runtime.ip(request, server),\n\t\troute: undefined,\n\t\terror: undefined,\n\t};\n\tconst around = runtime.globals.around;\n\tconst upgrade = request.headers.get('upgrade')?.toLowerCase() === 'websocket';\n\tif (around.length === 0 || upgrade) return pipeline(runtime, ctx, path);\n\tconst run = (index: number): Promise<Response> => {\n\t\tconst hook = around[index];\n\t\tif (hook === undefined) return pipeline(runtime, ctx, path);\n\t\treturn hook(ctx, () => run(index + 1));\n\t};\n\ttry {\n\t\treturn await run(0);\n\t} catch (error) {\n\t\treturn failed(error, ctx.request);\n\t}\n}\n\n/** The `onRequest` hooks, the route, then the `onResponse` hooks. */\nasync function pipeline(\n\truntime: Runtime,\n\tctx: RequestContext,\n\tpath: string | undefined,\n): Promise<Response> {\n\tlet response: Response | typeof UPGRADED | undefined;\n\ttry {\n\t\tfor (const hook of runtime.globals.onRequest) {\n\t\t\tlet early = hook(ctx);\n\t\t\tif (early instanceof Promise) early = await early;\n\t\t\tif (early instanceof Response) {\n\t\t\t\tresponse = early;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tresponse ??= await route(runtime, ctx, path);\n\t} catch (error) {\n\t\tresponse = failed(error, ctx.request);\n\t}\n\tif (response === UPGRADED) return undefined as never;\n\tfor (const hook of runtime.globals.onResponse) {\n\t\ttry {\n\t\t\tlet replaced = hook(response, ctx);\n\t\t\tif (replaced instanceof Promise) replaced = await replaced;\n\t\t\tif (replaced instanceof Response) response = replaced;\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n\treturn response;\n}\n\n/**\n * The route the request reached, run: the socket a `websocket` upgrade\n * asks for, a `GET` for a `HEAD` no route takes, or the 404, 405 or 426\n * when none answers.\n */\nasync function route(\n\truntime: Runtime,\n\tctx: RequestContext,\n\tpath: string | undefined,\n): Promise<Response | typeof UPGRADED> {\n\tconst { router, globals } = runtime;\n\tconst { request, url } = ctx;\n\tconst upgrade = request.headers.get('upgrade')?.toLowerCase() === 'websocket';\n\tconst find = (\n\t\tmethod: string,\n\t):\n\t\t| { readonly value: Definition; readonly params: Record<string, string> }\n\t\t| { readonly allowed: readonly string[] }\n\t\t| undefined => {\n\t\tif (path === undefined) {\n\t\t\tconst pages = globals.pages.size === 0 ? undefined : globals.pages.keys();\n\t\t\treturn router.match(method, url.pathname, pages);\n\t\t}\n\t\tconst methods = router.methodsAt(path);\n\t\tif (methods === undefined) return undefined;\n\t\tconst value = methods.get(method);\n\t\tif (value !== undefined) {\n\t\t\treturn { value, params: router.paramsAt(path, url.pathname) };\n\t\t}\n\t\treturn { allowed: [...methods.keys()] };\n\t};\n\n\tif (upgrade) {\n\t\tconst socket = find('WS');\n\t\tif (\n\t\t\tsocket !== undefined &&\n\t\t\t'value' in socket &&\n\t\t\tsocket.value.kind === 'ws'\n\t\t) {\n\t\t\t(ctx as { route: string | undefined }).route = socket.value.path;\n\t\t\treturn upgradeSocket(\n\t\t\t\tsocket.value,\n\t\t\t\tctx,\n\t\t\t\tsocket.params,\n\t\t\t\tglobals.parsers,\n\t\t\t\truntime.validateResponses,\n\t\t\t);\n\t\t}\n\t}\n\tlet match = find(request.method);\n\tlet head = false;\n\tif (request.method === 'HEAD' && match !== undefined && 'allowed' in match) {\n\t\tconst get = find('GET');\n\t\tif (get !== undefined && 'value' in get) {\n\t\t\tmatch = get;\n\t\t\thead = true;\n\t\t}\n\t}\n\tif (match === undefined) return routingError(404, 'not_found');\n\tif ('allowed' in match) {\n\t\tconst allowed = match.allowed.filter((method) => method !== 'WS');\n\t\tif (allowed.length === 0) return routingError(426, 'upgrade_required');\n\t\treturn routingError(405, 'method_not_allowed', allowed);\n\t}\n\tconst definition = match.value;\n\t(ctx as { route: string | undefined }).route = definition.path;\n\tif (definition.kind === 'ws') return routingError(426, 'upgrade_required');\n\tconst response = await handle(\n\t\tdefinition,\n\t\tctx,\n\t\tmatch.params,\n\t\tglobals.parsers,\n\t\truntime.validateResponses,\n\t);\n\treturn head\n\t\t? new Response(null, {\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t})\n\t\t: response;\n}\n",
28
28
  "import type { Refusal } from '../errors/errors';\nimport type { AnyReply, Reply } from '../reply/reply';\nimport { checkLimit } from '../request/limit';\nimport type { BodyParser } from '../request/read';\nimport { joinPath, shapeOf } from '../router/paths';\nimport { Router } from '../router/router';\nimport { fileHandler, staticHandler } from '../static/serve';\nimport type {\n\tFileOptions,\n\tFileSource,\n\tStaticOptions,\n\tStaticReply,\n} from '../static/types';\nimport type { JoinPath, RoutePath } from '../types/path';\nimport type { ClientErrorStatus } from '../types/status';\nimport type {\n\tSocketContext,\n\tSocketEntryOf,\n\tSocketHandlers,\n\tSocketMessage,\n\tSocketSchema,\n\tSocketSend,\n} from '../ws/types';\nimport type {\n\tAroundHook,\n\tChainHook,\n\tDeriveHook,\n\tErrorHook,\n\tRefusalHandler,\n\tRefusalHook,\n\tRequestHook,\n\tResponseHook,\n\tRouteDefinition,\n\tRuntime,\n\tSocketDefinition,\n\tStartHook,\n\tStopHook,\n\tWrapHook,\n} from './definition';\nimport { serve } from './pipeline';\nimport type { OperationMethod, RouteOperation } from './route-operation';\nimport { type SocketData, websocketHandler } from './socket';\nimport type {\n\tBaseContext,\n\tBehindShortcuts,\n\tBodyLimitShortcut,\n\tContext,\n\tDeclaredRefusal,\n\tDeclaredReply,\n\tEmpty,\n\tHandlerResult,\n\tMaybePromise,\n\tMethod,\n\tOutcome,\n\tProvidedBy,\n\tRefusalResponses,\n\tRefusalSchema,\n\tRefusalsOf,\n\tRefusing,\n\tRouteEntryOf,\n\tRouteRecord,\n\tRouteSchema,\n\tThenShortcuts,\n\tTypedReplyFunction,\n\tValidSchema,\n} from './types';\n\n/** The route a static directory is served at: its path, then a wildcard. */\ntype StaticPath<Path extends string> = Path extends '/' ? '/*' : `${Path}/*`;\n\nexport interface AlxiaOptions<Prefix extends string> {\n\t/** Prepended to the path of every route declared on this app. */\n\treadonly prefix?: Prefix;\n\t/**\n\t * Whether a reply is checked against the schema its route declares for\n\t * its status, and sent as that schema's output: an unknown key the\n\t * schema strips never leaves the server. On by default; a reply that\n\t * fails is answered with a 500.\n\t */\n\treadonly validateResponses?: boolean;\n\t/**\n\t * Reads the client's address. By default, the address of the connection;\n\t * behind a proxy you trust, read its header instead.\n\t */\n\treadonly ip?: (\n\t\trequest: Request,\n\t\tserver: Bun.Server<unknown> | undefined,\n\t) => string | undefined;\n}\n\nexport interface ListenOptions {\n\treadonly port?: number | string;\n\treadonly hostname?: string;\n\treadonly development?: boolean;\n\treadonly idleTimeout?: number;\n\treadonly maxRequestBodySize?: number;\n\treadonly tls?: Bun.TLSOptions;\n}\n\n/** A route method: `app.get(path, schema, handler)` or `app.get(path, handler)`. */\nexport interface RouteMethod<\n\tM extends Method,\n\tCtx extends object,\n\tRoutes extends object,\n\tPrefix extends string,\n\tShortcuts extends AnyReply,\n> {\n\t<\n\t\tconst Path extends RoutePath,\n\t\tSchema extends RouteSchema,\n\t\tResult extends HandlerResult<Schema>,\n\t>(\n\t\tpath: Path,\n\t\tschema: Schema & ValidSchema<JoinPath<Prefix, Path>, Schema>,\n\t\thandler: (\n\t\t\tctx: Context<Ctx, JoinPath<Prefix, Path>, Schema>,\n\t\t) => MaybePromise<Result>,\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes & RouteEntryOf<M, JoinPath<Prefix, Path>, Schema, Result, Shortcuts>,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\t<const Path extends RoutePath, Result extends AnyReply>(\n\t\tpath: Path,\n\t\thandler: (\n\t\t\tctx: Context<Ctx, JoinPath<Prefix, Path>, Empty>,\n\t\t) => MaybePromise<Result>,\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes & RouteEntryOf<M, JoinPath<Prefix, Path>, Empty, Result, Shortcuts>,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n}\n\n/** The routes of a plugin, under the prefix of the app it is used by. */\ntype Prefixed<Prefix extends string, Routes, Shortcuts> = {\n\treadonly [Path in keyof Routes as Path extends string\n\t\t? JoinPath<Prefix, Path>\n\t\t: never]: {\n\t\treadonly [M in keyof Routes[Path]]: Routes[Path][M] extends RouteRecord<\n\t\t\tinfer Input,\n\t\t\tinfer Output\n\t\t>\n\t\t\t? RouteRecord<Input, BehindShortcuts<Output, Shortcuts>>\n\t\t\t: Routes[Path][M];\n\t};\n};\n\n/** Any app, whatever it holds. */\nexport type AnyAlxia = Alxia<any, any, any, any>;\n\n/**\n * A plugin written as a function: it receives the app and returns it, with\n * global hooks added. A plugin that adds to the context or declares routes\n * is an app of its own, given to `use`.\n */\nexport type Plugin = <App extends AnyAlxia>(app: App) => App;\n\n/**\n * An app: its routes, and the hooks they run.\n *\n * Every method returns the app itself, typed with what it added, so declare\n * it in one chain and export its type for the client:\n *\n * ```ts\n * const app = alxia()\n * .get('/users/:id', { params: UserId, response: { 200: User, 404: NotFound } },\n * ({ params, reply }) => { ... });\n * export type App = typeof app;\n * ```\n *\n * A route hook (`derive`, `decorate`, `onError`, `onRefusal`) applies to the routes\n * declared after it, never before: the order of the chain is the order of\n * the request. A global hook (`onRequest`, `onResponse`, `onStart`,\n * `onStop`, `parser`) applies to the whole app, wherever it is declared.\n */\nexport class Alxia<\n\tCtx extends object = Empty,\n\tRoutes extends object = Empty,\n\tPrefix extends string = '',\n\tShortcuts extends AnyReply = never,\n> {\n\t/** Never set: carries the route table to `typeof app`, which the client reads. */\n\tdeclare readonly '~routes': Routes;\n\t/** Never set: carries what a route declared next reads, for `ContextOf`. */\n\tdeclare readonly '~context': Ctx;\n\n\treadonly #prefix: string;\n\t/** The routes, the global hooks and the options a request is served with. */\n\t#runtime: Runtime;\n\treadonly #routes: RouteDefinition[] = [];\n\treadonly #sockets: SocketDefinition[] = [];\n\t#derive: ChainHook[] = [];\n\t#onError: ErrorHook[] = [];\n\t#refusal: RefusalHandler | undefined;\n\t/** The `bodyLimit` of the routes declared next, unless theirs says otherwise. */\n\t#bodyLimit: number | undefined;\n\t#server: Bun.Server<unknown> | undefined;\n\t#websocket: Bun.WebSocketHandler<SocketData> | undefined;\n\n\tconstructor(options: AlxiaOptions<Prefix> = {}) {\n\t\tthis.#prefix = options.prefix ?? '';\n\t\tthis.#runtime = {\n\t\t\trouter: new Router(),\n\t\t\tglobals: {\n\t\t\t\taround: [],\n\t\t\t\tonRequest: [],\n\t\t\t\tonResponse: [],\n\t\t\t\tonStart: [],\n\t\t\t\tonStop: [],\n\t\t\t\tparsers: [],\n\t\t\t\tpages: new Map(),\n\t\t\t},\n\t\t\tvalidateResponses: options.validateResponses ?? true,\n\t\t\tip:\n\t\t\t\toptions.ip ??\n\t\t\t\t((request, server) => server?.requestIP(request)?.address ?? undefined),\n\t\t};\n\t\tif (this.#prefix !== '' && !/^\\/.*[^/]$/.test(this.#prefix)) {\n\t\t\tthrow new TypeError(\n\t\t\t\t`The prefix \"${this.#prefix}\" must start with \"/\" and not end with one`,\n\t\t\t);\n\t\t}\n\t}\n\n\treadonly get = this.#method('GET') as RouteMethod<\n\t\t'GET',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\treadonly post = this.#method('POST') as RouteMethod<\n\t\t'POST',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\treadonly put = this.#method('PUT') as RouteMethod<\n\t\t'PUT',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\treadonly patch = this.#method('PATCH') as RouteMethod<\n\t\t'PATCH',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\treadonly delete = this.#method('DELETE') as RouteMethod<\n\t\t'DELETE',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\treadonly options = this.#method('OPTIONS') as RouteMethod<\n\t\t'OPTIONS',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\treadonly head = this.#method('HEAD') as RouteMethod<\n\t\t'HEAD',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\t/**\n\t * A route declared as data — `{ method, path, schema? }`, as an OpenAPI\n\t * code generator writes it — and its handler: the same route as\n\t * `app[method](path, schema, handler)`.\n\t */\n\treadonly route: OperationMethod<Ctx, Routes, Prefix, Shortcuts> = ((\n\t\toperation: RouteOperation,\n\t\thandler: RouteDefinition['handler'],\n\t) =>\n\t\tthis.#method(operation.method)(\n\t\t\toperation.path,\n\t\t\toperation.schema ?? {},\n\t\t\thandler,\n\t\t)) as never;\n\n\t/**\n\t * A `QUERY` route: a safe, idempotent read whose criteria travel in the\n\t * body, validated like a `POST`'s.\n\t */\n\treadonly query = this.#method('QUERY') as RouteMethod<\n\t\t'QUERY',\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts\n\t>;\n\n\t/**\n\t * A directory of files — or any `FileSource` — served under `path`: a\n\t * `GET` route at `path/*`, typed and documented like any other, every\n\t * hook around it.\n\t *\n\t * ```ts\n\t * app.static('/assets', './public', {\n\t * cacheControl: (path) => /\\.[0-9a-f]{8}\\./.test(path) ? 'public, max-age=31536000, immutable' : 'no-cache',\n\t * precompressed: ['br', 'gzip'],\n\t * });\n\t * app.static('/', './dist', { fallback: 'index.html' }); // a single-page app\n\t * ```\n\t *\n\t * A path that leaves the source, a dotfile, or no file is a 404. ETags\n\t * and `Last-Modified` answer 304s; a `Range` a 206.\n\t */\n\tstatic<const Path extends RoutePath>(\n\t\tpath: Path,\n\t\tsource: FileSource,\n\t\toptions: StaticOptions = {},\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes &\n\t\t\tRouteEntryOf<\n\t\t\t\t'GET',\n\t\t\t\tJoinPath<Prefix, StaticPath<Path>>,\n\t\t\t\tEmpty,\n\t\t\t\tStaticReply,\n\t\t\t\tShortcuts\n\t\t\t>,\n\t\tPrefix,\n\t\tShortcuts\n\t> {\n\t\tconst route = (path as string) === '/' ? '/*' : `${path}/*`;\n\t\t(this.get as unknown as (path: string, handler: unknown) => unknown)(\n\t\t\troute,\n\t\t\tstaticHandler(source, options),\n\t\t);\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * One file at `path`: a path on disk, read anew on each request, a `Blob`,\n\t * or a function answering one — `null` a 404. `/favicon.ico`,\n\t * `/robots.txt`, a generated sitemap.\n\t */\n\tfile<const Path extends RoutePath>(\n\t\tpath: Path,\n\t\tfile:\n\t\t\t| string\n\t\t\t| Blob\n\t\t\t| ((ctx: BaseContext & Ctx) => MaybePromise<Blob | null | undefined>),\n\t\toptions: FileOptions = {},\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes &\n\t\t\tRouteEntryOf<\n\t\t\t\t'GET',\n\t\t\t\tJoinPath<Prefix, Path>,\n\t\t\t\tEmpty,\n\t\t\t\tStaticReply,\n\t\t\t\tShortcuts\n\t\t\t>,\n\t\tPrefix,\n\t\tShortcuts\n\t> {\n\t\t(this.get as unknown as (path: string, handler: unknown) => unknown)(\n\t\t\tpath,\n\t\t\tfileHandler(file as Parameters<typeof fileHandler>[0], options),\n\t\t);\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * A page of Bun's full-stack bundling: `import index from './index.html'`,\n\t * its scripts and styles bundled by Bun — with hot reloading under\n\t * `development` — and served by `Bun.serve` itself. So it needs `listen`,\n\t * and the app's hooks do not run around it; `app.fetch` answers it 404.\n\t */\n\tpage<const Path extends RoutePath>(path: Path, bundle: Bun.HTMLBundle): this {\n\t\tthis.#page(joinPath(this.#prefix, path), bundle);\n\t\treturn this;\n\t}\n\n\t#page(path: string, bundle: Bun.HTMLBundle): void {\n\t\tif (\n\t\t\tthis.#pageAt(path) !== undefined ||\n\t\t\tthis.#runtime.router.hasShape(path)\n\t\t) {\n\t\t\tthrow new TypeError(`page(): ${path} is already served`);\n\t\t}\n\t\tthis.#runtime.globals.pages.set(path, bundle);\n\t}\n\n\t/**\n\t * A WebSocket route. The upgrade request runs the hooks before it and is\n\t * validated as a route's; each message is then checked by `message`, and\n\t * each one sent by `send`. Open through `listen`, or a `Bun.serve` given\n\t * `fetch` and `websocket`: a socket needs a server.\n\t *\n\t * ```ts\n\t * app.ws('/rooms/:room', { message: Chat, send: Chat }, {\n\t * open: (socket) => socket.subscribe(socket.data.params.room),\n\t * message: (socket, chat) => socket.publish(socket.data.params.room, chat),\n\t * });\n\t * ```\n\t */\n\tws<const Path extends RoutePath, Schema extends SocketSchema = Empty>(\n\t\tpath: Path,\n\t\tschema: Schema,\n\t\thandlers: SocketHandlers<\n\t\t\tSocketContext<Ctx, JoinPath<Prefix, Path>, Schema>,\n\t\t\tSocketSend<Schema>,\n\t\t\tSocketMessage<Schema>\n\t\t>,\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes & SocketEntryOf<JoinPath<Prefix, Path>, Schema>,\n\t\tPrefix,\n\t\tShortcuts\n\t> {\n\t\tconst definition: SocketDefinition = {\n\t\t\tpath: joinPath(this.#prefix, path),\n\t\t\tschema,\n\t\t\thandlers: handlers as SocketDefinition['handlers'],\n\t\t\tderive: [...this.#derive],\n\t\t\tonError: [...this.#onError],\n\t\t\trefusal: this.#refusal,\n\t\t};\n\t\tthis.#mount(definition);\n\t\treturn this as never;\n\t}\n\n\t/** Values every route after this reads from its context: a database, a logger. */\n\tdecorate<const Values extends object>(\n\t\tvalues: Values,\n\t): Alxia<Ctx & Values, Routes, Prefix, Shortcuts> {\n\t\tthis.#derive.push({ kind: 'derive', run: () => values });\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * A hook run on every request to a route declared after it, before the\n\t * request is validated. What it returns is added to the context; a reply\n\t * it returns ends the request, and is added to the type of every such\n\t * route, so the client reads it:\n\t *\n\t * ```ts\n\t * .derive(async ({ request, reply }) => {\n\t * const user = await authenticate(request);\n\t * return user ? { user } : reply(401, { error: 'unauthenticated' as const });\n\t * })\n\t * ```\n\t */\n\tderive<Result>(\n\t\thook: (ctx: BaseContext & Ctx) => MaybePromise<Result>,\n\t): Alxia<\n\t\tCtx &\n\t\t\t(Exclude<Result, AnyReply> extends infer Added extends object\n\t\t\t\t? Added\n\t\t\t\t: Empty),\n\t\tRoutes,\n\t\tPrefix,\n\t\tShortcuts | Extract<Result, AnyReply>\n\t> {\n\t\tthis.#derive.push({ kind: 'derive', run: hook as DeriveHook });\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * A hook around every route declared after it: `next()` runs the rest —\n\t * the hooks declared after this one, validation, the handler — and\n\t * resolves to the response. The hook returns it, another `Response`, or\n\t * a reply of its own, which is added to the type of every such route.\n\t * An error the rest throws reaches it first. A socket's upgrade skips it.\n\t *\n\t * ```ts\n\t * .wrap(async ({ request, reply }, next) =>\n\t * (await locks.tryRun(request, next)) ?? reply(409, { error: 'busy' as const }))\n\t * ```\n\t */\n\twrap<Result extends AnyReply | Response>(\n\t\thook: (\n\t\t\tctx: BaseContext & Ctx,\n\t\t\tnext: () => Promise<Response>,\n\t\t) => MaybePromise<Result>,\n\t): Alxia<Ctx, Routes, Prefix, Shortcuts | Extract<Result, AnyReply>> {\n\t\tthis.#derive.push({ kind: 'wrap', run: hook as unknown as WrapHook });\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * The most bytes the request body of every route declared after it may\n\t * hold, unless the route's own `bodyLimit` says otherwise. Inside a\n\t * group, only the group's routes. A body past it is refused with a 413\n\t * as soon as its `Content-Length` or the bytes counted pass the limit,\n\t * which is added to the type of every such route.\n\t *\n\t * ```ts\n\t * alxia()\n\t * .bodyLimit(64 * 1024) // every route below: 64 KiB\n\t * .post('/notes', { body: Note }, handler)\n\t * .post('/upload', { bodyLimit: 25 * 1024 * 1024 }, handler); // its own\n\t * ```\n\t */\n\tbodyLimit(\n\t\tbytes: number,\n\t): Alxia<Ctx, Routes, Prefix, Shortcuts | BodyLimitShortcut> {\n\t\tthis.#bodyLimit = checkLimit(bytes, 'bodyLimit()');\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * A hook that turns an error thrown by a route declared after it into a\n\t * reply. Returning nothing lets the next one try; past the last, an\n\t * `HttpError` is answered as it says and anything else as a 500.\n\t */\n\tonError<Result extends AnyReply | undefined | void>(\n\t\thook: (\n\t\t\terror: unknown,\n\t\t\tctx: BaseContext & Partial<Ctx>,\n\t\t) => MaybePromise<Result>,\n\t): Alxia<Ctx, Routes, Prefix, Shortcuts | Extract<Result, AnyReply>> {\n\t\tthis.#onError.push(hook as unknown as ErrorHook);\n\t\treturn this as never;\n\t}\n\n\t/**\n\t * A hook that answers a request a route declared after it refuses\n\t * before its handler runs: one its schemas refuse, the default of which\n\t * is `400 { error: 'validation', issues }`, or one whose body passes its\n\t * `bodyLimit`, the default of which is\n\t * `413 { error: 'content_too_large', limit }`. The hook reads\n\t * the refusal — its `kind`: `validation`, with the `part` that failed\n\t * and the `issues`, or `body_limit`, with the route's `limit` — and\n\t * returns a reply with a 4xx status, or nothing for that kind's default.\n\t * The last one declared before a route is the one in force; a group's\n\t * stays inside it. Its reply replaces the default 400 in the type of\n\t * every such route that validates, so the client reads it:\n\t *\n\t * ```ts\n\t * .onRefusal((refusal) => refusal.kind === 'validation'\n\t * ? problem({ type: 'urn:example:invalid', status: 400, detail: `the ${refusal.part} is invalid` })\n\t * : problem({ type: 'urn:example:limit', status: 413, limit: refusal.limit }))\n\t * ```\n\t *\n\t * Given schemas first, its `reply` is typed by them, its reply is\n\t * checked and sent as their output, and `@alxia/openapi` documents it:\n\t *\n\t * ```ts\n\t * .onRefusal({ response: { 400: Problem }, contentType: 'application/problem+json' },\n\t * (refusal, { reply }) => reply(400, { type: 'urn:example:invalid', status: 400, detail: refusal.kind }))\n\t * ```\n\t */\n\tonRefusal<Result extends Reply<ClientErrorStatus, any> | undefined | void>(\n\t\thook: (refusal: Refusal, ctx: BaseContext & Ctx) => MaybePromise<Result>,\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\tExclude<Shortcuts, Refusing> | RefusalsOf<Extract<Result, AnyReply>, Result>\n\t>;\n\tonRefusal<\n\t\tResponses extends RefusalResponses,\n\t\tResult extends DeclaredReply<Responses> | undefined | void,\n\t>(\n\t\tschema: RefusalSchema<Responses>,\n\t\thook: (\n\t\t\trefusal: Refusal,\n\t\t\tctx: Omit<BaseContext, 'reply'> &\n\t\t\t\tCtx & { readonly reply: TypedReplyFunction<Responses> },\n\t\t) => MaybePromise<Result>,\n\t): Alxia<\n\t\tCtx,\n\t\tRoutes,\n\t\tPrefix,\n\t\t| Exclude<Shortcuts, Refusing>\n\t\t| RefusalsOf<DeclaredRefusal<Responses>, Result>\n\t>;\n\tonRefusal(\n\t\tschemaOrHook: RefusalSchema | ((refusal: Refusal, ctx: never) => unknown),\n\t\tmaybeHook?: (refusal: Refusal, ctx: never) => unknown,\n\t): AnyAlxia {\n\t\tif (typeof schemaOrHook === 'function') {\n\t\t\tthis.#refusal = { hook: schemaOrHook as RefusalHook };\n\t\t\treturn this;\n\t\t}\n\t\tif (typeof maybeHook !== 'function') {\n\t\t\tthrow new TypeError('onRefusal(): the hook is missing');\n\t\t}\n\t\tthis.#refusal = {\n\t\t\thook: maybeHook as RefusalHook,\n\t\t\tresponse: schemaOrHook.response,\n\t\t\t...(schemaOrHook.contentType === undefined\n\t\t\t\t? {}\n\t\t\t\t: { contentType: schemaOrHook.contentType }),\n\t\t};\n\t\treturn this;\n\t}\n\n\t/**\n\t * A global hook run on every request, before routing: a 404 included. A\n\t * `Response` it returns is sent as it is, and is no part of any route's\n\t * type: use it for what a typed client never asks — a CORS preflight, a\n\t * redirect to HTTPS. What a client must read belongs in `derive`.\n\t */\n\tonRequest(hook: RequestHook): this {\n\t\tthis.#runtime.globals.onRequest.push(hook);\n\t\treturn this;\n\t}\n\n\t/**\n\t * A global hook run on every response, in the order declared: headers,\n\t * compression, logging. A `Response` it returns replaces the one sent;\n\t * keep its status, which the client's types promise.\n\t */\n\tonResponse(hook: ResponseHook): this {\n\t\tthis.#runtime.globals.onResponse.push(hook);\n\t\treturn this;\n\t}\n\n\t/**\n\t * A global hook around every request, the first declared outermost.\n\t * `next()` runs everything else and resolves to the response; the hook\n\t * returns it, or another. A socket's upgrade runs outside it: there is no\n\t * response to wrap.\n\t *\n\t * ```ts\n\t * app.around(async (ctx, next) => {\n\t * const started = performance.now();\n\t * const response = await next();\n\t * console.log(ctx.route, performance.now() - started);\n\t * return response;\n\t * });\n\t * ```\n\t */\n\taround(hook: AroundHook): this {\n\t\tthis.#runtime.globals.around.push(hook);\n\t\treturn this;\n\t}\n\n\t/** Runs once `listen` has started the server. */\n\tonStart(hook: StartHook): this {\n\t\tthis.#runtime.globals.onStart.push(hook);\n\t\treturn this;\n\t}\n\n\t/** Runs when `stop` stops the server: close a pool, flush a log. */\n\tonStop(hook: StopHook): this {\n\t\tthis.#runtime.globals.onStop.push(hook);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Reads a body of `type` — a `content-type` prefix, or a pattern — for\n\t * every route with a `body` schema, before the built-in JSON, form and\n\t * text parsers.\n\t */\n\tparser(type: string | RegExp, parse: BodyParser['parse']): this {\n\t\tthis.#runtime.globals.parsers.push({ type, parse });\n\t\treturn this;\n\t}\n\n\t/**\n\t * Routes declared in a scope: the hooks `build` adds apply only to them.\n\t * The routes keep every hook declared on this app before the group.\n\t *\n\t * ```ts\n\t * app.group('/admin', (admin) => admin.derive(requireAdmin).get('/stats', ...));\n\t * ```\n\t */\n\tgroup<\n\t\tconst Path extends RoutePath,\n\t\tGroupRoutes extends object,\n\t\tGroupCtx extends object,\n\t\tGroupShortcuts extends AnyReply,\n\t>(\n\t\tprefix: Path,\n\t\tbuild: (\n\t\t\tgroup: Alxia<Ctx, Empty, JoinPath<Prefix, Path>, Shortcuts>,\n\t\t) => Alxia<GroupCtx, GroupRoutes, JoinPath<Prefix, Path>, GroupShortcuts>,\n\t): Alxia<Ctx, Routes & GroupRoutes, Prefix, Shortcuts>;\n\tgroup<\n\t\tGroupRoutes extends object,\n\t\tGroupCtx extends object,\n\t\tGroupShortcuts extends AnyReply,\n\t>(\n\t\tbuild: (\n\t\t\tgroup: Alxia<Ctx, Empty, Prefix, Shortcuts>,\n\t\t) => Alxia<GroupCtx, GroupRoutes, Prefix, GroupShortcuts>,\n\t): Alxia<Ctx, Routes & GroupRoutes, Prefix, Shortcuts>;\n\tgroup(\n\t\tprefixOrBuild: string | ((group: AnyAlxia) => AnyAlxia),\n\t\tmaybeBuild?: (group: AnyAlxia) => AnyAlxia,\n\t): AnyAlxia {\n\t\tconst [prefix, build] =\n\t\t\ttypeof prefixOrBuild === 'string'\n\t\t\t\t? [joinPath(this.#prefix, prefixOrBuild), maybeBuild]\n\t\t\t\t: [this.#prefix, prefixOrBuild];\n\t\tif (build === undefined) throw new TypeError('group(): build is missing');\n\t\tconst child = new Alxia({\n\t\t\tprefix,\n\t\t\tvalidateResponses: this.#runtime.validateResponses,\n\t\t});\n\t\tchild.#derive = [...this.#derive];\n\t\tchild.#onError = [...this.#onError];\n\t\tchild.#refusal = this.#refusal;\n\t\tchild.#bodyLimit = this.#bodyLimit;\n\t\tchild.#runtime = { ...child.#runtime, globals: this.#runtime.globals };\n\t\tconst before = new Set(this.#runtime.globals.pages.keys());\n\t\tconst built = build(child);\n\t\t// The child checks its pages against its own routes only.\n\t\tfor (const path of this.#runtime.globals.pages.keys()) {\n\t\t\tif (!before.has(path) && this.#runtime.router.hasShape(path)) {\n\t\t\t\tthrow new TypeError(`page(): ${path} is already served`);\n\t\t\t}\n\t\t}\n\t\tfor (const route of built.routes) this.#register(route);\n\t\tfor (const socket of built.sockets) this.#mount(socket);\n\t\treturn this;\n\t}\n\n\t/**\n\t * A plugin. An app: its routes, under this app's prefix and behind this\n\t * app's hooks, and its hooks, which then apply to the routes declared on\n\t * this app after it — a plugin can be an `auth` that only derives a\n\t * `user`. Its global hooks become this app's. It is read once, here:\n\t * declare it completely before using it. A plugin made by `definePlugin`\n\t * names what it reads from this app's context: using it on an app that\n\t * does not give it is a compile error.\n\t *\n\t * Or a function, given this app, that returns it: a `Plugin`.\n\t */\n\tuse<Result extends AnyAlxia>(plugin: (app: this) => Result): Result;\n\tuse<\n\t\tPluginCtx extends object,\n\t\tPluginRoutes extends object,\n\t\tPluginPrefix extends string,\n\t\tPluginShortcuts extends AnyReply,\n\t\tPluginRequires = Empty,\n\t>(\n\t\tplugin: Alxia<PluginCtx, PluginRoutes, PluginPrefix, PluginShortcuts> & {\n\t\t\treadonly '~requires'?: PluginRequires;\n\t\t} & ProvidedBy<Ctx, PluginRequires>,\n\t): Alxia<\n\t\tCtx & PluginCtx,\n\t\tRoutes & Prefixed<Prefix, PluginRoutes, Shortcuts>,\n\t\tPrefix,\n\t\tThenShortcuts<Shortcuts, PluginShortcuts>\n\t>;\n\tuse(plugin: AnyAlxia | ((app: any) => AnyAlxia)): AnyAlxia {\n\t\tif (!(plugin instanceof Alxia)) return plugin(this);\n\t\tfor (const route of plugin.routes) {\n\t\t\tthis.#register({\n\t\t\t\t...route,\n\t\t\t\tpath: joinPath(this.#prefix, route.path),\n\t\t\t\tderive: [...this.#derive, ...route.derive],\n\t\t\t\tonError: [...route.onError, ...this.#onError],\n\t\t\t\trefusal: route.refusal ?? this.#refusal,\n\t\t\t});\n\t\t}\n\t\tfor (const socket of plugin.sockets) {\n\t\t\tthis.#mount({\n\t\t\t\t...socket,\n\t\t\t\tpath: joinPath(this.#prefix, socket.path),\n\t\t\t\tderive: [...this.#derive, ...socket.derive],\n\t\t\t\tonError: [...socket.onError, ...this.#onError],\n\t\t\t\trefusal: socket.refusal ?? this.#refusal,\n\t\t\t});\n\t\t}\n\t\tthis.#derive = [...this.#derive, ...plugin.#derive];\n\t\tthis.#onError = [...plugin.#onError, ...this.#onError];\n\t\tthis.#refusal = plugin.#refusal ?? this.#refusal;\n\t\tthis.#bodyLimit = plugin.#bodyLimit ?? this.#bodyLimit;\n\t\tif (plugin.#runtime.globals !== this.#runtime.globals) {\n\t\t\tconst globals = plugin.#runtime.globals;\n\t\t\tthis.#runtime.globals.around.push(...globals.around);\n\t\t\tthis.#runtime.globals.onRequest.push(...globals.onRequest);\n\t\t\tthis.#runtime.globals.onResponse.push(...globals.onResponse);\n\t\t\tthis.#runtime.globals.onStart.push(...globals.onStart);\n\t\t\tthis.#runtime.globals.onStop.push(...globals.onStop);\n\t\t\tthis.#runtime.globals.parsers.push(...globals.parsers);\n\t\t\tfor (const [path, bundle] of globals.pages) {\n\t\t\t\tthis.#page(joinPath(this.#prefix, path), bundle);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\n\t/** Every route, in the order declared: what `@alxia/openapi` documents. */\n\tget routes(): readonly RouteDefinition[] {\n\t\treturn this.#routes;\n\t}\n\n\t/** Every socket route, in the order declared. */\n\tget sockets(): readonly SocketDefinition[] {\n\t\treturn this.#sockets;\n\t}\n\n\t/** The server `listen` started, until `stop`. */\n\tget server(): Bun.Server<unknown> | undefined {\n\t\treturn this.#server;\n\t}\n\n\t/**\n\t * The app as a fetch handler: what `Bun.serve`, a test, or another\n\t * runtime calls. Bound, so `export default { fetch: app.fetch }` works.\n\t * Given the server, as `Bun.serve` gives it, it can open a socket.\n\t */\n\treadonly fetch = (\n\t\trequest: Request,\n\t\tserver?: Bun.Server<unknown>,\n\t): Promise<Response> => serve(this.#runtime, request, server, undefined);\n\n\t/**\n\t * The `websocket` handler `Bun.serve` opens this app's sockets with, beside\n\t * `fetch`: what `listen` passes, for a server started otherwise.\n\t *\n\t * ```ts\n\t * Bun.serve({ fetch: app.fetch, websocket: app.websocket });\n\t * ```\n\t */\n\tget websocket(): Bun.WebSocketHandler<SocketData> {\n\t\tthis.#websocket ??= websocketHandler(this.#runtime.validateResponses);\n\t\treturn this.#websocket;\n\t}\n\n\t/** A request to the app, in process: `app.request('/users/1')`. */\n\trequest(path: string, init?: RequestInit): Promise<Response> {\n\t\treturn this.fetch(new Request(new URL(path, 'http://localhost'), init));\n\t}\n\n\t/**\n\t * `Bun.serve` with this app: its paths go to Bun's own router, and what\n\t * none of them matches to `fetch`, which answers 404 or 405.\n\t *\n\t * Bun matches the request's target as it came, `/f/../a` and all, where\n\t * `fetch` reads its URL's pathname, `/a`. A path without parameters is\n\t * matched by Bun only by a target already in that form, so its route\n\t * answers; a request Bun gives to a path with parameters or a wildcard\n\t * is routed again as `fetch` routes it, so both choose alike, at the\n\t * cost of `fetch`'s routing on each such request.\n\t */\n\tlisten(options: ListenOptions | number = {}): Bun.Server<unknown> {\n\t\tconst settings = typeof options === 'number' ? { port: options } : options;\n\t\tconst routes: Record<\n\t\t\tstring,\n\t\t\t| Bun.HTMLBundle\n\t\t\t| ((request: Request, server: Bun.Server<unknown>) => Promise<Response>)\n\t\t> = {};\n\t\tfor (const [path] of this.#runtime.router.paths()) {\n\t\t\tconst routed = this.#runtime.router.isFixed(path) ? path : undefined;\n\t\t\troutes[path] = (request, server) =>\n\t\t\t\tserve(this.#runtime, request, server, routed);\n\t\t}\n\t\tfor (const [path, bundle] of this.#runtime.globals.pages) {\n\t\t\troutes[path] = bundle;\n\t\t}\n\t\tconst server = Bun.serve({\n\t\t\t...settings,\n\t\t\troutes,\n\t\t\tfetch: (request: Request, server: Bun.Server<unknown>) =>\n\t\t\t\tserve(this.#runtime, request, server, undefined),\n\t\t\twebsocket: this.websocket,\n\t\t} as Bun.Serve.Options<SocketData>) as Bun.Server<unknown>;\n\t\tthis.#server = server;\n\t\tfor (const hook of this.#runtime.globals.onStart) {\n\t\t\tPromise.resolve()\n\t\t\t\t.then(() => hook(server))\n\t\t\t\t.catch((error) => console.error(error));\n\t\t}\n\t\treturn server;\n\t}\n\n\t/** Stops the server `listen` started, then runs every `onStop` hook. */\n\tasync stop(closeActiveConnections = false): Promise<void> {\n\t\tconst server = this.#server;\n\t\tthis.#server = undefined;\n\t\tif (server !== undefined) await server.stop(closeActiveConnections);\n\t\tfor (const hook of this.#runtime.globals.onStop) await hook();\n\t}\n\n\t#method(method: Method) {\n\t\treturn (\n\t\t\tpath: string,\n\t\t\tschemaOrHandler: RouteSchema | RouteDefinition['handler'],\n\t\t\tmaybeHandler?: RouteDefinition['handler'],\n\t\t) => {\n\t\t\tconst [schema, handler] =\n\t\t\t\ttypeof schemaOrHandler === 'function'\n\t\t\t\t\t? [{}, schemaOrHandler]\n\t\t\t\t\t: [schemaOrHandler, maybeHandler];\n\t\t\tif (typeof handler !== 'function') {\n\t\t\t\tthrow new TypeError(`${method} ${path}: the handler is missing`);\n\t\t\t}\n\t\t\tconst full = joinPath(this.#prefix, path);\n\t\t\tconst bodyLimit =\n\t\t\t\tschema.bodyLimit === undefined\n\t\t\t\t\t? this.#bodyLimit\n\t\t\t\t\t: checkLimit(schema.bodyLimit, `${method} ${full}`);\n\t\t\tthis.#register({\n\t\t\t\tmethod,\n\t\t\t\tpath: full,\n\t\t\t\tschema,\n\t\t\t\t...(bodyLimit === undefined ? {} : { bodyLimit }),\n\t\t\t\thandler,\n\t\t\t\tderive: [...this.#derive],\n\t\t\t\tonError: [...this.#onError],\n\t\t\t\trefusal: this.#refusal,\n\t\t\t});\n\t\t\treturn this;\n\t\t};\n\t}\n\n\t#register(route: RouteDefinition): void {\n\t\tthis.#refusePage(route.method, route.path);\n\t\tthis.#runtime.router.add(route.method, route.path, {\n\t\t\tkind: 'http',\n\t\t\t...route,\n\t\t});\n\t\tthis.#routes.push(route);\n\t}\n\n\t/** `listen` serves a page before any route at its path: refuse the route. */\n\t#refusePage(method: string, path: string): void {\n\t\tif (this.#pageAt(path) !== undefined) {\n\t\t\tthrow new TypeError(`${method} ${path} is already served by a page`);\n\t\t}\n\t}\n\n\t/** The page declared at a path of the same shape as `path`. */\n\t#pageAt(path: string): string | undefined {\n\t\tconst shape = shapeOf(path);\n\t\tfor (const page of this.#runtime.globals.pages.keys()) {\n\t\t\tif (shapeOf(page) === shape) return page;\n\t\t}\n\t\treturn undefined;\n\t}\n\n\t#mount(socket: SocketDefinition): void {\n\t\tthis.#refusePage('WS', socket.path);\n\t\tthis.#runtime.router.add('WS', socket.path, { kind: 'ws', ...socket });\n\t\tthis.#sockets.push(socket);\n\t}\n}\n\n/** A new app. */\nexport function alxia<const Prefix extends '' | RoutePath = ''>(\n\toptions: AlxiaOptions<Prefix> = {},\n): Alxia<Empty, Empty, Prefix, never> {\n\treturn new Alxia(options);\n}\n\n/** The route table of an app, as the client reads it. */\nexport type RoutesOf<App> = App extends { readonly '~routes': infer Routes }\n\t? Routes\n\t: never;\n\n/**\n * What a route declared next on `App` reads: the context its hooks build —\n * `decorate`, `derive`, every plugin's — on top of the base context. A\n * GraphQL schema, a service, types its own context with it.\n */\nexport type ContextOf<App> = App extends { readonly '~context': infer Ctx }\n\t? BaseContext & Ctx\n\t: never;\n\nexport type { Outcome };\n",
29
29
  "import { type Alxia, type AnyAlxia, alxia } from './alxia';\nimport type { Empty, Requiring } from './types';\n\n/**\n * A plugin that reads what an earlier one added to the context. Name what it\n * needs, then build it on an app whose context already has it:\n *\n * ```ts\n * const tenant = definePlugin<{ user: { tenantId: string } }>()((app) =>\n * app.derive(({ user }) => ({ tenant: tenants.get(user.tenantId) })),\n * );\n *\n * alxia().use(auth).use(tenant); // compiles: auth derives a user, or answers 401\n * alxia().use(tenant); // a compile error: this app gives no `user`\n * ```\n *\n * The plugin is an app, given to `use` like any other, built once, here.\n * `use` checks the app's context against `Requires`, so the plugin's hooks\n * never run without what they read.\n */\nexport function definePlugin<Requires extends object = Empty>() {\n\treturn <Plugin extends AnyAlxia>(\n\t\tbuild: (app: Alxia<Requires>) => Plugin,\n\t): Plugin & Requiring<Requires> =>\n\t\tbuild(alxia() as unknown as Alxia<Requires>) as Plugin &\n\t\t\tRequiring<Requires>;\n}\n",
30
30
  "/**\n * Problem details for HTTP APIs (RFC 9457, which obsoletes RFC 7807): a\n * JSON body sent as `application/problem+json`.\n */\nimport type { ClientErrorStatus, ServerErrorStatus } from '../types/status';\nimport { Reply, type ReplyInit } from './reply';\n\n/**\n * The members RFC 9457 defines. A problem may carry members of its own\n * beside them, its extensions: `problem()` keeps their types.\n */\nexport interface ProblemDetails<\n\tStatus extends ClientErrorStatus | ServerErrorStatus =\n\t\t| ClientErrorStatus\n\t\t| ServerErrorStatus,\n> {\n\t/** A URI naming the problem type; absent, it is `about:blank`. */\n\treadonly type?: string;\n\t/** A short summary of the problem type, the same for every occurrence. */\n\treadonly title?: string;\n\t/** The status of the response, which `problem()` replies with. */\n\treadonly status: Status;\n\t/** What went wrong with this occurrence. */\n\treadonly detail?: string;\n\t/** A URI naming this occurrence. */\n\treadonly instance?: string;\n}\n\n/**\n * A reply whose body is a problem, with `status` as its status and\n * `content-type: application/problem+json` unless `init` sets one. Any\n * other member is an extension, kept as given and in the body's type:\n *\n * ```ts\n * problem({ type: 'urn:ietf:params:jmap:error:limit', status: 413, limit: 'maxSizeRequest' });\n * ```\n */\nexport function problem<const Body extends ProblemDetails>(\n\tbody: Body,\n\tinit?: ReplyInit,\n): Reply<Body['status'], Body> {\n\tconst headers = new Headers(init?.headers);\n\tif (!headers.has('content-type')) {\n\t\theaders.set('content-type', 'application/problem+json');\n\t}\n\treturn new Reply(body.status, body, { ...init, headers });\n}\n"
31
31
  ],
32
- "mappings": "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",
33
- "debugId": "62C2FCF982C60F6964756E2164756E21",
32
+ "mappings": "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",
33
+ "debugId": "B38C455B7CE36AB464756E2164756E21",
34
34
  "names": []
35
35
  }
@@ -142,7 +142,9 @@ onError<Result extends AnyReply | undefined | void>(
142
142
  Turns an error thrown by a route declared after it — its hooks or its
143
143
  handler — into a reply. Returning nothing lets the next `onError` try. Past
144
144
  the last one, an `HttpError` is answered as it says and anything else is a
145
- logged `500 { "error": "internal" }` ([Replies](replies.md#errors)).
145
+ logged `500 { "error": "internal" }` ([Replies](replies.md#errors)). It
146
+ never sees the client hanging up mid-request, which is answered a `499`
147
+ with no hook.
146
148
 
147
149
  ```ts
148
150
  class NotFoundError extends Error {}
@@ -240,6 +240,13 @@ reads it. When code deep in a call throws, the error goes, in order:
240
240
  3. anything else is logged with `console.error` and answered
241
241
  `500 { "error": "internal" }`. Nothing of the error leaks.
242
242
 
243
+ One error skips all three: the client hanging up mid-request, which
244
+ reaches the app as the `AbortError` Bun's body read throws once
245
+ `request.signal` is aborted. Nobody reads the answer, so nothing is logged,
246
+ no `onError` hook runs, and the request gets a bodyless `499` that only
247
+ `onResponse` hooks see. Any other error, a bug thrown after the client left
248
+ included, goes the three steps above.
249
+
243
250
  ```ts
244
251
  import { alxia, HttpError } from '@alxia/core';
245
252
 
@@ -22,6 +22,8 @@ a trap that prints nothing is headed by its symptom.
22
22
  - [`route() needs one method: declare the operation as const`](#route-needs-one-method-declare-the-operation-as-const)
23
23
  - [`Type 'Reply<500, …>' is not assignable to type 'MaybePromise<void | Reply<ClientErrorStatus, any> | undefined>'`](#type-reply500--is-not-assignable-to-type-maybepromisevoid--replyclienterrorstatus-any--undefined)
24
24
  - [`'500' does not exist in type 'RefusalResponses'`](#500-does-not-exist-in-type-refusalresponses)
25
+ - [`The inferred type of '…' cannot be named without a reference to '…' from '…/@alxia/core/dist/…'`](#the-inferred-type-of--cannot-be-named-without-a-reference-to--from-alxiacoredist)
26
+ - [`Property 'part' does not exist on type 'Refusal'`](#property-part-does-not-exist-on-type-refusal)
25
27
 
26
28
  **Building the app**
27
29
 
@@ -489,6 +491,22 @@ app.onRefusal({ response: { 400: Problem } }, (_, { reply }) =>
489
491
  );
490
492
  ```
491
493
 
494
+ ### `The inferred type of '…' cannot be named without a reference to '…' from '…/@alxia/core/dist/…'`
495
+
496
+ **When:** `tsc` with `declaration: true` (a library, or a project with
497
+ `composite`), on an exported function or constant whose type is an app
498
+ inferred from its builders: TS2883, *"This is likely not portable. A type
499
+ annotation is necessary."*
500
+
501
+ **Why:** the declaration of that export must name every type the app's
502
+ type is made of, through `@alxia/core` itself. Before 0.2.1,
503
+ `RefusalsOf`, `RefusalOutcome` and `DeclaredRefusal` were not exported, so
504
+ an app with an `onRefusal` hook could not be named.
505
+
506
+ **Fix:** upgrade to `@alxia/core` 0.2.1 or later. A type core still fails
507
+ to export is a bug: report it with the code. Until then, annotate the
508
+ export or the hook's return type, e.g. `Reply<400 | 413, ProblemDetails>`, with `Reply` and `ProblemDetails` from `@alxia/core`.
509
+
492
510
  ## Building the app
493
511
 
494
512
  These are `TypeError`s thrown when a route is declared, so the app fails at
@@ -977,6 +995,14 @@ The next section lists the messages it prints. An error thrown in a route
977
995
  first goes through that route's `onError` hooks. An `HttpError` is answered
978
996
  with its own status and body.
979
997
 
998
+ A request that fails because its client hung up (its `request.signal`
999
+ aborted, and the error is the `AbortError` a body read then throws) is
1000
+ not an error of the app: nothing is printed, no `onError` hook runs, and
1001
+ an `onResponse` hook, a logger's, sees a `499` with no body. Any other
1002
+ error is printed and answered 500, a bug thrown after the client left
1003
+ included. A handler that ignores the abort and replies gets its own
1004
+ status.
1005
+
980
1006
  **Fix:** read the server log for the real error. To answer a known failure
981
1007
  with a status of your own, return a declared reply, or turn the error into
982
1008
  one with `onError`:
@@ -1044,7 +1070,8 @@ app
1044
1070
  ## Server log
1045
1071
 
1046
1072
  Each of these is printed by `console.error`, and the request is answered
1047
- `500 {"error":"internal"}`.
1073
+ `500 {"error":"internal"}`. A client that hung up mid-request prints
1074
+ nothing: see [`500 {"error":"internal"}`](#500-errorinternal).
1048
1075
 
1049
1076
  ### `ResponseValidationError: … the 200 reply does not match its schema`
1050
1077
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alxia/core",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "A zero-dependency, type-safe HTTP framework for Bun: routes validated with any Standard Schema, typed from the request to the client",
5
5
  "license": "MIT",
6
6
  "type": "module",