@barqel/barq 1.0.0 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +8 -4
  2. package/dist/app.d.ts +0 -2
  3. package/dist/app.d.ts.map +1 -1
  4. package/dist/context.d.ts +0 -2
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/cookies.d.ts.map +1 -1
  7. package/dist/cors.d.ts.map +1 -1
  8. package/dist/errors.d.ts.map +1 -1
  9. package/dist/http.d.ts.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4870 -10
  13. package/dist/index.js.map +24 -1
  14. package/dist/internal/ip.d.ts.map +1 -1
  15. package/dist/internal/node-compat.d.ts +2 -0
  16. package/dist/internal/node-compat.d.ts.map +1 -0
  17. package/dist/internal/pathname.d.ts.map +1 -1
  18. package/dist/internal/query.d.ts.map +1 -1
  19. package/dist/internal/scan.d.ts.map +1 -1
  20. package/dist/internal/shutdown.d.ts.map +1 -1
  21. package/dist/internal/trie.d.ts.map +1 -1
  22. package/dist/middleware.d.ts.map +1 -1
  23. package/dist/node-patch.d.ts +3 -0
  24. package/dist/node-patch.d.ts.map +1 -0
  25. package/dist/node-patch.js +4870 -0
  26. package/dist/node-patch.js.map +24 -0
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/validation.d.ts.map +1 -1
  29. package/package.json +72 -58
  30. package/dist/app.js +0 -1370
  31. package/dist/app.js.map +0 -1
  32. package/dist/context.js +0 -261
  33. package/dist/context.js.map +0 -1
  34. package/dist/cookies.js +0 -234
  35. package/dist/cookies.js.map +0 -1
  36. package/dist/cors.js +0 -82
  37. package/dist/cors.js.map +0 -1
  38. package/dist/errors.js +0 -81
  39. package/dist/errors.js.map +0 -1
  40. package/dist/http.js +0 -127
  41. package/dist/http.js.map +0 -1
  42. package/dist/internal/ip.js +0 -151
  43. package/dist/internal/ip.js.map +0 -1
  44. package/dist/internal/pathname.js +0 -158
  45. package/dist/internal/pathname.js.map +0 -1
  46. package/dist/internal/query.js +0 -126
  47. package/dist/internal/query.js.map +0 -1
  48. package/dist/internal/scan.js +0 -1069
  49. package/dist/internal/scan.js.map +0 -1
  50. package/dist/internal/shutdown.js +0 -30
  51. package/dist/internal/shutdown.js.map +0 -1
  52. package/dist/internal/trie.js +0 -560
  53. package/dist/internal/trie.js.map +0 -1
  54. package/dist/middleware.js +0 -269
  55. package/dist/middleware.js.map +0 -1
  56. package/dist/types.js +0 -2
  57. package/dist/types.js.map +0 -1
  58. package/dist/validation.js +0 -32
  59. package/dist/validation.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1,24 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,GACZ,MAAM,cAAc,CAAC;AAqBtB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/internal/node-compat.ts", "../src/app.ts", "../src/cookies.ts", "../src/http.ts", "../src/internal/ip.ts", "../src/errors.ts", "../src/internal/pathname.ts", "../src/internal/query.ts", "../src/context.ts", "../src/internal/scan.ts", "../src/internal/shutdown.ts", "../src/internal/trie.ts", "../src/middleware.ts", "../src/cors.ts", "../src/validation.ts"],
4
+ "sourcesContent": [
5
+ "import cluster from \"node:cluster\";\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport http from \"node:http\";\nimport https from \"node:https\";\nimport type { AddressInfo, Socket } from \"node:net\";\nimport { cpus } from \"node:os\";\nimport { type Duplex, Readable } from \"node:stream\";\nimport type { Server, ServerWebSocket } from \"bun\";\nimport { App, type WebSocketOptions } from \"../app\";\nimport type { WebSocketHandlers } from \"../types\";\nimport { scanPathname } from \"./pathname\";\nimport type { ShutdownResult } from \"./shutdown\";\n\nconst isNode = typeof Bun === \"undefined\";\nconst WS_GUID = \"258EAFA5-E914-47DA-95CA-C5AB0DC85B11\";\n\ninterface InternalWsSession {\n\thandlers?: WebSocketHandlers;\n\t_barqInternal?: boolean;\n\tdata?: unknown;\n}\n\nconst nodeTopics = new Map<string, Set<NodeServerWebSocket<unknown>>>();\n\nclass NodeServerWebSocket<TData = unknown> {\n\treadonly socket: Duplex;\n\tdata: TData;\n\treadyState = 1;\n\treadonly remoteAddress: string;\n\treadonly topics = new Set<string>();\n\tprivate buffer: Buffer = Buffer.alloc(0);\n\tprivate fragments: Buffer[] = [];\n\tprivate fragmentOpcode = 0;\n\tprivate readonly maxPayloadLength: number;\n\tprivate readonly handlers?: WebSocketHandlers;\n\tprivate readonly appHandlers?: WebSocketHandlers;\n\n\tconstructor(socket: Duplex, data: TData, wsOptions?: WebSocketOptions) {\n\t\tthis.socket = socket;\n\t\tthis.data = data;\n\t\tthis.remoteAddress =\n\t\t\t(\"remoteAddress\" in socket ? (socket as Socket).remoteAddress : \"\") || \"\";\n\t\tthis.maxPayloadLength = wsOptions?.maxPayloadLength ?? 16 * 1024 * 1024;\n\t\tthis.appHandlers = wsOptions;\n\n\t\tconst internal = (data as InternalWsSession)?._barqInternal\n\t\t\t? (data as InternalWsSession).handlers\n\t\t\t: undefined;\n\t\tthis.handlers = internal;\n\n\t\tsocket.on(\"data\", (chunk: Buffer) => this.onData(chunk));\n\t\tsocket.on(\"close\", () => this.onClose(1006, \"\"));\n\t\tsocket.on(\"error\", (err: Error) => this.onError(err));\n\t\tsocket.on(\"drain\", () => this.onDrain());\n\t}\n\n\tsend(data: string | Buffer | Uint8Array | ArrayBufferView | unknown): number {\n\t\tif (this.readyState !== 1) return -1;\n\t\tlet payload: Buffer;\n\t\tlet isText = true;\n\n\t\tif (typeof data === \"string\") {\n\t\t\tpayload = Buffer.from(data, \"utf8\");\n\t\t\tisText = true;\n\t\t} else if (Buffer.isBuffer(data)) {\n\t\t\tpayload = data;\n\t\t\tisText = false;\n\t\t} else if (ArrayBuffer.isView(data)) {\n\t\t\tpayload = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n\t\t\tisText = false;\n\t\t} else {\n\t\t\tpayload = Buffer.from(String(data), \"utf8\");\n\t\t\tisText = true;\n\t\t}\n\n\t\tthis.sendFrame(isText ? 0x01 : 0x02, payload);\n\t\treturn payload.length;\n\t}\n\n\tsubscribe(room: string): void {\n\t\tlet set = nodeTopics.get(room);\n\t\tif (!set) {\n\t\t\tset = new Set();\n\t\t\tnodeTopics.set(room, set);\n\t\t}\n\t\tset.add(this as unknown as NodeServerWebSocket<unknown>);\n\t\tthis.topics.add(room);\n\t}\n\n\tunsubscribe(room: string): void {\n\t\tconst set = nodeTopics.get(room);\n\t\tif (set) {\n\t\t\tset.delete(this as unknown as NodeServerWebSocket<unknown>);\n\t\t\tif (set.size === 0) nodeTopics.delete(room);\n\t\t}\n\t\tthis.topics.delete(room);\n\t}\n\n\tisSubscribed(room: string): boolean {\n\t\treturn this.topics.has(room);\n\t}\n\n\tpublish(\n\t\troom: string,\n\t\tmessage: string | Buffer | Uint8Array,\n\t\t_compress?: boolean,\n\t): number {\n\t\tconst set = nodeTopics.get(room);\n\t\tif (!set || set.size === 0) return 0;\n\t\tlet sent = 0;\n\t\tfor (const client of set) {\n\t\t\tif (client !== (this as unknown) && client.readyState === 1) {\n\t\t\t\tclient.send(message);\n\t\t\t\tsent++;\n\t\t\t}\n\t\t}\n\t\treturn sent;\n\t}\n\n\tping(data: string | Buffer = \"\"): void {\n\t\tif (this.readyState !== 1) return;\n\t\tconst buf = typeof data === \"string\" ? Buffer.from(data, \"utf8\") : data;\n\t\tthis.sendFrame(0x09, buf);\n\t}\n\n\tpong(data: string | Buffer = \"\"): void {\n\t\tif (this.readyState !== 1) return;\n\t\tconst buf = typeof data === \"string\" ? Buffer.from(data, \"utf8\") : data;\n\t\tthis.sendFrame(0x0a, buf);\n\t}\n\n\tcork<T>(callback: (ws: this) => T): T {\n\t\treturn callback(this);\n\t}\n\n\tclose(code = 1000, reason = \"\"): void {\n\t\tif (this.readyState >= 2) return;\n\t\tthis.readyState = 2;\n\t\tconst reasonBuf = Buffer.from(reason, \"utf8\");\n\t\tconst payload = Buffer.allocUnsafe(2 + reasonBuf.length);\n\t\tpayload.writeUInt16BE(code, 0);\n\t\treasonBuf.copy(payload, 2);\n\t\tthis.sendFrame(0x08, payload);\n\t\tthis.socket.end();\n\t}\n\n\tterminate(): void {\n\t\tthis.readyState = 3;\n\t\tthis.socket.destroy();\n\t}\n\n\tprivate sendFrame(opcode: number, payload: Buffer): void {\n\t\tif (this.socket.destroyed) return;\n\t\tconst len = payload.length;\n\t\tlet header: Buffer;\n\n\t\tif (len <= 125) {\n\t\t\theader = Buffer.allocUnsafe(2);\n\t\t\theader[0] = 0x80 | (opcode & 0x0f);\n\t\t\theader[1] = len;\n\t\t} else if (len <= 65535) {\n\t\t\theader = Buffer.allocUnsafe(4);\n\t\t\theader[0] = 0x80 | (opcode & 0x0f);\n\t\t\theader[1] = 126;\n\t\t\theader.writeUInt16BE(len, 2);\n\t\t} else {\n\t\t\theader = Buffer.allocUnsafe(10);\n\t\t\theader[0] = 0x80 | (opcode & 0x0f);\n\t\t\theader[1] = 127;\n\t\t\theader.writeBigUInt64BE(BigInt(len), 2);\n\t\t}\n\n\t\tthis.socket.write(Buffer.concat([header, payload]));\n\t}\n\n\tprivate onData(chunk: Buffer): void {\n\t\tthis.buffer =\n\t\t\tthis.buffer.length === 0 ? chunk : Buffer.concat([this.buffer, chunk]);\n\n\t\twhile (this.buffer.length >= 2) {\n\t\t\tconst byte0 = this.buffer[0]!;\n\t\t\tconst byte1 = this.buffer[1]!;\n\t\t\tconst fin = (byte0 & 0x80) !== 0;\n\t\t\tconst opcode = byte0 & 0x0f;\n\t\t\tconst masked = (byte1 & 0x80) !== 0;\n\n\t\t\tif (!masked) {\n\t\t\t\tthis.close(1002, \"Protocol error: unmasked client frame\");\n\t\t\t\tthis.onClose(1002, \"Protocol error: unmasked client frame\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet payloadLen = byte1 & 0x7f;\n\t\t\tlet offset = 2;\n\n\t\t\tif (payloadLen === 126) {\n\t\t\t\tif (this.buffer.length < 4) return;\n\t\t\t\tpayloadLen = this.buffer.readUInt16BE(2);\n\t\t\t\toffset = 4;\n\t\t\t} else if (payloadLen === 127) {\n\t\t\t\tif (this.buffer.length < 10) return;\n\t\t\t\tconst high = this.buffer.readUInt32BE(2);\n\t\t\t\tconst low = this.buffer.readUInt32BE(6);\n\t\t\t\tpayloadLen = high * 0x100000000 + low;\n\t\t\t\toffset = 10;\n\t\t\t}\n\n\t\t\tif (payloadLen > this.maxPayloadLength) {\n\t\t\t\tthis.close(1009, \"Message Too Big\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst maskLen = 4;\n\t\t\tconst totalLen = offset + maskLen + payloadLen;\n\t\t\tif (this.buffer.length < totalLen) return;\n\n\t\t\tconst maskKey = this.buffer.subarray(offset, offset + 4);\n\t\t\tconst rawPayload = this.buffer.subarray(offset + maskLen, totalLen);\n\t\t\tconst payload = Buffer.allocUnsafe(payloadLen);\n\n\t\t\tfor (let i = 0; i < payloadLen; i++) {\n\t\t\t\tpayload[i] = rawPayload[i]! ^ maskKey[i & 3]!;\n\t\t\t}\n\n\t\t\tthis.buffer = this.buffer.subarray(totalLen);\n\n\t\t\tif (opcode === 0x08) {\n\t\t\t\tlet code = 1000;\n\t\t\t\tlet reason = \"\";\n\t\t\t\tif (payload.length >= 2) {\n\t\t\t\t\tcode = payload.readUInt16BE(0);\n\t\t\t\t\tif (payload.length > 2) {\n\t\t\t\t\t\treason = payload.subarray(2).toString(\"utf8\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.readyState === 1) {\n\t\t\t\t\tthis.close(code, reason);\n\t\t\t\t}\n\t\t\t\tthis.onClose(code, reason);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (opcode === 0x09) {\n\t\t\t\tthis.sendFrame(0x0a, payload);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (opcode === 0x0a) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (!fin) {\n\t\t\t\tif (opcode !== 0x00) {\n\t\t\t\t\tthis.fragmentOpcode = opcode;\n\t\t\t\t\tthis.fragments = [payload];\n\t\t\t\t} else {\n\t\t\t\t\tthis.fragments.push(payload);\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tlet fullPayload = payload;\n\t\t\tlet effectiveOpcode = opcode;\n\t\t\tif (opcode === 0x00) {\n\t\t\t\tthis.fragments.push(payload);\n\t\t\t\tfullPayload = Buffer.concat(this.fragments);\n\t\t\t\teffectiveOpcode = this.fragmentOpcode;\n\t\t\t\tthis.fragments = [];\n\t\t\t\tthis.fragmentOpcode = 0;\n\t\t\t}\n\n\t\t\tconst message =\n\t\t\t\teffectiveOpcode === 0x01 ? fullPayload.toString(\"utf8\") : fullPayload;\n\n\t\t\tthis.onMessage(message);\n\t\t}\n\t}\n\n\tdispatchOpen(): void {\n\t\ttry {\n\t\t\tthis.handlers?.open?.(this as unknown as ServerWebSocket<TData>);\n\t\t\tthis.appHandlers?.open?.(this as unknown as ServerWebSocket<TData>);\n\t\t} catch (err) {\n\t\t\tthis.onError(err);\n\t\t}\n\t}\n\n\tprivate onMessage(msg: string | Buffer): void {\n\t\ttry {\n\t\t\tthis.handlers?.message?.(this as unknown as ServerWebSocket<TData>, msg);\n\t\t\tthis.appHandlers?.message?.(\n\t\t\t\tthis as unknown as ServerWebSocket<TData>,\n\t\t\t\tmsg,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tthis.onError(err);\n\t\t}\n\t}\n\n\tprivate onClose(code: number, reason: string): void {\n\t\tif (this.readyState === 3) return;\n\t\tthis.readyState = 3;\n\n\t\tfor (const room of this.topics) {\n\t\t\tconst set = nodeTopics.get(room);\n\t\t\tif (set) {\n\t\t\t\tset.delete(this as unknown as NodeServerWebSocket<unknown>);\n\t\t\t\tif (set.size === 0) nodeTopics.delete(room);\n\t\t\t}\n\t\t}\n\t\tthis.topics.clear();\n\n\t\ttry {\n\t\t\tthis.handlers?.close?.(\n\t\t\t\tthis as unknown as ServerWebSocket<TData>,\n\t\t\t\tcode,\n\t\t\t\treason,\n\t\t\t);\n\t\t\tthis.appHandlers?.close?.(\n\t\t\t\tthis as unknown as ServerWebSocket<TData>,\n\t\t\t\tcode,\n\t\t\t\treason,\n\t\t\t);\n\t\t} catch (err) {\n\t\t\tthis.onError(err);\n\t\t}\n\t}\n\n\tprivate onError(err: unknown): void {\n\t\ttry {\n\t\t\tif (this.handlers?.error) {\n\t\t\t\tthis.handlers.error(this as unknown as ServerWebSocket<TData>, err);\n\t\t\t} else if (this.appHandlers?.error) {\n\t\t\t\tthis.appHandlers.error(this as unknown as ServerWebSocket<TData>, err);\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(\"Unhandled WebSocket error:\", e);\n\t\t}\n\t}\n\n\tprivate onDrain(): void {\n\t\ttry {\n\t\t\tthis.handlers?.drain?.(this as unknown as ServerWebSocket<TData>);\n\t\t\tthis.appHandlers?.drain?.(this as unknown as ServerWebSocket<TData>);\n\t\t} catch (err) {\n\t\t\tthis.onError(err);\n\t\t}\n\t}\n}\n\ninterface AppInternal {\n\t_options?: {\n\t\tport?: number;\n\t\thostname?: string;\n\t\twebsocket?: WebSocketOptions;\n\t\ttls?: {\n\t\t\tkey?: unknown;\n\t\t\tcert?: unknown;\n\t\t\tca?: unknown;\n\t\t\tpassphrase?: string;\n\t\t};\n\t};\n\tnativeRoutes?: Array<{\n\t\tmethod: string;\n\t\tpattern: string;\n\t\tisDynamic: boolean;\n\t\tisContextFree: boolean;\n\t\trawHandler?: () => unknown;\n\t}>;\n\thasMiddlewares?: boolean;\n\terrorResolver?: unknown;\n\thandle: (req: Request, srv: Server<unknown>) => Promise<Response>;\n}\n\nfunction resolveTlsData(input: unknown): Buffer | string | undefined {\n\tif (!input) return undefined;\n\tif (Buffer.isBuffer(input) || typeof input === \"string\") {\n\t\tif (\n\t\t\ttypeof input === \"string\" &&\n\t\t\t!input.includes(\"\\n\") &&\n\t\t\t(input.startsWith(\"./\") || input.startsWith(\"/\") || input.includes(\".\"))\n\t\t) {\n\t\t\ttry {\n\t\t\t\tif (fs.existsSync(input)) {\n\t\t\t\t\treturn fs.readFileSync(input);\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t}\n\t\treturn input;\n\t}\n\treturn undefined;\n}\n\nif (isNode) {\n\tif (typeof (globalThis as Record<string, unknown>).Bun === \"undefined\") {\n\t\tObject.defineProperty(globalThis, \"Bun\", {\n\t\t\tconfigurable: true,\n\t\t\tvalue: {\n\t\t\t\tenv: process.env,\n\t\t\t\tCryptoHasher: class {\n\t\t\t\t\tprivate hmac: crypto.Hmac;\n\t\t\t\t\tconstructor(_algo: string, secret: string) {\n\t\t\t\t\t\tthis.hmac = crypto.createHmac(\"sha256\", secret);\n\t\t\t\t\t}\n\t\t\t\t\tupdate(data: string) {\n\t\t\t\t\t\tthis.hmac.update(data);\n\t\t\t\t\t\treturn this;\n\t\t\t\t\t}\n\t\t\t\t\tdigest(encoding: crypto.BinaryToTextEncoding) {\n\t\t\t\t\t\treturn this.hmac.digest(encoding);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tApp.prototype.listen = function (this: unknown, port?: number) {\n\t\tconst app = this as unknown as AppInternal;\n\t\tconst rawPort = port ?? app._options?.port ?? 3000;\n\t\tconst hostname = app._options?.hostname ?? \"0.0.0.0\";\n\n\t\tconst activeSockets = new Set<Socket | Duplex>();\n\t\tlet inFlightRequests = 0;\n\t\tlet isDraining = false;\n\t\tconst fastRoutes = new Map<string, () => unknown>();\n\n\t\tif (\n\t\t\tapp.nativeRoutes &&\n\t\t\t!app.hasMiddlewares &&\n\t\t\tapp.errorResolver === undefined\n\t\t) {\n\t\t\tfor (const nr of app.nativeRoutes) {\n\t\t\t\tif (!nr.isDynamic && nr.isContextFree && nr.rawHandler) {\n\t\t\t\t\tfastRoutes.set(`${nr.method}:${nr.pattern}`, nr.rawHandler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst requestListener = async (\n\t\t\treq: http.IncomingMessage,\n\t\t\tres: http.ServerResponse,\n\t\t) => {\n\t\t\tinFlightRequests++;\n\t\t\tif (isDraining) {\n\t\t\t\tres.setHeader(\"Connection\", \"close\");\n\t\t\t}\n\n\t\t\tconst onFinished = () => {\n\t\t\t\tinFlightRequests--;\n\t\t\t\tres.removeListener(\"finish\", onFinished);\n\t\t\t\tres.removeListener(\"close\", onFinished);\n\t\t\t};\n\t\t\tres.on(\"finish\", onFinished);\n\t\t\tres.on(\"close\", onFinished);\n\n\t\t\tconst method = req.method || \"GET\";\n\t\t\tconst rawUrl = req.url || \"/\";\n\t\t\tconst pathname = scanPathname(rawUrl);\n\n\t\t\tconst fastHandler = fastRoutes.get(`${method}:${pathname}`);\n\t\t\tif (fastHandler) {\n\t\t\t\ttry {\n\t\t\t\t\tconst val = fastHandler();\n\t\t\t\t\tif (typeof val === \"string\") {\n\t\t\t\t\t\tres.writeHead(200, {\n\t\t\t\t\t\t\t\"content-type\": \"text/plain; charset=utf-8\",\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.end(val);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof val === \"object\" &&\n\t\t\t\t\t\tval !== null &&\n\t\t\t\t\t\t!(val instanceof Response)\n\t\t\t\t\t) {\n\t\t\t\t\t\tres.writeHead(200, {\n\t\t\t\t\t\t\t\"content-type\": \"application/json; charset=utf-8\",\n\t\t\t\t\t\t});\n\t\t\t\t\t\tres.end(JSON.stringify(val));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst protocol = (req.socket as { encrypted?: boolean })?.encrypted\n\t\t\t\t\t? \"https\"\n\t\t\t\t\t: \"http\";\n\t\t\t\tconst host = req.headers.host || \"localhost\";\n\t\t\t\tconst url = `${protocol}://${host}${rawUrl}`;\n\n\t\t\t\tlet reqBody: unknown;\n\t\t\t\tif (method !== \"GET\" && method !== \"HEAD\") {\n\t\t\t\t\treqBody = Readable.toWeb(req);\n\t\t\t\t}\n\n\t\t\t\tconst webReq = new Request(url, {\n\t\t\t\t\tmethod,\n\t\t\t\t\theaders: req.headers as never,\n\t\t\t\t\tbody: reqBody as never,\n\t\t\t\t\tduplex: \"half\",\n\t\t\t\t} as never);\n\n\t\t\t\tconst remoteIp = req.socket.remoteAddress || \"\";\n\t\t\t\tlet upgraded = false;\n\n\t\t\t\tconst serverShim = {\n\t\t\t\t\trequestIP: () => (remoteIp ? { address: remoteIp } : null),\n\t\t\t\t\tupgrade: (_request: Request, options?: { data?: unknown }) => {\n\t\t\t\t\t\tconst secKey = req.headers[\"sec-websocket-key\"];\n\t\t\t\t\t\tif (!secKey || typeof secKey !== \"string\") return false;\n\n\t\t\t\t\t\tconst acceptKey = crypto\n\t\t\t\t\t\t\t.createHash(\"sha1\")\n\t\t\t\t\t\t\t.update(secKey + WS_GUID)\n\t\t\t\t\t\t\t.digest(\"base64\");\n\n\t\t\t\t\t\treq.socket.write(\n\t\t\t\t\t\t\t\"HTTP/1.1 101 Switching Protocols\\r\\n\" +\n\t\t\t\t\t\t\t\t\"Upgrade: websocket\\r\\n\" +\n\t\t\t\t\t\t\t\t\"Connection: Upgrade\\r\\n\" +\n\t\t\t\t\t\t\t\t`Sec-WebSocket-Accept: ${acceptKey}\\r\\n\\r\\n`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst ws = new NodeServerWebSocket(\n\t\t\t\t\t\t\treq.socket,\n\t\t\t\t\t\t\toptions?.data,\n\t\t\t\t\t\t\tapp._options?.websocket,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tupgraded = true;\n\t\t\t\t\t\tws.dispatchOpen();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tconst webRes = await app.handle(\n\t\t\t\t\twebReq,\n\t\t\t\t\tserverShim as unknown as Server<unknown>,\n\t\t\t\t);\n\n\t\t\t\tif (upgraded) return;\n\n\t\t\t\tconst resHeaders: Record<string, string | string[]> = {};\n\t\t\t\twebRes.headers.forEach((val, key) => {\n\t\t\t\t\tresHeaders[key] = val;\n\t\t\t\t});\n\n\t\t\t\tconst getSetCookie = (\n\t\t\t\t\twebRes.headers as unknown as { getSetCookie?: () => string[] }\n\t\t\t\t).getSetCookie;\n\t\t\t\tif (typeof getSetCookie === \"function\") {\n\t\t\t\t\tconst cookies = getSetCookie.call(webRes.headers);\n\t\t\t\t\tif (cookies && cookies.length > 0) {\n\t\t\t\t\t\tresHeaders[\"set-cookie\"] = cookies;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tres.writeHead(\n\t\t\t\t\twebRes.status,\n\t\t\t\t\twebRes.statusText || undefined,\n\t\t\t\t\tresHeaders,\n\t\t\t\t);\n\n\t\t\t\tif (webRes.body) {\n\t\t\t\t\tconst nodeStream = Readable.fromWeb(webRes.body as never);\n\t\t\t\t\tnodeStream.pipe(res);\n\t\t\t\t} else {\n\t\t\t\t\tres.end();\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error(\"Barq Node Adapter Error:\", err);\n\t\t\t\tif (!res.headersSent) {\n\t\t\t\t\tres.writeHead(500, {\n\t\t\t\t\t\t\"content-type\": \"application/json; charset=utf-8\",\n\t\t\t\t\t});\n\t\t\t\t\tres.end('{\"error\":\"Internal Server Error\"}');\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tconst tlsConfig = app._options?.tls;\n\t\tconst hasTls = Boolean(tlsConfig && (tlsConfig.key || tlsConfig.cert));\n\n\t\tconst server = hasTls\n\t\t\t? https.createServer(\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: resolveTlsData(tlsConfig?.key),\n\t\t\t\t\t\tcert: resolveTlsData(tlsConfig?.cert),\n\t\t\t\t\t\tca: resolveTlsData(tlsConfig?.ca),\n\t\t\t\t\t\tpassphrase: tlsConfig?.passphrase,\n\t\t\t\t\t},\n\t\t\t\t\trequestListener,\n\t\t\t\t)\n\t\t\t: http.createServer(requestListener);\n\n\t\tserver.on(\"connection\", (socket: Socket) => {\n\t\t\tactiveSockets.add(socket);\n\t\t\tsocket.on(\"close\", () => activeSockets.delete(socket));\n\t\t});\n\n\t\tserver.on(\n\t\t\t\"upgrade\",\n\t\t\tasync (req: http.IncomingMessage, socket: Duplex, head: Buffer) => {\n\t\t\t\tactiveSockets.add(socket);\n\t\t\t\tsocket.on(\"close\", () => activeSockets.delete(socket));\n\n\t\t\t\tconst protocol = (socket as { encrypted?: boolean })?.encrypted\n\t\t\t\t\t? \"https\"\n\t\t\t\t\t: \"http\";\n\t\t\t\tconst host = req.headers.host || \"localhost\";\n\t\t\t\tconst fullUrl = `${protocol}://${host}${req.url || \"/\"}`;\n\n\t\t\t\tlet upgradedSocket: NodeServerWebSocket | null = null;\n\n\t\t\t\tconst serverShim = {\n\t\t\t\t\trequestIP: () => ({\n\t\t\t\t\t\taddress:\n\t\t\t\t\t\t\t(\"remoteAddress\" in socket\n\t\t\t\t\t\t\t\t? (socket as Socket).remoteAddress\n\t\t\t\t\t\t\t\t: \"\") || \"\",\n\t\t\t\t\t}),\n\t\t\t\t\tupgrade: (_request: Request, options?: { data?: unknown }) => {\n\t\t\t\t\t\tconst secKey = req.headers[\"sec-websocket-key\"];\n\t\t\t\t\t\tif (!secKey || typeof secKey !== \"string\") return false;\n\n\t\t\t\t\t\tconst acceptKey = crypto\n\t\t\t\t\t\t\t.createHash(\"sha1\")\n\t\t\t\t\t\t\t.update(secKey + WS_GUID)\n\t\t\t\t\t\t\t.digest(\"base64\");\n\n\t\t\t\t\t\tsocket.write(\n\t\t\t\t\t\t\t\"HTTP/1.1 101 Switching Protocols\\r\\n\" +\n\t\t\t\t\t\t\t\t\"Upgrade: websocket\\r\\n\" +\n\t\t\t\t\t\t\t\t\"Connection: Upgrade\\r\\n\" +\n\t\t\t\t\t\t\t\t`Sec-WebSocket-Accept: ${acceptKey}\\r\\n\\r\\n`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst ws = new NodeServerWebSocket(\n\t\t\t\t\t\t\tsocket,\n\t\t\t\t\t\t\toptions?.data,\n\t\t\t\t\t\t\tapp._options?.websocket,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tupgradedSocket = ws;\n\n\t\t\t\t\t\tif (head && head.length > 0) {\n\t\t\t\t\t\t\tsocket.unshift(head);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tws.dispatchOpen();\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\tconst webReq = new Request(fullUrl, {\n\t\t\t\t\tmethod: \"GET\",\n\t\t\t\t\theaders: req.headers as never,\n\t\t\t\t});\n\n\t\t\t\ttry {\n\t\t\t\t\tconst webRes = await app.handle(\n\t\t\t\t\t\twebReq,\n\t\t\t\t\t\tserverShim as unknown as Server<unknown>,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!upgradedSocket) {\n\t\t\t\t\t\tconst status = webRes.status || 400;\n\t\t\t\t\t\tconst statusText = webRes.statusText || \"Bad Request\";\n\t\t\t\t\t\tsocket.write(\n\t\t\t\t\t\t\t`HTTP/1.1 ${status} ${statusText}\\r\\nConnection: close\\r\\n\\r\\n`,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsocket.destroy();\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\tif (!upgradedSocket) {\n\t\t\t\t\t\tsocket.write(\n\t\t\t\t\t\t\t\"HTTP/1.1 500 Internal Server Error\\r\\nConnection: close\\r\\n\\r\\n\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsocket.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\n\t\tserver.listen(rawPort, hostname);\n\n\t\tconst serverHandle = {\n\t\t\tget port() {\n\t\t\t\tconst addr = server.address() as AddressInfo | null;\n\t\t\t\treturn addr && typeof addr === \"object\" ? addr.port : rawPort;\n\t\t\t},\n\t\t\thostname,\n\t\t\tstop: (hardTimeoutMs?: number | boolean): Promise<ShutdownResult> =>\n\t\t\t\tnew Promise<ShutdownResult>((resolve) => {\n\t\t\t\t\tif (hardTimeoutMs === true) {\n\t\t\t\t\t\tfor (const socket of activeSockets) {\n\t\t\t\t\t\t\tsocket.destroy();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tactiveSockets.clear();\n\t\t\t\t\t\tserver.close(() => resolve({ forced: true, pending: 0 }));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tisDraining = true;\n\t\t\t\t\tconst timeout =\n\t\t\t\t\t\ttypeof hardTimeoutMs === \"number\" ? hardTimeoutMs : 5000;\n\t\t\t\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\t\t\t\t\tlet resolved = false;\n\n\t\t\t\t\tconst done = (forced: boolean) => {\n\t\t\t\t\t\tif (resolved) return;\n\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\t\t\t\tconst pending = activeSockets.size;\n\t\t\t\t\t\tif (forced) {\n\t\t\t\t\t\t\tfor (const socket of activeSockets) {\n\t\t\t\t\t\t\t\tsocket.destroy();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tactiveSockets.clear();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tserver.close(() =>\n\t\t\t\t\t\t\tresolve({ forced, pending: forced ? pending : 0 }),\n\t\t\t\t\t\t);\n\t\t\t\t\t};\n\n\t\t\t\t\ttimer = setTimeout(() => done(true), timeout);\n\t\t\t\t\tif (typeof timer.unref === \"function\") timer.unref();\n\n\t\t\t\t\tserver.close(() => {\n\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t\t\t\t\t\tresolve({ forced: false, pending: 0 });\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\tif (inFlightRequests === 0) {\n\t\t\t\t\t\tdone(false);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t};\n\n\t\treturn serverHandle as unknown as Server<unknown>;\n\t};\n\n\tApp.prototype.cluster = function (this: unknown, port?: number) {\n\t\tconst app = this as unknown as AppInternal;\n\t\tconst rawPort = port ?? app._options?.port ?? 3000;\n\t\tconst hostname = app._options?.hostname ?? \"0.0.0.0\";\n\t\tconst listenPort = rawPort === 0 ? 3000 : rawPort;\n\n\t\tif (cluster.isPrimary) {\n\t\t\tconst numCPUs = cpus().length;\n\t\t\tconst workers: ReturnType<typeof cluster.fork>[] = [];\n\t\t\tlet crashCount = 0;\n\t\t\tlet lastReset = Date.now();\n\n\t\t\tconst spawnWorker = () => {\n\t\t\t\tconst worker = cluster.fork({\n\t\t\t\t\t...process.env,\n\t\t\t\t\tPORT: String(listenPort),\n\t\t\t\t});\n\n\t\t\t\tworker.on(\"exit\", () => {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - lastReset > 5000) {\n\t\t\t\t\t\tcrashCount = 0;\n\t\t\t\t\t\tlastReset = now;\n\t\t\t\t\t}\n\t\t\t\t\tcrashCount++;\n\n\t\t\t\t\tconst idx = workers.indexOf(worker);\n\t\t\t\t\tif (idx !== -1) workers.splice(idx, 1);\n\n\t\t\t\t\tif (crashCount > 15) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"[Barq Cluster] Node workers restarting too fast. Throttling respawn.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tworkers.push(spawnWorker());\n\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tworkers.push(spawnWorker());\n\t\t\t\t});\n\n\t\t\t\treturn worker;\n\t\t\t};\n\n\t\t\tfor (let i = 0; i < numCPUs; i++) {\n\t\t\t\tworkers.push(spawnWorker());\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tport: listenPort,\n\t\t\t\thostname,\n\t\t\t\tstop: async () => {\n\t\t\t\t\tfor (const w of workers) {\n\t\t\t\t\t\tw.kill(\"SIGTERM\");\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t} as unknown as Server<unknown>;\n\t\t}\n\n\t\treturn (\n\t\t\tthis as unknown as { listen: (p?: number) => Server<unknown> }\n\t\t).listen(listenPort);\n\t};\n}\n",
6
+ "import { cpus } from \"node:os\";\nimport type { ServeOptions, Server, ServerWebSocket } from \"bun\";\nimport { Context, type ContextApplication } from \"./context\";\nimport { applyPendingCookies } from \"./cookies\";\nimport { errorToResponse, HttpError } from \"./errors\";\nimport { compileTrustProxy, isIpRange } from \"./internal/ip\";\nimport { scanPathname } from \"./internal/pathname\";\nimport { findQueryParam, findQueryParamAll } from \"./internal/query\";\nimport {\n\tanalyzeHandler,\n\ttype HandlerAnalysis,\n\ttype HandlerFunction,\n} from \"./internal/scan\";\nimport type { ShutdownResult } from \"./internal/shutdown\";\nimport { stopServer } from \"./internal/shutdown\";\nimport type { RouteParams as TrieParams } from \"./internal/trie\";\nimport { MATCH_HANDLER, MATCH_NOT_ALLOWED, SegmentTrie } from \"./internal/trie\";\nimport {\n\tcomposeMiddlewareDispatcher,\n\tcomposeMiddlewares,\n\tisThenable,\n\ttype MiddlewareDispatcher,\n\tunwindAfter,\n} from \"./middleware\";\nimport type {\n\tErrorHandler,\n\tErrorResolver,\n\tHandler,\n\tHandlerResult,\n\tHttpMethod,\n\tJoinPath,\n\tMiddleware,\n\tNotFoundHandler,\n\tParams,\n\tResponseHandler,\n\tRouteParams,\n\tWebSocketHandlers,\n} from \"./types\";\n\nexport type { ShutdownResult };\n\nconst METHODS: readonly HttpMethod[] = [\n\t\"GET\",\n\t\"POST\",\n\t\"PUT\",\n\t\"DELETE\",\n\t\"PATCH\",\n\t\"HEAD\",\n\t\"OPTIONS\",\n];\nconst MAX_ROUTE_SEGMENTS = 256;\nconst EMPTY_PARAMS: Params = Object.freeze(Object.create(null) as Params);\n\nconst FAST_JSON_HEADERS: Headers = new Headers({\n\t\"content-type\": \"application/json; charset=utf-8\",\n});\nconst FAST_TEXT_HEADERS: Headers = new Headers({\n\t\"content-type\": \"text/plain; charset=utf-8\",\n});\n\nclass ReadonlySetView<T> {\n\tconstructor(private readonly source: Set<T>) {}\n\tget size(): number {\n\t\treturn this.source.size;\n\t}\n\thas(value: T): boolean {\n\t\treturn this.source.has(value);\n\t}\n\tforEach(\n\t\tcallback: (value: T, value2: T, set: ReadonlySet<T>) => void,\n\t\tthisArg?: unknown,\n\t): void {\n\t\tthis.source.forEach((value) => {\n\t\t\tcallback.call(thisArg, value, value, this as unknown as ReadonlySet<T>);\n\t\t});\n\t}\n\tentries(): IterableIterator<[T, T]> {\n\t\treturn this.source.entries();\n\t}\n\tkeys(): IterableIterator<T> {\n\t\treturn this.source.keys();\n\t}\n\tvalues(): IterableIterator<T> {\n\t\treturn this.source.values();\n\t}\n\t[Symbol.iterator](): IterableIterator<T> {\n\t\treturn this.source[Symbol.iterator]();\n\t}\n\tget [Symbol.toStringTag](): string {\n\t\treturn \"Set\";\n\t}\n}\n\nfunction createReadonlySet<T>(source: Set<T>): ReadonlySet<T> {\n\treturn new ReadonlySetView(source) as unknown as ReadonlySet<T>;\n}\n\nconst EMPTY_REDIRECT_HOSTS: ReadonlySet<string> = createReadonlySet(\n\tnew Set<string>(),\n);\n\ninterface HandlerNeeds {\n\tisContextFree: boolean;\n\tisLightweight: boolean;\n\tisParamsOnly: boolean;\n\tisJsonBodyOnly: boolean;\n}\n\nfunction expandOptionalPatterns(pattern: string): string[] {\n\tif (!pattern.includes(\"?\")) return [pattern];\n\tconst segments = pattern.split(\"/\").filter(Boolean);\n\tconst optIndices: number[] = [];\n\tfor (let i = 0; i < segments.length; i++) {\n\t\tconst seg = segments[i]!;\n\t\tif (seg.startsWith(\":\") && seg.endsWith(\"?\")) {\n\t\t\toptIndices.push(i);\n\t\t}\n\t}\n\tif (optIndices.length === 0) return [pattern];\n\n\tconst variants: string[] = [];\n\tconst count = 1 << optIndices.length;\n\tfor (let mask = 0; mask < count; mask++) {\n\t\tconst parts: string[] = [];\n\t\tfor (let i = 0; i < segments.length; i++) {\n\t\t\tconst optPos = optIndices.indexOf(i);\n\t\t\tif (optPos >= 0) {\n\t\t\t\tif (mask & (1 << optPos)) {\n\t\t\t\t\tparts.push(segments[i]!.slice(0, -1));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tparts.push(segments[i]!);\n\t\t\t}\n\t\t}\n\t\tvariants.push(parts.length === 0 ? \"/\" : `/${parts.join(\"/\")}`);\n\t}\n\treturn variants;\n}\n\nconst LIGHT_SUPPORTED_PROPS = new Set([\n\t\"req\",\n\t\"params\",\n\t\"pathname\",\n\t\"queryParam\",\n\t\"queryParamAll\",\n\t\"state\",\n\t\"stream\",\n\t\"bodyStream\",\n]);\n\nfunction classifyProps(props: Set<string>): HandlerNeeds {\n\tfor (const p of props) {\n\t\tif (!LIGHT_SUPPORTED_PROPS.has(p)) {\n\t\t\treturn {\n\t\t\t\tisContextFree: false,\n\t\t\t\tisLightweight: false,\n\t\t\t\tisParamsOnly: false,\n\t\t\t\tisJsonBodyOnly: false,\n\t\t\t};\n\t\t}\n\t}\n\n\tconst hasParams = props.has(\"params\") || props.size === 0;\n\tconst hasQuery = props.has(\"queryParam\") || props.has(\"queryParamAll\");\n\n\tif (hasParams && props.size === 1) {\n\t\treturn {\n\t\t\tisContextFree: false,\n\t\t\tisLightweight: true,\n\t\t\tisParamsOnly: true,\n\t\t\tisJsonBodyOnly: false,\n\t\t};\n\t}\n\n\tif (hasParams || hasQuery || props.size > 0) {\n\t\treturn {\n\t\t\tisContextFree: false,\n\t\t\tisLightweight: true,\n\t\t\tisParamsOnly: false,\n\t\t\tisJsonBodyOnly: false,\n\t\t};\n\t}\n\n\treturn {\n\t\tisContextFree: false,\n\t\tisLightweight: false,\n\t\tisParamsOnly: false,\n\t\tisJsonBodyOnly: false,\n\t};\n}\n\nfunction classify(analysis: HandlerAnalysis): HandlerNeeds {\n\tif (analysis.isNoArg) {\n\t\treturn {\n\t\t\tisContextFree: true,\n\t\t\tisLightweight: false,\n\t\t\tisParamsOnly: false,\n\t\t\tisJsonBodyOnly: false,\n\t\t};\n\t}\n\tif (\n\t\tanalysis.arglessJsonCall &&\n\t\t!analysis.isDestructured &&\n\t\tanalysis.contextProps.size === 1 &&\n\t\tanalysis.contextProps.has(\"json\")\n\t) {\n\t\treturn {\n\t\t\tisContextFree: false,\n\t\t\tisLightweight: false,\n\t\t\tisParamsOnly: false,\n\t\t\tisJsonBodyOnly: true,\n\t\t};\n\t}\n\tif (analysis.isDestructured) {\n\t\treturn classifyProps(analysis.destructuredProps);\n\t}\n\tif (analysis.hasDynamicAccess) {\n\t\treturn {\n\t\t\tisContextFree: false,\n\t\t\tisLightweight: false,\n\t\t\tisParamsOnly: false,\n\t\t\tisJsonBodyOnly: false,\n\t\t};\n\t}\n\treturn classifyProps(analysis.contextProps);\n}\n\nfunction detectHandlerNeeds(fn: HandlerFunction): HandlerNeeds {\n\ttry {\n\t\treturn classify(analyzeHandler(fn));\n\t} catch {\n\t\treturn {\n\t\t\tisContextFree: false,\n\t\t\tisLightweight: false,\n\t\t\tisParamsOnly: false,\n\t\t\tisJsonBodyOnly: false,\n\t\t};\n\t}\n}\n\nclass FastLightContext {\n\t_pathname?: string;\n\t_state?: Record<string, unknown>;\n\t_hasPendingCookies = false;\n\tprivate _url?: string;\n\tprivate _qPos = -2;\n\n\tconstructor(\n\t\tpublic req: Request,\n\t\tpublic params: Record<string, string>,\n\t) {}\n\n\tinit(req: Request, params: Record<string, string>): this {\n\t\tthis.req = req;\n\t\tthis.params = params;\n\t\tthis._pathname = undefined;\n\t\tthis._state = undefined;\n\t\tthis._hasPendingCookies = false;\n\t\tthis._url = undefined;\n\t\tthis._qPos = -2;\n\t\treturn this;\n\t}\n\n\tget url(): string {\n\t\tif (this._url === undefined) {\n\t\t\tthis._url = this.req.url;\n\t\t}\n\t\treturn this._url;\n\t}\n\tget pathname(): string {\n\t\tif (this._pathname === undefined) {\n\t\t\tthis._pathname = scanPathname(this.url);\n\t\t}\n\t\treturn this._pathname;\n\t}\n\tqueryParam(name: string): string | null {\n\t\tlet u = this._url;\n\t\tif (u === undefined) {\n\t\t\tu = this.req.url;\n\t\t\tthis._url = u;\n\t\t}\n\t\tlet q = this._qPos;\n\t\tif (q === -2) this._qPos = q = u.indexOf(\"?\");\n\t\treturn findQueryParam(u, name, q);\n\t}\n\tqueryParamAll(name: string): string[] {\n\t\treturn findQueryParamAll(this.url, name);\n\t}\n\tget cookies(): never {\n\t\tthrow new Error(\"LightweightContext does not support cookies.\");\n\t}\n\tget state(): Record<string, unknown> {\n\t\tlet state = this._state;\n\t\tif (state === undefined) {\n\t\t\tstate = Object.create(null) as Record<string, unknown>;\n\t\t\tthis._state = state;\n\t\t}\n\t\treturn state;\n\t}\n\tstream(): ReadableStream<Uint8Array> | null {\n\t\treturn this.req.body;\n\t}\n\tget bodyStream(): ReadableStream<Uint8Array> | null {\n\t\treturn this.req.body;\n\t}\n}\n\nconst lightContextPool: FastLightContext[] = [];\n\nfunction acquireLightContext(\n\treq: Request,\n\tparams: Record<string, string>,\n): FastLightContext {\n\tconst popped = lightContextPool.pop();\n\tif (popped !== undefined) {\n\t\treturn popped.init(req, params);\n\t}\n\treturn new FastLightContext(req, params);\n}\n\nfunction releaseLightContext(ctx: FastLightContext): void {\n\tif (lightContextPool.length < 128) {\n\t\tlightContextPool.push(ctx);\n\t}\n}\n\nexport type RouteHandlerArg = Middleware | readonly Middleware[];\n\ntype MiddlewareOutput<TMiddleware> = TMiddleware extends {\n\tbefore?: (...args: never[]) => infer TResult;\n}\n\t? Exclude<\n\t\t\tAwaited<TResult>,\n\t\t\tResponse | void | undefined\n\t\t> extends infer TOutput extends object\n\t\t? TOutput\n\t\t: never\n\t: never;\n\ntype UnionToIntersection<T> = (\n\tT extends unknown\n\t\t? (value: T) => void\n\t\t: never\n) extends (value: infer TIntersection) => void\n\t? TIntersection\n\t: never;\n\ntype MiddlewareOutputs<TMiddlewares extends readonly unknown[]> =\n\tUnionToIntersection<MiddlewareOutput<TMiddlewares[number]>>;\n\nexport interface WebSocketOptions {\n\tmaxPayloadLength?: number;\n\tbackpressureLimit?: number;\n\tcloseOnBackpressureLimit?: boolean;\n\tidleTimeout?: number;\n\topen?: (ws: ServerWebSocket<unknown>) => void | Promise<void>;\n\tmessage?: (\n\t\tws: ServerWebSocket<unknown>,\n\t\tmessage: string | Buffer,\n\t) => void | Promise<void>;\n\tclose?: (\n\t\tws: ServerWebSocket<unknown>,\n\t\tcode: number,\n\t\treason: string,\n\t) => void | Promise<void>;\n\tdrain?: (ws: ServerWebSocket<unknown>) => void | Promise<void>;\n\terror?: (\n\t\tws: ServerWebSocket<unknown>,\n\t\terror: unknown,\n\t) => void | Promise<void>;\n}\n\ntype WebSocketCallback = (...args: never[]) => unknown;\n\nfunction reportWebSocketError(\n\thandler: WebSocketHandlers[\"error\"] | undefined,\n\tws: ServerWebSocket<unknown>,\n\terror: unknown,\n): void {\n\tif (!handler) {\n\t\tconsole.error(\"Unhandled WebSocket callback error:\", error);\n\t\treturn;\n\t}\n\ttry {\n\t\tconst result = handler(ws, error);\n\t\tif (isThenable(result)) {\n\t\t\tPromise.resolve(result).catch((handlerError) =>\n\t\t\t\tconsole.error(\"WebSocket error handler failed:\", handlerError),\n\t\t\t);\n\t\t}\n\t} catch (handlerError) {\n\t\tconsole.error(\"WebSocket error handler failed:\", handlerError);\n\t}\n}\n\nfunction dispatchWebSocketCallback(\n\tcallback: WebSocketCallback | undefined,\n\targs: unknown[],\n\tonError: (error: unknown) => void,\n): void {\n\tif (!callback) return;\n\ttry {\n\t\tconst len = args.length;\n\t\tlet result: unknown;\n\t\tif (len === 1) {\n\t\t\tresult = (callback as (a: unknown) => unknown)(args[0]);\n\t\t} else if (len === 2) {\n\t\t\tresult = (callback as (a: unknown, b: unknown) => unknown)(\n\t\t\t\targs[0],\n\t\t\t\targs[1],\n\t\t\t);\n\t\t} else if (len === 3) {\n\t\t\tresult = (callback as (a: unknown, b: unknown, c: unknown) => unknown)(\n\t\t\t\targs[0],\n\t\t\t\targs[1],\n\t\t\t\targs[2],\n\t\t\t);\n\t\t} else {\n\t\t\tresult = Reflect.apply(callback, undefined, args);\n\t\t}\n\n\t\tif (isThenable(result)) {\n\t\t\tPromise.resolve(result).catch(onError);\n\t\t}\n\t} catch (error) {\n\t\tonError(error);\n\t}\n}\n\nfunction getInternalWebSocketHandlers(\n\tws: ServerWebSocket<unknown>,\n): WebSocketHandlers | undefined {\n\tconst data = ws.data as\n\t\t| { handlers?: WebSocketHandlers; _barqInternal?: boolean }\n\t\t| undefined;\n\treturn data?._barqInternal === true ? data.handlers : undefined;\n}\n\nexport interface AppOptions {\n\tport?: number;\n\thostname?: string;\n\tdevelopment?: boolean;\n\tmaxRequestBodySize?: number;\n\tidleTimeout?: number;\n\ttls?: ServeOptions[\"tls\"];\n\tallowedRedirectHosts?: string[];\n\ttrustProxy?: boolean | string | readonly string[] | ((ip: string) => boolean);\n\twebsocket?: WebSocketOptions;\n\tcookieSecret?: string;\n}\n\nfunction parseRouteArgs(args: unknown[]): {\n\tmiddlewares: Middleware[];\n\thandler: Handler<object>;\n} {\n\tif (args.length === 0) {\n\t\tthrow new Error(\"Route requires a handler function\");\n\t}\n\tconst last = args[args.length - 1];\n\tif (typeof last !== \"function\") {\n\t\tthrow new Error(\n\t\t\t\"The final argument in route definition must be a Handler function\",\n\t\t);\n\t}\n\tconst handler = last as Handler<object>;\n\tif (args.length === 1) {\n\t\treturn { middlewares: [], handler };\n\t}\n\tconst middlewares: Middleware[] = [];\n\tfor (let i = 0; i < args.length - 1; i++) {\n\t\tconst item = args[i];\n\t\tif (Array.isArray(item)) {\n\t\t\tfor (let j = 0; j < item.length; j++) {\n\t\t\t\tmiddlewares.push(item[j] as Middleware);\n\t\t\t}\n\t\t} else if (item && typeof item === \"object\") {\n\t\t\tmiddlewares.push(item as Middleware);\n\t\t} else {\n\t\t\tthrow new TypeError(\n\t\t\t\t\"Route middleware must be a Middleware object or array of Middleware\",\n\t\t\t);\n\t\t}\n\t}\n\treturn { middlewares, handler };\n}\n\nfunction normalizePrefix(prefix: string): string {\n\tlet p = prefix.trim();\n\tif (p.length === 0 || p === \"/\") return \"\";\n\tif (p.charCodeAt(0) !== 47) p = `/${p}`;\n\tif (p.charCodeAt(p.length - 1) === 47) p = p.slice(0, -1);\n\treturn p;\n}\n\nfunction joinPrefix(prefix: string, pattern: string): string {\n\tif (!prefix) return pattern;\n\tlet p = pattern.trim();\n\tif (p.length === 0 || p === \"/\") return prefix;\n\tif (p.charCodeAt(0) !== 47) p = `/${p}`;\n\treturn prefix + p;\n}\n\nfunction canonicalizeRoutePattern(pattern: string): string {\n\tlet p = pattern.trim();\n\tif (p.length === 0) p = \"/\";\n\tif (p.charCodeAt(0) !== 47) p = `/${p}`;\n\tif (p.length > 1 && p.charCodeAt(p.length - 1) === 47) {\n\t\tp = p.slice(0, -1);\n\t}\n\treturn p;\n}\n\nfunction validateRoutePattern(pattern: string): void {\n\tif (pattern.length === 0 || pattern.charCodeAt(0) !== 47) {\n\t\tthrow new Error(`Invalid route pattern \"${pattern}\": must start with /`);\n\t}\n\tif (pattern === \"/\") return;\n\tif (pattern.indexOf(\"#\") !== -1) {\n\t\tthrow new Error(`Invalid route pattern \"${pattern}\": must not contain #`);\n\t}\n\tconst segments = pattern.split(\"/\");\n\tif (segments.length - 1 > MAX_ROUTE_SEGMENTS) {\n\t\tthrow new RangeError(\n\t\t\t`Route pattern exceeds the limit of ${MAX_ROUTE_SEGMENTS} segments`,\n\t\t);\n\t}\n\tfor (let i = 1; i < segments.length; i++) {\n\t\tconst seg = segments[i]!;\n\t\tif (seg.length === 0) {\n\t\t\tthrow new Error(`Invalid route pattern \"${pattern}\": empty segment (//)`);\n\t\t}\n\t\tconst decoded = decodeSegment(seg);\n\t\tif (decoded === \".\" || decoded === \"..\") {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid route pattern \"${pattern}\": dot segments ., .. not allowed in route patterns`,\n\t\t\t);\n\t\t}\n\t}\n}\n\nfunction decodeSegment(seg: string): string {\n\tif (seg.indexOf(\"%\") === -1) return seg;\n\ttry {\n\t\treturn decodeURIComponent(seg);\n\t} catch {\n\t\treturn seg;\n\t}\n}\n\nfunction toResponse(\n\tvalue: HandlerResult | PromiseLike<HandlerResult>,\n): Response | Promise<Response> {\n\tif (value instanceof Response) return value;\n\tif (isThenable(value)) {\n\t\treturn Promise.resolve(value).then((resolved) =>\n\t\t\ttoResponse(resolved as HandlerResult),\n\t\t);\n\t}\n\treturn finalizeValue(value as HandlerResult);\n}\n\nfunction finalizeValue(value: HandlerResult): Response {\n\tif (typeof value === \"object\" && value !== null)\n\t\treturn new Response(JSON.stringify(value), { headers: FAST_JSON_HEADERS });\n\tif (typeof value === \"string\")\n\t\treturn new Response(value, { headers: FAST_TEXT_HEADERS });\n\treturn new Response(String(value), { headers: FAST_TEXT_HEADERS });\n}\n\nasync function stopClusterProcesses(\n\tprocesses: readonly ReturnType<typeof Bun.spawn>[],\n\thardTimeoutMs: number,\n): Promise<boolean> {\n\tconst running = processes.filter((process) => !process.killed);\n\tif (running.length === 0) return false;\n\tfor (const process of running) process.kill(\"SIGTERM\");\n\n\tconst exited = Promise.all(running.map((process) => process.exited));\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tconst forced = await Promise.race([\n\t\texited.then(() => false),\n\t\tnew Promise<boolean>((resolve) => {\n\t\t\ttimer = setTimeout(() => resolve(true), hardTimeoutMs);\n\t\t\ttimer.unref?.();\n\t\t}),\n\t]);\n\tif (timer !== undefined) clearTimeout(timer);\n\tif (forced) {\n\t\tfor (const process of running) {\n\t\t\tif (!process.killed) process.kill(\"SIGKILL\");\n\t\t}\n\t\tawait exited;\n\t}\n\treturn forced;\n}\n\nexport class RouteGroup<\n\tPrefix extends string = string,\n\tTState extends object = Record<string, unknown>,\n> {\n\tconstructor(\n\t\tprivate readonly app: App<TState>,\n\t\treadonly prefix: string,\n\t\tprivate readonly middlewares: Middleware[] = [],\n\t) {}\n\n\tuse<const TMiddlewares extends readonly Middleware<TState, object>[]>(\n\t\t...middlewares: TMiddlewares\n\t): RouteGroup<Prefix, TState & MiddlewareOutputs<TMiddlewares>> {\n\t\tfor (let i = 0; i < middlewares.length; i++) {\n\t\t\tthis.middlewares.push(middlewares[i]! as Middleware);\n\t\t}\n\t\treturn this as unknown as RouteGroup<\n\t\t\tPrefix,\n\t\t\tTState & MiddlewareOutputs<TMiddlewares>\n\t\t>;\n\t}\n\n\tplugin<TOptions>(\n\t\tpluginFn: (group: this, options?: TOptions) => void,\n\t\toptions?: TOptions,\n\t): this {\n\t\tpluginFn(this, options);\n\t\treturn this;\n\t}\n\n\tprivate _register(\n\t\tmethod: HttpMethod,\n\t\tpattern: string,\n\t\targs: unknown[],\n\t): this {\n\t\treturn this._registerMethods([method], pattern, args);\n\t}\n\n\tprivate _registerMethods(\n\t\tmethods: readonly HttpMethod[],\n\t\tpattern: string,\n\t\targs: unknown[],\n\t): this {\n\t\tconst fullPattern = joinPrefix(this.prefix, pattern);\n\t\tconst { middlewares, handler } = parseRouteArgs(args);\n\t\tconst allMiddlewares =\n\t\t\tthis.middlewares.length === 0\n\t\t\t\t? middlewares\n\t\t\t\t: [...this.middlewares, ...middlewares];\n\t\tthis.app._registerMethods(\n\t\t\tmethods,\n\t\t\tfullPattern,\n\t\t\tallMiddlewares.length === 0 ? [handler] : [...allMiddlewares, handler],\n\t\t);\n\t\treturn this;\n\t}\n\n\tadd<P extends string>(\n\t\tmethod: HttpMethod,\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tadd<P extends string>(\n\t\tmethod: HttpMethod,\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tadd(method: HttpMethod, pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(method, pattern, args);\n\t}\n\n\tget<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tget<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tget(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"GET\", pattern, args);\n\t}\n\n\tpost<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tpost<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tpost(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"POST\", pattern, args);\n\t}\n\n\tput<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tput<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tput(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"PUT\", pattern, args);\n\t}\n\n\tdelete<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tdelete<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tdelete(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"DELETE\", pattern, args);\n\t}\n\n\tpatch<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tpatch<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tpatch(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"PATCH\", pattern, args);\n\t}\n\n\thead<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\thead<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\thead(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"HEAD\", pattern, args);\n\t}\n\n\toptions<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\toptions<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\toptions(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"OPTIONS\", pattern, args);\n\t}\n\n\tall<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t): this;\n\tall<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [\n\t\t\t...RouteHandlerArg[],\n\t\t\tHandler<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t]\n\t): this;\n\tall(pattern: string, ...args: unknown[]): this {\n\t\treturn this._registerMethods(METHODS, pattern, args);\n\t}\n\n\tws<P extends string, TData = unknown>(\n\t\tpattern: P,\n\t\thandlers: WebSocketHandlers<TData>,\n\t\tbeforeUpgrade?: (\n\t\t\tctx: Context<RouteParams<JoinPath<Prefix, P>>, TState>,\n\t\t) => boolean | { data?: TData } | Promise<boolean | { data?: TData }>,\n\t): this {\n\t\tthis.app.ws(\n\t\t\tjoinPrefix(this.prefix, pattern),\n\t\t\thandlers,\n\t\t\tbeforeUpgrade\n\t\t\t\t? (ctx) =>\n\t\t\t\t\t\tbeforeUpgrade(\n\t\t\t\t\t\t\tctx as unknown as Context<\n\t\t\t\t\t\t\t\tRouteParams<JoinPath<Prefix, P>>,\n\t\t\t\t\t\t\t\tTState\n\t\t\t\t\t\t\t>,\n\t\t\t\t\t\t)\n\t\t\t\t: undefined,\n\t\t);\n\t\treturn this;\n\t}\n\n\tgroup<Sub extends string>(\n\t\tprefix: Sub,\n\t\tcallback: (group: RouteGroup<JoinPath<Prefix, Sub>, TState>) => void,\n\t): this;\n\tgroup<Sub extends string>(\n\t\tprefix: Sub,\n\t\t...args: [\n\t\t\t...RouteHandlerArg[],\n\t\t\t(group: RouteGroup<JoinPath<Prefix, Sub>, TState>) => void,\n\t\t]\n\t): this;\n\tgroup(prefix: string, ...args: unknown[]): this {\n\t\tconst nestedPrefix = joinPrefix(this.prefix, prefix);\n\t\tconst last = args[args.length - 1];\n\t\tif (typeof last !== \"function\") {\n\t\t\tthrow new Error(\"Route group callback must be a function\");\n\t\t}\n\t\tconst callback = last as (group: RouteGroup<string, TState>) => void;\n\t\tconst groupMws: Middleware[] = [...this.middlewares];\n\t\tfor (let i = 0; i < args.length - 1; i++) {\n\t\t\tconst item = args[i];\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tfor (let j = 0; j < item.length; j++)\n\t\t\t\t\tgroupMws.push(item[j] as Middleware);\n\t\t\t} else if (item && typeof item === \"object\") {\n\t\t\t\tgroupMws.push(item as Middleware);\n\t\t\t}\n\t\t}\n\t\tconst nestedGroup = new RouteGroup(this.app, nestedPrefix, groupMws);\n\t\tcallback(nestedGroup);\n\t\treturn this;\n\t}\n}\n\nexport class App<TState extends object = Record<string, unknown>> {\n\tprivate readonly fetchHandler = (req: Request, srv?: Server<unknown>) =>\n\t\tthis.handle(req, srv);\n\tprivate readonly trie = new SegmentTrie();\n\tprivate readonly middlewares: Middleware[] = [];\n\tprivate readonly nativeRoutes: Array<{\n\t\tmethod: HttpMethod;\n\t\tpattern: string;\n\t\thandler: ResponseHandler;\n\t\trawHandler?: HandlerFunction;\n\t\tisDynamic: boolean;\n\t\tisContextFree: boolean;\n\t\tisLightweight: boolean;\n\t\tisParamsOnly: boolean;\n\t\tisJsonBodyOnly: boolean;\n\t\thasRouteMiddlewares: boolean;\n\t}> = [];\n\tprivate server: Server<unknown> | null = null;\n\tprivate clusterProcesses: ReturnType<typeof Bun.spawn>[] | null = null;\n\tprivate readonly _options: AppOptions;\n\t// biome-ignore lint/correctness/noUnusedPrivateClassMembers: Accessed through ContextApplication.\n\tprivate readonly redirectHosts: ReadonlySet<string>;\n\treadonly trustProxy:\n\t\t| boolean\n\t\t| string\n\t\t| readonly string[]\n\t\t| ((ip: string) => boolean);\n\treadonly trustedProxyChecker: (ip: string) => boolean;\n\tprivate stopPromise: Promise<ShutdownResult> | null = null;\n\tprivate notFoundHandler: NotFoundHandler | null = null;\n\tprivate errorHandler: ErrorHandler | null = null;\n\tprivate errorResolver: ErrorResolver | undefined = undefined;\n\tprivate globalPipeline: MiddlewareDispatcher = composeMiddlewareDispatcher(\n\t\t[],\n\t);\n\tprivate hasMiddlewares = false;\n\tprivate hasWebSockets = false;\n\treadonly development: boolean;\n\treadonly cookieSecret?: string;\n\n\tconstructor(options: AppOptions = {}) {\n\t\tif (\n\t\t\toptions.port !== undefined &&\n\t\t\t(!Number.isInteger(options.port) ||\n\t\t\t\toptions.port < 0 ||\n\t\t\t\toptions.port > 65535)\n\t\t) {\n\t\t\tthrow new RangeError(\"port must be an integer between 0 and 65535\");\n\t\t}\n\t\tif (\n\t\t\toptions.maxRequestBodySize !== undefined &&\n\t\t\t(!Number.isSafeInteger(options.maxRequestBodySize) ||\n\t\t\t\toptions.maxRequestBodySize < 0)\n\t\t) {\n\t\t\tthrow new RangeError(\n\t\t\t\t\"maxRequestBodySize must be a non-negative safe integer\",\n\t\t\t);\n\t\t}\n\t\tif (\n\t\t\toptions.idleTimeout !== undefined &&\n\t\t\t(!Number.isFinite(options.idleTimeout) ||\n\t\t\t\toptions.idleTimeout < 0 ||\n\t\t\t\toptions.idleTimeout > 255)\n\t\t) {\n\t\t\tthrow new RangeError(\"idleTimeout must be between 0 and 255 seconds\");\n\t\t}\n\t\tfor (const [name, value] of [\n\t\t\t[\"websocket.maxPayloadLength\", options.websocket?.maxPayloadLength],\n\t\t\t[\"websocket.backpressureLimit\", options.websocket?.backpressureLimit],\n\t\t] as const) {\n\t\t\tif (value !== undefined && (!Number.isSafeInteger(value) || value < 1)) {\n\t\t\t\tthrow new RangeError(`${name} must be a positive safe integer`);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\toptions.websocket?.idleTimeout !== undefined &&\n\t\t\t(!Number.isFinite(options.websocket.idleTimeout) ||\n\t\t\t\toptions.websocket.idleTimeout < 0 ||\n\t\t\t\toptions.websocket.idleTimeout > 255)\n\t\t) {\n\t\t\tthrow new RangeError(\n\t\t\t\t\"websocket.idleTimeout must be between 0 and 255 seconds\",\n\t\t\t);\n\t\t}\n\t\tconst trustedProxyRanges = Array.isArray(options.trustProxy)\n\t\t\t? options.trustProxy\n\t\t\t: typeof options.trustProxy === \"string\"\n\t\t\t\t? [options.trustProxy]\n\t\t\t\t: [];\n\t\tfor (const range of trustedProxyRanges) {\n\t\t\tif (!isIpRange(range)) {\n\t\t\t\tthrow new TypeError(`Invalid trustProxy IP range: ${range}`);\n\t\t\t}\n\t\t}\n\t\tif (options.cookieSecret !== undefined && !options.cookieSecret.trim()) {\n\t\t\tthrow new TypeError(\"cookieSecret must be non-empty when provided\");\n\t\t}\n\t\tthis._options = options;\n\t\tthis.development =\n\t\t\toptions.development ?? process.env.NODE_ENV === \"development\";\n\t\tthis.trustProxy = Array.isArray(options.trustProxy)\n\t\t\t? Object.freeze([...options.trustProxy])\n\t\t\t: (options.trustProxy ?? false);\n\t\tthis.trustedProxyChecker = compileTrustProxy(options.trustProxy);\n\t\tthis.cookieSecret = options.cookieSecret;\n\t\tthis.redirectHosts = options.allowedRedirectHosts\n\t\t\t? createReadonlySet(\n\t\t\t\t\tnew Set(options.allowedRedirectHosts.map((h) => h.toLowerCase())),\n\t\t\t\t)\n\t\t\t: EMPTY_REDIRECT_HOSTS;\n\t}\n\n\tplugin<TOptions>(\n\t\tpluginFn: (app: this, options?: TOptions) => void,\n\t\toptions?: TOptions,\n\t): this {\n\t\tpluginFn(this, options);\n\t\treturn this;\n\t}\n\n\tnotFound(handler: NotFoundHandler): this {\n\t\tthis.notFoundHandler = handler;\n\t\treturn this;\n\t}\n\n\tonError(handler: ErrorHandler): this {\n\t\tthis.errorHandler = handler;\n\t\tthis.errorResolver = (err, ctx) => handler(err, ctx);\n\t\tif (this.server !== null) {\n\t\t\tthis.globalPipeline = composeMiddlewareDispatcher(\n\t\t\t\tthis.middlewares,\n\t\t\t\tthis.errorResolver,\n\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\t_register(method: HttpMethod, pattern: string, args: unknown[]): this {\n\t\treturn this._registerMethods([method], pattern, args);\n\t}\n\n\t_registerMethods(\n\t\tmethods: readonly HttpMethod[],\n\t\tpattern: string,\n\t\targs: unknown[],\n\t): this {\n\t\tconst { middlewares, handler } = parseRouteArgs(args);\n\t\tconst responseHandler: (ctx: Context) => Response | Promise<Response> = (\n\t\t\tctx,\n\t\t) => toResponse(handler(ctx));\n\t\tconst finalHandler: (ctx: Context) => Response | Promise<Response> =\n\t\t\tmiddlewares.length === 0\n\t\t\t\t? responseHandler\n\t\t\t\t: composeMiddlewares(middlewares, responseHandler);\n\n\t\tconst canonicalPattern = canonicalizeRoutePattern(pattern);\n\t\tvalidateRoutePattern(canonicalPattern);\n\t\tconst routes = methods.map((method) => ({\n\t\t\tmethod,\n\t\t\tpattern: canonicalPattern,\n\t\t\thandler: finalHandler,\n\t\t}));\n\t\tthis.trie.addBatch(routes);\n\n\t\tconst needs = detectHandlerNeeds(handler);\n\t\tconst hasRouteMws = middlewares.length > 0;\n\n\t\tfor (const r of routes) {\n\t\t\tconst variants = expandOptionalPatterns(r.pattern);\n\t\t\tfor (const variant of variants) {\n\t\t\t\tthis.nativeRoutes.push({\n\t\t\t\t\tmethod: r.method,\n\t\t\t\t\tpattern: variant,\n\t\t\t\t\thandler: r.handler,\n\t\t\t\t\trawHandler: handler,\n\t\t\t\t\tisDynamic: variant.includes(\":\") || variant.includes(\"*\"),\n\t\t\t\t\tisContextFree: needs.isContextFree && !hasRouteMws,\n\t\t\t\t\tisLightweight: needs.isLightweight && !hasRouteMws,\n\t\t\t\t\tisParamsOnly: needs.isParamsOnly && !hasRouteMws,\n\t\t\t\t\tisJsonBodyOnly: needs.isJsonBodyOnly && !hasRouteMws,\n\t\t\t\t\thasRouteMiddlewares: hasRouteMws,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tadd<P extends string>(\n\t\tmethod: HttpMethod,\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tadd<P extends string>(\n\t\tmethod: HttpMethod,\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tadd(method: HttpMethod, pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(method, pattern, args);\n\t}\n\n\tget<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tget<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tget(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"GET\", pattern, args);\n\t}\n\n\tpost<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tpost<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tpost(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"POST\", pattern, args);\n\t}\n\n\tput<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tput<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tput(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"PUT\", pattern, args);\n\t}\n\n\tdelete<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tdelete<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tdelete(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"DELETE\", pattern, args);\n\t}\n\n\tpatch<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tpatch<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tpatch(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"PATCH\", pattern, args);\n\t}\n\n\thead<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\thead<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\thead(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"HEAD\", pattern, args);\n\t}\n\n\toptions<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\toptions<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\toptions(pattern: string, ...args: unknown[]): this {\n\t\treturn this._register(\"OPTIONS\", pattern, args);\n\t}\n\n\tall<P extends string>(\n\t\tpattern: P,\n\t\thandler: Handler<RouteParams<P>, TState>,\n\t): this;\n\tall<P extends string>(\n\t\tpattern: P,\n\t\t...handlers: [...RouteHandlerArg[], Handler<RouteParams<P>, TState>]\n\t): this;\n\tall(pattern: string, ...args: unknown[]): this {\n\t\treturn this._registerMethods(METHODS, pattern, args);\n\t}\n\n\tws<P extends string, TData = unknown>(\n\t\tpattern: P,\n\t\thandlers: WebSocketHandlers<TData>,\n\t\tbeforeUpgrade?: (\n\t\t\tctx: Context<RouteParams<P>, TState>,\n\t\t) => boolean | { data?: TData } | Promise<boolean | { data?: TData }>,\n\t): this {\n\t\tthis.hasWebSockets = true;\n\t\treturn this._registerMethods([\"GET\"], pattern, [\n\t\t\tasync (ctx: Context<RouteParams<typeof pattern>, TState>) => {\n\t\t\t\tif (ctx.req.headers.get(\"upgrade\")?.toLowerCase() !== \"websocket\") {\n\t\t\t\t\treturn new Response(\"Upgrade Required\", { status: 426 });\n\t\t\t\t}\n\t\t\t\tlet customData: unknown;\n\t\t\t\tif (beforeUpgrade) {\n\t\t\t\t\tconst check = await beforeUpgrade(ctx);\n\t\t\t\t\tif (!check) return new Response(\"Unauthorized\", { status: 401 });\n\t\t\t\t\tif (typeof check === \"object\" && check !== null && \"data\" in check) {\n\t\t\t\t\t\tcustomData = (check as { data?: unknown }).data;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst upgradeData =\n\t\t\t\t\tcustomData !== undefined &&\n\t\t\t\t\ttypeof customData === \"object\" &&\n\t\t\t\t\tcustomData !== null\n\t\t\t\t\t\t? { ...customData, handlers, _barqInternal: true }\n\t\t\t\t\t\t: { handlers, _barqInternal: true, data: customData };\n\t\t\t\tconst upgraded = ctx.upgrade(upgradeData);\n\t\t\t\treturn upgraded\n\t\t\t\t\t? new Response(null)\n\t\t\t\t\t: new Response(\"WebSocket upgrade failed\", { status: 400 });\n\t\t\t},\n\t\t]);\n\t}\n\n\tgroup<Prefix extends string>(\n\t\tprefix: Prefix,\n\t\tcallback: (group: RouteGroup<Prefix, TState>) => void,\n\t): this;\n\tgroup<Prefix extends string>(\n\t\tprefix: Prefix,\n\t\t...args: [...RouteHandlerArg[], (group: RouteGroup<Prefix, TState>) => void]\n\t): this;\n\tgroup(prefix: string, ...args: unknown[]): this {\n\t\tconst last = args[args.length - 1];\n\t\tif (typeof last !== \"function\") {\n\t\t\tthrow new Error(\"Route group callback must be a function\");\n\t\t}\n\t\tconst callback = last as (group: RouteGroup<string, TState>) => void;\n\t\tconst groupMws: Middleware[] = [];\n\t\tfor (let i = 0; i < args.length - 1; i++) {\n\t\t\tconst item = args[i];\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tfor (let j = 0; j < item.length; j++)\n\t\t\t\t\tgroupMws.push(item[j] as Middleware);\n\t\t\t} else if (item && typeof item === \"object\") {\n\t\t\t\tgroupMws.push(item as Middleware);\n\t\t\t}\n\t\t}\n\t\tconst normalizedPrefix = normalizePrefix(prefix);\n\t\tconst group = new RouteGroup(this, normalizedPrefix, groupMws);\n\t\tcallback(group);\n\t\treturn this;\n\t}\n\n\tuse<const TMiddlewares extends readonly Middleware<TState, object>[]>(\n\t\t...middlewares: TMiddlewares\n\t): App<TState & MiddlewareOutputs<TMiddlewares>> {\n\t\tfor (let i = 0; i < middlewares.length; i++) {\n\t\t\tthis.middlewares.push(middlewares[i]! as Middleware);\n\t\t}\n\t\tthis.hasMiddlewares = this.middlewares.length > 0;\n\t\tif (this.server !== null) {\n\t\t\tthis.globalPipeline = composeMiddlewareDispatcher(\n\t\t\t\tthis.middlewares,\n\t\t\t\tthis.errorResolver,\n\t\t\t);\n\t\t}\n\t\treturn this as unknown as App<TState & MiddlewareOutputs<TMiddlewares>>;\n\t}\n\n\tlisten(port?: number): Server<unknown> {\n\t\tconst listenPort = port ?? this._options.port ?? 0;\n\t\tif (!Number.isInteger(listenPort) || listenPort < 0 || listenPort > 65535) {\n\t\t\tthrow new RangeError(\"port must be an integer between 0 and 65535\");\n\t\t}\n\t\tif (this.stopPromise !== null) {\n\t\t\tthrow new Error(\"App cannot listen while shutdown is in progress\");\n\t\t}\n\t\tif (this.server !== null) {\n\t\t\tthrow new Error(\"App is already listening\");\n\t\t}\n\t\tconst userWs = this._options.websocket;\n\t\tthis.globalPipeline = composeMiddlewareDispatcher(\n\t\t\tthis.middlewares,\n\t\t\tthis.errorResolver,\n\t\t);\n\t\tconst contextApplication = this as unknown as ContextApplication;\n\t\tconst opts: Record<string, unknown> = {\n\t\t\tfetch: this.fetchHandler,\n\t\t\tdevelopment: this.development,\n\t\t};\n\t\tif (this._options.idleTimeout !== undefined) {\n\t\t\topts.idleTimeout = this._options.idleTimeout;\n\t\t}\n\t\tif (this._options.maxRequestBodySize !== undefined) {\n\t\t\topts.maxRequestBodySize = this._options.maxRequestBodySize;\n\t\t}\n\t\topts.error = (err: unknown) => errorToResponse(err, this.development);\n\t\tif (Bun.env.BARQ_IS_WORKER === \"true\") opts.reusePort = true;\n\n\t\tif (this.hasWebSockets || userWs !== undefined) {\n\t\t\topts.websocket = {\n\t\t\t\t...userWs,\n\t\t\t\tmessage: (ws: ServerWebSocket<unknown>, message: string | Buffer) => {\n\t\t\t\t\tconst internal = getInternalWebSocketHandlers(ws);\n\t\t\t\t\tdispatchWebSocketCallback(internal?.message, [ws, message], (err) =>\n\t\t\t\t\t\treportWebSocketError(internal?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t\tdispatchWebSocketCallback(userWs?.message, [ws, message], (err) =>\n\t\t\t\t\t\treportWebSocketError(userWs?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\topen: (ws: ServerWebSocket<unknown>) => {\n\t\t\t\t\tconst internal = getInternalWebSocketHandlers(ws);\n\t\t\t\t\tdispatchWebSocketCallback(internal?.open, [ws], (err) =>\n\t\t\t\t\t\treportWebSocketError(internal?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t\tdispatchWebSocketCallback(userWs?.open, [ws], (err) =>\n\t\t\t\t\t\treportWebSocketError(userWs?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tclose: (ws: ServerWebSocket<unknown>, code: number, reason: string) => {\n\t\t\t\t\tconst internal = getInternalWebSocketHandlers(ws);\n\t\t\t\t\tdispatchWebSocketCallback(\n\t\t\t\t\t\tinternal?.close,\n\t\t\t\t\t\t[ws, code, reason],\n\t\t\t\t\t\t(err) => reportWebSocketError(internal?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t\tdispatchWebSocketCallback(userWs?.close, [ws, code, reason], (err) =>\n\t\t\t\t\t\treportWebSocketError(userWs?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tdrain: (ws: ServerWebSocket<unknown>) => {\n\t\t\t\t\tconst internal = getInternalWebSocketHandlers(ws);\n\t\t\t\t\tdispatchWebSocketCallback(internal?.drain, [ws], (err) =>\n\t\t\t\t\t\treportWebSocketError(internal?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t\tdispatchWebSocketCallback(userWs?.drain, [ws], (err) =>\n\t\t\t\t\t\treportWebSocketError(userWs?.error, ws, err),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\terror: (ws: ServerWebSocket<unknown>, err: unknown) => {\n\t\t\t\t\tconst internal = getInternalWebSocketHandlers(ws);\n\t\t\t\t\tif (internal?.error === undefined && userWs?.error === undefined) {\n\t\t\t\t\t\tconsole.error(\"Unhandled WebSocket error:\", err);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (internal?.error) reportWebSocketError(internal.error, ws, err);\n\t\t\t\t\tif (userWs?.error) reportWebSocketError(userWs.error, ws, err);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (this.nativeRoutes.length > 0) {\n\t\t\tconst systemRoutes: Record<string, unknown> = Object.create(null);\n\t\t\tconst hasGlobalPipeline =\n\t\t\t\tthis.hasMiddlewares || this.errorResolver !== undefined;\n\t\t\tconst routesByPattern = new Map<string, typeof this.nativeRoutes>();\n\n\t\t\tfor (const nr of this.nativeRoutes) {\n\t\t\t\tlet list = routesByPattern.get(nr.pattern);\n\t\t\t\tif (!list) {\n\t\t\t\t\tlist = [];\n\t\t\t\t\troutesByPattern.set(nr.pattern, list);\n\t\t\t\t}\n\t\t\t\tlist.push(nr);\n\t\t\t}\n\n\t\t\tfor (const [pattern, list] of routesByPattern) {\n\t\t\t\tconst isDynamic = pattern.includes(\":\") || pattern.includes(\"*\");\n\t\t\t\tconst methodMap: Record<\n\t\t\t\t\tstring,\n\t\t\t\t\tResponse | ((req: Request) => Response | Promise<Response>)\n\t\t\t\t> = Object.create(null);\n\n\t\t\t\tfor (const nr of list) {\n\t\t\t\t\tconst h = nr.handler;\n\t\t\t\t\tconst isDyn = nr.isDynamic;\n\t\t\t\t\tconst raw = nr.rawHandler;\n\n\t\t\t\t\tif (hasGlobalPipeline || nr.hasRouteMiddlewares) {\n\t\t\t\t\t\tmethodMap[nr.method] = (req: Request) => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst params = isDyn\n\t\t\t\t\t\t\t\t\t? ((req as unknown as { params?: Record<string, string> })\n\t\t\t\t\t\t\t\t\t\t\t.params ?? EMPTY_PARAMS)\n\t\t\t\t\t\t\t\t\t: EMPTY_PARAMS;\n\t\t\t\t\t\t\t\tconst ctx = new Context(\n\t\t\t\t\t\t\t\t\treq,\n\t\t\t\t\t\t\t\t\tthis.server,\n\t\t\t\t\t\t\t\t\tparams,\n\t\t\t\t\t\t\t\t\tcontextApplication,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst result = this.globalPipeline(ctx, h);\n\t\t\t\t\t\t\t\treturn finalizeResponse(ctx, result, req.method === \"HEAD\");\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\treturn errorToResponse(err, this.development);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (nr.isContextFree && raw) {\n\t\t\t\t\t\tconst analysis = analyzeHandler(raw);\n\t\t\t\t\t\tconst literal = analysis.literal;\n\t\t\t\t\t\tif (literal !== null) {\n\t\t\t\t\t\t\tif (literal.kind === \"string\") {\n\t\t\t\t\t\t\t\tmethodMap[nr.method] = new Response(literal.value);\n\t\t\t\t\t\t\t\tif (nr.method === \"GET\" && !isDyn)\n\t\t\t\t\t\t\t\t\tmethodMap.HEAD = new Response(null);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tmethodMap[nr.method] = new Response(literal.value, {\n\t\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (nr.method === \"GET\" && !isDyn)\n\t\t\t\t\t\t\t\t\tmethodMap.HEAD = new Response(null, {\n\t\t\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmethodMap[nr.method] = () => {\n\t\t\t\t\t\t\t\tconst res = raw();\n\t\t\t\t\t\t\t\tif (res instanceof Response) return res;\n\t\t\t\t\t\t\t\tif (isThenable(res)) {\n\t\t\t\t\t\t\t\t\treturn Promise.resolve(res).then((r) => {\n\t\t\t\t\t\t\t\t\t\tif (r instanceof Response) return r;\n\t\t\t\t\t\t\t\t\t\tif (typeof r === \"object\" && r !== null)\n\t\t\t\t\t\t\t\t\t\t\treturn Response.json(r);\n\t\t\t\t\t\t\t\t\t\tif (typeof r === \"string\")\n\t\t\t\t\t\t\t\t\t\t\treturn new Response(r, { headers: FAST_TEXT_HEADERS });\n\t\t\t\t\t\t\t\t\t\treturn finalizeValue(r as HandlerResult);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (typeof res === \"object\" && res !== null)\n\t\t\t\t\t\t\t\t\treturn Response.json(res);\n\t\t\t\t\t\t\t\tif (typeof res === \"string\")\n\t\t\t\t\t\t\t\t\treturn new Response(res, { headers: FAST_TEXT_HEADERS });\n\t\t\t\t\t\t\t\treturn Response.json(res);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (nr.method === \"GET\" && !isDyn) {\n\t\t\t\t\t\t\t\tmethodMap.HEAD = () => {\n\t\t\t\t\t\t\t\t\tconst res = raw();\n\t\t\t\t\t\t\t\t\tconst r =\n\t\t\t\t\t\t\t\t\t\tres instanceof Response\n\t\t\t\t\t\t\t\t\t\t\t? res\n\t\t\t\t\t\t\t\t\t\t\t: finalizeValue(res as HandlerResult);\n\t\t\t\t\t\t\t\t\treturn stripBody(r);\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (nr.isJsonBodyOnly && raw) {\n\t\t\t\t\t\tmethodMap[nr.method] = (req: Request) =>\n\t\t\t\t\t\t\tnew Response(req.body, { headers: FAST_JSON_HEADERS });\n\t\t\t\t\t\tif (nr.method === \"GET\" && !isDyn) {\n\t\t\t\t\t\t\tmethodMap.HEAD = (req: Request) =>\n\t\t\t\t\t\t\t\treq.json().then(\n\t\t\t\t\t\t\t\t\t() => new Response(null, { headers: FAST_JSON_HEADERS }),\n\t\t\t\t\t\t\t\t\t(err: unknown) => errorToResponse(err, this.development),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (nr.isParamsOnly && raw) {\n\t\t\t\t\t\tconst analysis = analyzeHandler(raw);\n\t\t\t\t\t\tif (analysis.paramSerializer) {\n\t\t\t\t\t\t\tconst serializer = analysis.paramSerializer;\n\t\t\t\t\t\t\tconst responseInit = { headers: FAST_JSON_HEADERS };\n\t\t\t\t\t\t\tmethodMap[nr.method] = (req: Request) => {\n\t\t\t\t\t\t\t\tconst params =\n\t\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t\t\treq as unknown as {\n\t\t\t\t\t\t\t\t\t\t\tparams?: Record<string, string>;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t).params ?? EMPTY_PARAMS;\n\t\t\t\t\t\t\t\tconst syncRes = raw({ params } as never);\n\t\t\t\t\t\t\t\tif (isThenable(syncRes)) {\n\t\t\t\t\t\t\t\t\treturn Promise.resolve(syncRes).then((val) =>\n\t\t\t\t\t\t\t\t\t\tval instanceof Response\n\t\t\t\t\t\t\t\t\t\t\t? val\n\t\t\t\t\t\t\t\t\t\t\t: typeof val === \"object\" && val !== null\n\t\t\t\t\t\t\t\t\t\t\t\t? Response.json(val)\n\t\t\t\t\t\t\t\t\t\t\t\t: new Response(String(val)),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Response(serializer(params), responseInit);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmethodMap[nr.method] = (req: Request) => {\n\t\t\t\t\t\t\t\tconst p = (\n\t\t\t\t\t\t\t\t\treq as unknown as { params?: Record<string, string> }\n\t\t\t\t\t\t\t\t).params;\n\t\t\t\t\t\t\t\tconst res = raw(\n\t\t\t\t\t\t\t\t\t(p ? req : { params: EMPTY_PARAMS, req }) as never,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (typeof res === \"object\" && res !== null) {\n\t\t\t\t\t\t\t\t\tif (res instanceof Response) return res;\n\t\t\t\t\t\t\t\t\treturn Response.json(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (typeof res === \"string\")\n\t\t\t\t\t\t\t\t\treturn new Response(res, { headers: FAST_TEXT_HEADERS });\n\t\t\t\t\t\t\t\tif (isThenable(res)) {\n\t\t\t\t\t\t\t\t\treturn Promise.resolve(res).then((r) => {\n\t\t\t\t\t\t\t\t\t\tif (r instanceof Response) return r;\n\t\t\t\t\t\t\t\t\t\tif (typeof r === \"object\" && r !== null)\n\t\t\t\t\t\t\t\t\t\t\treturn new Response(JSON.stringify(r), {\n\t\t\t\t\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tif (typeof r === \"string\")\n\t\t\t\t\t\t\t\t\t\t\treturn new Response(r, { headers: FAST_TEXT_HEADERS });\n\t\t\t\t\t\t\t\t\t\treturn finalizeValue(r as HandlerResult);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn new Response(JSON.stringify(res), {\n\t\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (nr.method === \"GET\" && !isDyn)\n\t\t\t\t\t\t\t\tmethodMap.HEAD = () =>\n\t\t\t\t\t\t\t\t\tnew Response(null, { headers: FAST_JSON_HEADERS });\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (nr.isLightweight && raw) {\n\t\t\t\t\t\tmethodMap[nr.method] = (req: Request) => {\n\t\t\t\t\t\t\tconst params = isDyn\n\t\t\t\t\t\t\t\t? ((req as unknown as { params?: Record<string, string> })\n\t\t\t\t\t\t\t\t\t\t.params ?? EMPTY_PARAMS)\n\t\t\t\t\t\t\t\t: EMPTY_PARAMS;\n\t\t\t\t\t\t\tconst ctx = acquireLightContext(req, params);\n\t\t\t\t\t\t\tlet res: unknown;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tres = raw(ctx as never);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\treturn errorToResponse(err, this.development);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (typeof res === \"object\" && res !== null) {\n\t\t\t\t\t\t\t\tif (res instanceof Response) {\n\t\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\t\treturn res;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!isThenable(res)) {\n\t\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\t\treturn Response.json(res);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof res === \"string\") {\n\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\treturn new Response(res, { headers: FAST_TEXT_HEADERS });\n\t\t\t\t\t\t\t} else if (!isThenable(res)) {\n\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\treturn new Response(JSON.stringify(res), {\n\t\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn Promise.resolve(res)\n\t\t\t\t\t\t\t\t.then((r) => {\n\t\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\t\tif (r instanceof Response) return r;\n\t\t\t\t\t\t\t\t\tif (typeof r === \"object\" && r !== null)\n\t\t\t\t\t\t\t\t\t\treturn new Response(JSON.stringify(r), {\n\t\t\t\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tif (typeof r === \"string\")\n\t\t\t\t\t\t\t\t\t\treturn new Response(r, { headers: FAST_TEXT_HEADERS });\n\t\t\t\t\t\t\t\t\treturn finalizeValue(r as HandlerResult);\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.catch((err) => {\n\t\t\t\t\t\t\t\t\treleaseLightContext(ctx);\n\t\t\t\t\t\t\t\t\treturn errorToResponse(err, this.development);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (nr.method === \"GET\" && !isDyn)\n\t\t\t\t\t\t\tmethodMap.HEAD = () =>\n\t\t\t\t\t\t\t\tnew Response(null, { headers: FAST_JSON_HEADERS });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tmethodMap[nr.method] = (req: Request) => {\n\t\t\t\t\t\t\tconst isHead = nr.method === \"GET\" && req.method === \"HEAD\";\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst params = isDyn\n\t\t\t\t\t\t\t\t\t? ((req as unknown as { params?: Record<string, string> })\n\t\t\t\t\t\t\t\t\t\t\t.params ?? EMPTY_PARAMS)\n\t\t\t\t\t\t\t\t\t: EMPTY_PARAMS;\n\t\t\t\t\t\t\t\tconst ctx = new Context(\n\t\t\t\t\t\t\t\t\treq,\n\t\t\t\t\t\t\t\t\tthis.server,\n\t\t\t\t\t\t\t\t\tparams,\n\t\t\t\t\t\t\t\t\tcontextApplication,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst res = raw ? raw(ctx as never) : h(ctx);\n\t\t\t\t\t\t\t\tif (res instanceof Response) {\n\t\t\t\t\t\t\t\t\tif (!isHead && !ctx._hasPendingCookies) return res;\n\t\t\t\t\t\t\t\t\treturn finalizeResponse(ctx, res, isHead);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!isThenable(res))\n\t\t\t\t\t\t\t\t\treturn finalizeResponse(\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\ttoResponse(res as HandlerResult),\n\t\t\t\t\t\t\t\t\t\tisHead,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\treturn Promise.resolve(res)\n\t\t\t\t\t\t\t\t\t.then((value) =>\n\t\t\t\t\t\t\t\t\t\tfinalizeResponse(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\ttoResponse(value as HandlerResult),\n\t\t\t\t\t\t\t\t\t\t\tisHead,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t.catch((err: unknown) =>\n\t\t\t\t\t\t\t\t\t\tfinalizeResponse(\n\t\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\t\terrorToResponse(err, this.development),\n\t\t\t\t\t\t\t\t\t\t\tisHead,\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t\t\treturn errorToResponse(err, this.development);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst allowMethods = Object.keys(methodMap);\n\t\t\t\tconst allowHeader =\n\t\t\t\t\tallowMethods.includes(\"GET\") && !allowMethods.includes(\"HEAD\")\n\t\t\t\t\t\t? [...allowMethods, \"HEAD\"].join(\", \")\n\t\t\t\t\t\t: allowMethods.join(\", \");\n\n\t\t\t\tif (isDynamic) {\n\t\t\t\t\tconst getFn = methodMap.GET;\n\t\t\t\t\tif (\n\t\t\t\t\t\tallowMethods.length === 1 &&\n\t\t\t\t\t\ttypeof getFn === \"function\" &&\n\t\t\t\t\t\tallowMethods[0] === \"GET\"\n\t\t\t\t\t) {\n\t\t\t\t\t\tsystemRoutes[pattern] = methodMap;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsystemRoutes[pattern] = (req: Request) => {\n\t\t\t\t\t\t\tconst matched = methodMap[req.method];\n\t\t\t\t\t\t\tif (typeof matched === \"function\") return matched(req);\n\t\t\t\t\t\t\tif (matched instanceof Response)\n\t\t\t\t\t\t\t\treturn req.method === \"HEAD\" ? stripBody(matched) : matched;\n\t\t\t\t\t\t\tif (req.method === \"HEAD\") {\n\t\t\t\t\t\t\t\tconst gh = methodMap.GET;\n\t\t\t\t\t\t\t\tif (typeof gh === \"function\") {\n\t\t\t\t\t\t\t\t\tconst res = gh(req);\n\t\t\t\t\t\t\t\t\treturn isThenable(res)\n\t\t\t\t\t\t\t\t\t\t? (res as Promise<Response>).then(stripBody)\n\t\t\t\t\t\t\t\t\t\t: stripBody(res as Response);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn new Response('{\"error\":\"Method Not Allowed\"}', {\n\t\t\t\t\t\t\t\tstatus: 405,\n\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\"content-type\": \"application/json; charset=utf-8\",\n\t\t\t\t\t\t\t\t\tAllow: allowHeader,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsystemRoutes[pattern] = methodMap;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\topts.routes = systemRoutes;\n\t\t}\n\n\t\topts.port = listenPort;\n\t\tif (this._options.hostname !== undefined)\n\t\t\topts.hostname = this._options.hostname;\n\t\tif (this._options.tls !== undefined) opts.tls = this._options.tls;\n\t\tthis.server = Bun.serve(opts as unknown as ServeOptions);\n\t\treturn this.server;\n\t}\n\n\tprivate handle(\n\t\treq: Request,\n\t\tsrv?: Server<unknown>,\n\t): Response | Promise<Response> {\n\t\tconst isHead = req.method === \"HEAD\";\n\t\tconst serverInstance = srv ?? this.server;\n\t\tconst contextApplication = this as unknown as ContextApplication;\n\t\tlet currentCtx: Context | null = null;\n\t\tlet pathname: string | undefined;\n\n\t\ttry {\n\t\t\tpathname = scanPathname(req.url);\n\n\t\t\tconst matched = this.trie.match(req.method, pathname);\n\n\t\t\tif (matched === null) {\n\t\t\t\tif (\n\t\t\t\t\tthis.notFoundHandler === null &&\n\t\t\t\t\t!this.hasMiddlewares &&\n\t\t\t\t\tthis.errorResolver === undefined\n\t\t\t\t) {\n\t\t\t\t\treturn new Response('{\"error\":\"Not Found\"}', {\n\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\theaders: { \"content-type\": \"application/json; charset=utf-8\" },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcurrentCtx = new Context(\n\t\t\t\t\treq,\n\t\t\t\t\tserverInstance,\n\t\t\t\t\tEMPTY_PARAMS,\n\t\t\t\t\tcontextApplication,\n\t\t\t\t\tpathname,\n\t\t\t\t);\n\t\t\t\tconst notFoundHandler =\n\t\t\t\t\tthis.notFoundHandler !== null\n\t\t\t\t\t\t? this.notFoundHandler\n\t\t\t\t\t\t: () =>\n\t\t\t\t\t\t\t\tnew Response('{\"error\":\"Not Found\"}', {\n\t\t\t\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\t\t\t\"content-type\": \"application/json; charset=utf-8\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\tconst result = this.globalPipeline(currentCtx, notFoundHandler);\n\t\t\t\treturn finalizeResponse(currentCtx, result, isHead);\n\t\t\t}\n\n\t\t\tif (!this.hasMiddlewares && this.errorResolver === undefined) {\n\t\t\t\tif (typeof matched === \"function\") {\n\t\t\t\t\tif (matched.length === 0) {\n\t\t\t\t\t\tconst res = (\n\t\t\t\t\t\t\tmatched as unknown as () => Response | Promise<Response>\n\t\t\t\t\t\t)();\n\t\t\t\t\t\tif (!isHead && !isThenable(res)) return res;\n\t\t\t\t\t\tif (isThenable(res)) {\n\t\t\t\t\t\t\treturn (res as Promise<Response>).then(\n\t\t\t\t\t\t\t\t(r) => (isHead ? stripBody(r) : r),\n\t\t\t\t\t\t\t\t(err) => errorToResponse(err, this.development),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn isHead ? stripBody(res) : res;\n\t\t\t\t\t}\n\t\t\t\t\tcurrentCtx = new Context(\n\t\t\t\t\t\treq,\n\t\t\t\t\t\tserverInstance,\n\t\t\t\t\t\tEMPTY_PARAMS,\n\t\t\t\t\t\tcontextApplication,\n\t\t\t\t\t\tpathname,\n\t\t\t\t\t);\n\t\t\t\t\tconst res = (matched as ResponseHandler)(currentCtx);\n\t\t\t\t\tif (!isHead && !isThenable(res)) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof res === \"object\" &&\n\t\t\t\t\t\t\tres !== null &&\n\t\t\t\t\t\t\t!(res instanceof Response)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn new Response(JSON.stringify(res), {\n\t\t\t\t\t\t\t\theaders: FAST_JSON_HEADERS,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!currentCtx._hasPendingCookies) return res;\n\t\t\t\t\t}\n\t\t\t\t\treturn finalizeResponse(\n\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\tguardRejections(res, this.development),\n\t\t\t\t\t\tisHead,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst handler =\n\t\t\t\t\ttypeof matched === \"object\" && MATCH_HANDLER in matched\n\t\t\t\t\t\t? matched[MATCH_HANDLER]\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (handler !== undefined) {\n\t\t\t\t\tconst params = matched as TrieParams;\n\t\t\t\t\tcurrentCtx = new Context(\n\t\t\t\t\t\treq,\n\t\t\t\t\t\tserverInstance,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\tcontextApplication,\n\t\t\t\t\t\tpathname,\n\t\t\t\t\t);\n\t\t\t\t\tconst res = handler(currentCtx);\n\t\t\t\t\tif (!isHead && !isThenable(res)) {\n\t\t\t\t\t\tif (!currentCtx._hasPendingCookies) return res;\n\t\t\t\t\t}\n\t\t\t\t\treturn finalizeResponse(\n\t\t\t\t\t\tcurrentCtx,\n\t\t\t\t\t\tguardRejections(res, this.development),\n\t\t\t\t\t\tisHead,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (typeof matched === \"function\") {\n\t\t\t\tcurrentCtx = new Context(\n\t\t\t\t\treq,\n\t\t\t\t\tserverInstance,\n\t\t\t\t\tEMPTY_PARAMS,\n\t\t\t\t\tcontextApplication,\n\t\t\t\t\tpathname,\n\t\t\t\t);\n\t\t\t\tconst result = this.globalPipeline(currentCtx, matched);\n\t\t\t\treturn finalizeResponse(currentCtx, result, isHead);\n\t\t\t}\n\n\t\t\tif (MATCH_NOT_ALLOWED in matched) {\n\t\t\t\tconst allow = (matched as { [MATCH_NOT_ALLOWED]: string })[\n\t\t\t\t\tMATCH_NOT_ALLOWED\n\t\t\t\t];\n\t\t\t\tif (\n\t\t\t\t\tthis.errorHandler === null &&\n\t\t\t\t\t!this.hasMiddlewares &&\n\t\t\t\t\tthis.errorResolver === undefined\n\t\t\t\t) {\n\t\t\t\t\treturn new Response('{\"error\":\"Method Not Allowed\"}', {\n\t\t\t\t\t\tstatus: 405,\n\t\t\t\t\t\theaders: {\n\t\t\t\t\t\t\t\"content-type\": \"application/json; charset=utf-8\",\n\t\t\t\t\t\t\tAllow: allow,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tcurrentCtx = new Context(\n\t\t\t\t\treq,\n\t\t\t\t\tserverInstance,\n\t\t\t\t\tEMPTY_PARAMS,\n\t\t\t\t\tcontextApplication,\n\t\t\t\t\tpathname,\n\t\t\t\t);\n\t\t\t\tconst notAllowedHandler = () =>\n\t\t\t\t\terrorToResponse(\n\t\t\t\t\t\tnew HttpError(\n\t\t\t\t\t\t\t405,\n\t\t\t\t\t\t\t{ error: \"Method Not Allowed\" },\n\t\t\t\t\t\t\t{ Allow: allow },\n\t\t\t\t\t\t),\n\t\t\t\t\t\tthis.development,\n\t\t\t\t\t);\n\t\t\t\tconst result = this.globalPipeline(currentCtx, notAllowedHandler);\n\t\t\t\treturn finalizeResponse(currentCtx, result, isHead);\n\t\t\t}\n\n\t\t\tconst params = matched as TrieParams;\n\t\t\tconst handler = params[MATCH_HANDLER] as ResponseHandler;\n\t\t\tcurrentCtx = new Context(\n\t\t\t\treq,\n\t\t\t\tserverInstance,\n\t\t\t\tparams,\n\t\t\t\tcontextApplication,\n\t\t\t\tpathname,\n\t\t\t);\n\t\t\tconst result = this.globalPipeline(currentCtx, handler);\n\t\t\treturn finalizeResponse(currentCtx, result, isHead);\n\t\t} catch (err) {\n\t\t\tconst activeCtx =\n\t\t\t\tcurrentCtx ??\n\t\t\t\tnew Context(\n\t\t\t\t\treq,\n\t\t\t\t\tserverInstance,\n\t\t\t\t\tEMPTY_PARAMS,\n\t\t\t\t\tcontextApplication,\n\t\t\t\t\tpathname,\n\t\t\t\t);\n\t\t\tif (this.errorHandler !== null) {\n\t\t\t\ttry {\n\t\t\t\t\tconst custom = this.errorHandler(err, activeCtx);\n\t\t\t\t\tconst result = isThenable(custom)\n\t\t\t\t\t\t? (custom as Promise<Response>).then((r) =>\n\t\t\t\t\t\t\t\tunwindAfter(\n\t\t\t\t\t\t\t\t\tthis.middlewares,\n\t\t\t\t\t\t\t\t\tactiveCtx,\n\t\t\t\t\t\t\t\t\tr,\n\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\tthis.errorResolver,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: unwindAfter(\n\t\t\t\t\t\t\t\tthis.middlewares,\n\t\t\t\t\t\t\t\tactiveCtx,\n\t\t\t\t\t\t\t\tcustom as Response,\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tthis.errorResolver,\n\t\t\t\t\t\t\t);\n\t\t\t\t\treturn finalizeResponse(activeCtx, result, isHead);\n\t\t\t\t} catch (e2) {\n\t\t\t\t\tconst fallback = errorToResponse(e2, this.development);\n\t\t\t\t\tconst result = unwindAfter(\n\t\t\t\t\t\tthis.middlewares,\n\t\t\t\t\t\tactiveCtx,\n\t\t\t\t\t\tfallback,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\tthis.errorResolver,\n\t\t\t\t\t);\n\t\t\t\t\treturn finalizeResponse(activeCtx, result, isHead);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst routingErr = errorToResponse(err, this.development);\n\t\t\tconst result = unwindAfter(\n\t\t\t\tthis.middlewares,\n\t\t\t\tactiveCtx,\n\t\t\t\troutingErr,\n\t\t\t\t0,\n\t\t\t\tthis.errorResolver,\n\t\t\t);\n\t\t\treturn finalizeResponse(activeCtx, result, isHead);\n\t\t}\n\t}\n\n\tcluster(port?: number): Server<unknown> | void {\n\t\tconst listenPort = port ?? this._options.port ?? 3000;\n\t\tconst isWorker = Bun.env.BARQ_IS_WORKER === \"true\";\n\n\t\tif (!Number.isInteger(listenPort) || listenPort < 0 || listenPort > 65535) {\n\t\t\tthrow new RangeError(\"port must be an integer between 0 and 65535\");\n\t\t}\n\n\t\tif (isWorker || process.platform !== \"linux\") {\n\t\t\treturn this.listen(listenPort);\n\t\t}\n\t\tif (listenPort === 0) {\n\t\t\tthrow new RangeError(\"cluster requires a fixed, non-zero port\");\n\t\t}\n\t\tif (this.clusterProcesses !== null || this.server !== null) {\n\t\t\tthrow new Error(\"App is already listening or clustering\");\n\t\t}\n\t\tconst entry = process.argv[1];\n\t\tif (!entry) {\n\t\t\tthrow new Error(\"Cannot start cluster without an application entry file\");\n\t\t}\n\n\t\tconst processes: ReturnType<typeof Bun.spawn>[] = [];\n\t\tlet crashCount = 0;\n\t\tlet lastReset = Date.now();\n\n\t\tconst spawnWorker = () => {\n\t\t\tconst proc = Bun.spawn([process.execPath, \"run\", entry], {\n\t\t\t\tenv: {\n\t\t\t\t\t...process.env,\n\t\t\t\t\tBARQ_IS_WORKER: \"true\",\n\t\t\t\t\tPORT: String(listenPort),\n\t\t\t\t},\n\t\t\t\tstdio: [\"inherit\", \"inherit\", \"inherit\"],\n\t\t\t});\n\t\t\tproc.exited.then((_code) => {\n\t\t\t\tif (this.stopPromise === null && this.clusterProcesses !== null) {\n\t\t\t\t\tconst now = Date.now();\n\t\t\t\t\tif (now - lastReset > 5000) {\n\t\t\t\t\t\tcrashCount = 0;\n\t\t\t\t\t\tlastReset = now;\n\t\t\t\t\t}\n\t\t\t\t\tcrashCount++;\n\n\t\t\t\t\tconst idx = processes.indexOf(proc);\n\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\tprocesses.splice(idx, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (crashCount > 15) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t\"[Barq Cluster] Workers restarting too fast. Throttling respawn.\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tif (this.stopPromise === null && this.clusterProcesses !== null) {\n\t\t\t\t\t\t\t\tprocesses.push(spawnWorker());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tprocesses.push(spawnWorker());\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn proc;\n\t\t};\n\n\t\ttry {\n\t\t\tfor (let i = 0; i < cpus().length; i++) {\n\t\t\t\tprocesses.push(spawnWorker());\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tfor (const process of processes) process.kill(\"SIGTERM\");\n\t\t\tthrow error;\n\t\t}\n\t\tthis.clusterProcesses = processes;\n\t\treturn;\n\t}\n\n\tasync stop(hardTimeoutMs = 5000): Promise<ShutdownResult> {\n\t\tif (!Number.isFinite(hardTimeoutMs) || hardTimeoutMs < 0) {\n\t\t\tthrow new RangeError(\n\t\t\t\t\"hardTimeoutMs must be a finite non-negative number\",\n\t\t\t);\n\t\t}\n\t\tif (this.stopPromise !== null) {\n\t\t\treturn this.stopPromise;\n\t\t}\n\t\tconst server = this.server;\n\t\tconst clusterProcesses = this.clusterProcesses;\n\t\tthis.server = null;\n\t\tthis.clusterProcesses = null;\n\t\tif (server === null && clusterProcesses === null) {\n\t\t\treturn { forced: false, pending: 0 };\n\t\t}\n\t\tthis.stopPromise = (async () => {\n\t\t\tlet serverResult: ShutdownResult = { forced: false, pending: 0 };\n\t\t\tlet workersForced = false;\n\t\t\ttry {\n\t\t\t\tif (server !== null) {\n\t\t\t\t\tserverResult = await stopServer(server, hardTimeoutMs);\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tif (clusterProcesses !== null) {\n\t\t\t\t\tworkersForced = await stopClusterProcesses(\n\t\t\t\t\t\tclusterProcesses,\n\t\t\t\t\t\thardTimeoutMs,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tforced: serverResult.forced || workersForced,\n\t\t\t\tpending: serverResult.pending,\n\t\t\t};\n\t\t})();\n\t\ttry {\n\t\t\treturn await this.stopPromise;\n\t\t} finally {\n\t\t\tthis.stopPromise = null;\n\t\t}\n\t}\n}\n\nfunction guardRejections(\n\tres: Response | Promise<Response>,\n\tdevelopment: boolean,\n): Response | Promise<Response> {\n\treturn isThenable(res)\n\t\t? (res as Promise<Response>).catch((err: unknown) =>\n\t\t\t\terrorToResponse(err, development),\n\t\t\t)\n\t\t: (res as Response);\n}\n\nfunction applyCookies(ctx: Context, res: Response): Response {\n\tif (!ctx._hasPendingCookies) return res;\n\tconst cookies = ctx._cookieJarIfCreated();\n\tif (cookies === null) return res;\n\tconst headers = new Headers(res.headers);\n\tapplyPendingCookies(cookies, headers);\n\tctx._hasPendingCookies = false;\n\treturn new Response(res.body, {\n\t\tstatus: res.status,\n\t\tstatusText: res.statusText,\n\t\theaders,\n\t});\n}\n\nfunction finalizeResponse(\n\tctx: Context,\n\tres: Response | Promise<Response>,\n\tisHead: boolean,\n): Response | Promise<Response> {\n\tif (res instanceof Response) {\n\t\tif (!isHead && !ctx._hasPendingCookies) return res;\n\t\tconst withCookies = applyCookies(ctx, res);\n\t\treturn isHead ? stripBody(withCookies) : withCookies;\n\t}\n\tif (isThenable(res)) {\n\t\treturn res.then((response) => {\n\t\t\tconst withCookies = applyCookies(ctx, response);\n\t\t\treturn isHead ? stripBody(withCookies) : withCookies;\n\t\t});\n\t}\n\tif (!isHead) {\n\t\tif (!ctx._hasPendingCookies) return res as Response;\n\t\treturn applyCookies(ctx, res as Response);\n\t}\n\treturn stripBody(applyCookies(ctx, res as Response));\n}\n\nfunction stripBody(res: Response): Response {\n\tif (res.body === null) return res;\n\ttry {\n\t\tres.body.cancel?.().catch?.(() => {});\n\t} catch {}\n\treturn new Response(null, {\n\t\tstatus: res.status,\n\t\tstatusText: res.statusText,\n\t\theaders: res.headers,\n\t});\n}\n",
7
+ "import { timingSafeEqual } from \"node:crypto\";\nimport type { CookieJar, SetCookieOptions } from \"./types\";\n\ninterface PendingCookie {\n\tname: string;\n\theaderString: string;\n}\n\ninterface CookieState {\n\tcookies: Map<string, string> | null;\n\trequestHeaders: Headers | undefined;\n\tpending: PendingCookie[] | null;\n}\n\nclass CookieJarImpl implements CookieJar {\n\tprivate readonly state: CookieState;\n\n\tconstructor(\n\t\tprivate readonly secret: string,\n\t\trequestHeaders?: Headers,\n\t\tprivate readonly onMutation?: () => void,\n\t) {\n\t\tthis.state = { cookies: null, requestHeaders, pending: null };\n\t}\n\n\tget(name: string): string | undefined {\n\t\treturn getCookies(this.state).get(name);\n\t}\n\n\tgetSigned(name: string, customSecret?: string): string | null {\n\t\tconst signed = getCookies(this.state).get(name);\n\t\tif (!signed) return null;\n\t\tconst signingSecret = customSecret ?? this.secret;\n\t\tif (!signingSecret) return null;\n\t\treturn unsign(signed, signingSecret);\n\t}\n\n\tset(name: string, value: string, options?: SetCookieOptions): void {\n\t\tconst cookieOptions = snapshotOptions(options);\n\t\tvalidateCookie(name, cookieOptions);\n\t\tgetCookies(this.state).set(name, value);\n\t\tgetPending(this.state).push({\n\t\t\tname,\n\t\t\theaderString: buildCookieString(name, value, cookieOptions),\n\t\t});\n\t\tthis.onMutation?.();\n\t}\n\n\tsetSigned(\n\t\tname: string,\n\t\tvalue: string,\n\t\toptions?: SetCookieOptions,\n\t\tcustomSecret?: string,\n\t): void {\n\t\tconst signingSecret = customSecret ?? this.secret;\n\t\tif (!signingSecret) {\n\t\t\tthrow new Error(\"A non-empty secret is required to set a signed cookie\");\n\t\t}\n\t\tconst cookieOptions = snapshotOptions(options);\n\t\tvalidateCookie(name, cookieOptions);\n\t\tconst signed = sign(value, signingSecret);\n\t\tgetCookies(this.state).set(name, signed);\n\t\tgetPending(this.state).push({\n\t\t\tname,\n\t\t\theaderString: buildCookieString(name, signed, cookieOptions),\n\t\t});\n\t\tthis.onMutation?.();\n\t}\n\n\tdelete(name: string, options?: SetCookieOptions): void {\n\t\tconst cookieOptions = snapshotOptions(options);\n\t\tvalidateCookie(name, cookieOptions);\n\t\tgetCookies(this.state).delete(name);\n\t\tgetPending(this.state).push({\n\t\t\tname,\n\t\t\theaderString: buildCookieString(name, \"\", {\n\t\t\t\t...cookieOptions,\n\t\t\t\tmaxAge: 0,\n\t\t\t\texpires: new Date(0),\n\t\t\t}),\n\t\t});\n\t\tthis.onMutation?.();\n\t}\n\n\thasPending(): boolean {\n\t\treturn (this.state.pending?.length ?? 0) > 0;\n\t}\n\n\tapply(headers: Headers): void {\n\t\tconst pending = this.state.pending;\n\t\tif (pending === null) return;\n\t\tfor (const cookie of pending) {\n\t\t\theaders.append(\"set-cookie\", cookie.headerString);\n\t\t}\n\t\tpending.length = 0;\n\t}\n}\n\nfunction normalizeSameSite(value: string | undefined): string {\n\tif (!value) return \"Lax\";\n\tconst lower = value.toLowerCase();\n\tif (lower === \"strict\") return \"Strict\";\n\tif (lower === \"lax\") return \"Lax\";\n\tif (lower === \"none\") return \"None\";\n\treturn value;\n}\n\nfunction buildCookieString(\n\tname: string,\n\tvalue: string,\n\toptions: SetCookieOptions,\n): string {\n\tvalidateCookie(name, options);\n\tlet cookie = `${name}=${encodeURIComponent(value)}`;\n\n\tif (options.path) cookie += `; Path=${options.path}`;\n\tif (options.domain) cookie += `; Domain=${options.domain}`;\n\tif (options.maxAge !== undefined) cookie += `; Max-Age=${options.maxAge}`;\n\tif (options.expires) cookie += `; Expires=${options.expires.toUTCString()}`;\n\tif (options.httpOnly !== false) cookie += \"; HttpOnly\";\n\tif (options.secure) cookie += \"; Secure\";\n\tconst sameSite = normalizeSameSite(options.sameSite);\n\tif (sameSite) cookie += `; SameSite=${sameSite}`;\n\n\treturn cookie;\n}\n\nfunction sign(value: string, secret: string): string {\n\tconst hasher = new Bun.CryptoHasher(\"sha256\", secret);\n\thasher.update(value);\n\tconst sig = hasher.digest(\"base64url\");\n\treturn `${value}.${sig}`;\n}\n\nfunction unsign(signedValue: string, secret: string): string | null {\n\tconst lastDot = signedValue.lastIndexOf(\".\");\n\tif (lastDot <= 0 || lastDot === signedValue.length - 1) return null;\n\tconst value = signedValue.slice(0, lastDot);\n\tconst sig = signedValue.slice(lastDot + 1);\n\tconst hasher = new Bun.CryptoHasher(\"sha256\", secret);\n\thasher.update(value);\n\tconst expected = hasher.digest(\"base64url\");\n\tconst actualBytes = Buffer.from(sig);\n\tconst expectedBytes = Buffer.from(expected);\n\tif (actualBytes.length !== expectedBytes.length) return null;\n\tif (!timingSafeEqual(actualBytes, expectedBytes)) return null;\n\treturn value;\n}\n\nfunction decodeCookieValue(value: string): string {\n\ttry {\n\t\treturn decodeURIComponent(value);\n\t} catch {\n\t\t// A malformed percent escape is an invalid cookie value, not a request error.\n\t\treturn value;\n\t}\n}\n\nfunction validateCookie(name: string, options: SetCookieOptions): void {\n\tif (!/^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/.test(name)) {\n\t\tthrow new TypeError(\"Cookie name must be a valid HTTP token\");\n\t}\n\tif (\n\t\toptions.path !== undefined &&\n\t\t(!options.path.startsWith(\"/\") || /[;\\r\\n\\0]/.test(options.path))\n\t) {\n\t\tthrow new TypeError(\n\t\t\t\"Cookie path must start with '/' and contain no controls\",\n\t\t);\n\t}\n\tif (\n\t\toptions.domain !== undefined &&\n\t\t(!/^(?:\\.?[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)(?:\\.[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?)*$/.test(\n\t\t\toptions.domain,\n\t\t) ||\n\t\t\toptions.domain.includes(\"..\"))\n\t) {\n\t\tthrow new TypeError(\"Cookie domain is invalid\");\n\t}\n\tif (\n\t\toptions.maxAge !== undefined &&\n\t\t(!Number.isSafeInteger(options.maxAge) || options.maxAge < 0)\n\t) {\n\t\tthrow new TypeError(\"Cookie maxAge must be a non-negative safe integer\");\n\t}\n\tif (\n\t\toptions.expires !== undefined &&\n\t\t!Number.isFinite(options.expires.getTime())\n\t) {\n\t\tthrow new TypeError(\"Cookie expires must be a valid Date\");\n\t}\n\tif (\n\t\toptions.sameSite !== undefined &&\n\t\t![\"strict\", \"lax\", \"none\"].includes(options.sameSite.toLowerCase())\n\t) {\n\t\tthrow new TypeError(\"Cookie sameSite must be Strict, Lax, or None\");\n\t}\n\tif (options.sameSite?.toLowerCase() === \"none\" && !options.secure) {\n\t\tthrow new TypeError(\"SameSite=None cookies must also be Secure\");\n\t}\n\tif (name.startsWith(\"__Secure-\") && !options.secure) {\n\t\tthrow new TypeError(\"__Secure- cookies must also be Secure\");\n\t}\n\tif (\n\t\tname.startsWith(\"__Host-\") &&\n\t\t(!options.secure || options.path !== \"/\" || options.domain !== undefined)\n\t) {\n\t\tthrow new TypeError(\n\t\t\t\"__Host- cookies must be Secure, use Path=/, and omit Domain\",\n\t\t);\n\t}\n}\n\nfunction snapshotOptions(options?: SetCookieOptions): SetCookieOptions {\n\tif (!options) return {};\n\treturn {\n\t\t...options,\n\t\t...(options.expires === undefined\n\t\t\t? {}\n\t\t\t: { expires: new Date(options.expires.getTime()) }),\n\t};\n}\n\nfunction parseCookieHeader(header: string): Map<string, string> {\n\tconst cookies = new Map<string, string>();\n\tlet pos = 0;\n\tconst len = header.length;\n\twhile (pos < len) {\n\t\twhile (pos < len && header.charCodeAt(pos) === 32) pos++;\n\t\tif (pos >= len) break;\n\t\tconst eq = header.indexOf(\"=\", pos);\n\t\tif (eq === -1) break;\n\t\tconst name = header.slice(pos, eq).trim();\n\t\tpos = eq + 1;\n\t\tlet end = header.indexOf(\";\", pos);\n\t\tif (end === -1) end = len;\n\t\tconst value = header.slice(pos, end);\n\t\tif (name) cookies.set(name, decodeCookieValue(value));\n\t\tpos = end + 1;\n\t}\n\treturn cookies;\n}\n\nfunction getCookies(state: CookieState): Map<string, string> {\n\tif (state.cookies !== null) return state.cookies;\n\tconst header = state.requestHeaders?.get(\"cookie\") ?? \"\";\n\tstate.requestHeaders = undefined;\n\tstate.cookies = header.length === 0 ? new Map() : parseCookieHeader(header);\n\treturn state.cookies;\n}\n\nfunction getPending(state: CookieState): PendingCookie[] {\n\tif (state.pending === null) state.pending = [];\n\treturn state.pending;\n}\n\nexport function createCookieJar(\n\tsecret?: string,\n\trequestHeaders?: Headers,\n\tonMutation?: () => void,\n): CookieJar {\n\treturn new CookieJarImpl(secret ?? \"\", requestHeaders, onMutation);\n}\n\nexport function hasPendingCookies(cookieJar: CookieJar): boolean {\n\treturn cookieJar instanceof CookieJarImpl && cookieJar.hasPending();\n}\n\nexport function applyPendingCookies(\n\tcookieJar: CookieJar,\n\theaders: Headers,\n): void {\n\tif (!(cookieJar instanceof CookieJarImpl)) {\n\t\tthrow new TypeError(\"CookieJar was not created by Barq\");\n\t}\n\tcookieJar.apply(headers);\n}\n",
8
+ "const NULL_BODY_STATUSES: ReadonlySet<number> = new Set([204, 205, 304]);\nconst DEFAULT_JSON_HEADERS = Object.freeze({\n\t\"content-type\": \"application/json; charset=utf-8\",\n});\nconst DEFAULT_JSON_INIT: ResponseInit = Object.freeze({\n\tstatus: 200,\n\theaders: DEFAULT_JSON_HEADERS,\n});\nconst DEFAULT_TEXT_HEADERS = Object.freeze({\n\t\"content-type\": \"text/plain; charset=utf-8\",\n});\nexport type HeadersInit = NonNullable<ResponseInit[\"headers\"]>;\n\nexport function isNullBodyStatus(status: number): boolean {\n\treturn (status >= 100 && status < 200) || NULL_BODY_STATUSES.has(status);\n}\n\nfunction createJsonResponse(data: unknown, init: ResponseInit): Response {\n\t// Preserve JSON.stringify's empty-body behavior for values that do not\n\t// produce a JSON value, while using Bun's native serializer otherwise.\n\tif (\n\t\tdata === undefined ||\n\t\ttypeof data === \"function\" ||\n\t\ttypeof data === \"symbol\"\n\t) {\n\t\treturn new Response(JSON.stringify(data), init);\n\t}\n\treturn Response.json(data, init);\n}\n\nexport function json(data: unknown, init?: number | ResponseInit): Response {\n\tif (init === undefined) {\n\t\tif (typeof data === \"object\" && data !== null) {\n\t\t\treturn new Response(JSON.stringify(data), DEFAULT_JSON_INIT);\n\t\t}\n\t\treturn createJsonResponse(data, DEFAULT_JSON_INIT);\n\t}\n\n\tif (typeof init === \"number\") {\n\t\tif (isNullBodyStatus(init)) {\n\t\t\treturn new Response(null, { status: init });\n\t\t}\n\t\treturn createJsonResponse(data, {\n\t\t\tstatus: init,\n\t\t\theaders: DEFAULT_JSON_HEADERS,\n\t\t});\n\t}\n\n\tconst status = init.status ?? 200;\n\tif (isNullBodyStatus(status)) {\n\t\treturn new Response(null, { ...init, status });\n\t}\n\n\tif (init.headers === undefined) {\n\t\treturn createJsonResponse(data, {\n\t\t\t...init,\n\t\t\tstatus,\n\t\t\theaders: DEFAULT_JSON_HEADERS,\n\t\t});\n\t}\n\n\tconst headers = new Headers(init.headers);\n\tif (!headers.has(\"content-type\")) {\n\t\theaders.set(\"content-type\", \"application/json; charset=utf-8\");\n\t}\n\treturn createJsonResponse(data, { ...init, status, headers });\n}\n\nexport function text(body: string, init?: number | ResponseInit): Response {\n\tif (init === undefined) {\n\t\treturn new Response(body);\n\t}\n\n\tif (typeof init === \"number\") {\n\t\tif (isNullBodyStatus(init)) {\n\t\t\treturn new Response(null, { status: init });\n\t\t}\n\t\treturn new Response(body, {\n\t\t\tstatus: init,\n\t\t\theaders: DEFAULT_TEXT_HEADERS,\n\t\t});\n\t}\n\n\tconst status = init.status ?? 200;\n\tif (isNullBodyStatus(status)) {\n\t\treturn new Response(null, { ...init, status });\n\t}\n\n\tif (init.headers === undefined) {\n\t\treturn new Response(body, {\n\t\t\t...init,\n\t\t\tstatus,\n\t\t\theaders: DEFAULT_TEXT_HEADERS,\n\t\t});\n\t}\n\n\tconst headers = new Headers(init.headers);\n\tif (!headers.has(\"content-type\")) {\n\t\theaders.set(\"content-type\", \"text/plain; charset=utf-8\");\n\t}\n\treturn new Response(body, { ...init, status, headers });\n}\n\nexport function empty(status = 204, headers?: HeadersInit): Response {\n\tconst init: ResponseInit =\n\t\theaders !== undefined ? { status, headers } : { status };\n\treturn new Response(null, init);\n}\n\n// biome-ignore lint/suspicious/noControlCharactersInRegex: This regex detects control characters in redirect targets.\nconst CONTROL_CHARS = /[\\u0000-\\u001f\\u007f]/;\n\nconst ALLOWED_REDIRECT_STATUSES = new Set([301, 302, 303, 307, 308]);\n\nexport function redirect(\n\turl: string,\n\tstatus = 302,\n\tallowlist?: ReadonlySet<string>,\n): Response {\n\tif (!ALLOWED_REDIRECT_STATUSES.has(status)) {\n\t\tthrow new TypeError(\n\t\t\t`redirect status must be one of: ${Array.from(ALLOWED_REDIRECT_STATUSES).join(\", \")}`,\n\t\t);\n\t}\n\tif (CONTROL_CHARS.test(url) || url.includes(\"\\\\\")) {\n\t\tthrow new TypeError(\n\t\t\t\"redirect target contains control or backslash characters\",\n\t\t);\n\t}\n\tif (url.charCodeAt(0) === 47) {\n\t\tif (url.charCodeAt(1) === 47) {\n\t\t\tthrow new TypeError(\"redirect target must not be protocol-relative\");\n\t\t}\n\t} else {\n\t\tlet parsed: URL;\n\t\ttry {\n\t\t\tparsed = new URL(url);\n\t\t} catch {\n\t\t\tthrow new TypeError(\n\t\t\t\t\"redirect target must be a root-relative path or an absolute URL\",\n\t\t\t);\n\t\t}\n\t\tif (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n\t\t\tthrow new TypeError(\n\t\t\t\t`redirect target protocol is not allowed: ${parsed.protocol}`,\n\t\t\t);\n\t\t}\n\t\tconst host = parsed.host.toLowerCase();\n\t\tif (allowlist !== undefined && !allowlist.has(host)) {\n\t\t\tthrow new TypeError(`redirect target host is not allowlisted: ${host}`);\n\t\t}\n\t}\n\tconst res = new Response(null, { status });\n\tres.headers.set(\"location\", url);\n\treturn res;\n}\n",
9
+ "import { isIP } from \"node:net\";\n\nexport type IpMatcher = (ip: string) => boolean;\n\nfunction ipv4ToNumber(bytes: Uint8Array): number {\n\treturn (\n\t\t((bytes[0]! << 24) | (bytes[1]! << 16) | (bytes[2]! << 8) | bytes[3]!) >>> 0\n\t);\n}\n\nexport function compileTrustProxy(\n\ttrust:\n\t\t| boolean\n\t\t| string\n\t\t| readonly string[]\n\t\t| ((ip: string) => boolean)\n\t\t| undefined,\n): IpMatcher {\n\tif (!trust) return () => false;\n\tif (trust === true) return () => true;\n\tif (typeof trust === \"function\") return trust;\n\n\tconst ranges = typeof trust === \"string\" ? [trust] : trust;\n\tif (ranges.length === 0) return () => false;\n\n\tconst matchers: IpMatcher[] = [];\n\n\tfor (const range of ranges) {\n\t\tif (range === \"loopback\") {\n\t\t\tmatchers.push((ip) => {\n\t\t\t\tconst addr = parseIpAddress(ip);\n\t\t\t\tif (addr === null) return false;\n\t\t\t\tif (addr.length === 4) return addr[0] === 127;\n\t\t\t\treturn addr.slice(0, 15).every((b) => b === 0) && addr[15] === 1;\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst slash = range.indexOf(\"/\");\n\t\tconst netText = slash === -1 ? range : range.slice(0, slash);\n\t\tconst netBytes = parseIpAddress(netText);\n\t\tif (!netBytes) continue;\n\n\t\tconst bits =\n\t\t\tslash === -1 ? netBytes.length * 8 : Number(range.slice(slash + 1));\n\t\tif (netBytes.length === 4) {\n\t\t\tconst netNum = ipv4ToNumber(netBytes);\n\t\t\tconst mask = bits === 0 ? 0 : (~0 << (32 - bits)) >>> 0;\n\t\t\tconst expected = (netNum & mask) >>> 0;\n\t\t\tmatchers.push((ip) => {\n\t\t\t\tconst addr = parseIpAddress(ip);\n\t\t\t\tif (addr?.length !== 4) return false;\n\t\t\t\treturn (ipv4ToNumber(addr) & mask) >>> 0 === expected;\n\t\t\t});\n\t\t} else {\n\t\t\tmatchers.push((ip) => ipMatchesRange(ip, range));\n\t\t}\n\t}\n\n\treturn (ip: string) => matchers.some((m) => m(ip));\n}\n\nexport function isIpRange(value: string): boolean {\n\tif (value === \"loopback\") return true;\n\tconst slash = value.indexOf(\"/\");\n\tif (slash !== value.lastIndexOf(\"/\")) return false;\n\tconst address = slash === -1 ? value : value.slice(0, slash);\n\tconst bytes = parseIpAddress(address);\n\tif (bytes === null) return false;\n\tif (slash === -1) return true;\n\tconst bitsText = value.slice(slash + 1);\n\tif (!/^\\d+$/.test(bitsText)) return false;\n\tconst bits = Number(bitsText);\n\treturn Number.isInteger(bits) && bits >= 0 && bits <= bytes.length * 8;\n}\n\nexport function ipMatchesRange(ip: string, range: string): boolean {\n\tconst address = parseIpAddress(ip);\n\tif (address === null) return false;\n\tif (range === \"loopback\") {\n\t\tif (address.length === 4) return address[0] === 127;\n\t\treturn (\n\t\t\taddress.slice(0, 15).every((byte) => byte === 0) && address[15] === 1\n\t\t);\n\t}\n\n\tconst slash = range.indexOf(\"/\");\n\tconst networkText = slash === -1 ? range : range.slice(0, slash);\n\tconst network = parseIpAddress(networkText);\n\tif (network === null || address.length !== network.length) return false;\n\tconst bits =\n\t\tslash === -1 ? network.length * 8 : Number(range.slice(slash + 1));\n\tif (!Number.isInteger(bits) || bits < 0 || bits > network.length * 8) {\n\t\treturn false;\n\t}\n\n\tconst fullBytes = Math.floor(bits / 8);\n\tfor (let i = 0; i < fullBytes; i++) {\n\t\tif (address[i] !== network[i]) return false;\n\t}\n\tconst remainingBits = bits % 8;\n\tif (remainingBits === 0) return true;\n\tconst mask = (0xff << (8 - remainingBits)) & 0xff;\n\treturn (address[fullBytes]! & mask) === (network[fullBytes]! & mask);\n}\n\nexport function isValidIpAddress(value: string): boolean {\n\treturn parseIpAddress(value) !== null;\n}\n\nfunction parseIpAddress(value: string): Uint8Array | null {\n\tconst version = isIP(value);\n\tif (version === 4) {\n\t\tconst bytes = value.split(\".\").map(Number);\n\t\tif (bytes.length !== 4) return null;\n\t\treturn Uint8Array.from(bytes);\n\t}\n\tif (version !== 6) return null;\n\n\tlet address = value.toLowerCase();\n\tif (address.includes(\".\")) {\n\t\tconst separator = address.lastIndexOf(\":\");\n\t\tconst ipv4 = address\n\t\t\t.slice(separator + 1)\n\t\t\t.split(\".\")\n\t\t\t.map(Number);\n\t\tif (separator === -1 || ipv4.length !== 4) return null;\n\t\tconst high = ((ipv4[0]! << 8) | ipv4[1]!).toString(16);\n\t\tconst low = ((ipv4[2]! << 8) | ipv4[3]!).toString(16);\n\t\taddress = `${address.slice(0, separator + 1)}${high}:${low}`;\n\t}\n\n\tconst halves = address.split(\"::\");\n\tif (halves.length > 2) return null;\n\tconst left = halves[0] ? halves[0].split(\":\") : [];\n\tconst right = halves.length === 2 && halves[1] ? halves[1].split(\":\") : [];\n\tconst missing = 8 - left.length - right.length;\n\tif (\n\t\t(halves.length === 1 && missing !== 0) ||\n\t\t(halves.length === 2 && missing < 1)\n\t) {\n\t\treturn null;\n\t}\n\tconst groups = [\n\t\t...left,\n\t\t...new Array(halves.length === 2 ? missing : 0).fill(\"0\"),\n\t\t...right,\n\t];\n\tif (\n\t\tgroups.length !== 8 ||\n\t\tgroups.some((group) => !/^[0-9a-f]{1,4}$/.test(group))\n\t) {\n\t\treturn null;\n\t}\n\n\tconst bytes = new Uint8Array(16);\n\tfor (let i = 0; i < groups.length; i++) {\n\t\tconst group = Number.parseInt(groups[i]!, 16);\n\t\tbytes[i * 2] = group >>> 8;\n\t\tbytes[i * 2 + 1] = group & 0xff;\n\t}\n\treturn bytes;\n}\n",
10
+ "import { json } from \"./http\";\n\nexport type HeadersInit = NonNullable<ResponseInit[\"headers\"]>;\n\nexport class HttpError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\treadonly headers?: HeadersInit;\n\n\tconstructor(status: number, body?: unknown, headers?: HeadersInit) {\n\t\tif (!Number.isInteger(status) || status < 100 || status > 599) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid HTTP status code: ${status}. Must be an integer between 100 and 599.`,\n\t\t\t);\n\t\t}\n\t\tsuper(typeof body === \"string\" ? body : `HTTP ${status}`);\n\t\tthis.name = \"HttpError\";\n\t\tthis.status = status;\n\t\tthis.body = body ?? { error: defaultStatusText(status) };\n\t\tif (headers !== undefined) this.headers = headers;\n\t}\n}\n\nfunction defaultStatusText(status: number): string {\n\tswitch (status) {\n\t\tcase 400:\n\t\t\treturn \"Bad Request\";\n\t\tcase 401:\n\t\t\treturn \"Unauthorized\";\n\t\tcase 403:\n\t\t\treturn \"Forbidden\";\n\t\tcase 404:\n\t\t\treturn \"Not Found\";\n\t\tcase 405:\n\t\t\treturn \"Method Not Allowed\";\n\t\tcase 408:\n\t\t\treturn \"Request Timeout\";\n\t\tcase 409:\n\t\t\treturn \"Conflict\";\n\t\tcase 413:\n\t\t\treturn \"Payload Too Large\";\n\t\tcase 418:\n\t\t\treturn \"I'm a teapot\";\n\t\tcase 422:\n\t\t\treturn \"Unprocessable Entity\";\n\t\tcase 429:\n\t\t\treturn \"Too Many Requests\";\n\t\tcase 500:\n\t\t\treturn \"Internal Server Error\";\n\t\tcase 502:\n\t\t\treturn \"Bad Gateway\";\n\t\tcase 503:\n\t\t\treturn \"Service Unavailable\";\n\t\tcase 504:\n\t\t\treturn \"Gateway Timeout\";\n\t\tdefault:\n\t\t\treturn status >= 500 ? \"Internal Server Error\" : \"Error\";\n\t}\n}\n\nfunction safeJson(\n\tstatus: number,\n\tbody: unknown,\n\theaders?: HeadersInit,\n): Response {\n\ttry {\n\t\tconst init: ResponseInit =\n\t\t\theaders !== undefined ? { status, headers } : { status };\n\t\treturn json(body, init);\n\t} catch {\n\t\treturn new Response(\"Internal Server Error\", {\n\t\t\tstatus: 500,\n\t\t\theaders: { \"content-type\": \"text/plain; charset=utf-8\" },\n\t\t});\n\t}\n}\n\nexport function errorToResponse(err: unknown, development: boolean): Response {\n\tif (err instanceof Response) {\n\t\treturn err;\n\t}\n\tif (err instanceof HttpError) {\n\t\treturn safeJson(err.status, err.body, err.headers);\n\t}\n\tif (development) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tconst stack = err instanceof Error ? err.stack : undefined;\n\t\treturn safeJson(500, { error: \"Internal Server Error\", message, stack });\n\t}\n\treturn safeJson(500, { error: \"Internal Server Error\" });\n}\n\nexport const createErrorResponse = errorToResponse;\n",
11
+ "import { HttpError } from \"../errors\";\n\nexport interface ParsedTarget {\n\tpathname: string;\n\tquery: string | undefined;\n}\n\nfunction decodeSegment(seg: string): string {\n\tif (seg.indexOf(\"%\") === -1) return seg;\n\ttry {\n\t\treturn decodeURIComponent(seg);\n\t} catch {\n\t\treturn seg;\n\t}\n}\n\nfunction decodePercentSegment(seg: string): string {\n\ttry {\n\t\treturn decodeURIComponent(seg);\n\t} catch {\n\t\treturn seg;\n\t}\n}\n\nfunction isDotSegment(seg: string): boolean {\n\treturn seg === \".\" || seg === \"..\";\n}\n\nfunction hasDotSegment(path: string): boolean {\n\tlet i = 0;\n\tconst len = path.length;\n\twhile (i < len) {\n\t\twhile (i < len && path.charCodeAt(i) === 47) i++;\n\t\tif (i >= len) break;\n\t\tconst endIdx = path.indexOf(\"/\", i);\n\t\tconst segEnd = endIdx === -1 ? len : endIdx;\n\t\tconst segmentLength = segEnd - i;\n\t\tif (\n\t\t\t(segmentLength === 1 && path.charCodeAt(i) === 46) ||\n\t\t\t(segmentLength === 2 &&\n\t\t\t\tpath.charCodeAt(i) === 46 &&\n\t\t\t\tpath.charCodeAt(i + 1) === 46)\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst percent = path.indexOf(\"%\", i);\n\t\tif (percent !== -1 && percent < segEnd) {\n\t\t\tconst decoded = decodePercentSegment(path.slice(i, segEnd));\n\t\t\tif (isDotSegment(decoded)) return true;\n\t\t}\n\t\tif (endIdx === -1) break;\n\t\ti = endIdx + 1;\n\t}\n\treturn false;\n}\n\nexport function hasEncodedSlash(path: string): boolean {\n\treturn path.includes(\"%2f\") || path.includes(\"%2F\");\n}\n\nfunction targetStart(url: string): number {\n\tif (url.charCodeAt(0) === 47) return 0;\n\tif (\n\t\turl.charCodeAt(4) === 58 &&\n\t\turl.charCodeAt(5) === 47 &&\n\t\turl.charCodeAt(6) === 47\n\t)\n\t\treturn 7;\n\tif (\n\t\turl.charCodeAt(5) === 58 &&\n\t\turl.charCodeAt(6) === 47 &&\n\t\turl.charCodeAt(7) === 47\n\t)\n\t\treturn 8;\n\tconst scheme = url.indexOf(\"://\");\n\treturn scheme === -1 ? 0 : scheme + 3;\n}\n\nexport function normalizeDotSegments(path: string): string {\n\tconst len = path.length;\n\tconst segments: string[] = [];\n\tlet start = 0;\n\n\twhile (start < len) {\n\t\twhile (start < len && path.charCodeAt(start) === 47) start++;\n\t\tif (start >= len) break;\n\t\tconst end = path.indexOf(\"/\", start);\n\t\tconst segEnd = end === -1 ? len : end;\n\t\tconst rawSeg = path.slice(start, segEnd);\n\t\tconst decodedSeg = decodeSegment(rawSeg);\n\n\t\tif (decodedSeg === \".\") {\n\t\t} else if (decodedSeg === \"..\") {\n\t\t\tsegments.pop();\n\t\t} else {\n\t\t\tsegments.push(rawSeg);\n\t\t}\n\t\tif (end === -1) break;\n\t\tstart = end + 1;\n\t}\n\n\tconst res = `/${segments.join(\"/\")}`;\n\tconst endsWithSlash =\n\t\tpath.endsWith(\"/\") || path.endsWith(\"/.\") || path.endsWith(\"/..\");\n\treturn path.length > 1 && endsWithSlash && res !== \"/\" ? `${res}/` : res;\n}\n\nexport function scanPathname(url: string): string {\n\tconst s = targetStart(url);\n\tconst slash = url.indexOf(\"/\", s);\n\tif (slash === -1) return \"/\";\n\tlet end = url.indexOf(\"?\", slash);\n\tif (end === -1) {\n\t\tend = url.indexOf(\"#\", slash);\n\t\tif (end === -1) end = url.length;\n\t} else {\n\t\tconst hash = url.indexOf(\"#\", slash);\n\t\tif (hash !== -1 && hash < end) end = hash;\n\t}\n\tconst raw = url.slice(slash, end);\n\n\tif (raw.indexOf(\"%00\") !== -1 || raw.indexOf(\"\\0\") !== -1) {\n\t\tthrow new HttpError(400, { error: \"Bad Request\" });\n\t}\n\n\tif (raw.indexOf(\".\") === -1 && raw.indexOf(\"%\") === -1) return raw;\n\n\treturn hasDotSegment(raw) ? normalizeDotSegments(raw) : raw;\n}\n\nexport function parseRequestTarget(url: string): ParsedTarget {\n\tconst s = targetStart(url);\n\tconst slash = url.indexOf(\"/\", s);\n\n\tlet pathname: string;\n\tlet query: string | undefined;\n\n\tif (slash === -1) {\n\t\tpathname = \"/\";\n\t\tconst q = url.indexOf(\"?\", s);\n\t\tconst h = url.indexOf(\"#\", s);\n\t\tif (q !== -1 && (h === -1 || q < h)) {\n\t\t\tquery = h === -1 ? url.slice(q + 1) : url.slice(q + 1, h);\n\t\t}\n\t} else {\n\t\tlet end = url.indexOf(\"?\", slash);\n\t\tconst hash = url.indexOf(\"#\", slash);\n\n\t\tif (hash !== -1 && (end === -1 || hash < end)) end = hash;\n\n\t\tif (end === -1) {\n\t\t\tend = url.length;\n\t\t} else if (url.charCodeAt(end) === 63) {\n\t\t\tquery =\n\t\t\t\thash !== -1 && hash > end\n\t\t\t\t\t? url.slice(end + 1, hash)\n\t\t\t\t\t: url.slice(end + 1);\n\t\t}\n\n\t\tconst raw = url.slice(slash, end);\n\t\tif (raw.indexOf(\"%00\") !== -1 || raw.indexOf(\"\\0\") !== -1) {\n\t\t\tthrow new HttpError(400, { error: \"Bad Request\" });\n\t\t}\n\n\t\tpathname = hasDotSegment(raw) ? normalizeDotSegments(raw) : raw;\n\t}\n\n\treturn { pathname, query };\n}\n",
12
+ "function decodeQueryComponent(value: string): string {\n\tconst hasPlus = value.indexOf(\"+\") !== -1;\n\tconst hasPercent = value.indexOf(\"%\") !== -1;\n\tif (!hasPlus && !hasPercent) return value;\n\tconst formValue = hasPlus ? value.replace(/\\+/g, \" \") : value;\n\tif (!hasPercent) return formValue;\n\ttry {\n\t\treturn decodeURIComponent(formValue);\n\t} catch {\n\t\treturn new URLSearchParams(`v=${value}`).get(\"v\") ?? \"\";\n\t}\n}\n\nexport function findQueryParam(\n\turl: string,\n\tname: string,\n\tstartPos?: number,\n): string | null {\n\tconst queryStart =\n\t\tstartPos !== undefined && startPos >= 0 ? startPos : url.indexOf(\"?\");\n\tif (queryStart === -1) return null;\n\n\tconst hashPos = url.indexOf(\"#\", queryStart);\n\tconst len = hashPos === -1 ? url.length : hashPos;\n\tlet s = queryStart + 1;\n\tconst nameLen = name.length;\n\n\twhile (s < len) {\n\t\tif (url.startsWith(name, s)) {\n\t\t\tconst eqPos = s + nameLen;\n\t\t\tif (eqPos >= len) return \"\";\n\t\t\tconst nextChar = url.charCodeAt(eqPos);\n\t\t\tif (nextChar === 61) {\n\t\t\t\tconst valStart = eqPos + 1;\n\t\t\t\tlet amp = url.indexOf(\"&\", valStart);\n\t\t\t\tif (amp === -1 || amp > len) amp = len;\n\t\t\t\tconst val = url.slice(valStart, amp);\n\t\t\t\tif (val.indexOf(\"+\") === -1 && val.indexOf(\"%\") === -1) {\n\t\t\t\t\treturn val;\n\t\t\t\t}\n\t\t\t\treturn decodeQueryComponent(val);\n\t\t\t}\n\t\t\tif (nextChar === 38) {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\n\t\tconst amp = url.indexOf(\"&\", s);\n\t\tif (amp === -1 || amp >= len) break;\n\t\ts = amp + 1;\n\t}\n\treturn null;\n}\n\nexport function findQueryParamAll(url: string, name: string): string[] {\n\tconst res: string[] = [];\n\tconst queryStart = url.indexOf(\"?\");\n\tif (queryStart === -1) return res;\n\tconst hashPos = url.indexOf(\"#\", queryStart);\n\tconst len = hashPos === -1 ? url.length : hashPos;\n\tlet s = queryStart + 1;\n\tconst nLen = name.length;\n\n\twhile (s < len) {\n\t\tlet amp = url.indexOf(\"&\", s);\n\t\tif (amp === -1 || amp > len) amp = len;\n\t\tlet eq = url.indexOf(\"=\", s);\n\t\tif (eq === -1 || eq > amp) eq = amp;\n\t\tif (eq - s === nLen && url.startsWith(name, s)) {\n\t\t\tconst val = eq < amp ? url.slice(eq + 1, amp) : \"\";\n\t\t\tif (val.indexOf(\"%\") === -1 && val.indexOf(\"+\") === -1) {\n\t\t\t\tres.push(val);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tres.push(decodeURIComponent(val.replace(/\\+/g, \" \")));\n\t\t\t\t} catch {\n\t\t\t\t\tres.push(val);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ts = amp + 1;\n\t}\n\treturn res;\n}\n\nexport function parseAllQueryParams(url: string): Record<string, string> {\n\tconst qIdx = url.indexOf(\"?\");\n\tif (qIdx === -1) return Object.create(null);\n\tconst hashPos = url.indexOf(\"#\", qIdx);\n\tconst len = hashPos === -1 ? url.length : hashPos;\n\tconst res: Record<string, string> = Object.create(null);\n\tlet s = qIdx + 1;\n\n\twhile (s < len) {\n\t\tlet amp = url.indexOf(\"&\", s);\n\t\tif (amp === -1 || amp > len) amp = len;\n\t\tlet eq = url.indexOf(\"=\", s);\n\t\tif (eq === -1 || eq > amp) eq = amp;\n\t\tconst k = decodeQueryComponent(url.slice(s, eq));\n\t\tconst v = eq < amp ? decodeQueryComponent(url.slice(eq + 1, amp)) : \"\";\n\t\tif (res[k] === undefined) res[k] = v;\n\t\ts = amp + 1;\n\t}\n\treturn res;\n}\n\nexport function parseFastQuery(\n\turl: string,\n\tstartPos: number,\n): Record<string, string> {\n\tconst out: Record<string, string> = Object.create(null);\n\tconst hashPos = url.indexOf(\"#\", startPos);\n\tconst len = hashPos === -1 ? url.length : hashPos;\n\tlet s = startPos;\n\n\twhile (s < len) {\n\t\tlet eq = url.indexOf(\"=\", s);\n\t\tif (eq === -1 || eq > len) eq = len;\n\t\tlet amp = url.indexOf(\"&\", eq < len ? eq + 1 : s);\n\t\tif (amp === -1 || amp > len) amp = len;\n\t\tconst k = url.slice(s, eq);\n\t\tconst v = eq < amp ? url.slice(eq + 1, amp) : \"\";\n\t\tout[k] =\n\t\t\tv.indexOf(\"+\") === -1 && v.indexOf(\"%\") === -1\n\t\t\t\t? v\n\t\t\t\t: decodeURIComponent(v.replace(/\\+/g, \" \"));\n\t\ts = amp + 1;\n\t}\n\treturn out;\n}\n",
13
+ "import type { Server } from \"bun\";\nimport { createCookieJar } from \"./cookies\";\nimport { redirect } from \"./http\";\nimport { ipMatchesRange, isValidIpAddress } from \"./internal/ip\";\nimport { scanPathname } from \"./internal/pathname\";\nimport { parseAllQueryParams } from \"./internal/query\";\nimport type { CookieJar, Params } from \"./types\";\n\nexport interface ContextApplication {\n\treadonly development: boolean;\n\treadonly redirectHosts: ReadonlySet<string>;\n\treadonly trustProxy:\n\t\t| boolean\n\t\t| string\n\t\t| readonly string[]\n\t\t| ((ip: string) => boolean);\n\treadonly trustedProxyChecker?: (ip: string) => boolean;\n\treadonly cookieSecret?: string;\n}\n\ntype TrustProxy = ContextApplication[\"trustProxy\"];\nconst TEXT_DECODER = new TextDecoder();\n\ninterface LazyFields<TState> {\n\tcookies?: CookieJar | null;\n\tstate?: TState | null;\n\tip?: string | null;\n\tvalid?: unknown;\n\tbodyBufferPromise?: Promise<ArrayBuffer> | null;\n\ttextPromise?: Promise<string> | null;\n\tjsonPromise?: Promise<unknown> | null;\n\tblobPromise?: Promise<Blob> | null;\n\tformDataPromise?: ReturnType<Request[\"formData\"]> | null;\n}\n\nexport class Context<\n\tTParams extends object = Params,\n\tTState extends object = Record<string, unknown>,\n> {\n\treadonly req: Request;\n\treadonly params: TParams;\n\t_hasPendingCookies = false;\n\n\tprivate readonly server: Server<unknown> | null;\n\tprivate readonly application: ContextApplication;\n\tprivate _pathname: string | null;\n\tprivate _query: URLSearchParams | null = null;\n\tprivate _url: string | null = null;\n\tprivate _queryParams: Record<string, string> | null = null;\n\tprivate _lazy: LazyFields<TState> | null = null;\n\n\tconstructor(\n\t\treq: Request,\n\t\tserver: Server<unknown> | null,\n\t\tparams: TParams,\n\t\tapplication: ContextApplication,\n\t\tpathname?: string,\n\t) {\n\t\tthis.req = req;\n\t\tthis.server = server;\n\t\tthis.params = params;\n\t\tthis.application = application;\n\t\tthis._pathname = pathname ?? null;\n\t\tthis._query = null;\n\t}\n\n\tprivate _getLazy(): LazyFields<TState> {\n\t\tlet lazy = this._lazy;\n\t\tif (lazy === null) {\n\t\t\tlazy = {};\n\t\t\tthis._lazy = lazy;\n\t\t}\n\t\treturn lazy;\n\t}\n\n\tget development(): boolean {\n\t\treturn this.application.development;\n\t}\n\n\tget redirectHosts(): ReadonlySet<string> {\n\t\treturn this.application.redirectHosts;\n\t}\n\n\tget trustProxy(): TrustProxy {\n\t\treturn this.application.trustProxy;\n\t}\n\n\tget cookies(): CookieJar {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.cookies) {\n\t\t\tlazy.cookies = createCookieJar(\n\t\t\t\tthis.application.cookieSecret ?? \"\",\n\t\t\t\tthis.req.headers,\n\t\t\t\t() => {\n\t\t\t\t\tthis._hasPendingCookies = true;\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn lazy.cookies as CookieJar;\n\t}\n\n\t_cookieJarIfCreated(): CookieJar | null {\n\t\treturn this._lazy?.cookies ?? null;\n\t}\n\n\tget state(): TState {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.state) {\n\t\t\tlazy.state = Object.create(null) as TState;\n\t\t}\n\t\treturn lazy.state;\n\t}\n\n\tget valid(): unknown {\n\t\tconst lazy = this._lazy;\n\t\tif (lazy && lazy.valid !== undefined) return lazy.valid;\n\t\treturn (lazy?.state as Record<string, unknown> | null | undefined)?.valid;\n\t}\n\n\tset valid(val: unknown) {\n\t\tthis._getLazy().valid = val;\n\t\t(this.state as Record<string, unknown>).valid = val;\n\t}\n\n\tget pathname(): string {\n\t\tif (this._pathname !== null) return this._pathname;\n\t\tconst p = scanPathname(this.req.url);\n\t\tthis._pathname = p;\n\t\treturn p;\n\t}\n\n\tget query(): URLSearchParams {\n\t\tif (this._query) return this._query;\n\t\tconst url = this.req.url;\n\t\tconst qIdx = url.indexOf(\"?\");\n\t\tif (qIdx === -1) {\n\t\t\tconst sp = new URLSearchParams(\"\");\n\t\t\tthis._query = sp;\n\t\t\treturn sp;\n\t\t}\n\t\tconst hashIdx = url.indexOf(\"#\", qIdx);\n\t\tconst qStr =\n\t\t\thashIdx === -1 ? url.slice(qIdx + 1) : url.slice(qIdx + 1, hashIdx);\n\t\tconst sp = new URLSearchParams(qStr);\n\t\tthis._query = sp;\n\t\treturn sp;\n\t}\n\n\tqueryParam(name: string): string | null {\n\t\tif (this._query) return this._query.get(name);\n\t\tif (this._queryParams === null) {\n\t\t\tif (this._url === null) this._url = this.req.url;\n\t\t\tthis._queryParams = parseAllQueryParams(this._url);\n\t\t}\n\t\treturn this._queryParams[name] ?? null;\n\t}\n\n\tqueryParamAll(name: string): string[] {\n\t\treturn this.query.getAll(name);\n\t}\n\n\tget ip(): string {\n\t\tconst lazy = this._lazy;\n\t\tif (lazy && typeof lazy.ip === \"string\") return lazy.ip;\n\t\tconst directIp = this.getDirectIp();\n\t\tif (!this.isTrustedProxy(directIp)) {\n\t\t\tthis._getLazy().ip = directIp;\n\t\t\treturn directIp;\n\t\t}\n\n\t\tconst forwarded = this.req.headers.get(\"x-forwarded-for\");\n\t\tif (forwarded) {\n\t\t\tconst hops = forwarded.split(\",\").map((hop) => hop.trim());\n\t\t\tif (hops.every(isValidIpAddress)) {\n\t\t\t\tlet clientIp = directIp;\n\t\t\t\tfor (let i = hops.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (clientIp && !this.isTrustedProxy(clientIp)) break;\n\t\t\t\t\tclientIp = hops[i]!;\n\t\t\t\t}\n\t\t\t\tthis._getLazy().ip = clientIp;\n\t\t\t\treturn clientIp;\n\t\t\t}\n\t\t\tthis._getLazy().ip = directIp;\n\t\t\treturn directIp;\n\t\t}\n\n\t\tconst realIp = this.req.headers.get(\"x-real-ip\")?.trim();\n\t\tif (realIp && isValidIpAddress(realIp)) {\n\t\t\tthis._getLazy().ip = realIp;\n\t\t\treturn realIp;\n\t\t}\n\n\t\tthis._getLazy().ip = directIp;\n\t\treturn directIp;\n\t}\n\n\tprivate isTrustedProxy(ip: string): boolean {\n\t\tconst trust = this.trustProxy;\n\t\tif (trust === true) return true;\n\t\tif (trust === false || !ip) return false;\n\t\tif (this.application.trustedProxyChecker) {\n\t\t\treturn this.application.trustedProxyChecker(ip);\n\t\t}\n\t\tif (typeof trust === \"function\") return trust(ip);\n\t\tif (typeof trust !== \"string\") {\n\t\t\treturn trust.some((range) => ipMatchesRange(ip, range));\n\t\t}\n\t\treturn ipMatchesRange(ip, trust);\n\t}\n\n\tprivate getDirectIp(): string {\n\t\tconst info = this.server?.requestIP(this.req);\n\t\treturn info?.address ?? \"\";\n\t}\n\n\tget bodyStream(): ReadableStream<Uint8Array> | null {\n\t\treturn this.req.body;\n\t}\n\n\tstream(): ReadableStream<Uint8Array> | null {\n\t\treturn this.req.body;\n\t}\n\n\tprivate _getBodyBuffer(): Promise<ArrayBuffer> {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.bodyBufferPromise) {\n\t\t\tlazy.bodyBufferPromise = this.req.arrayBuffer().catch((err: unknown) => {\n\t\t\t\tlazy.bodyBufferPromise = null;\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\treturn lazy.bodyBufferPromise;\n\t}\n\n\tarrayBuffer(): Promise<ArrayBuffer> {\n\t\treturn this._getBodyBuffer();\n\t}\n\n\ttext(): Promise<string> {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.textPromise) {\n\t\t\tlazy.textPromise = this._getBodyBuffer()\n\t\t\t\t.then((buf) => TEXT_DECODER.decode(buf))\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tlazy.textPromise = null;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t}\n\t\treturn lazy.textPromise;\n\t}\n\n\tjson<T = unknown>(): Promise<T> {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.jsonPromise) {\n\t\t\tlazy.jsonPromise = this._getBodyBuffer()\n\t\t\t\t.then((buf) => JSON.parse(TEXT_DECODER.decode(buf)))\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tlazy.jsonPromise = null;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t}\n\t\treturn lazy.jsonPromise as Promise<T>;\n\t}\n\n\tblob(): Promise<Blob> {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.blobPromise) {\n\t\t\tconst ct =\n\t\t\t\tthis.req.headers.get(\"content-type\") ?? \"application/octet-stream\";\n\t\t\tlazy.blobPromise = this._getBodyBuffer()\n\t\t\t\t.then((buf) => new Blob([buf], { type: ct }))\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tlazy.blobPromise = null;\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t}\n\t\treturn lazy.blobPromise;\n\t}\n\n\tformData(): ReturnType<Request[\"formData\"]> {\n\t\tconst lazy = this._getLazy();\n\t\tif (!lazy.formDataPromise) {\n\t\t\tlazy.formDataPromise = this._getBodyBuffer()\n\t\t\t\t.then((buf) => {\n\t\t\t\t\tconst ct = this.req.headers.get(\"content-type\") ?? \"\";\n\t\t\t\t\tconst tempRes = new Response(buf, {\n\t\t\t\t\t\theaders: { \"content-type\": ct },\n\t\t\t\t\t});\n\t\t\t\t\treturn tempRes.formData();\n\t\t\t\t})\n\t\t\t\t.catch((err: unknown) => {\n\t\t\t\t\tlazy.formDataPromise = null;\n\t\t\t\t\tthrow err;\n\t\t\t\t}) as ReturnType<Request[\"formData\"]>;\n\t\t}\n\t\treturn lazy.formDataPromise;\n\t}\n\n\tredirect(url: string, status = 302): Response {\n\t\treturn redirect(url, status, this.redirectHosts);\n\t}\n\n\tupgrade<TData = unknown>(data?: TData): boolean {\n\t\tif (!this.server) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Cannot upgrade WebSocket: server instance is not available\",\n\t\t\t);\n\t\t}\n\t\treturn this.server.upgrade(this.req, { data });\n\t}\n\n\ttimeout(seconds: number): this {\n\t\tif (this.server) {\n\t\t\tthis.server.timeout(this.req, seconds);\n\t\t}\n\t\treturn this;\n\t}\n\n\tdisableTimeout(): this {\n\t\tif (this.server) {\n\t\t\tthis.server.timeout(this.req, 0);\n\t\t}\n\t\treturn this;\n\t}\n}\n",
14
+ "/**\n * Token-based lexical scanner + semantic analyzer for handler functions.\n * Runs ONCE per route at registration time. Zero dependencies.\n */\n\nexport interface LiteralInfo {\n\tkind: \"string\" | \"json\";\n\tvalue: string;\n}\n\nexport type HandlerFunction = (...args: never[]) => unknown;\nexport type ParamSerializer = (\n\tparams: Record<string, string> | string,\n) => string;\n\nexport interface ParamEntry {\n\tkey: string;\n\tisParam: boolean;\n\tparamKey?: string;\n\tliteralValue?: string;\n}\n\nexport interface HandlerAnalysis {\n\tisNoArg: boolean;\n\tcontextProps: Set<string>;\n\thasDynamicAccess: boolean;\n\tisDestructured: boolean;\n\tdestructuredProps: Set<string>;\n\tliteral: LiteralInfo | null;\n\targlessJsonCall: boolean;\n\tisParamJson?: boolean;\n\tparamJsonKey?: string;\n\tparamSerializer?: ParamSerializer | null;\n\tparamParts?: ParamEntry[] | null;\n}\n\ninterface Token {\n\ttype: \"ident\" | \"str\" | \"num\" | \"regex\" | \"punct\" | \"eof\";\n\tvalue: string;\n\tstart: number;\n\tend: number;\n}\n\n// biome-ignore lint/suspicious/noControlCharactersInRegex: JSON control chars must be escaped\nexport const ESCAPE_JSON_CHARS_RE = /[\\u0000-\\u001f\"\\\\]/;\n\nexport function escapeJsonString(value: string): string {\n\tif (!ESCAPE_JSON_CHARS_RE.test(value)) return value;\n\treturn JSON.stringify(value).slice(1, -1);\n}\n\nfunction isIdentStart(c: number): boolean {\n\treturn (\n\t\t(c >= 97 && c <= 122) ||\n\t\t(c >= 65 && c <= 90) ||\n\t\tc === 95 ||\n\t\tc === 36 ||\n\t\tc > 127\n\t);\n}\nfunction isIdentPart(c: number): boolean {\n\treturn isIdentStart(c) || (c >= 48 && c <= 57);\n}\nfunction isSpace(c: number): boolean {\n\treturn c === 32 || c === 9 || c === 10 || c === 13 || c === 12 || c === 11;\n}\n\nconst KEYWORDS_BEFORE_REGEX = new Set([\n\t\"return\",\n\t\"typeof\",\n\t\"instanceof\",\n\t\"in\",\n\t\"of\",\n\t\"new\",\n\t\"delete\",\n\t\"void\",\n\t\"throw\",\n\t\"case\",\n\t\"do\",\n\t\"else\",\n\t\"yield\",\n\t\"await\",\n]);\n\nconst PUNCT_BEFORE_REGEX = new Set([\n\t\"(\",\n\t\"[\",\n\t\"{\",\n\t\",\",\n\t\";\",\n\t\":\",\n\t\"?\",\n\t\"!\",\n\t\"=\",\n\t\"==\",\n\t\"===\",\n\t\"!=\",\n\t\"!==\",\n\t\"&&\",\n\t\"||\",\n\t\"??\",\n\t\"+\",\n\t\"-\",\n\t\"*\",\n\t\"/\",\n\t\"%\",\n\t\"&\",\n\t\"|\",\n\t\"^\",\n\t\"~\",\n\t\"<\",\n\t\">\",\n\t\"<=\",\n\t\">=\",\n\t\"=>\",\n\t\"+=\",\n\t\"-=\",\n\t\"*=\",\n\t\"/=\",\n\t\"%=\",\n\t\"&=\",\n\t\"|=\",\n\t\"^=\",\n\t\"&&=\",\n\t\"||=\",\n\t\"??=\",\n\t\"<<\",\n\t\">>\",\n\t\">>>\",\n\t\"<<=\",\n\t\">>=\",\n\t\">>>=\",\n]);\n\nfunction tokenize(src: string): Token[] {\n\tconst tokens: Token[] = [];\n\tconst len = src.length;\n\tlet i = 0;\n\tlet last = \"\";\n\n\twhile (i < len) {\n\t\tconst c = src.charCodeAt(i);\n\t\tif (isSpace(c)) {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (c === 47 && src.charCodeAt(i + 1) === 47) {\n\t\t\ti += 2;\n\t\t\twhile (i < len && src.charCodeAt(i) !== 10) i++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === 47 && src.charCodeAt(i + 1) === 42) {\n\t\t\ti += 2;\n\t\t\twhile (\n\t\t\t\ti < len &&\n\t\t\t\t!(src.charCodeAt(i) === 42 && src.charCodeAt(i + 1) === 47)\n\t\t\t)\n\t\t\t\ti++;\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (c === 34 || c === 39) {\n\t\t\tconst q = c;\n\t\t\tconst start = i;\n\t\t\ti++;\n\t\t\twhile (i < len) {\n\t\t\t\tconst cc = src.charCodeAt(i);\n\t\t\t\tif (cc === 92) {\n\t\t\t\t\ti += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cc === q) {\n\t\t\t\t\ti++;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cc === 10) break;\n\t\t\t\ti++;\n\t\t\t}\n\t\t\ttokens.push({\n\t\t\t\ttype: \"str\",\n\t\t\t\tvalue: src.slice(start + 1, i - 1),\n\t\t\t\tstart,\n\t\t\t\tend: i,\n\t\t\t});\n\t\t\tlast = \"str\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (c === 96) {\n\t\t\ti = tokenizeTemplate(src, i, tokens);\n\t\t\tlast = \"template\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (c === 47) {\n\t\t\tlet isRegex: boolean;\n\t\t\tif (last === \"\" || last === \"regex\" || last === \"num\") isRegex = true;\n\t\t\telse if (last === \"str\" || last === \"template\") isRegex = false;\n\t\t\telse if (last === \"ident\") isRegex = KEYWORDS_BEFORE_REGEX.has(last);\n\t\t\telse isRegex = PUNCT_BEFORE_REGEX.has(last);\n\n\t\t\tif (isRegex) {\n\t\t\t\tconst start = i;\n\t\t\t\ti++;\n\t\t\t\tlet inClass = false;\n\t\t\t\twhile (i < len) {\n\t\t\t\t\tconst cc = src.charCodeAt(i);\n\t\t\t\t\tif (cc === 92) {\n\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (cc === 91) {\n\t\t\t\t\t\tinClass = true;\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (cc === 93) {\n\t\t\t\t\t\tinClass = false;\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (cc === 47 && !inClass) {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (cc === 10) break;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\twhile (i < len && isIdentPart(src.charCodeAt(i))) i++;\n\t\t\t\ttokens.push({ type: \"regex\", value: \"\", start, end: i });\n\t\t\t\tlast = \"regex\";\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttokens.push({ type: \"punct\", value: \"/\", start: i, end: i + 1 });\n\t\t\tlast = \"/\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (isIdentStart(c)) {\n\t\t\tconst start = i;\n\t\t\ti++;\n\t\t\twhile (i < len && isIdentPart(src.charCodeAt(i))) i++;\n\t\t\tconst value = src.slice(start, i);\n\t\t\ttokens.push({ type: \"ident\", value, start, end: i });\n\t\t\tlast = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (c >= 48 && c <= 57) {\n\t\t\tconst start = i;\n\t\t\ti++;\n\t\t\twhile (i < len) {\n\t\t\t\tconst cc = src.charCodeAt(i);\n\t\t\t\tif (\n\t\t\t\t\t(cc >= 48 && cc <= 57) ||\n\t\t\t\t\tcc === 46 ||\n\t\t\t\t\tcc === 95 ||\n\t\t\t\t\t(cc >= 97 && cc <= 122) ||\n\t\t\t\t\t(cc >= 65 && cc <= 90)\n\t\t\t\t)\n\t\t\t\t\ti++;\n\t\t\t\telse if (\n\t\t\t\t\t(cc === 43 || cc === 45) &&\n\t\t\t\t\t(src.charCodeAt(i - 1) === 101 || src.charCodeAt(i - 1) === 69)\n\t\t\t\t)\n\t\t\t\t\ti++;\n\t\t\t\telse break;\n\t\t\t}\n\t\t\ttokens.push({ type: \"num\", value: src.slice(start, i), start, end: i });\n\t\t\tlast = \"num\";\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst start = i;\n\t\tconst cc2 = src.charCodeAt(i + 1);\n\t\tconst cc3 = src.charCodeAt(i + 2);\n\t\tconst cc4 = src.charCodeAt(i + 3);\n\t\tlet op = src[i]!;\n\n\t\tif (c === 62 && cc2 === 62 && cc3 === 62 && cc4 === 61) op = \">>>=\";\n\t\telse if (c === 61 && cc2 === 61 && cc3 === 61) op = \"===\";\n\t\telse if (c === 33 && cc2 === 61 && cc3 === 61) op = \"!==\";\n\t\telse if (c === 42 && cc2 === 42 && cc3 === 61) op = \"**=\";\n\t\telse if (c === 60 && cc2 === 60 && cc3 === 61) op = \"<<=\";\n\t\telse if (c === 62 && cc2 === 62 && cc3 === 61) op = \">>=\";\n\t\telse if (c === 62 && cc2 === 62 && cc3 === 62) op = \">>>\";\n\t\telse if (c === 46 && cc2 === 46 && cc3 === 46) op = \"...\";\n\t\telse if (c === 63 && cc2 === 63 && cc3 === 61) op = \"??=\";\n\t\telse if (c === 38 && cc2 === 38 && cc3 === 61) op = \"&&=\";\n\t\telse if (c === 124 && cc2 === 124 && cc3 === 61) op = \"||=\";\n\t\telse if (c === 61 && cc2 === 62) op = \"=>\";\n\t\telse if (c === 61 && cc2 === 61) op = \"==\";\n\t\telse if (c === 33 && cc2 === 61) op = \"!=\";\n\t\telse if (c === 60 && cc2 === 61) op = \"<=\";\n\t\telse if (c === 62 && cc2 === 61) op = \">=\";\n\t\telse if (c === 38 && cc2 === 38) op = \"&&\";\n\t\telse if (c === 124 && cc2 === 124) op = \"||\";\n\t\telse if (c === 63 && cc2 === 46) op = \"?.\";\n\t\telse if (c === 63 && cc2 === 63) op = \"??\";\n\t\telse if (c === 43 && cc2 === 43) op = \"++\";\n\t\telse if (c === 45 && cc2 === 45) op = \"--\";\n\t\telse if (c === 42 && cc2 === 42) op = \"**\";\n\t\telse if (c === 60 && cc2 === 60) op = \"<<\";\n\t\telse if (c === 62 && cc2 === 62) op = \">>\";\n\t\telse if (c === 43 && cc2 === 61) op = \"+=\";\n\t\telse if (c === 45 && cc2 === 61) op = \"-=\";\n\t\telse if (c === 42 && cc2 === 61) op = \"*=\";\n\t\telse if (c === 47 && cc2 === 61) op = \"/=\";\n\t\telse if (c === 37 && cc2 === 61) op = \"%=\";\n\t\telse if (c === 38 && cc2 === 61) op = \"&=\";\n\t\telse if (c === 124 && cc2 === 61) op = \"|=\";\n\t\telse if (c === 94 && cc2 === 61) op = \"^=\";\n\n\t\ti += op.length;\n\t\ttokens.push({ type: \"punct\", value: op, start, end: i });\n\t\tlast = op;\n\t}\n\n\ttokens.push({ type: \"eof\", value: \"\", start: len, end: len });\n\treturn tokens;\n}\n\nfunction tokenizeTemplate(src: string, start: number, out: Token[]): number {\n\tlet i = start + 1;\n\tconst len = src.length;\n\tlet strStart = i;\n\n\twhile (i < len) {\n\t\tconst c = src.charCodeAt(i);\n\t\tif (c === 92) {\n\t\t\ti += 2;\n\t\t\tcontinue;\n\t\t}\n\t\tif (c === 96) {\n\t\t\tif (i > strStart) {\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"str\",\n\t\t\t\t\tvalue: src.slice(strStart, i),\n\t\t\t\t\tstart: strStart,\n\t\t\t\t\tend: i,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn i + 1;\n\t\t}\n\t\tif (c === 36 && src.charCodeAt(i + 1) === 123) {\n\t\t\tif (i > strStart) {\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"str\",\n\t\t\t\t\tvalue: src.slice(strStart, i),\n\t\t\t\t\tstart: strStart,\n\t\t\t\t\tend: i,\n\t\t\t\t});\n\t\t\t}\n\t\t\tout.push({ type: \"punct\", value: \"${\", start: i, end: i + 2 });\n\t\t\ti += 2;\n\n\t\t\tconst exprStart = i;\n\t\t\tlet depth = 1;\n\t\t\twhile (i < len && depth > 0) {\n\t\t\t\tconst cc = src.charCodeAt(i);\n\t\t\t\tif (cc === 92) {\n\t\t\t\t\ti += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cc === 34 || cc === 39) {\n\t\t\t\t\tconst q = cc;\n\t\t\t\t\ti++;\n\t\t\t\t\twhile (i < len) {\n\t\t\t\t\t\tconst c2 = src.charCodeAt(i);\n\t\t\t\t\t\tif (c2 === 92) {\n\t\t\t\t\t\t\ti += 2;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (c2 === q) {\n\t\t\t\t\t\t\ti++;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cc === 96) {\n\t\t\t\t\ti = tokenizeTemplate(src, i, out);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cc === 123) {\n\t\t\t\t\tdepth++;\n\t\t\t\t\ti++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (cc === 125) {\n\t\t\t\t\tdepth--;\n\t\t\t\t\tif (depth === 0) break;\n\t\t\t\t\ti++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\tconst inner = src.slice(exprStart, i);\n\t\t\tconst innerTokens = tokenize(inner);\n\t\t\tfor (const t of innerTokens) {\n\t\t\t\tif (t.type === \"eof\") continue;\n\t\t\t\tout.push({ ...t, start: t.start + exprStart, end: t.end + exprStart });\n\t\t\t}\n\t\t\tout.push({ type: \"punct\", value: \"}\", start: i, end: i + 1 });\n\t\t\ti++;\n\t\t\tstrStart = i;\n\t\t\tcontinue;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (i > strStart) {\n\t\tout.push({\n\t\t\ttype: \"str\",\n\t\t\tvalue: src.slice(strStart, i),\n\t\t\tstart: strStart,\n\t\t\tend: i,\n\t\t});\n\t}\n\treturn i;\n}\n\nexport function analyzeHandler(fn: HandlerFunction): HandlerAnalysis {\n\tlet src: string;\n\ttry {\n\t\tsrc = fn.toString();\n\t} catch {\n\t\treturn makeUnknown();\n\t}\n\n\tconst tokens = tokenize(src);\n\tlet i = 0;\n\n\tif (tokens[i]?.type === \"ident\" && tokens[i]!.value === \"async\") i++;\n\tif (tokens[i]?.type === \"ident\" && tokens[i]!.value === \"function\") {\n\t\ti++;\n\t\tif (tokens[i]?.type === \"ident\") i++;\n\t}\n\n\tif (tokens[i]?.type === \"punct\" && tokens[i]!.value === \"(\") {\n\t\ti++;\n\t\tconst first = tokens[i];\n\n\t\tif (first?.type === \"punct\" && first.value === \")\") {\n\t\t\ti++;\n\t\t\tconst body = walkBody(tokens, i, null);\n\t\t\treturn {\n\t\t\t\tisNoArg: true,\n\t\t\t\tcontextProps: new Set(),\n\t\t\t\thasDynamicAccess: false,\n\t\t\t\tisDestructured: false,\n\t\t\t\tdestructuredProps: new Set(),\n\t\t\t\tliteral: body.literal,\n\t\t\t\targlessJsonCall: false,\n\t\t\t\tparamSerializer: null,\n\t\t\t\tparamParts: null,\n\t\t\t};\n\t\t}\n\n\t\tif (first?.type === \"punct\" && first.value === \"{\") {\n\t\t\tconst { names, next } = parseDestructure(tokens, i);\n\t\t\tconst body = walkBody(tokens, next, null);\n\t\t\treturn {\n\t\t\t\tisNoArg: false,\n\t\t\t\tcontextProps: new Set(),\n\t\t\t\thasDynamicAccess: false,\n\t\t\t\tisDestructured: true,\n\t\t\t\tdestructuredProps: names,\n\t\t\t\tliteral: body.literal,\n\t\t\t\targlessJsonCall: false,\n\t\t\t\tparamSerializer: body.paramSerializer,\n\t\t\t\tparamParts: body.paramParts,\n\t\t\t};\n\t\t}\n\n\t\tif (first?.type === \"ident\") {\n\t\t\tconst name = first.value;\n\t\t\ti++;\n\t\t\tconst body = walkBody(tokens, i, name);\n\t\t\treturn {\n\t\t\t\tisNoArg: false,\n\t\t\t\tcontextProps: body.props,\n\t\t\t\thasDynamicAccess: body.hasDynamic,\n\t\t\t\tisDestructured: false,\n\t\t\t\tdestructuredProps: new Set(),\n\t\t\t\tliteral: body.literal,\n\t\t\t\targlessJsonCall: body.arglessJsonCall,\n\t\t\t\tparamSerializer: body.paramSerializer,\n\t\t\t\tparamParts: body.paramParts,\n\t\t\t};\n\t\t}\n\n\t\treturn makeUnknown();\n\t}\n\n\tif (tokens[i]?.type === \"ident\") {\n\t\tconst name = tokens[i]!.value;\n\t\ti++;\n\t\tconst body = walkBody(tokens, i, name);\n\t\treturn {\n\t\t\tisNoArg: false,\n\t\t\tcontextProps: body.props,\n\t\t\thasDynamicAccess: body.hasDynamic,\n\t\t\tisDestructured: false,\n\t\t\tdestructuredProps: new Set(),\n\t\t\tliteral: body.literal,\n\t\t\targlessJsonCall: body.arglessJsonCall,\n\t\t\tparamSerializer: body.paramSerializer,\n\t\t\tparamParts: body.paramParts,\n\t\t};\n\t}\n\n\treturn makeUnknown();\n}\n\nfunction parseDestructure(\n\ttokens: Token[],\n\tbraceStart: number,\n): { names: Set<string>; next: number } {\n\tconst names = new Set<string>();\n\tlet i = braceStart + 1;\n\tlet depth = 1;\n\twhile (i < tokens.length) {\n\t\tconst t = tokens[i]!;\n\t\tif (t.type === \"eof\") break;\n\t\tif (t.type === \"punct\") {\n\t\t\tif (t.value === \"{\") depth++;\n\t\t\telse if (t.value === \"}\") {\n\t\t\t\tdepth--;\n\t\t\t\ti++;\n\t\t\t\tif (depth === 0) break;\n\t\t\t\tcontinue;\n\t\t\t} else if (t.value === \"[\") depth += 100;\n\t\t\telse if (t.value === \"]\") depth -= 100;\n\t\t}\n\t\tif (t.type === \"ident\" && depth === 1) {\n\t\t\tconst prev = tokens[i - 1];\n\t\t\tconst next = tokens[i + 1];\n\t\t\tif (prev?.type === \"punct\" && prev.value === \":\") {\n\t\t\t\tnames.add(t.value);\n\t\t\t} else if (next?.type !== \"punct\" || next.value !== \":\") {\n\t\t\t\tnames.add(t.value);\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\twhile (i < tokens.length) {\n\t\tconst t = tokens[i]!;\n\t\tif (t.type === \"eof\") break;\n\t\tif (t.type === \"punct\" && t.value === \")\") {\n\t\t\ti++;\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\treturn { names, next: i };\n}\n\ninterface BodyResult {\n\tprops: Set<string>;\n\thasDynamic: boolean;\n\tliteral: LiteralInfo | null;\n\targlessJsonCall: boolean;\n\tparamSerializer: ParamSerializer | null;\n\tparamParts: ParamEntry[] | null;\n}\n\nfunction walkBody(\n\ttokens: Token[],\n\tfrom: number,\n\tparamName: string | null,\n): BodyResult {\n\tconst props = new Set<string>();\n\tlet hasDynamic = false;\n\tlet arglessJsonCall = false;\n\n\tlet bodyStart = -1;\n\tlet i = from;\n\tlet parenDepth = 0;\n\n\tif (tokens[from]?.type === \"punct\" && tokens[from]!.value === \"{\") {\n\t\tbodyStart = from + 1;\n\t} else {\n\t\twhile (i < tokens.length) {\n\t\t\tconst t = tokens[i]!;\n\t\t\tif (t.type === \"eof\") break;\n\t\t\tif (t.type === \"punct\") {\n\t\t\t\tif (t.value === \"(\" || t.value === \"[\" || t.value === \"{\") {\n\t\t\t\t\tparenDepth++;\n\t\t\t\t} else if (t.value === \")\" || t.value === \"]\" || t.value === \"}\") {\n\t\t\t\t\tif (parenDepth > 0) parenDepth--;\n\t\t\t\t} else if (t.value === \"=>\" && parenDepth === 0) {\n\t\t\t\t\tconst next = tokens[i + 1];\n\t\t\t\t\tif (next?.type === \"punct\" && next.value === \"{\") {\n\t\t\t\t\t\tbodyStart = i + 2;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbodyStart = i + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (t.value === \")\" && parenDepth === 0 && i + 1 < tokens.length) {\n\t\t\t\t\tconst next = tokens[i + 1];\n\t\t\t\t\tif (next?.type === \"punct\" && next.value === \"{\") {\n\t\t\t\t\t\tbodyStart = i + 2;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ti++;\n\t\t}\n\t}\n\n\tif (bodyStart < 0) {\n\t\treturn {\n\t\t\tprops,\n\t\t\thasDynamic,\n\t\t\tliteral: null,\n\t\t\targlessJsonCall: false,\n\t\t\tparamSerializer: null,\n\t\t\tparamParts: null,\n\t\t};\n\t}\n\n\tif (paramName !== null) {\n\t\tfor (let j = bodyStart; j < tokens.length; j++) {\n\t\t\tconst t = tokens[j]!;\n\t\t\tif (t.type === \"eof\") break;\n\t\t\tif (t.type !== \"ident\" || t.value !== paramName) continue;\n\n\t\t\tconst n = tokens[j + 1];\n\t\t\tif (!n) continue;\n\n\t\t\tif (n.type === \"punct\" && (n.value === \".\" || n.value === \"?.\")) {\n\t\t\t\tconst key = tokens[j + 2];\n\t\t\t\tif (key?.type === \"ident\") {\n\t\t\t\t\tprops.add(key.value);\n\n\t\t\t\t\tif (key.value === \"json\") {\n\t\t\t\t\t\tconst pOpen = tokens[j + 3];\n\t\t\t\t\t\tconst pClose = tokens[j + 4];\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tpOpen?.type === \"punct\" &&\n\t\t\t\t\t\t\tpOpen.value === \"(\" &&\n\t\t\t\t\t\t\tpClose?.type === \"punct\" &&\n\t\t\t\t\t\t\tpClose.value === \")\"\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst prev1 = tokens[j - 1];\n\t\t\t\t\t\t\tconst prev2 = tokens[j - 2];\n\t\t\t\t\t\t\tconst isPrecededByReturn =\n\t\t\t\t\t\t\t\t(prev1?.type === \"punct\" && prev1.value === \"=>\") ||\n\t\t\t\t\t\t\t\t(prev1?.type === \"ident\" && prev1.value === \"return\") ||\n\t\t\t\t\t\t\t\t(prev1?.type === \"ident\" &&\n\t\t\t\t\t\t\t\t\tprev1.value === \"await\" &&\n\t\t\t\t\t\t\t\t\t((prev2?.type === \"punct\" && prev2.value === \"=>\") ||\n\t\t\t\t\t\t\t\t\t\t(prev2?.type === \"ident\" && prev2.value === \"return\")));\n\n\t\t\t\t\t\t\tconst next1 = tokens[j + 5];\n\t\t\t\t\t\t\tconst next2 = tokens[j + 6];\n\t\t\t\t\t\t\tconst isEndOfBody =\n\t\t\t\t\t\t\t\tisBodyEnd(next1) && (next1?.value !== \";\" || isBodyEnd(next2));\n\n\t\t\t\t\t\t\tif (isPrecededByReturn && isEndOfBody) {\n\t\t\t\t\t\t\t\targlessJsonCall = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tj += 2;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thasDynamic = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (n.type === \"punct\" && n.value === \"[\") {\n\t\t\t\tconst key = tokens[j + 2];\n\t\t\t\tconst close = tokens[j + 3];\n\t\t\t\tif (\n\t\t\t\t\tkey?.type === \"str\" &&\n\t\t\t\t\tclose?.type === \"punct\" &&\n\t\t\t\t\tclose.value === \"]\"\n\t\t\t\t) {\n\t\t\t\t\tprops.add(key.value);\n\t\t\t\t\tj += 3;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\thasDynamic = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst prev = tokens[j - 1];\n\t\t\tif (prev?.type === \"punct\" && prev.value === \"...\") {\n\t\t\t\thasDynamic = true;\n\t\t\t}\n\t\t}\n\t}\n\n\tconst literal = tryExtractLiteral(tokens, bodyStart);\n\tconst paramExtraction =\n\t\tliteral === null\n\t\t\t? tryExtractParamSerializer(tokens, bodyStart, paramName)\n\t\t\t: null;\n\tconst paramSerializer = paramExtraction?.serializer ?? null;\n\tconst paramParts = paramExtraction?.parts ?? null;\n\n\treturn {\n\t\tprops,\n\t\thasDynamic,\n\t\tliteral,\n\t\targlessJsonCall,\n\t\tparamSerializer,\n\t\tparamParts,\n\t};\n}\n\nfunction isBodyEnd(t: Token | undefined): boolean {\n\tif (!t) return true;\n\tif (t.type === \"eof\") return true;\n\tif (t.type === \"punct\" && (t.value === \";\" || t.value === \"}\")) return true;\n\treturn false;\n}\n\nfunction tryExtractLiteral(\n\ttokens: Token[],\n\tbodyStart: number,\n): LiteralInfo | null {\n\tconst t = tokens[bodyStart];\n\tif (!t || t.type === \"eof\") return null;\n\n\tif (t.type === \"ident\" && t.value === \"return\") {\n\t\treturn tryExtractLiteral(tokens, bodyStart + 1);\n\t}\n\n\tif (t.type === \"str\") {\n\t\tif (isBodyEnd(tokens[bodyStart + 1])) {\n\t\t\treturn { kind: \"string\", value: t.value };\n\t\t}\n\t\treturn null;\n\t}\n\n\tif (t.type === \"punct\" && t.value === \"(\") {\n\t\tconst inner = tokens[bodyStart + 1];\n\t\tif (inner?.type === \"punct\" && inner.value === \"{\") {\n\t\t\tconst obj = extractFlatObject(tokens, bodyStart + 1);\n\t\t\tif (!obj.ok) return null;\n\t\t\tconst afterBrace = tokens[obj.end];\n\t\t\tif (afterBrace?.type !== \"punct\" || afterBrace.value !== \")\") return null;\n\t\t\tif (!isBodyEnd(tokens[obj.end + 1])) return null;\n\t\t\treturn { kind: \"json\", value: JSON.stringify(obj.value) };\n\t\t}\n\t\treturn null;\n\t}\n\n\tif (t.type === \"punct\" && t.value === \"{\") {\n\t\tconst next = tokens[bodyStart + 1];\n\t\tif (\n\t\t\tnext &&\n\t\t\t(next.type === \"ident\" || next.type === \"str\" || next.type === \"num\") &&\n\t\t\ttokens[bodyStart + 2]?.type === \"punct\" &&\n\t\t\ttokens[bodyStart + 2]!.value === \":\"\n\t\t) {\n\t\t\tconst obj = extractFlatObject(tokens, bodyStart);\n\t\t\tif (obj.ok) {\n\t\t\t\tif (isBodyEnd(tokens[obj.end])) {\n\t\t\t\t\treturn { kind: \"json\", value: JSON.stringify(obj.value) };\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tlet j = bodyStart + 1;\n\t\twhile (j < tokens.length) {\n\t\t\tconst tt = tokens[j]!;\n\t\t\tif (tt.type === \"eof\") return null;\n\t\t\tif (tt.type === \"punct\" && tt.value === \"}\") return null;\n\t\t\tif (tt.type === \"ident\" && tt.value === \"return\") {\n\t\t\t\treturn tryExtractLiteral(tokens, j + 1);\n\t\t\t}\n\t\t\tif (tt.type === \"punct\" && tt.value === \";\") return null;\n\t\t\tif (tt.type === \"ident\" && tt.value !== \"return\") return null;\n\t\t\tj++;\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\ninterface FlatObjectResult {\n\tok: true;\n\tend: number;\n\tvalue: Record<string, unknown>;\n}\ninterface FlatObjectError {\n\tok: false;\n}\n\nfunction extractFlatObject(\n\ttokens: Token[],\n\tbraceStart: number,\n): FlatObjectResult | FlatObjectError {\n\tlet i = braceStart + 1;\n\tconst obj: Record<string, unknown> = {};\n\tlet expectKey = true;\n\tlet key: string | null = null;\n\n\twhile (i < tokens.length) {\n\t\tconst t = tokens[i]!;\n\t\tif (t.type === \"eof\") return { ok: false };\n\n\t\tif (t.type === \"punct\" && t.value === \"}\") {\n\t\t\tif (!expectKey) return { ok: false };\n\t\t\treturn { ok: true, end: i + 1, value: obj };\n\t\t}\n\n\t\tif (expectKey) {\n\t\t\tif (t.type === \"ident\" || t.type === \"str\" || t.type === \"num\")\n\t\t\t\tkey = t.value;\n\t\t\telse return { ok: false };\n\t\t\ti++;\n\t\t\tconst colon = tokens[i];\n\t\t\tif (colon?.type !== \"punct\" || colon.value !== \":\") return { ok: false };\n\t\t\ti++;\n\t\t\texpectKey = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (t.type === \"str\") {\n\t\t\tobj[key!] = t.value;\n\t\t\ti++;\n\t\t} else if (t.type === \"num\") {\n\t\t\tobj[key!] = Number(t.value);\n\t\t\ti++;\n\t\t} else if (t.type === \"ident\") {\n\t\t\tif (t.value === \"true\") obj[key!] = true;\n\t\t\telse if (t.value === \"false\") obj[key!] = false;\n\t\t\telse if (t.value === \"null\") obj[key!] = null;\n\t\t\telse return { ok: false };\n\t\t\ti++;\n\t\t} else if (\n\t\t\tt.type === \"punct\" &&\n\t\t\tt.value === \"!\" &&\n\t\t\ttokens[i + 1]?.type === \"num\"\n\t\t) {\n\t\t\tconst n = tokens[i + 1]!.value;\n\t\t\tobj[key!] = n === \"1\";\n\t\t\ti += 2;\n\t\t} else if (\n\t\t\tt.type === \"punct\" &&\n\t\t\tt.value === \"-\" &&\n\t\t\ttokens[i + 1]?.type === \"num\"\n\t\t) {\n\t\t\tobj[key!] = -Number(tokens[i + 1]!.value);\n\t\t\ti += 2;\n\t\t} else {\n\t\t\treturn { ok: false };\n\t\t}\n\n\t\tconst sep = tokens[i];\n\t\tif (sep?.type === \"punct\" && sep.value === \",\") {\n\t\t\ti++;\n\t\t\texpectKey = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (sep?.type === \"punct\" && sep.value === \"}\") {\n\t\t\treturn { ok: true, end: i + 1, value: obj };\n\t\t}\n\t\treturn { ok: false };\n\t}\n\n\treturn { ok: false };\n}\n\ninterface ParamObjectResult {\n\tok: true;\n\tend: number;\n\tparts: ParamEntry[];\n}\n\nfunction extractParamObject(\n\ttokens: Token[],\n\tbraceStart: number,\n\tparamName: string | null,\n): ParamObjectResult | FlatObjectError {\n\tlet i = braceStart + 1;\n\tconst parts: ParamEntry[] = [];\n\tlet expectKey = true;\n\tlet key: string | null = null;\n\tlet hasParam = false;\n\n\twhile (i < tokens.length) {\n\t\tconst t = tokens[i]!;\n\t\tif (t.type === \"eof\") return { ok: false };\n\n\t\tif (t.type === \"punct\" && t.value === \"}\") {\n\t\t\tif (!expectKey) return { ok: false };\n\t\t\treturn hasParam ? { ok: true, end: i + 1, parts } : { ok: false };\n\t\t}\n\n\t\tif (expectKey) {\n\t\t\tif (t.type === \"ident\" || t.type === \"str\" || t.type === \"num\") {\n\t\t\t\tkey = t.value;\n\t\t\t} else {\n\t\t\t\treturn { ok: false };\n\t\t\t}\n\t\t\ti++;\n\t\t\tconst colon = tokens[i];\n\t\t\tif (colon?.type !== \"punct\" || colon.value !== \":\") return { ok: false };\n\t\t\ti++;\n\t\t\texpectKey = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (paramName !== null && t.type === \"ident\" && t.value === paramName) {\n\t\t\tconst dot1 = tokens[i + 1];\n\t\t\tconst pIdent = tokens[i + 2];\n\t\t\tconst dot2 = tokens[i + 3];\n\t\t\tconst pKey = tokens[i + 4];\n\t\t\tif (\n\t\t\t\tdot1?.type === \"punct\" &&\n\t\t\t\t(dot1.value === \".\" || dot1.value === \"?.\") &&\n\t\t\t\tpIdent?.type === \"ident\" &&\n\t\t\t\tpIdent.value === \"params\" &&\n\t\t\t\tdot2?.type === \"punct\" &&\n\t\t\t\t(dot2.value === \".\" || dot2.value === \"?.\") &&\n\t\t\t\tpKey?.type === \"ident\"\n\t\t\t) {\n\t\t\t\thasParam = true;\n\t\t\t\tparts.push({ key: key!, isParam: true, paramKey: pKey.value });\n\t\t\t\ti += 5;\n\t\t\t\tconst sep = tokens[i];\n\t\t\t\tif (sep?.type === \"punct\" && sep.value === \",\") {\n\t\t\t\t\ti++;\n\t\t\t\t\texpectKey = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (sep?.type === \"punct\" && sep.value === \"}\") {\n\t\t\t\t\treturn { ok: true, end: i + 1, parts };\n\t\t\t\t}\n\t\t\t\treturn { ok: false };\n\t\t\t}\n\t\t}\n\n\t\tif (t.type === \"ident\" && t.value === \"params\") {\n\t\t\tconst dot = tokens[i + 1];\n\t\t\tconst pKey = tokens[i + 2];\n\t\t\tif (\n\t\t\t\tdot?.type === \"punct\" &&\n\t\t\t\t(dot.value === \".\" || dot.value === \"?.\") &&\n\t\t\t\tpKey?.type === \"ident\"\n\t\t\t) {\n\t\t\t\thasParam = true;\n\t\t\t\tparts.push({ key: key!, isParam: true, paramKey: pKey.value });\n\t\t\t\ti += 3;\n\t\t\t\tconst sep = tokens[i];\n\t\t\t\tif (sep?.type === \"punct\" && sep.value === \",\") {\n\t\t\t\t\ti++;\n\t\t\t\t\texpectKey = true;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (sep?.type === \"punct\" && sep.value === \"}\") {\n\t\t\t\t\treturn { ok: true, end: i + 1, parts };\n\t\t\t\t}\n\t\t\t\treturn { ok: false };\n\t\t\t}\n\t\t}\n\n\t\tif (t.type === \"str\") {\n\t\t\tparts.push({\n\t\t\t\tkey: key!,\n\t\t\t\tisParam: false,\n\t\t\t\tliteralValue: JSON.stringify(t.value),\n\t\t\t});\n\t\t\ti++;\n\t\t} else if (t.type === \"num\") {\n\t\t\tparts.push({\n\t\t\t\tkey: key!,\n\t\t\t\tisParam: false,\n\t\t\t\tliteralValue: t.value,\n\t\t\t});\n\t\t\ti++;\n\t\t} else if (t.type === \"ident\") {\n\t\t\tif (t.value === \"true\" || t.value === \"false\" || t.value === \"null\") {\n\t\t\t\tparts.push({\n\t\t\t\t\tkey: key!,\n\t\t\t\t\tisParam: false,\n\t\t\t\t\tliteralValue: t.value,\n\t\t\t\t});\n\t\t\t\ti++;\n\t\t\t} else {\n\t\t\t\treturn { ok: false };\n\t\t\t}\n\t\t} else if (\n\t\t\tt.type === \"punct\" &&\n\t\t\tt.value === \"!\" &&\n\t\t\ttokens[i + 1]?.type === \"num\"\n\t\t) {\n\t\t\tparts.push({\n\t\t\t\tkey: key!,\n\t\t\t\tisParam: false,\n\t\t\t\tliteralValue: tokens[i + 1]!.value === \"1\" ? \"true\" : \"false\",\n\t\t\t});\n\t\t\ti += 2;\n\t\t} else if (\n\t\t\tt.type === \"punct\" &&\n\t\t\tt.value === \"-\" &&\n\t\t\ttokens[i + 1]?.type === \"num\"\n\t\t) {\n\t\t\tparts.push({\n\t\t\t\tkey: key!,\n\t\t\t\tisParam: false,\n\t\t\t\tliteralValue: `-${tokens[i + 1]!.value}`,\n\t\t\t});\n\t\t\ti += 2;\n\t\t} else {\n\t\t\treturn { ok: false };\n\t\t}\n\n\t\tconst sep = tokens[i];\n\t\tif (sep?.type === \"punct\" && sep.value === \",\") {\n\t\t\ti++;\n\t\t\texpectKey = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (sep?.type === \"punct\" && sep.value === \"}\") {\n\t\t\treturn hasParam ? { ok: true, end: i + 1, parts } : { ok: false };\n\t\t}\n\t\treturn { ok: false };\n\t}\n\n\treturn { ok: false };\n}\n\nfunction buildParamSerializer(parts: ParamEntry[]): ParamSerializer {\n\tconst chunks: string[] = [];\n\tconst keys: string[] = [];\n\tlet current = \"{\";\n\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tconst part = parts[i]!;\n\t\tif (i > 0) current += \",\";\n\t\tcurrent += `${JSON.stringify(part.key)}:`;\n\n\t\tif (part.isParam) {\n\t\t\tcurrent += '\"';\n\t\t\tchunks.push(current);\n\t\t\tkeys.push(part.paramKey!);\n\t\t\tcurrent = '\"';\n\t\t} else {\n\t\t\tcurrent += part.literalValue!;\n\t\t}\n\t}\n\tcurrent += \"}\";\n\tchunks.push(current);\n\n\tif (keys.length === 1) {\n\t\tconst c0 = chunks[0]!;\n\t\tconst c1 = chunks[1]!;\n\t\tconst k0 = keys[0]!;\n\t\treturn (p: Record<string, string> | string) =>\n\t\t\tc0 + escapeJsonString(typeof p === \"string\" ? p : (p[k0] ?? \"\")) + c1;\n\t}\n\n\tif (keys.length === 2) {\n\t\tconst c0 = chunks[0]!;\n\t\tconst c1 = chunks[1]!;\n\t\tconst c2 = chunks[2]!;\n\t\tconst k0 = keys[0]!;\n\t\tconst k1 = keys[1]!;\n\t\treturn (p: Record<string, string> | string) =>\n\t\t\t`${c0}${escapeJsonString(typeof p === \"string\" ? p : (p[k0] ?? \"\"))}${c1}${typeof p === \"string\" ? \"\" : escapeJsonString(p[k1] ?? \"\")}${c2}`;\n\t}\n\n\treturn (p: Record<string, string> | string) => {\n\t\tlet out = chunks[0]!;\n\t\tfor (let j = 0; j < keys.length; j++) {\n\t\t\tout +=\n\t\t\t\tescapeJsonString(\n\t\t\t\t\ttypeof p === \"string\" ? (j === 0 ? p : \"\") : (p[keys[j]!] ?? \"\"),\n\t\t\t\t) + chunks[j + 1]!;\n\t\t}\n\t\treturn out;\n\t};\n}\n\ninterface ParamSerializerResult {\n\tserializer: ParamSerializer;\n\tparts: ParamEntry[];\n}\n\nfunction tryExtractParamSerializer(\n\ttokens: Token[],\n\tbodyStart: number,\n\tparamName: string | null,\n): ParamSerializerResult | null {\n\tconst t = tokens[bodyStart];\n\tif (!t || t.type === \"eof\") return null;\n\n\tif (t.type === \"punct\" && t.value === \"(\") {\n\t\tconst inner = tokens[bodyStart + 1];\n\t\tif (inner?.type === \"punct\" && inner.value === \"{\") {\n\t\t\tconst res = extractParamObject(tokens, bodyStart + 1, paramName);\n\t\t\tif (!res.ok) return null;\n\t\t\tconst afterBrace = tokens[res.end];\n\t\t\tif (afterBrace?.type !== \"punct\" || afterBrace.value !== \")\") return null;\n\t\t\tif (!isBodyEnd(tokens[res.end + 1])) return null;\n\t\t\treturn { serializer: buildParamSerializer(res.parts), parts: res.parts };\n\t\t}\n\t\treturn null;\n\t}\n\n\tif (t.type === \"punct\" && t.value === \"{\") {\n\t\tconst next = tokens[bodyStart + 1];\n\t\tif (\n\t\t\tnext &&\n\t\t\t(next.type === \"ident\" || next.type === \"str\" || next.type === \"num\") &&\n\t\t\ttokens[bodyStart + 2]?.type === \"punct\" &&\n\t\t\ttokens[bodyStart + 2]!.value === \":\"\n\t\t) {\n\t\t\tconst res = extractParamObject(tokens, bodyStart, paramName);\n\t\t\tif (res.ok && isBodyEnd(tokens[res.end])) {\n\t\t\t\treturn {\n\t\t\t\t\tserializer: buildParamSerializer(res.parts),\n\t\t\t\t\tparts: res.parts,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t\tlet j = bodyStart + 1;\n\t\twhile (j < tokens.length) {\n\t\t\tconst tt = tokens[j]!;\n\t\t\tif (tt.type === \"eof\") return null;\n\t\t\tif (tt.type === \"punct\" && tt.value === \"}\") return null;\n\t\t\tif (tt.type === \"ident\" && tt.value === \"return\") {\n\t\t\t\treturn tryExtractParamSerializer(tokens, j + 1, paramName);\n\t\t\t}\n\t\t\tif (tt.type === \"punct\" && tt.value === \";\") return null;\n\t\t\tif (tt.type === \"ident\" && tt.value !== \"return\") return null;\n\t\t\tj++;\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\nfunction makeUnknown(): HandlerAnalysis {\n\treturn {\n\t\tisNoArg: false,\n\t\tcontextProps: new Set(),\n\t\thasDynamicAccess: true,\n\t\tisDestructured: false,\n\t\tdestructuredProps: new Set(),\n\t\tliteral: null,\n\t\targlessJsonCall: false,\n\t\tparamSerializer: null,\n\t\tparamParts: null,\n\t};\n}\n",
15
+ "import type { Server } from \"bun\";\n\nexport interface ShutdownResult {\n\tforced: boolean;\n\tpending: number;\n}\n\nexport async function stopServer(\n\tserver: Server<unknown>,\n\thardTimeoutMs: number,\n): Promise<ShutdownResult> {\n\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\tlet forced = false;\n\tlet stopPromise: Promise<void> | null = null;\n\n\ttry {\n\t\tstopPromise = Promise.resolve(server.stop()).then(() => {});\n\t\tawait Promise.race([\n\t\t\tstopPromise,\n\t\t\tnew Promise<void>((resolve) => {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tforced = true;\n\t\t\t\t\tstopPromise = Promise.resolve(server.stop(true)).then(() => {});\n\t\t\t\t\tresolve();\n\t\t\t\t}, hardTimeoutMs);\n\t\t\t\ttimer?.unref?.();\n\t\t\t}),\n\t\t]);\n\t} finally {\n\t\tif (timer !== undefined) {\n\t\t\tclearTimeout(timer);\n\t\t}\n\t}\n\n\tawait stopPromise;\n\n\treturn {\n\t\tforced,\n\t\tpending: 0,\n\t};\n}\n",
16
+ "import { HttpError } from \"../errors\";\nimport type { HttpMethod, ResponseHandler } from \"../types\";\n\nexport const MATCH_HANDLER: unique symbol = Symbol(\"barq.match.handler\");\n\nexport const MATCH_NOT_ALLOWED: unique symbol = Symbol(\n\t\"barq.match.not-allowed\",\n);\n\nexport type RouteParams = Record<string, string> & {\n\t[MATCH_HANDLER]?: ResponseHandler;\n};\n\nexport interface NotAllowed {\n\treadonly [MATCH_NOT_ALLOWED]: string;\n}\n\nexport type RouteResult = ResponseHandler | RouteParams | NotAllowed | null;\n\nconst METHOD_BITS: Record<HttpMethod, number> = {\n\tGET: 1 << 0,\n\tPOST: 1 << 1,\n\tPUT: 1 << 2,\n\tDELETE: 1 << 3,\n\tPATCH: 1 << 4,\n\tHEAD: 1 << 5,\n\tOPTIONS: 1 << 6,\n};\n\nconst STATIC_CHILD_SCAN_THRESHOLD = 4;\n\nfunction methodBit(method: HttpMethod): number {\n\treturn METHOD_BITS[method] ?? 0;\n}\n\ninterface TrieNode {\n\tstaticChildren: Map<string, TrieNode> | null;\n\tstaticChildKeys: string[];\n\tstaticChildNodes: TrieNode[];\n\tparamChildren: Map<string, TrieNode> | null;\n\tparamChild: TrieNode | null;\n\tparamName: string | null;\n\twildcardChild: TrieNode | null;\n\twildcardName: string | null;\n\thandlers: Record<string, ResponseHandler> | null;\n\tallow: string | null;\n\tnotAllowed: NotAllowed | null;\n}\n\nfunction createNode(): TrieNode {\n\treturn {\n\t\tstaticChildren: null,\n\t\tstaticChildKeys: [],\n\t\tstaticChildNodes: [],\n\t\tparamChildren: null,\n\t\tparamChild: null,\n\t\tparamName: null,\n\t\twildcardChild: null,\n\t\twildcardName: null,\n\t\thandlers: null,\n\t\tallow: null,\n\t\tnotAllowed: null,\n\t};\n}\n\nfunction cloneNode(node: TrieNode): TrieNode {\n\tconst staticChildren = node.staticChildren\n\t\t? new Map(\n\t\t\t\tArray.from(node.staticChildren, ([key, child]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\tcloneNode(child),\n\t\t\t\t]),\n\t\t\t)\n\t\t: null;\n\tconst staticChildKeys = node.staticChildKeys.slice();\n\tconst staticChildNodes = staticChildren\n\t\t? staticChildKeys.map((key) => staticChildren.get(key)!)\n\t\t: [];\n\tconst paramChildren = node.paramChildren\n\t\t? new Map(\n\t\t\t\tArray.from(node.paramChildren, ([name, child]) => [\n\t\t\t\t\tname,\n\t\t\t\t\tcloneNode(child),\n\t\t\t\t]),\n\t\t\t)\n\t\t: null;\n\tlet handlers: Record<string, ResponseHandler> | null = null;\n\tif (node.handlers !== null) {\n\t\thandlers = Object.assign(Object.create(null), node.handlers) as Record<\n\t\t\tstring,\n\t\t\tResponseHandler\n\t\t>;\n\t}\n\treturn {\n\t\tstaticChildren,\n\t\tstaticChildKeys,\n\t\tstaticChildNodes,\n\t\tparamChildren,\n\t\tparamChild: node.paramChild ? cloneNode(node.paramChild) : null,\n\t\tparamName: node.paramName,\n\t\twildcardChild: node.wildcardChild ? cloneNode(node.wildcardChild) : null,\n\t\twildcardName: node.wildcardName,\n\t\thandlers,\n\t\tallow: node.allow,\n\t\tnotAllowed: node.notAllowed,\n\t};\n}\n\ntype PatternSegment =\n\t| { readonly kind: \"static\"; readonly value: string }\n\t| {\n\t\t\treadonly kind: \"param\";\n\t\t\treadonly name: string;\n\t\t\treadonly optional?: boolean;\n\t }\n\t| { readonly kind: \"wildcard\"; readonly name: string | null };\n\nconst MAX_OPTIONAL_PARAMS = 8;\n\nexport function parsePattern(pattern: string): PatternSegment[] {\n\tif (pattern.length === 0 || pattern.charCodeAt(0) !== 47) {\n\t\tthrow new Error(`Invalid route pattern \"${pattern}\": must start with /`);\n\t}\n\tif (pattern.indexOf(\"#\") !== -1) {\n\t\tthrow new Error(`Invalid route pattern \"${pattern}\": must not contain #`);\n\t}\n\tlet p = pattern;\n\tif (p.length > 1 && p.charCodeAt(p.length - 1) === 47) {\n\t\tp = p.slice(0, -1);\n\t}\n\n\tconst segments: PatternSegment[] = [];\n\tconst names = new Set<string>();\n\tlet i = 1;\n\twhile (i < p.length) {\n\t\tconst slash = p.indexOf(\"/\", i);\n\t\tconst end = slash === -1 ? p.length : slash;\n\t\tconst seg = p.slice(i, end);\n\t\tif (seg.length === 0) {\n\t\t\tthrow new Error(`Invalid route pattern \"${pattern}\": empty segment (//)`);\n\t\t}\n\t\tconst c0 = seg.charCodeAt(0);\n\t\tif (\n\t\t\tseg.includes(\"?\") &&\n\t\t\t!(c0 === 58 && seg.endsWith(\"?\") && seg.indexOf(\"?\") === seg.length - 1)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid route pattern \"${pattern}\": malformed optional parameter`,\n\t\t\t);\n\t\t}\n\t\tif (c0 === 58) {\n\t\t\tconst optional = seg.endsWith(\"?\");\n\t\t\tconst name = optional ? seg.slice(1, -1) : seg.slice(1);\n\t\t\tif (name.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid route pattern \"${pattern}\": empty parameter name in segment \":${name}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (names.has(name)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid route pattern \"${pattern}\": duplicate parameter name \"${name}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tnames.add(name);\n\t\t\tif (name.includes(\"?\")) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid route pattern \"${pattern}\": malformed optional parameter`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tsegments.push(\n\t\t\t\toptional\n\t\t\t\t\t? { kind: \"param\", name, optional: true }\n\t\t\t\t\t: { kind: \"param\", name },\n\t\t\t);\n\t\t} else if (c0 === 42) {\n\t\t\tif (end !== p.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid route pattern \"${pattern}\": wildcard * must be the final segment`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst name = seg.length > 1 ? seg.slice(1) : null;\n\t\t\tif (name !== null) {\n\t\t\t\tif (names.has(name)) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Invalid route pattern \"${pattern}\": duplicate parameter name \"${name}\"`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tnames.add(name);\n\t\t\t}\n\t\t\tsegments.push({ kind: \"wildcard\", name });\n\t\t} else {\n\t\t\tsegments.push({ kind: \"static\", value: seg });\n\t\t}\n\t\ti = end + 1;\n\t}\n\tconst optionalCount = segments.reduce(\n\t\t(count, segment) =>\n\t\t\tcount + (segment.kind === \"param\" && segment.optional ? 1 : 0),\n\t\t0,\n\t);\n\tif (optionalCount > MAX_OPTIONAL_PARAMS) {\n\t\tthrow new RangeError(\n\t\t\t`Route pattern exceeds the limit of ${MAX_OPTIONAL_PARAMS} optional parameters`,\n\t\t);\n\t}\n\treturn segments;\n}\n\nfunction _segmentEquals(\n\tpath: string,\n\tstart: number,\n\tend: number,\n\tkey: string,\n): boolean {\n\tconst n = end - start;\n\tif (key.length !== n) return false;\n\tfor (let i = 0; i < n; i++) {\n\t\tif (path.charCodeAt(start + i) !== key.charCodeAt(i)) return false;\n\t}\n\treturn true;\n}\n\nfunction decodeParam(raw: string): string {\n\tif (raw.indexOf(\"%\") === -1) return raw;\n\ttry {\n\t\treturn decodeURIComponent(raw);\n\t} catch {\n\t\tthrow new HttpError(400, { error: \"Bad Request\" });\n\t}\n}\n\nfunction matchNode(\n\trootNode: TrieNode,\n\tpathname: string,\n\tstartI: number,\n\tmethod: string,\n\tparamNames: string[],\n\tparamValues: string[],\n\tstartDepth: number,\n): RouteResult {\n\tlet node = rootNode;\n\tlet i = startI;\n\tconst depth = startDepth;\n\twhile (true) {\n\t\tconst len = pathname.length;\n\t\tif (i >= len) {\n\t\t\tconst handlers = node.handlers;\n\t\t\tif (handlers === null) return null;\n\n\t\t\tlet handler = handlers[method];\n\t\t\tif (handler === undefined && method === \"HEAD\") {\n\t\t\t\thandler = handlers.GET;\n\t\t\t}\n\t\t\tif (handler === undefined) {\n\t\t\t\treturn node.notAllowed;\n\t\t\t}\n\t\t\tif (depth === 0) return handler;\n\n\t\t\tconst p = Object.create(null) as RouteParams;\n\t\t\tp[MATCH_HANDLER] = handler;\n\t\t\tfor (let k = 0; k < depth; k++) {\n\t\t\t\tp[paramNames[k]!] = paramValues[k]!;\n\t\t\t}\n\t\t\treturn p;\n\t\t}\n\n\t\tconst slash = pathname.indexOf(\"/\", i);\n\t\tconst segEnd = slash === -1 ? len : slash;\n\n\t\tif (segEnd === i) {\n\t\t\tif (slash === len - 1) {\n\t\t\t\treturn matchNode(\n\t\t\t\t\tnode,\n\t\t\t\t\tpathname,\n\t\t\t\t\tlen,\n\t\t\t\t\tmethod,\n\t\t\t\t\tparamNames,\n\t\t\t\t\tparamValues,\n\t\t\t\t\tdepth,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tconst nextI = slash === -1 ? len : slash + 1;\n\t\tlet notAllowedCandidate: NotAllowed | null = null;\n\n\t\tconst staticChildren = node.staticChildren;\n\t\tif (staticChildren !== null) {\n\t\t\tlet child: TrieNode | undefined;\n\t\t\tif (staticChildren.size <= STATIC_CHILD_SCAN_THRESHOLD) {\n\t\t\t\tconst keys = node.staticChildKeys;\n\t\t\t\tconst nodes = node.staticChildNodes;\n\t\t\t\tfor (let childIndex = 0; childIndex < keys.length; childIndex++) {\n\t\t\t\t\tif (_segmentEquals(pathname, i, segEnd, keys[childIndex]!)) {\n\t\t\t\t\t\tchild = nodes[childIndex];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tchild = staticChildren.get(pathname.slice(i, segEnd));\n\t\t\t}\n\t\t\tif (child !== undefined) {\n\t\t\t\tconst hasParamChildren =\n\t\t\t\t\tnode.paramChild !== null ||\n\t\t\t\t\t(node.paramChildren !== null && node.paramChildren.size > 0);\n\t\t\t\tif (!hasParamChildren && node.wildcardChild === null) {\n\t\t\t\t\tnode = child;\n\t\t\t\t\ti = nextI;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst res = matchNode(\n\t\t\t\t\tchild,\n\t\t\t\t\tpathname,\n\t\t\t\t\tnextI,\n\t\t\t\t\tmethod,\n\t\t\t\t\tparamNames,\n\t\t\t\t\tparamValues,\n\t\t\t\t\tdepth,\n\t\t\t\t);\n\t\t\t\tif (res !== null) {\n\t\t\t\t\tif (MATCH_NOT_ALLOWED in res) {\n\t\t\t\t\t\tnotAllowedCandidate = res as NotAllowed;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (node.paramChild !== null && node.paramName !== null) {\n\t\t\tconst child = node.paramChild;\n\t\t\tconst paramName = node.paramName;\n\n\t\t\tif (nextI >= len && child.handlers !== null) {\n\t\t\t\tlet leafH = child.handlers[method];\n\t\t\t\tif (leafH === undefined && method === \"HEAD\")\n\t\t\t\t\tleafH = child.handlers.GET;\n\t\t\t\tif (leafH !== undefined) {\n\t\t\t\t\tconst paramVal =\n\t\t\t\t\t\tpathname.indexOf(\"%\", i) !== -1\n\t\t\t\t\t\t\t? decodeParam(pathname.slice(i, segEnd))\n\t\t\t\t\t\t\t: pathname.slice(i, segEnd);\n\t\t\t\t\tconst p: RouteParams = {\n\t\t\t\t\t\t[paramName]: paramVal,\n\t\t\t\t\t\t[MATCH_HANDLER]: leafH,\n\t\t\t\t\t};\n\t\t\t\t\tif (depth === 0) return p;\n\t\t\t\t\tfor (let k = 0; k < depth; k++) {\n\t\t\t\t\t\tp[paramNames[k]!] = paramValues[k]!;\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tparamNames[depth] = paramName;\n\t\t\tparamValues[depth] = decodeParam(pathname.slice(i, segEnd));\n\n\t\t\tconst res = matchNode(\n\t\t\t\tchild,\n\t\t\t\tpathname,\n\t\t\t\tnextI,\n\t\t\t\tmethod,\n\t\t\t\tparamNames,\n\t\t\t\tparamValues,\n\t\t\t\tdepth + 1,\n\t\t\t);\n\t\t\tif (res !== null) {\n\t\t\t\tif (MATCH_NOT_ALLOWED in res) {\n\t\t\t\t\tnotAllowedCandidate ??= res as NotAllowed;\n\t\t\t\t} else {\n\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (node.paramChildren !== null && node.paramChildren.size > 0) {\n\t\t\tfor (const [paramName, child] of node.paramChildren) {\n\t\t\t\tif (nextI >= len && child.handlers !== null) {\n\t\t\t\t\tlet leafH = child.handlers[method];\n\t\t\t\t\tif (leafH === undefined && method === \"HEAD\")\n\t\t\t\t\t\tleafH = child.handlers.GET;\n\t\t\t\t\tif (leafH !== undefined) {\n\t\t\t\t\t\tconst paramVal =\n\t\t\t\t\t\t\tpathname.indexOf(\"%\", i) !== -1\n\t\t\t\t\t\t\t\t? decodeParam(pathname.slice(i, segEnd))\n\t\t\t\t\t\t\t\t: pathname.slice(i, segEnd);\n\t\t\t\t\t\tconst p: RouteParams = {\n\t\t\t\t\t\t\t[paramName]: paramVal,\n\t\t\t\t\t\t\t[MATCH_HANDLER]: leafH,\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif (depth === 0) return p;\n\t\t\t\t\t\tfor (let k = 0; k < depth; k++) {\n\t\t\t\t\t\t\tp[paramNames[k]!] = paramValues[k]!;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn p;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tparamNames[depth] = paramName;\n\t\t\t\tparamValues[depth] = decodeParam(pathname.slice(i, segEnd));\n\n\t\t\t\tconst res = matchNode(\n\t\t\t\t\tchild,\n\t\t\t\t\tpathname,\n\t\t\t\t\tnextI,\n\t\t\t\t\tmethod,\n\t\t\t\t\tparamNames,\n\t\t\t\t\tparamValues,\n\t\t\t\t\tdepth + 1,\n\t\t\t\t);\n\t\t\t\tif (res !== null) {\n\t\t\t\t\tif (MATCH_NOT_ALLOWED in res) {\n\t\t\t\t\t\tnotAllowedCandidate ??= res as NotAllowed;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn res;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (node.wildcardChild !== null) {\n\t\t\tlet wildcardDepth = depth;\n\t\t\tif (node.wildcardName !== null) {\n\t\t\t\tlet rest = pathname.slice(i);\n\t\t\t\tif (rest.length > 1 && rest.charCodeAt(rest.length - 1) === 47) {\n\t\t\t\t\trest = rest.slice(0, -1);\n\t\t\t\t}\n\t\t\t\tparamNames[wildcardDepth] = node.wildcardName;\n\t\t\t\tparamValues[wildcardDepth] = decodeParam(rest);\n\t\t\t\twildcardDepth++;\n\t\t\t}\n\t\t\tconst handlers = node.wildcardChild.handlers;\n\t\t\tif (handlers !== null) {\n\t\t\t\tlet handler = handlers[method];\n\t\t\t\tif (handler === undefined && method === \"HEAD\") {\n\t\t\t\t\thandler = handlers.GET;\n\t\t\t\t}\n\t\t\t\tif (handler === undefined) {\n\t\t\t\t\treturn node.wildcardChild.notAllowed;\n\t\t\t\t}\n\t\t\t\tif (wildcardDepth === 0) return handler;\n\n\t\t\t\tconst p = Object.create(null) as RouteParams;\n\t\t\t\tfor (let k = 0; k < wildcardDepth; k++) {\n\t\t\t\t\tp[paramNames[k]!] = paramValues[k]!;\n\t\t\t\t}\n\t\t\t\tp[MATCH_HANDLER] = handler;\n\t\t\t\treturn p;\n\t\t\t}\n\t\t}\n\n\t\treturn notAllowedCandidate;\n\t}\n}\n\nexport class SegmentTrie {\n\tprivate root: TrieNode = createNode();\n\tprivate staticRoutes = new Map<string, Record<string, ResponseHandler>>();\n\tprivate staticNotAllowed = new Map<string, NotAllowed>();\n\tprivate maxStaticLength = 0;\n\tprivate readonly paramNameBuffer: string[] = [];\n\tprivate readonly paramValueBuffer: string[] = [];\n\n\taddBatch(\n\t\troutes: readonly {\n\t\t\tmethod: HttpMethod;\n\t\t\tpattern: string;\n\t\t\thandler: ResponseHandler;\n\t\t}[],\n\t): void {\n\t\tif (routes.length === 0) return;\n\t\tif (routes.length === 1) {\n\t\t\tconst route = routes[0]!;\n\t\t\tthis.add(route.method, route.pattern, route.handler);\n\t\t\treturn;\n\t\t}\n\n\t\tconst staged = this.clone();\n\t\tconst parsedPatterns = new Map<string, readonly PatternSegment[]>();\n\t\tfor (const route of routes) {\n\t\t\tlet segments = parsedPatterns.get(route.pattern);\n\t\t\tif (segments === undefined) {\n\t\t\t\tsegments = parsePattern(route.pattern);\n\t\t\t\tparsedPatterns.set(route.pattern, segments);\n\t\t\t}\n\t\t\tstaged.addWithSegments(\n\t\t\t\troute.method,\n\t\t\t\troute.pattern,\n\t\t\t\tsegments,\n\t\t\t\troute.handler,\n\t\t\t);\n\t\t}\n\t\tthis.root = staged.root;\n\t\tthis.staticRoutes = staged.staticRoutes;\n\t\tthis.staticNotAllowed = staged.staticNotAllowed;\n\t\tthis.maxStaticLength = staged.maxStaticLength;\n\t}\n\n\tprivate clone(): SegmentTrie {\n\t\tconst copy = new SegmentTrie();\n\t\tcopy.root = cloneNode(this.root);\n\t\tcopy.staticRoutes = new Map(\n\t\t\tArray.from(this.staticRoutes, ([path, handlers]) => [\n\t\t\t\tpath,\n\t\t\t\tObject.assign(Object.create(null), handlers) as Record<\n\t\t\t\t\tstring,\n\t\t\t\t\tResponseHandler\n\t\t\t\t>,\n\t\t\t]),\n\t\t);\n\t\tcopy.staticNotAllowed = new Map(this.staticNotAllowed);\n\t\tcopy.maxStaticLength = this.maxStaticLength;\n\t\treturn copy;\n\t}\n\n\tadd(method: HttpMethod, pattern: string, handler: ResponseHandler): void {\n\t\tconst segments = parsePattern(pattern);\n\t\tlet optionalCount = 0;\n\t\tfor (const segment of segments) {\n\t\t\tif (segment.kind === \"param\" && segment.optional) optionalCount++;\n\t\t}\n\t\tif (optionalCount === 0) {\n\t\t\tthis.addParsed(method, pattern, segments, handler, false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst staged = this.clone();\n\t\tstaged.addWithSegments(method, pattern, segments, handler);\n\t\tthis.root = staged.root;\n\t\tthis.staticRoutes = staged.staticRoutes;\n\t\tthis.staticNotAllowed = staged.staticNotAllowed;\n\t}\n\n\tprivate addWithSegments(\n\t\tmethod: HttpMethod,\n\t\tpattern: string,\n\t\tsegments: readonly PatternSegment[],\n\t\thandler: ResponseHandler,\n\t): void {\n\t\tlet optionalCount = 0;\n\t\tfor (const segment of segments) {\n\t\t\tif (segment.kind === \"param\" && segment.optional) optionalCount++;\n\t\t}\n\t\tif (optionalCount === 0) {\n\t\t\tthis.addParsed(method, pattern, segments, handler, false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst selected: PatternSegment[] = [];\n\t\tconst addVariants = (index: number): void => {\n\t\t\tif (index === segments.length) {\n\t\t\t\tconst variant =\n\t\t\t\t\tselected.length === 0\n\t\t\t\t\t\t? \"/\"\n\t\t\t\t\t\t: `/${selected.map((segment) => (segment.kind === \"static\" ? segment.value : segment.kind === \"param\" ? `:${segment.name}` : `*${segment.name ?? \"\"}`)).join(\"/\")}`;\n\t\t\t\tthis.addParsed(method, variant, selected, handler, true);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst segment = segments[index]!;\n\t\t\tif (segment.kind === \"param\" && segment.optional) {\n\t\t\t\tselected.push({ kind: \"param\", name: segment.name });\n\t\t\t\taddVariants(index + 1);\n\t\t\t\tselected.pop();\n\t\t\t\taddVariants(index + 1);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tselected.push(segment);\n\t\t\taddVariants(index + 1);\n\t\t\tselected.pop();\n\t\t};\n\t\taddVariants(0);\n\t}\n\n\tprivate addParsed(\n\t\tmethod: HttpMethod,\n\t\tpattern: string,\n\t\tsegments: readonly PatternSegment[],\n\t\thandler: ResponseHandler,\n\t\t_allowConflictingParamNames: boolean,\n\t): void {\n\t\tconst bit = methodBit(method);\n\t\tif (bit === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unsupported HTTP method \"${method}\" for route \"${pattern}\"`,\n\t\t\t);\n\t\t}\n\n\t\tconst isPureStatic = segments.every((s) => s.kind === \"static\");\n\t\tlet cleanPattern: string;\n\t\tif (isPureStatic) {\n\t\t\tcleanPattern =\n\t\t\t\tpattern.length > 1 && pattern.charCodeAt(pattern.length - 1) === 47\n\t\t\t\t\t? pattern.slice(0, -1)\n\t\t\t\t\t: pattern;\n\t\t\tif (cleanPattern.length > this.maxStaticLength) {\n\t\t\t\tthis.maxStaticLength = cleanPattern.length;\n\t\t\t}\n\t\t}\n\n\t\tlet node = this.root;\n\t\tfor (const seg of segments) {\n\t\t\tif (seg.kind === \"static\") {\n\t\t\t\tif (node.staticChildren === null) {\n\t\t\t\t\tnode.staticChildren = new Map();\n\t\t\t\t}\n\t\t\t\tlet child = node.staticChildren.get(seg.value);\n\t\t\t\tif (child === undefined) {\n\t\t\t\t\tchild = createNode();\n\t\t\t\t\tnode.staticChildren.set(seg.value, child);\n\t\t\t\t\tnode.staticChildKeys.push(seg.value);\n\t\t\t\t\tnode.staticChildNodes.push(child);\n\t\t\t\t}\n\t\t\t\tnode = child;\n\t\t\t} else if (seg.kind === \"param\") {\n\t\t\t\tif (node.wildcardChild !== null) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Ambiguous routes: wildcard \"${node.wildcardName ?? \"*\"}\" and param \":${seg.name}\" compete at the same position in \"${pattern}\"`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (node.paramChildren === null) {\n\t\t\t\t\tnode.paramChildren = new Map();\n\t\t\t\t}\n\t\t\t\tlet child = node.paramChildren.get(seg.name);\n\t\t\t\tif (child === undefined) {\n\t\t\t\t\tchild = createNode();\n\t\t\t\t\tnode.paramChildren.set(seg.name, child);\n\t\t\t\t\tif (node.paramChild === null && node.paramChildren.size === 1) {\n\t\t\t\t\t\tnode.paramChild = child;\n\t\t\t\t\t\tnode.paramName = seg.name;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.paramChild = null;\n\t\t\t\t\t\tnode.paramName = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnode = child;\n\t\t\t} else {\n\t\t\t\tif (node.wildcardChild !== null) {\n\t\t\t\t\tif (node.wildcardName !== seg.name) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Conflicting wildcards at the same position: \"*${node.wildcardName ?? \"\"}\" vs \"*${seg.name ?? \"\"}\" (route \"${pattern}\")`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (node.paramChildren !== null && node.paramChildren.size > 0) {\n\t\t\t\t\t\tconst existingParam = node.paramChildren.keys().next().value;\n\t\t\t\t\t\tif (existingParam !== undefined) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Ambiguous routes: param \":${existingParam}\" and wildcard \"*${seg.name ?? \"\"}\" compete at the same position in \"${pattern}\"`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnode.wildcardChild = createNode();\n\t\t\t\t\tnode.wildcardName = seg.name;\n\t\t\t\t}\n\t\t\t\tnode = node.wildcardChild;\n\t\t\t}\n\t\t}\n\n\t\tif (node.handlers?.[method] !== undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Duplicate route: ${method} ${pattern} is already registered`,\n\t\t\t);\n\t\t}\n\t\tif (node.handlers === null) node.handlers = Object.create(null);\n\t\tnode.handlers![method] = handler;\n\t\tnode.allow = SegmentTrie.computeAllow(node.handlers!);\n\t\tnode.notAllowed = Object.freeze({\n\t\t\t[MATCH_NOT_ALLOWED]: node.allow,\n\t\t}) as NotAllowed;\n\n\t\tif (isPureStatic) {\n\t\t\tlet sHandlers = this.staticRoutes.get(cleanPattern!);\n\t\t\tif (sHandlers === undefined) {\n\t\t\t\tsHandlers = Object.create(null) as Record<string, ResponseHandler>;\n\t\t\t\tthis.staticRoutes.set(cleanPattern!, sHandlers);\n\t\t\t}\n\t\t\tsHandlers[method] = handler;\n\t\t\tconst sAllow = SegmentTrie.computeAllow(sHandlers);\n\t\t\tthis.staticNotAllowed.set(\n\t\t\t\tcleanPattern!,\n\t\t\t\tObject.freeze({ [MATCH_NOT_ALLOWED]: sAllow }) as NotAllowed,\n\t\t\t);\n\t\t}\n\t}\n\n\tstatic computeAllow(handlers: Record<string, ResponseHandler>): string {\n\t\tconst methods = Object.keys(handlers);\n\t\tif (methods.includes(\"GET\") && !methods.includes(\"HEAD\")) {\n\t\t\treturn [...methods, \"HEAD\"].join(\", \");\n\t\t}\n\t\treturn methods.join(\", \");\n\t}\n\n\tmatch(method: string, pathname: string): RouteResult {\n\t\tconst len = pathname.length;\n\t\tconst cleanPath =\n\t\t\tlen > 1 && pathname.charCodeAt(len - 1) === 47\n\t\t\t\t? pathname.slice(0, -1)\n\t\t\t\t: pathname;\n\n\t\tif (cleanPath.length <= this.maxStaticLength) {\n\t\t\tconst sHandlers = this.staticRoutes.get(cleanPath);\n\t\t\tif (sHandlers !== undefined) {\n\t\t\t\tlet handler = sHandlers[method];\n\t\t\t\tif (handler === undefined && method === \"HEAD\") {\n\t\t\t\t\thandler = sHandlers.GET;\n\t\t\t\t}\n\t\t\t\tif (handler !== undefined) {\n\t\t\t\t\treturn handler;\n\t\t\t\t}\n\t\t\t\tconst dynamicMatch = matchNode(\n\t\t\t\t\tthis.root,\n\t\t\t\t\tpathname,\n\t\t\t\t\t1,\n\t\t\t\t\tmethod,\n\t\t\t\t\tthis.paramNameBuffer,\n\t\t\t\t\tthis.paramValueBuffer,\n\t\t\t\t\t0,\n\t\t\t\t);\n\t\t\t\tif (this.paramNameBuffer.length > 0) {\n\t\t\t\t\tthis.paramNameBuffer.length = 0;\n\t\t\t\t\tthis.paramValueBuffer.length = 0;\n\t\t\t\t}\n\t\t\t\tif (dynamicMatch !== null && !(MATCH_NOT_ALLOWED in dynamicMatch)) {\n\t\t\t\t\treturn dynamicMatch;\n\t\t\t\t}\n\t\t\t\treturn this.staticNotAllowed.get(cleanPath)!;\n\t\t\t}\n\t\t}\n\n\t\tconst res = matchNode(\n\t\t\tthis.root,\n\t\t\tpathname,\n\t\t\t1,\n\t\t\tmethod,\n\t\t\tthis.paramNameBuffer,\n\t\t\tthis.paramValueBuffer,\n\t\t\t0,\n\t\t);\n\t\tif (this.paramNameBuffer.length > 0) {\n\t\t\tthis.paramNameBuffer.length = 0;\n\t\t\tthis.paramValueBuffer.length = 0;\n\t\t}\n\t\treturn res;\n\t}\n}\n",
17
+ "import type { Context } from \"./context\";\nimport { errorToResponse } from \"./errors\";\nimport type { ErrorResolver, Middleware } from \"./types\";\n\ntype PipelineHandler = (ctx: Context) => Response | Promise<Response>;\n\nexport type MiddlewareDispatcher = (\n\tctx: Context,\n\thandler: PipelineHandler,\n) => Response | Promise<Response>;\n\nexport function isThenable(value: unknown): value is PromiseLike<unknown> {\n\treturn (\n\t\t(typeof value === \"object\" || typeof value === \"function\") &&\n\t\tvalue !== null &&\n\t\ttypeof (value as { then?: unknown }).then === \"function\"\n\t);\n}\n\nfunction mergeState(ctx: Context, value: unknown): void {\n\tif (typeof value === \"object\" && value !== null) {\n\t\tObject.assign(ctx.state as Record<string, unknown>, value as object);\n\t}\n}\n\n/** Compile a middleware chain once for reuse by native and fallback routes. */\nexport function composeMiddlewareDispatcher(\n\tmws: readonly Middleware[],\n\terrorResolver?: ErrorResolver,\n): MiddlewareDispatcher {\n\t// Keep pathological chains on the iterative implementation to avoid deep\n\t// call stacks. The usual short chains are compiled into direct closures.\n\tif (\n\t\tmws.length > 64 ||\n\t\tmws.some((middleware) => middleware.after !== undefined)\n\t) {\n\t\treturn (ctx, handler) => runPipeline(mws, ctx, handler, errorResolver);\n\t}\n\n\tlet next: MiddlewareDispatcher = (ctx, handler) => {\n\t\tlet result: Response | Promise<Response>;\n\t\ttry {\n\t\t\tresult = handler(ctx);\n\t\t} catch (error) {\n\t\t\treturn handlePipelineError(mws, ctx, error, mws.length, errorResolver);\n\t\t}\n\t\tif (isThenable(result)) {\n\t\t\treturn Promise.resolve(result).catch((error: unknown) =>\n\t\t\t\thandlePipelineError(mws, ctx, error, mws.length, errorResolver),\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tfor (let i = mws.length - 1; i >= 0; i--) {\n\t\tconst middleware = mws[i]!;\n\t\tconst hook = middleware.before;\n\t\tconst following = next;\n\t\tnext = (ctx, handler) => {\n\t\t\tif (!hook) return following(ctx, handler);\n\t\t\tlet result: unknown;\n\t\t\ttry {\n\t\t\t\tresult = hook(ctx);\n\t\t\t} catch (error) {\n\t\t\t\treturn handlePipelineError(mws, ctx, error, i, errorResolver);\n\t\t\t}\n\t\t\tif (result === undefined) return following(ctx, handler);\n\t\t\tif (isThenable(result)) {\n\t\t\t\treturn Promise.resolve(result).then(\n\t\t\t\t\t(value: unknown) => {\n\t\t\t\t\t\tif (value instanceof Response) return value;\n\t\t\t\t\t\tmergeState(ctx, value);\n\t\t\t\t\t\treturn following(ctx, handler);\n\t\t\t\t\t},\n\t\t\t\t\t(error: unknown) =>\n\t\t\t\t\t\thandlePipelineError(mws, ctx, error, i, errorResolver),\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (result instanceof Response) return result;\n\t\t\tmergeState(ctx, result);\n\t\t\treturn following(ctx, handler);\n\t\t};\n\t}\n\n\treturn next;\n}\n\n/** Compile a route-specific chain around its handler. */\nexport function composeMiddlewares(\n\tmws: readonly Middleware[],\n\thandler: PipelineHandler,\n\terrorResolver?: ErrorResolver,\n): PipelineHandler {\n\tconst dispatch = composeMiddlewareDispatcher(mws, errorResolver);\n\treturn (ctx) => dispatch(ctx, handler);\n}\n\nexport function runPipeline(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\thandler: (ctx: Context) => Response | Promise<Response>,\n\terrorResolver?: ErrorResolver,\n): Response | Promise<Response> {\n\tlet i = 0;\n\tconst len = mws.length;\n\n\twhile (i < len) {\n\t\tconst hook = mws[i]!.before;\n\t\tif (hook) {\n\t\t\tlet r: unknown;\n\t\t\ttry {\n\t\t\t\tr = hook(ctx);\n\t\t\t} catch (err) {\n\t\t\t\treturn handlePipelineError(mws, ctx, err, i, errorResolver);\n\t\t\t}\n\t\t\tif (r !== undefined) {\n\t\t\t\tif (r instanceof Response) {\n\t\t\t\t\treturn unwindAfter(mws, ctx, r, i + 1, errorResolver);\n\t\t\t\t}\n\t\t\t\tif (isThenable(r)) {\n\t\t\t\t\treturn resumeBefore(mws, ctx, handler, r, i, errorResolver);\n\t\t\t\t}\n\t\t\t\tmergeState(ctx, r);\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\n\treturn invokeHandler(mws, ctx, handler, len, errorResolver);\n}\n\nfunction continueBefore(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\thandler: (ctx: Context) => Response | Promise<Response>,\n\tstartIndex: number,\n\terrorResolver?: ErrorResolver,\n): Response | Promise<Response> {\n\tlet i = startIndex;\n\tconst len = mws.length;\n\twhile (i < len) {\n\t\tconst hook = mws[i]!.before;\n\t\tif (hook) {\n\t\t\tlet r: unknown;\n\t\t\ttry {\n\t\t\t\tr = hook(ctx);\n\t\t\t} catch (err) {\n\t\t\t\treturn handlePipelineError(mws, ctx, err, i, errorResolver);\n\t\t\t}\n\t\t\tif (r !== undefined) {\n\t\t\t\tif (r instanceof Response) {\n\t\t\t\t\treturn unwindAfter(mws, ctx, r, i + 1, errorResolver);\n\t\t\t\t}\n\t\t\t\tif (isThenable(r)) {\n\t\t\t\t\treturn resumeBefore(mws, ctx, handler, r, i, errorResolver);\n\t\t\t\t}\n\t\t\t\tmergeState(ctx, r);\n\t\t\t}\n\t\t}\n\t\ti++;\n\t}\n\treturn invokeHandler(mws, ctx, handler, len, errorResolver);\n}\n\nfunction invokeHandler(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\thandler: (ctx: Context) => Response | Promise<Response>,\n\tentered: number,\n\terrorResolver?: ErrorResolver,\n): Response | Promise<Response> {\n\tlet res: Response | Promise<Response>;\n\ttry {\n\t\tres = handler(ctx);\n\t} catch (err) {\n\t\treturn handlePipelineError(mws, ctx, err, entered, errorResolver);\n\t}\n\tif (isThenable(res)) {\n\t\treturn resumeHandler(mws, ctx, res, entered, errorResolver);\n\t}\n\treturn unwindAfter(mws, ctx, res, entered, errorResolver);\n}\n\nfunction resumeBefore(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\thandler: (ctx: Context) => Response | Promise<Response>,\n\tpromise: PromiseLike<unknown>,\n\tindex: number,\n\terrorResolver?: ErrorResolver,\n): Promise<Response> {\n\treturn Promise.resolve(promise).then(\n\t\t(r) => {\n\t\t\tif (r instanceof Response) {\n\t\t\t\treturn unwindAfter(mws, ctx, r, index + 1, errorResolver);\n\t\t\t}\n\t\t\tmergeState(ctx, r);\n\t\t\treturn continueBefore(mws, ctx, handler, index + 1, errorResolver);\n\t\t},\n\t\t(err: unknown) => handlePipelineError(mws, ctx, err, index, errorResolver),\n\t);\n}\n\nfunction resumeHandler(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\tpromise: PromiseLike<unknown>,\n\tentered: number,\n\terrorResolver?: ErrorResolver,\n): Promise<Response> {\n\treturn Promise.resolve(promise).then(\n\t\t(res) => unwindAfter(mws, ctx, res as Response, entered, errorResolver),\n\t\t(err: unknown) =>\n\t\t\thandlePipelineError(mws, ctx, err, entered, errorResolver),\n\t);\n}\n\nfunction handlePipelineError(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\terr: unknown,\n\tentered: number,\n\terrorResolver?: ErrorResolver,\n): Response | Promise<Response> {\n\tif (errorResolver !== undefined) {\n\t\tlet res: Response | Promise<Response>;\n\t\ttry {\n\t\t\tres = errorResolver(err, ctx);\n\t\t} catch (resolverErr) {\n\t\t\tconst fallback = errorToResponse(resolverErr, ctx.development);\n\t\t\treturn unwindAfter(mws, ctx, fallback, entered, errorResolver);\n\t\t}\n\t\tif (isThenable(res)) {\n\t\t\treturn (res as Promise<Response>).then(\n\t\t\t\t(resolved) => unwindAfter(mws, ctx, resolved, entered, errorResolver),\n\t\t\t\t(resolverErr) => {\n\t\t\t\t\tconst fallback = errorToResponse(resolverErr, ctx.development);\n\t\t\t\t\treturn unwindAfter(mws, ctx, fallback, entered, errorResolver);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn unwindAfter(mws, ctx, res as Response, entered, errorResolver);\n\t}\n\tconst res = errorToResponse(err, ctx.development);\n\treturn unwindAfter(mws, ctx, res, entered, errorResolver);\n}\n\nexport function unwindAfter(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\tres: Response,\n\tenteredCount: number,\n\terrorResolver?: ErrorResolver,\n): Response | Promise<Response> {\n\tlet currentRes = res;\n\n\tfor (let j = enteredCount - 1; j >= 0; j--) {\n\t\tconst hook = mws[j]!.after;\n\t\tif (hook) {\n\t\t\tlet r: unknown;\n\t\t\ttry {\n\t\t\t\tr = hook(ctx, currentRes);\n\t\t\t} catch (err) {\n\t\t\t\tif (errorResolver !== undefined) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst resolved = errorResolver(err, ctx);\n\t\t\t\t\t\tif (isThenable(resolved)) {\n\t\t\t\t\t\t\treturn (resolved as Promise<Response>).then(\n\t\t\t\t\t\t\t\t(resolvedRes) =>\n\t\t\t\t\t\t\t\t\tcontinueUnwind(mws, ctx, j - 1, resolvedRes, errorResolver),\n\t\t\t\t\t\t\t\t(resolverErr) =>\n\t\t\t\t\t\t\t\t\tcontinueUnwind(\n\t\t\t\t\t\t\t\t\t\tmws,\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tj - 1,\n\t\t\t\t\t\t\t\t\t\terrorToResponse(resolverErr, ctx.development),\n\t\t\t\t\t\t\t\t\t\terrorResolver,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentRes = resolved;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} catch (resolverErr) {\n\t\t\t\t\t\tcurrentRes = errorToResponse(resolverErr, ctx.development);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrentRes = errorToResponse(err, ctx.development);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (r !== undefined) {\n\t\t\t\tif (isThenable(r)) {\n\t\t\t\t\treturn resumeUnwind(mws, ctx, r, j - 1, currentRes, errorResolver);\n\t\t\t\t}\n\t\t\t\tif (r instanceof Response) {\n\t\t\t\t\tcurrentRes = r;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn currentRes;\n}\n\nfunction resumeUnwind(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\tpromise: PromiseLike<unknown>,\n\tnextIndex: number,\n\tcurrentRes: Response,\n\terrorResolver?: ErrorResolver,\n): Promise<Response> {\n\treturn Promise.resolve(promise).then(\n\t\t(r) => {\n\t\t\tconst next = r instanceof Response ? r : currentRes;\n\t\t\treturn continueUnwind(mws, ctx, nextIndex, next, errorResolver);\n\t\t},\n\t\t(err: unknown) => {\n\t\t\tif (errorResolver !== undefined) {\n\t\t\t\ttry {\n\t\t\t\t\tconst resolved = errorResolver(err, ctx);\n\t\t\t\t\tif (isThenable(resolved)) {\n\t\t\t\t\t\treturn (resolved as Promise<Response>).then(\n\t\t\t\t\t\t\t(resolvedRes) =>\n\t\t\t\t\t\t\t\tcontinueUnwind(mws, ctx, nextIndex, resolvedRes, errorResolver),\n\t\t\t\t\t\t\t(resolverErr) =>\n\t\t\t\t\t\t\t\tcontinueUnwind(\n\t\t\t\t\t\t\t\t\tmws,\n\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\tnextIndex,\n\t\t\t\t\t\t\t\t\terrorToResponse(resolverErr, ctx.development),\n\t\t\t\t\t\t\t\t\terrorResolver,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn continueUnwind(mws, ctx, nextIndex, resolved, errorResolver);\n\t\t\t\t} catch (resolverErr) {\n\t\t\t\t\treturn continueUnwind(\n\t\t\t\t\t\tmws,\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\tnextIndex,\n\t\t\t\t\t\terrorToResponse(resolverErr, ctx.development),\n\t\t\t\t\t\terrorResolver,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst next = errorToResponse(err, ctx.development);\n\t\t\treturn continueUnwind(mws, ctx, nextIndex, next, errorResolver);\n\t\t},\n\t);\n}\n\nfunction continueUnwind(\n\tmws: readonly Middleware[],\n\tctx: Context,\n\tstartIndex: number,\n\tcurrentRes: Response,\n\terrorResolver?: ErrorResolver,\n): Response | Promise<Response> {\n\tlet cur = currentRes;\n\tfor (let j = startIndex; j >= 0; j--) {\n\t\tconst hook = mws[j]!.after;\n\t\tif (hook) {\n\t\t\tlet r: unknown;\n\t\t\ttry {\n\t\t\t\tr = hook(ctx, cur);\n\t\t\t} catch (err) {\n\t\t\t\tif (errorResolver !== undefined) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst resolved = errorResolver(err, ctx);\n\t\t\t\t\t\tif (isThenable(resolved)) {\n\t\t\t\t\t\t\treturn (resolved as Promise<Response>).then(\n\t\t\t\t\t\t\t\t(resolvedRes) =>\n\t\t\t\t\t\t\t\t\tcontinueUnwind(mws, ctx, j - 1, resolvedRes, errorResolver),\n\t\t\t\t\t\t\t\t(resolverErr) =>\n\t\t\t\t\t\t\t\t\tcontinueUnwind(\n\t\t\t\t\t\t\t\t\t\tmws,\n\t\t\t\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\t\t\t\tj - 1,\n\t\t\t\t\t\t\t\t\t\terrorToResponse(resolverErr, ctx.development),\n\t\t\t\t\t\t\t\t\t\terrorResolver,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcur = resolved;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} catch (resolverErr) {\n\t\t\t\t\t\tcur = errorToResponse(resolverErr, ctx.development);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcur = errorToResponse(err, ctx.development);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (r !== undefined) {\n\t\t\t\tif (isThenable(r)) {\n\t\t\t\t\treturn resumeUnwind(mws, ctx, r, j - 1, cur, errorResolver);\n\t\t\t\t}\n\t\t\t\tif (r instanceof Response) {\n\t\t\t\t\tcur = r;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn cur;\n}\n",
18
+ "import type { Context } from \"./context\";\nimport type { Middleware } from \"./types\";\n\nexport interface CorsOptions {\n\torigin?: string | string[] | ((origin: string) => boolean | string);\n\tmethods?: string[];\n\tallowedHeaders?: string[];\n\texposedHeaders?: string[];\n\tcredentials?: boolean;\n\tmaxAge?: number;\n}\n\nexport function cors(options: CorsOptions = {}): Middleware {\n\tconst methods = (\n\t\toptions.methods ?? [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\"]\n\t).join(\", \");\n\tconst allowedHeaders = options.allowedHeaders?.join(\", \");\n\tconst exposedHeaders = options.exposedHeaders?.join(\", \");\n\tconst maxAge = options.maxAge !== undefined ? String(options.maxAge) : null;\n\tconst credentials = options.credentials === true;\n\n\tfunction resolveOrigin(reqOrigin: string | null): string | null {\n\t\tif (!options.origin || options.origin === \"*\") {\n\t\t\treturn credentials ? (reqOrigin ?? \"*\") : \"*\";\n\t\t}\n\t\tif (!reqOrigin) return null;\n\t\tif (typeof options.origin === \"string\") {\n\t\t\treturn options.origin === reqOrigin ? reqOrigin : null;\n\t\t}\n\t\tif (Array.isArray(options.origin)) {\n\t\t\treturn options.origin.includes(reqOrigin) ? reqOrigin : null;\n\t\t}\n\t\tif (typeof options.origin === \"function\") {\n\t\t\tconst result = options.origin(reqOrigin);\n\t\t\tif (typeof result === \"string\") return result;\n\t\t\treturn result ? reqOrigin : null;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction setCorsHeaders(\n\t\theaders: Headers,\n\t\tmatchedOrigin: string | null,\n\t): void {\n\t\tif (matchedOrigin) {\n\t\t\theaders.set(\"access-control-allow-origin\", matchedOrigin);\n\t\t\tif (matchedOrigin !== \"*\") {\n\t\t\t\theaders.append(\"vary\", \"Origin\");\n\t\t\t}\n\t\t}\n\t\tif (credentials) {\n\t\t\theaders.set(\"access-control-allow-credentials\", \"true\");\n\t\t}\n\t\tif (exposedHeaders) {\n\t\t\theaders.set(\"access-control-expose-headers\", exposedHeaders);\n\t\t}\n\t}\n\n\treturn {\n\t\tbefore(ctx: Context) {\n\t\t\tconst reqOrigin = ctx.req.headers.get(\"origin\");\n\t\t\tconst matchedOrigin = resolveOrigin(reqOrigin);\n\n\t\t\tif (ctx.req.method === \"OPTIONS\") {\n\t\t\t\tconst headers = new Headers();\n\t\t\t\tsetCorsHeaders(headers, matchedOrigin);\n\t\t\t\theaders.set(\"access-control-allow-methods\", methods);\n\t\t\t\tif (allowedHeaders) {\n\t\t\t\t\theaders.set(\"access-control-allow-headers\", allowedHeaders);\n\t\t\t\t} else {\n\t\t\t\t\tconst reqHeaders = ctx.req.headers.get(\n\t\t\t\t\t\t\"access-control-request-headers\",\n\t\t\t\t\t);\n\t\t\t\t\tif (reqHeaders) {\n\t\t\t\t\t\theaders.set(\"access-control-allow-headers\", reqHeaders);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (maxAge) {\n\t\t\t\t\theaders.set(\"access-control-max-age\", maxAge);\n\t\t\t\t}\n\t\t\t\theaders.set(\"content-length\", \"0\");\n\t\t\t\treturn new Response(null, { status: 204, headers });\n\t\t\t}\n\n\t\t\t(ctx.state as Record<string, unknown>)._corsOrigin = matchedOrigin;\n\t\t},\n\t\tafter(ctx: Context, res: Response) {\n\t\t\tconst matchedOrigin = (ctx.state as Record<string, unknown>)\n\t\t\t\t._corsOrigin as string | null | undefined;\n\t\t\tif (matchedOrigin !== undefined) {\n\t\t\t\tconst headers = new Headers(res.headers);\n\t\t\t\tsetCorsHeaders(headers, matchedOrigin);\n\t\t\t\treturn new Response(res.body, {\n\t\t\t\t\tstatus: res.status,\n\t\t\t\t\tstatusText: res.statusText,\n\t\t\t\t\theaders,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn res;\n\t\t},\n\t};\n}\n",
19
+ "import type { Context } from \"./context\";\nimport { HttpError } from \"./errors\";\nimport type { Params, ResponseHandler } from \"./types\";\n\nexport interface StandardSchemaV1Issue {\n\treadonly message: string;\n\treadonly path?: ReadonlyArray<PropertyKey | { readonly key: PropertyKey }>;\n}\n\nexport type StandardSchemaV1Result<TOutput> =\n\t| { readonly value: TOutput; readonly issues?: undefined }\n\t| { readonly issues: ReadonlyArray<StandardSchemaV1Issue> };\n\nexport interface StandardSchemaV1<_TInput = unknown, TOutput = unknown> {\n\treadonly \"~standard\": {\n\t\treadonly version: 1;\n\t\treadonly vendor: string;\n\t\treadonly validate: (\n\t\t\tvalue: unknown,\n\t\t) =>\n\t\t\t| StandardSchemaV1Result<TOutput>\n\t\t\t| Promise<StandardSchemaV1Result<TOutput>>;\n\t};\n}\n\nexport interface LegacyValidator<TOutput> {\n\tparse(data: unknown): TOutput;\n}\n\nexport type Validator<TOutput> =\n\t| LegacyValidator<TOutput>\n\t| StandardSchemaV1<unknown, TOutput>\n\t| ((data: unknown) => TOutput | Promise<TOutput>);\n\nexport function validateJson<\n\tTOutput,\n\tTParams extends object = Params,\n\tTState extends object = Record<string, unknown>,\n>(\n\tvalidator: Validator<TOutput>,\n\thandler: (\n\t\tctx: Context<TParams, TState>,\n\t\tbody: TOutput,\n\t) => Response | Promise<Response>,\n): ResponseHandler<TParams, TState> {\n\treturn async (ctx) => {\n\t\tconst raw = await ctx.json<unknown>();\n\t\tlet body: TOutput;\n\n\t\tif (\n\t\t\ttypeof validator === \"object\" &&\n\t\t\tvalidator !== null &&\n\t\t\t\"~standard\" in validator\n\t\t) {\n\t\t\tconst res = await validator[\"~standard\"].validate(raw);\n\t\t\tif (res.issues) {\n\t\t\t\tthrow new HttpError(422, {\n\t\t\t\t\terror: \"Validation Failed\",\n\t\t\t\t\tissues: res.issues,\n\t\t\t\t});\n\t\t\t}\n\t\t\tbody = res.value;\n\t\t} else if (typeof validator === \"function\") {\n\t\t\tbody = await validator(raw);\n\t\t} else if (\n\t\t\ttypeof validator === \"object\" &&\n\t\t\tvalidator !== null &&\n\t\t\t\"parse\" in validator\n\t\t) {\n\t\t\tbody = (validator as LegacyValidator<TOutput>).parse(raw);\n\t\t} else {\n\t\t\tthrow new TypeError(\"Invalid validator provided to validateJson\");\n\t\t}\n\n\t\treturn handler(ctx, body);\n\t};\n}\n"
20
+ ],
21
+ "mappings": "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",
22
+ "debugId": "883AC01877895D9164756E2164756E21",
23
+ "names": []
24
+ }