@spikard/wasm 0.6.2 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +356 -524
- package/dist/chunk-YO5KBN4A.mjs +2268 -0
- package/dist/chunk-YO5KBN4A.mjs.map +1 -0
- package/dist/index.d.mts +365 -0
- package/dist/index.d.ts +365 -0
- package/dist/index.js +2270 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/dist/node.d.mts +9 -0
- package/dist/node.d.ts +9 -0
- package/dist/node.js +2401 -0
- package/dist/node.js.map +1 -0
- package/dist/node.mjs +120 -0
- package/dist/node.mjs.map +1 -0
- package/{dist-node → dist}/package.json +1 -1
- package/{dist-node → dist}/spikard_wasm.js +11 -8
- package/{dist-node → dist}/spikard_wasm_bg.wasm +0 -0
- package/package.json +54 -46
- package/dist-bundler/package.json +0 -34
- package/dist-bundler/spikard_wasm.d.ts +0 -28
- package/dist-bundler/spikard_wasm.js +0 -5
- package/dist-bundler/spikard_wasm_bg.js +0 -914
- package/dist-bundler/spikard_wasm_bg.wasm +0 -0
- package/dist-bundler/spikard_wasm_bg.wasm.d.ts +0 -26
- package/dist-node/README.md +0 -739
- package/dist-node/spikard_wasm.d.ts +0 -28
- package/dist-node/spikard_wasm_bg.wasm.d.ts +0 -26
- package/dist-web/README.md +0 -739
- package/dist-web/package.json +0 -32
- package/dist-web/spikard_wasm.d.ts +0 -79
- package/dist-web/spikard_wasm.js +0 -921
- package/dist-web/spikard_wasm_bg.wasm +0 -0
- package/dist-web/spikard_wasm_bg.wasm.d.ts +0 -26
- /package/{dist-bundler → dist}/README.md +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/streaming.ts","../src/testing.ts","../src/server.ts","../src/app.ts","../src/background.ts","../src/routing.ts"],"names":["route","parsed","globalAny","buffer","bufferToBase64","matchPath","isWebSocketHandler","isBinaryLike","safeParseJson"],"mappings":"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","file":"chunk-YO5KBN4A.mjs","sourcesContent":["import type { HandlerResult, JsonValue } from \"./types\";\n\nconst STREAM_HANDLE_PROP = Symbol.for(\"spikard.streaming.handle\");\n\ntype StreamChunk = JsonValue | string | Uint8Array | ArrayBuffer | ArrayBufferView | null | undefined;\n\ntype AsyncIteratorLike<T> = AsyncIterator<T> & AsyncIterable<T>;\n\nexport interface StreamingResponseInit {\n\tstatusCode?: number;\n\theaders?: Record<string, string>;\n}\n\nexport class StreamingResponse {\n\tpublic readonly statusCode: number;\n\tpublic readonly headers: Record<string, string>;\n\tpublic readonly [STREAM_HANDLE_PROP]: AsyncIteratorLike<StreamChunk>;\n\tpublic readonly __spikard_streaming__: true;\n\n\tconstructor(stream: AsyncIterable<StreamChunk> | AsyncIterator<StreamChunk>, init?: StreamingResponseInit) {\n\t\tthis[STREAM_HANDLE_PROP] = toAsyncIterator(stream);\n\t\tthis.statusCode = init?.statusCode ?? 200;\n\t\tthis.headers = init?.headers ?? {};\n\t\tthis.__spikard_streaming__ = true;\n\t}\n\n\tasync collect(): Promise<Uint8Array> {\n\t\tconst chunks: Uint8Array[] = [];\n\t\tfor await (const chunk of this[STREAM_HANDLE_PROP]) {\n\t\t\tchunks.push(normalizeChunk(chunk));\n\t\t}\n\t\treturn concatChunks(chunks);\n\t}\n}\n\nexport function isStreamingResponse(value: HandlerResult): value is StreamingResponse {\n\treturn Boolean(value) && value instanceof StreamingResponse;\n}\n\nfunction toAsyncIterator(\n\tsource: AsyncIterable<StreamChunk> | AsyncIterator<StreamChunk>,\n): AsyncIteratorLike<StreamChunk> {\n\tif (!source || typeof source !== \"object\") {\n\t\tthrow new TypeError(\"StreamingResponse requires an async iterator or generator\");\n\t}\n\tif (typeof (source as AsyncIterator<StreamChunk>).next === \"function\") {\n\t\tconst iterator = source as AsyncIteratorLike<StreamChunk>;\n\t\tif (typeof iterator[Symbol.asyncIterator] === \"function\") {\n\t\t\treturn iterator;\n\t\t}\n\t\treturn wrapIterator(iterator);\n\t}\n\tif (typeof (source as AsyncIterable<StreamChunk>)[Symbol.asyncIterator] === \"function\") {\n\t\treturn (source as AsyncIterable<StreamChunk>)[Symbol.asyncIterator]() as AsyncIteratorLike<StreamChunk>;\n\t}\n\tthrow new TypeError(\"StreamingResponse requires an async iterator or generator\");\n}\n\nfunction wrapIterator(iterator: AsyncIterator<StreamChunk>): AsyncIteratorLike<StreamChunk> {\n\treturn {\n\t\tnext: iterator.next.bind(iterator),\n\t\t...(iterator.throw ? { throw: iterator.throw.bind(iterator) } : {}),\n\t\t...(iterator.return ? { return: iterator.return.bind(iterator) } : {}),\n\t\t[Symbol.asyncIterator]() {\n\t\t\treturn this;\n\t\t},\n\t};\n}\n\nfunction normalizeChunk(chunk: unknown): Uint8Array {\n\tif (typeof chunk === \"string\") {\n\t\treturn new TextEncoder().encode(chunk);\n\t}\n\tif (chunk instanceof Uint8Array) {\n\t\treturn chunk;\n\t}\n\tif (ArrayBuffer.isView(chunk)) {\n\t\tconst view = chunk as ArrayBufferView;\n\t\treturn new Uint8Array(view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength));\n\t}\n\tif (chunk instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(chunk);\n\t}\n\tif (chunk == null) {\n\t\treturn new Uint8Array();\n\t}\n\treturn new TextEncoder().encode(typeof chunk === \"object\" ? JSON.stringify(chunk) : String(chunk));\n}\n\nfunction concatChunks(chunks: Uint8Array[]): Uint8Array {\n\tif (chunks.length === 1) {\n\t\treturn chunks[0] ?? new Uint8Array();\n\t}\n\n\tconst totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const chunk of chunks) {\n\t\tresult.set(chunk, offset);\n\t\toffset += chunk.length;\n\t}\n\treturn result;\n}\n","import type { LifecycleHookFunction, LifecycleHooks } from \"./app\";\nimport type { StaticFilesConfig, StaticManifestEntry } from \"./config\";\nimport type { HandlerFunction, SpikardApp } from \"./index\";\nimport type { Request } from \"./request\";\nimport { isStreamingResponse } from \"./streaming\";\nimport type {\n\tAbortSignalLike,\n\tBinaryLike,\n\tHandlerBody,\n\tHandlerContext,\n\tHandlerPayload,\n\tJsonValue,\n\tStructuredHandlerResponse,\n\tWebSocketHandler,\n\tWebSocketHandlerLike,\n\tWebSocketServerSocket,\n} from \"./types\";\nimport { gunzipSync } from \"fflate\";\n\ntype HeaderMap = Record<string, string>;\ntype HeaderInput = HeaderMap | Map<string, string> | null | undefined;\n\nconst globalAny = globalThis as unknown as { Buffer?: unknown };\n\nexport interface MultipartFile {\n\tname: string;\n\tfilename?: string;\n\tcontent: string;\n\tcontentType?: string;\n}\n\nexport interface RequestOptions {\n\theaders?: HeaderMap;\n\tjson?: JsonValue;\n\tform?: Record<string, JsonValue> | string;\n\tformRaw?: string;\n\tmultipart?: {\n\t\tfields?: Record<string, JsonValue>;\n\t\tfiles?: MultipartFile[];\n\t};\n\tbinary?: string;\n}\n\ntype NativeRequestOptions = {\n\theaders?: HeaderMap;\n\tjson?: JsonValue;\n\tform?: Record<string, JsonValue>;\n\tformRaw?: string;\n\tmultipart?: {\n\t\tfields?: Record<string, JsonValue>;\n\t\tfiles?: MultipartFile[];\n\t};\n\tbinary?: string;\n};\n\ninterface NativeClient {\n\tget(path: string, headers: HeaderMap | null): Promise<NativeSnapshot>;\n\tdelete(path: string, headers: HeaderMap | null): Promise<NativeSnapshot>;\n\thead(path: string, headers: HeaderMap | null): Promise<NativeSnapshot>;\n\toptions(path: string, headers: HeaderMap | null): Promise<NativeSnapshot>;\n\ttrace(path: string, headers: HeaderMap | null): Promise<NativeSnapshot>;\n\tpost(path: string, options: NativeRequestOptions | null): Promise<NativeSnapshot>;\n\tput(path: string, options: NativeRequestOptions | null): Promise<NativeSnapshot>;\n\tpatch(path: string, options: NativeRequestOptions | null): Promise<NativeSnapshot>;\n\thandle_request(requestJson: string): Promise<NativeSnapshot>;\n}\n\ntype NativeLifecycleHookResult =\n\t| { type: \"request\"; payload: InternalRequestPayload }\n\t| { type: \"response\"; payload: StructuredHandlerResponse };\n\ntype NativeLifecycleHooksPayload = {\n\tonRequest: Array<(payload: InternalRequestPayload) => Promise<NativeLifecycleHookResult>>;\n\tpreValidation: Array<(payload: InternalRequestPayload) => Promise<NativeLifecycleHookResult>>;\n\tpreHandler: Array<(payload: InternalRequestPayload) => Promise<NativeLifecycleHookResult>>;\n\tonResponse: Array<(payload: StructuredHandlerResponse) => Promise<NativeLifecycleHookResult>>;\n\tonError: Array<(payload: StructuredHandlerResponse) => Promise<NativeLifecycleHookResult>>;\n};\n\ntype NativeClientFactory = (\n\troutesJson: string,\n\thandlers: Record<string, HandlerFunction>,\n\tconfig: string | null,\n\tlifecycleHooks: NativeLifecycleHooksPayload | null,\n\tdependencies: Record<string, unknown> | null,\n) => Promise<NativeClient>;\n\ntype NativeTestClientConstructor = new (\n\troutesJson: string,\n\thandlers: Record<string, HandlerFunction>,\n\tconfig: string | null,\n\tlifecycleHooks: NativeLifecycleHooksPayload | null,\n\tdependencies: Record<string, unknown> | null,\n) => NativeClient;\n\ntype WasmBindings = {\n\tdefault?: (module?: unknown) => Promise<unknown>;\n\tinit: () => unknown;\n\tTestClient: NativeTestClientConstructor;\n};\n\nlet wasmBindingsPromise: Promise<WasmBindings> | null = null;\n\nasync function loadWasmBindings(): Promise<WasmBindings> {\n\tif (wasmBindingsPromise) {\n\t\treturn wasmBindingsPromise;\n\t}\n\twasmBindingsPromise = (async () => {\n\t\tconst distPath = \"./spikard_wasm.js\";\n\t\tconst runtimePath = \"../runtime/spikard_wasm.js\";\n\t\tconst webFallback = \"../../../crates/spikard-wasm/dist-web/\" + \"spikard_wasm.js\";\n\t\tconst nodeFallback = \"../../../crates/spikard-wasm/dist-node/\" + \"spikard_wasm.js\";\n\t\tconst preferNode = isNodeLikeEnvironment();\n\n\t\tconst candidates = preferNode\n\t\t\t? [distPath, nodeFallback, runtimePath, webFallback]\n\t\t\t: [distPath, runtimePath, webFallback, nodeFallback];\n\n\t\tfor (const candidate of candidates) {\n\t\t\ttry {\n\t\t\t\treturn (await import(candidate)) as unknown as WasmBindings;\n\t\t\t} catch {}\n\t\t}\n\n\t\tthrow new Error(\"Failed to load WASM bindings (dist, runtime, dist-web, dist-node).\");\n\t})();\n\treturn wasmBindingsPromise;\n}\n\nconst defaultNativeClientFactory: NativeClientFactory = async (\n\troutesJson,\n\thandlers,\n\tconfig,\n\tlifecycleHooks,\n\tdependencies,\n) => {\n\tconst bindings = await loadWasmBindings();\n\tif (typeof bindings.default === \"function\") {\n\t\tawait bindings.default();\n\t}\n\tawait Promise.resolve(bindings.init());\n\treturn new bindings.TestClient(routesJson, handlers, config, lifecycleHooks, dependencies);\n};\n\nlet nativeClientFactory: NativeClientFactory = defaultNativeClientFactory;\n\nexport function __setNativeClientFactory(factory?: NativeClientFactory): void {\n\tnativeClientFactory = factory ?? defaultNativeClientFactory;\n}\n\ninterface NativeSnapshot {\n\tstatus: number;\n\theaders: HeaderMap;\n\tbody: Uint8Array;\n}\n\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\nconst RAW_REQUEST_KEY = \"__spikard_raw_request__\";\nconst ABORT_SIGNAL_KEY = \"__spikard_abort_signal__\";\nconst EMPTY_HOOKS: LifecycleHooks = {\n\tonRequest: [],\n\tpreValidation: [],\n\tpreHandler: [],\n\tonResponse: [],\n\tonError: [],\n};\n\nexport type GunzipImplementation = (data: Uint8Array) => Uint8Array;\n\nlet gunzipImplementation: GunzipImplementation | null = null;\n\nexport function __setGunzipImplementation(fn: GunzipImplementation | null): void {\n\tgunzipImplementation = fn;\n}\n\nexport class TestResponse {\n\tprivate readonly bodyBytes: Uint8Array;\n\tprivate decodedBody: Uint8Array | null = null;\n\n\tconstructor(\n\t\tprivate readonly status: number,\n\t\tprivate readonly headersMap: HeaderMap,\n\t\tbody: Uint8Array | ArrayBuffer | ArrayLike<number>,\n\t) {\n\t\tthis.bodyBytes = toUint8Array(body);\n\t}\n\n\tget statusCode(): number {\n\t\treturn this.status;\n\t}\n\n\theaders(): HeaderMap {\n\t\treturn { ...this.headersMap };\n\t}\n\n\ttext(): string {\n\t\treturn textDecoder.decode(this.getDecodedBody());\n\t}\n\n\tjson(): JsonValue | string | null {\n\t\tconst body = this.getDecodedBody();\n\t\tif (body.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst textValue = textDecoder.decode(body);\n\t\ttry {\n\t\t\treturn JSON.parse(textValue) as JsonValue;\n\t\t} catch {\n\t\t\treturn textValue;\n\t\t}\n\t}\n\n\tbytes(): Uint8Array {\n\t\tconst decoded = this.getDecodedBody();\n\t\tconst bufferCtor = globalAny.Buffer as { from: (data: Uint8Array) => Uint8Array } | undefined;\n\t\tif (bufferCtor) {\n\t\t\treturn bufferCtor.from(decoded);\n\t\t}\n\t\treturn decoded.slice();\n\t}\n\traw(): Uint8Array {\n\t\treturn this.bodyBytes.slice();\n\t}\n\n\tprivate getDecodedBody(): Uint8Array {\n\t\tif (this.decodedBody) {\n\t\t\treturn this.decodedBody;\n\t\t}\n\t\tconst encoding = this.getHeaderValue(\"content-encoding\");\n\t\tif (encoding && encoding.toLowerCase() === \"gzip\") {\n\t\t\tthis.decodedBody = gunzipBytes(this.bodyBytes);\n\t\t\treturn this.decodedBody;\n\t\t}\n\t\tthis.decodedBody = this.bodyBytes;\n\t\treturn this.decodedBody;\n\t}\n\n\tprivate getHeaderValue(name: string): string | undefined {\n\t\tfor (const [key, value] of Object.entries(this.headersMap)) {\n\t\t\tif (key.toLowerCase() === name.toLowerCase()) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n}\n\nexport class TestClient {\n\tprivate readonly routes: SpikardApp[\"routes\"];\n\tprivate readonly websocketRoutes: SpikardApp[\"websocketRoutes\"];\n\tpublic readonly websocketHandlers: Record<string, WebSocketHandlerLike>;\n\tprivate readonly nativeClientPromise: Promise<NativeClient>;\n\n\tconstructor(app: SpikardApp) {\n\t\tif (!app || !Array.isArray(app.routes)) {\n\t\t\tthrow new Error(\"Invalid Spikard app: missing routes\");\n\t\t}\n\t\tthis.routes = app.routes;\n\t\tthis.websocketRoutes = app.websocketRoutes ?? [];\n\t\tconst httpHandlers = app.handlers ?? {};\n\t\tthis.websocketHandlers = app.websocketHandlers ?? httpHandlers;\n\t\tconst routesJson = JSON.stringify(app.routes);\n\t\tconst lifecycleHooks = normalizeLifecycleHooks(app.lifecycleHooks);\n\t\tconst wrappedHandlers = wrapHandlers(httpHandlers);\n\t\tconst dependencies = (app as SpikardApp & { dependencies?: Record<string, unknown> }).dependencies ?? null;\n\t\tconst nativeLifecycleHooks = createNativeLifecycleHooks(lifecycleHooks);\n\n\t\tthis.nativeClientPromise = (async () => {\n\t\t\tconst resolvedApp = await withStaticManifest(app);\n\t\t\tconst configString =\n\t\t\t\tresolvedApp.config && Object.keys(resolvedApp.config).length > 0 ? JSON.stringify(resolvedApp.config) : null;\n\t\t\treturn nativeClientFactory(routesJson, wrappedHandlers, configString, nativeLifecycleHooks, dependencies);\n\t\t})();\n\t}\n\n\tasync get(path: string, headers?: Record<string, string>): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await this.dispatchWithHeaders(native, \"GET\", path, headers);\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync delete(path: string, headers?: Record<string, string>): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await this.dispatchWithHeaders(native, \"DELETE\", path, headers);\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync head(path: string, headers?: Record<string, string>): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await this.dispatchWithHeaders(native, \"HEAD\", path, headers);\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync options(path: string, headers?: Record<string, string>): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await this.dispatchWithHeaders(native, \"OPTIONS\", path, headers);\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync trace(path: string, headers?: Record<string, string>): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await this.dispatchWithHeaders(native, \"TRACE\", path, headers);\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync post(path: string, options?: RequestOptions): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await native.post(path, this.buildNativeOptions(options));\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync put(path: string, options?: RequestOptions): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await native.put(path, this.buildNativeOptions(options));\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync patch(path: string, options?: RequestOptions): Promise<TestResponse> {\n\t\tconst native = await this.nativeClientPromise;\n\t\tconst snapshot = await native.patch(path, this.buildNativeOptions(options));\n\t\treturn this.responseFromNative(snapshot);\n\t}\n\n\tasync websocketConnect(path: string): Promise<WebSocketTestConnection> {\n\t\tawait this.nativeClientPromise;\n\t\tconst route = this.findWebSocketRoute(path);\n\t\tif (!route) {\n\t\t\tthrow new Error(`WebSocket route not found for ${path}`);\n\t\t}\n\t\tconst handler = this.websocketHandlers[route.metadata.handler_name];\n\t\tif (!handler) {\n\t\t\tthrow new Error(`Handler ${route.metadata.handler_name} not registered`);\n\t\t}\n\t\treturn WebSocketTestConnection.connect(handler);\n\t}\n\n\tprivate responseFromNative(snapshot: NativeSnapshot) {\n\t\tconst rawHeaders = normalizeRecord(snapshot.headers);\n\t\tconst normalizedHeaders = lowerCaseHeaderKeys(rawHeaders);\n\t\tconst bodyBytes = toUint8Array(snapshot.body);\n\t\tconst unwrapped = tryUnwrapStructuredSnapshot(bodyBytes);\n\t\tif (unwrapped) {\n\t\t\tconst flattened = flattenStructuredResponse(unwrapped);\n\t\t\tconst status = flattened.status ?? flattened.statusCode ?? snapshot.status;\n\t\t\tconst headers = lowerCaseHeaderKeys({\n\t\t\t\t...normalizeRecord(flattened.headers ?? {}),\n\t\t\t\t...normalizedHeaders,\n\t\t\t});\n\t\t\tconst body = flattened.body ?? null;\n\t\t\treturn new TestResponse(status, headers, encodeBodyBytes(body));\n\t\t}\n\t\treturn new TestResponse(snapshot.status, normalizedHeaders, bodyBytes);\n\t}\n\n\tprivate dispatchWithHeaders(\n\t\tnative: NativeClient,\n\t\tmethod: string,\n\t\tpath: string,\n\t\theaders?: Record<string, string>,\n\t): Promise<NativeSnapshot> {\n\t\tconst normalizedHeaders = normalizeHeaderInput(headers);\n\t\tif (!normalizedHeaders) {\n\t\t\tswitch (method) {\n\t\t\t\tcase \"GET\":\n\t\t\t\t\treturn native.get(path, null);\n\t\t\t\tcase \"DELETE\":\n\t\t\t\t\treturn native.delete(path, null);\n\t\t\t\tcase \"HEAD\":\n\t\t\t\t\treturn native.head(path, null);\n\t\t\t\tcase \"OPTIONS\":\n\t\t\t\t\treturn native.options(path, null);\n\t\t\t\tcase \"TRACE\":\n\t\t\t\t\treturn native.trace(path, null);\n\t\t\t\tdefault:\n\t\t\t\t\treturn native.get(path, null);\n\t\t\t}\n\t\t}\n\t\tconst maybeHandleRequest = (native as unknown as { handle_request?: unknown }).handle_request;\n\t\tif (typeof maybeHandleRequest === \"function\") {\n\t\t\treturn native.handle_request(JSON.stringify({ method, path, headers: normalizedHeaders }));\n\t\t}\n\t\tswitch (method) {\n\t\t\tcase \"GET\":\n\t\t\t\treturn native.get(path, normalizedHeaders);\n\t\t\tcase \"DELETE\":\n\t\t\t\treturn native.delete(path, normalizedHeaders);\n\t\t\tcase \"HEAD\":\n\t\t\t\treturn native.head(path, normalizedHeaders);\n\t\t\tcase \"OPTIONS\":\n\t\t\t\treturn native.options(path, normalizedHeaders);\n\t\t\tcase \"TRACE\":\n\t\t\t\treturn native.trace(path, normalizedHeaders);\n\t\t\tdefault:\n\t\t\t\treturn native.get(path, normalizedHeaders);\n\t\t}\n\t}\n\n\tprivate buildNativeOptions(options?: RequestOptions): NativeRequestOptions | null {\n\t\tif (!options) {\n\t\t\treturn null;\n\t\t}\n\t\tconst native: NativeRequestOptions = {};\n\t\tconst headers = this.buildHeaders(options);\n\t\tif (headers) {\n\t\t\tnative.headers = headers;\n\t\t}\n\t\tif (options.multipart) {\n\t\t\tnative.multipart = {\n\t\t\t\tfields: options.multipart.fields ?? {},\n\t\t\t\tfiles: options.multipart.files ?? [],\n\t\t\t};\n\t\t\treturn native;\n\t\t}\n\t\tif (options.form && typeof options.form === \"object\") {\n\t\t\tnative.form = options.form;\n\t\t\treturn native;\n\t\t}\n\t\tif (typeof options.form === \"string\") {\n\t\t\tnative.formRaw = options.form;\n\t\t\treturn native;\n\t\t}\n\t\tif (options.formRaw) {\n\t\t\tnative.formRaw = options.formRaw;\n\t\t\treturn native;\n\t\t}\n\t\tif (\"json\" in options) {\n\t\t\tnative.json = options.json == null ? null : normalizeJsonValue(options.json);\n\t\t}\n\t\tif (options.binary) {\n\t\t\tnative.binary = options.binary;\n\t\t}\n\t\treturn Object.keys(native).length === 0 ? null : native;\n\t}\n\n\tprivate buildHeaders(options?: RequestOptions): HeaderMap | null {\n\t\tif (!options?.headers || Object.keys(options.headers).length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn normalizeHeaderInput(options.headers);\n\t}\n\n\tprivate findRoute(\n\t\tmethod: string,\n\t\ttargetPath: string,\n\t): { metadata: SpikardApp[\"routes\"][number]; params: Record<string, string> } | undefined {\n\t\tfor (const metadata of this.routes) {\n\t\t\tif (!methodsMatch(metadata.method, method)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst params = matchPath(metadata.path, targetPath);\n\t\t\tif (params) {\n\t\t\t\treturn { metadata, params };\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t}\n\n\tprivate findWebSocketRoute(\n\t\ttargetPath: string,\n\t): { metadata: SpikardApp[\"routes\"][number]; params: Record<string, string> } | undefined {\n\t\tfor (const metadata of this.websocketRoutes ?? []) {\n\t\t\tconst params = matchPath(metadata.path, targetPath);\n\t\t\tif (params) {\n\t\t\t\treturn { metadata, params };\n\t\t\t}\n\t\t}\n\t\treturn this.findRoute(\"GET\", targetPath);\n\t}\n}\n\nfunction normalizeHeaderInput(headers?: Record<string, string> | null): HeaderMap | null {\n\tif (!headers) {\n\t\treturn null;\n\t}\n\tconst normalized: HeaderMap = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tnormalized[key] = String(value);\n\t}\n\treturn normalized;\n}\n\nasync function withStaticManifest(app: SpikardApp): Promise<SpikardApp> {\n\tconst config = app.config;\n\tif (!config || !config.staticFiles || config.staticFiles.length === 0) {\n\t\treturn app;\n\t}\n\tif (Array.isArray(config.__wasmStaticManifest) && config.__wasmStaticManifest.length > 0) {\n\t\treturn app;\n\t}\n\n\tconst manifest = await buildStaticManifest(config.staticFiles);\n\tif (manifest.length === 0) {\n\t\treturn app;\n\t}\n\treturn {\n\t\t...app,\n\t\tconfig: {\n\t\t\t...config,\n\t\t\t__wasmStaticManifest: manifest,\n\t\t},\n\t};\n}\n\nfunction isNodeLikeEnvironment(): boolean {\n\tconst processValue = (globalThis as Record<string, unknown>)[\"process\"];\n\tif (!processValue || typeof processValue !== \"object\") {\n\t\treturn false;\n\t}\n\tconst versionsValue = (processValue as Record<string, unknown>)[\"versions\"];\n\tif (!versionsValue || typeof versionsValue !== \"object\") {\n\t\treturn false;\n\t}\n\treturn typeof (versionsValue as Record<string, unknown>)[\"node\"] === \"string\";\n}\n\nfunction hasDeno(): boolean {\n\treturn typeof (globalThis as Record<string, unknown>)[\"Deno\"] === \"object\";\n}\n\nfunction normalizeRoute(route: string): string {\n\tlet normalized = route.replaceAll(\"\\\\\", \"/\");\n\twhile (normalized.includes(\"//\")) {\n\t\tnormalized = normalized.replaceAll(\"//\", \"/\");\n\t}\n\tif (!normalized.startsWith(\"/\")) {\n\t\tnormalized = `/${normalized}`;\n\t}\n\treturn normalized;\n}\n\nfunction contentTypeForPath(path: string): string {\n\tconst lower = path.toLowerCase();\n\tif (lower.endsWith(\".html\")) {\n\t\treturn \"text/html\";\n\t}\n\tif (lower.endsWith(\".txt\")) {\n\t\treturn \"text/plain\";\n\t}\n\tif (lower.endsWith(\".css\")) {\n\t\treturn \"text/css\";\n\t}\n\tif (lower.endsWith(\".js\") || lower.endsWith(\".mjs\")) {\n\t\treturn \"application/javascript\";\n\t}\n\tif (lower.endsWith(\".json\")) {\n\t\treturn \"application/json\";\n\t}\n\tif (lower.endsWith(\".svg\")) {\n\t\treturn \"image/svg+xml\";\n\t}\n\tif (lower.endsWith(\".png\")) {\n\t\treturn \"image/png\";\n\t}\n\tif (lower.endsWith(\".jpg\") || lower.endsWith(\".jpeg\")) {\n\t\treturn \"image/jpeg\";\n\t}\n\treturn \"application/octet-stream\";\n}\n\nfunction buildStaticHeaders(filePath: string, cacheControl?: string | null): Record<string, string> {\n\tconst headers: Record<string, string> = {\n\t\t\"content-type\": contentTypeForPath(filePath),\n\t};\n\tif (cacheControl) {\n\t\theaders[\"cache-control\"] = cacheControl;\n\t}\n\treturn headers;\n}\n\nasync function buildStaticManifest(configs: StaticFilesConfig[]): Promise<StaticManifestEntry[]> {\n\tif (isNodeLikeEnvironment()) {\n\t\tconst fs = await import(\"node:fs\");\n\t\tconst path = await import(\"node:path\");\n\t\tconst manifest: StaticManifestEntry[] = [];\n\t\tfor (const config of configs) {\n\t\t\tif (!config.directory || !config.routePrefix) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!fs.existsSync(config.directory)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst stack: string[] = [config.directory];\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tconst current = stack.pop();\n\t\t\t\tif (!current) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst stats = fs.statSync(current);\n\t\t\t\tif (stats.isDirectory()) {\n\t\t\t\t\tfor (const child of fs.readdirSync(current)) {\n\t\t\t\t\t\tstack.push(path.join(current, child));\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst relative = path.relative(config.directory, current).split(path.sep).join(\"/\");\n\t\t\t\tlet prefix = config.routePrefix;\n\t\t\t\twhile (prefix.endsWith(\"/\")) {\n\t\t\t\t\tprefix = prefix.slice(0, -1);\n\t\t\t\t}\n\t\t\t\tconst route = normalizeRoute(`${prefix}/${relative}`);\n\t\t\t\tconst headers = buildStaticHeaders(current, config.cacheControl ?? null);\n\t\t\t\tconst body = bufferToBase64(new Uint8Array(fs.readFileSync(current)));\n\t\t\t\tmanifest.push({ route, headers, body });\n\t\t\t}\n\n\t\t\tif (config.indexFile ?? true) {\n\t\t\t\tconst indexPath = path.join(config.directory, \"index.html\");\n\t\t\t\tif (fs.existsSync(indexPath)) {\n\t\t\t\t\tconst headers = buildStaticHeaders(indexPath, config.cacheControl ?? null);\n\t\t\t\t\tconst body = bufferToBase64(new Uint8Array(fs.readFileSync(indexPath)));\n\t\t\t\t\tconst prefix = normalizeRoute(config.routePrefix);\n\t\t\t\t\tmanifest.push({ route: prefix, headers: { ...headers }, body });\n\t\t\t\t\tif (!prefix.endsWith(\"/\")) {\n\t\t\t\t\t\tmanifest.push({ route: `${prefix}/`, headers: { ...headers }, body });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn manifest;\n\t}\n\n\tif (hasDeno()) {\n\t\tconst deno = (globalThis as Record<string, unknown>)[\"Deno\"] as {\n\t\t\treadDir: (path: string) => AsyncIterable<{ name: string; isFile: boolean; isDirectory: boolean }>;\n\t\t\treadFile: (path: string) => Promise<Uint8Array>;\n\t\t};\n\n\t\tconst manifest: StaticManifestEntry[] = [];\n\t\tfor (const config of configs) {\n\t\t\tif (!config.directory || !config.routePrefix) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst root = config.directory.replaceAll(\"\\\\\", \"/\").replace(/\\/+$/, \"\");\n\n\t\t\tconst stack: string[] = [root];\n\t\t\twhile (stack.length > 0) {\n\t\t\t\tconst current = stack.pop();\n\t\t\t\tif (!current) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor await (const entry of deno.readDir(current)) {\n\t\t\t\t\tconst entryPath = `${current}/${entry.name}`;\n\t\t\t\t\tif (entry.isDirectory) {\n\t\t\t\t\t\tstack.push(entryPath);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!entry.isFile) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst relative = entryPath.startsWith(`${root}/`) ? entryPath.slice(root.length + 1) : entry.name;\n\t\t\t\t\tlet prefix = config.routePrefix;\n\t\t\t\t\twhile (prefix.endsWith(\"/\")) {\n\t\t\t\t\t\tprefix = prefix.slice(0, -1);\n\t\t\t\t\t}\n\t\t\t\t\tconst route = normalizeRoute(`${prefix}/${relative}`);\n\t\t\t\t\tconst headers = buildStaticHeaders(entryPath, config.cacheControl ?? null);\n\t\t\t\t\tconst body = bufferToBase64(await deno.readFile(entryPath));\n\t\t\t\t\tmanifest.push({ route, headers, body });\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (config.indexFile ?? true) {\n\t\t\t\tconst indexPath = `${root}/index.html`;\n\t\t\t\ttry {\n\t\t\t\t\tconst bytes = await deno.readFile(indexPath);\n\t\t\t\t\tconst headers = buildStaticHeaders(indexPath, config.cacheControl ?? null);\n\t\t\t\t\tconst body = bufferToBase64(bytes);\n\t\t\t\t\tconst prefix = normalizeRoute(config.routePrefix);\n\t\t\t\t\tmanifest.push({ route: prefix, headers: { ...headers }, body });\n\t\t\t\t\tif (!prefix.endsWith(\"/\")) {\n\t\t\t\t\t\tmanifest.push({ route: `${prefix}/`, headers: { ...headers }, body });\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t}\n\t\treturn manifest;\n\t}\n\n\treturn [];\n}\n\ntype WebSocketQueuedMessage =\n\t| { kind: \"json\"; payload: JsonValue }\n\t| { kind: \"text\"; payload: string }\n\t| { kind: \"binary\"; payload: Uint8Array };\n\nclass WebSocketServerSocketImpl implements WebSocketServerSocket {\n\tprivate closed = false;\n\n\tconstructor(\n\t\tprivate readonly enqueue: (message: WebSocketQueuedMessage) => void,\n\t\tprivate readonly onClose: (code?: number, reason?: string) => Promise<void>,\n\t) {}\n\n\tasync sendText(message: string): Promise<void> {\n\t\tthis.ensureOpen();\n\t\tthis.enqueue({ kind: \"text\", payload: message });\n\t}\n\n\tasync sendJson(payload: JsonValue): Promise<void> {\n\t\tthis.ensureOpen();\n\t\tthis.enqueue({ kind: \"json\", payload });\n\t}\n\n\tasync sendBytes(payload: BinaryLike): Promise<void> {\n\t\tthis.ensureOpen();\n\t\tthis.enqueue({ kind: \"binary\", payload: toUint8Array(payload) });\n\t}\n\n\tasync close(code?: number, reason?: string): Promise<void> {\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.closed = true;\n\t\tawait this.onClose(code, reason);\n\t}\n\n\tasync broadcast(payload: JsonValue | string): Promise<void> {\n\t\tif (typeof payload === \"string\") {\n\t\t\tawait this.sendText(payload);\n\t\t\treturn;\n\t\t}\n\t\tawait this.sendJson(payload);\n\t}\n\n\tisClosed(): boolean {\n\t\treturn this.closed;\n\t}\n\n\tprivate ensureOpen(): void {\n\t\tif (this.closed) {\n\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t}\n\t}\n}\n\nexport class WebSocketTestConnection {\n\tprivate readonly pending: WebSocketQueuedMessage[] = [];\n\tprivate readonly socket: WebSocketServerSocketImpl;\n\tprivate closed = false;\n\n\tprivate constructor(private readonly handler: WebSocketHandlerLike) {\n\t\tthis.socket = new WebSocketServerSocketImpl(\n\t\t\t(message) => {\n\t\t\t\tthis.pending.push(message);\n\t\t\t},\n\t\t\tasync (code, reason) => {\n\t\t\t\tthis.closed = true;\n\t\t\t\tif (isWebSocketHandler(this.handler) && this.handler.onClose) {\n\t\t\t\t\tawait this.handler.onClose(this.socket, code, reason);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\tstatic async connect(handler: WebSocketHandlerLike): Promise<WebSocketTestConnection> {\n\t\tconst connection = new WebSocketTestConnection(handler);\n\t\tif (isWebSocketHandler(handler) && handler.onOpen) {\n\t\t\tawait handler.onOpen(connection.socket);\n\t\t}\n\t\treturn connection;\n\t}\n\n\tasync sendJson(payload: JsonValue): Promise<void> {\n\t\tthis.ensureOpen();\n\t\tawait this.dispatchMessage(payload);\n\t}\n\n\tasync sendText(payload: string): Promise<void> {\n\t\tthis.ensureOpen();\n\t\tawait this.dispatchMessage(payload);\n\t}\n\n\tasync sendBytes(payload: BinaryLike): Promise<void> {\n\t\tthis.ensureOpen();\n\t\tawait this.dispatchMessage(payload);\n\t}\n\n\tasync receiveJson(): Promise<JsonValue> {\n\t\tconst message = this.shiftMessage();\n\t\tif (message.kind === \"json\") {\n\t\t\treturn message.payload;\n\t\t}\n\t\tif (message.kind === \"binary\") {\n\t\t\tconst text = textDecoder.decode(message.payload);\n\t\t\tconst parsed = safeParseJson(text);\n\t\t\tif (parsed === null) {\n\t\t\t\tthrow new Error(\"WebSocket binary message is not valid JSON\");\n\t\t\t}\n\t\t\treturn parsed;\n\t\t}\n\t\tconst parsed = safeParseJson(message.payload);\n\t\tif (parsed === null) {\n\t\t\tthrow new Error(\"WebSocket text message is not valid JSON\");\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tasync receiveText(): Promise<string> {\n\t\tconst message = this.shiftMessage();\n\t\tif (message.kind === \"text\") {\n\t\t\treturn message.payload;\n\t\t}\n\t\tif (message.kind === \"binary\") {\n\t\t\treturn textDecoder.decode(message.payload);\n\t\t}\n\t\treturn JSON.stringify(message.payload);\n\t}\n\n\tasync receiveBytes(): Promise<Uint8Array> {\n\t\tconst message = this.shiftMessage();\n\t\tif (message.kind === \"binary\") {\n\t\t\treturn message.payload;\n\t\t}\n\t\tif (message.kind === \"text\") {\n\t\t\treturn textEncoder.encode(message.payload);\n\t\t}\n\t\treturn textEncoder.encode(JSON.stringify(message.payload));\n\t}\n\n\tasync close(code?: number, reason?: string): Promise<void> {\n\t\tif (this.closed) {\n\t\t\treturn;\n\t\t}\n\t\tthis.closed = true;\n\t\tthis.pending.length = 0;\n\t\tawait this.socket.close(code, reason);\n\t}\n\n\tprivate async dispatchMessage(payload: JsonValue | string | BinaryLike): Promise<void> {\n\t\tconst result = await (isWebSocketHandler(this.handler)\n\t\t\t? this.handler.onMessage?.(this.socket, payload)\n\t\t\t: this.handler(payload as HandlerPayload));\n\t\tif (result === undefined) {\n\t\t\treturn;\n\t\t}\n\t\tif (isStreamingResponse(result)) {\n\t\t\tthrow new Error(\"WebSocket handlers cannot return streaming responses\");\n\t\t}\n\t\tconst message = normalizeWebSocketResult(result);\n\t\tif (message) {\n\t\t\tthis.pending.push(message);\n\t\t}\n\t}\n\n\tprivate shiftMessage(): WebSocketQueuedMessage {\n\t\tif (this.pending.length === 0) {\n\t\t\tthrow new Error(\"No WebSocket messages available\");\n\t\t}\n\t\tconst message = this.pending.shift();\n\t\tif (!message) {\n\t\t\tthrow new Error(\"No WebSocket messages available\");\n\t\t}\n\t\treturn message;\n\t}\n\n\tprivate ensureOpen(): void {\n\t\tif (this.closed) {\n\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t}\n\t}\n}\n\nfunction isWebSocketHandler(handler: WebSocketHandlerLike): handler is WebSocketHandler {\n\tif (typeof handler !== \"object\" || handler === null) {\n\t\treturn false;\n\t}\n\tconst candidate = handler as WebSocketHandler;\n\treturn (\n\t\ttypeof candidate.onMessage === \"function\" ||\n\t\ttypeof candidate.onOpen === \"function\" ||\n\t\ttypeof candidate.onClose === \"function\"\n\t);\n}\n\nfunction normalizeWebSocketResult(result: unknown): WebSocketQueuedMessage | null {\n\tif (result === null || result === undefined) {\n\t\treturn null;\n\t}\n\tif (typeof result === \"string\") {\n\t\tconst parsed = safeParseJson(result);\n\t\tif (parsed === null) {\n\t\t\treturn { kind: \"text\", payload: result };\n\t\t}\n\t\treturn { kind: \"json\", payload: parsed };\n\t}\n\tif (isBinaryLike(result)) {\n\t\treturn { kind: \"binary\", payload: toUint8Array(result) };\n\t}\n\treturn { kind: \"json\", payload: result as JsonValue };\n}\n\nfunction safeParseJson(text: string): JsonValue | null {\n\ttry {\n\t\treturn JSON.parse(text) as JsonValue;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction isBinaryLike(value: unknown): value is BinaryLike {\n\treturn value instanceof ArrayBuffer || ArrayBuffer.isView(value);\n}\n\nfunction normalizeRecord(record: HeaderInput): HeaderMap {\n\tif (!record) {\n\t\treturn {};\n\t}\n\tif (isMapLike(record)) {\n\t\treturn Object.fromEntries(record.entries());\n\t}\n\treturn record;\n}\n\nfunction normalizeValueRecord<T>(record: Map<string, T> | Record<string, T> | null | undefined): Record<string, T> {\n\tif (!record) {\n\t\treturn {};\n\t}\n\tif (record instanceof Map) {\n\t\treturn Object.fromEntries(record.entries());\n\t}\n\treturn record;\n}\n\nfunction isMapLike(record: HeaderInput): record is Map<string, string> {\n\treturn Boolean(record) && record instanceof Map;\n}\n\nfunction normalizeLifecycleHooks(hooks?: Partial<LifecycleHooks>): LifecycleHooks {\n\tif (!hooks) {\n\t\treturn EMPTY_HOOKS;\n\t}\n\treturn {\n\t\tonRequest: [...(hooks.onRequest ?? [])],\n\t\tpreValidation: [...(hooks.preValidation ?? [])],\n\t\tpreHandler: [...(hooks.preHandler ?? [])],\n\t\tonResponse: [...(hooks.onResponse ?? [])],\n\t\tonError: [...(hooks.onError ?? [])],\n\t};\n}\n\nfunction hasLifecycleHooks(hooks: LifecycleHooks): boolean {\n\treturn (\n\t\thooks.onRequest.length > 0 ||\n\t\thooks.preValidation.length > 0 ||\n\t\thooks.preHandler.length > 0 ||\n\t\thooks.onResponse.length > 0 ||\n\t\thooks.onError.length > 0\n\t);\n}\n\nfunction createNativeLifecycleHooks(hooks: LifecycleHooks): NativeLifecycleHooksPayload | null {\n\tif (!hasLifecycleHooks(hooks)) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tonRequest: hooks.onRequest.map((hook) => wrapNativeRequestHook(hook)),\n\t\tpreValidation: hooks.preValidation.map((hook) => wrapNativeRequestHook(hook)),\n\t\tpreHandler: hooks.preHandler.map((hook) => wrapNativeRequestHook(hook)),\n\t\tonResponse: hooks.onResponse.map((hook) => wrapNativeResponseHook(hook)),\n\t\tonError: hooks.onError.map((hook) => wrapNativeResponseHook(hook)),\n\t};\n}\n\nfunction wrapNativeRequestHook(\n\thook: LifecycleHookFunction,\n): (payload: InternalRequestPayload) => Promise<NativeLifecycleHookResult> {\n\treturn async (payload) => {\n\t\tconst wrapped = maybeWrapRequestPayload(payload);\n\t\tif (!isWasmRequest(wrapped)) {\n\t\t\tthrow new Error(\"Invalid lifecycle request payload\");\n\t\t}\n\t\tconst request = wrapped as WasmRequest;\n\t\tconst result = await hook(request);\n\t\tconst maybeRequest = ensureWasmRequest(result);\n\t\tif (maybeRequest) {\n\t\t\treturn { type: \"request\", payload: serializeWasmRequest(maybeRequest) };\n\t\t}\n\t\tconst response = await normalizeStructuredResponse(result);\n\t\treturn { type: \"response\", payload: response };\n\t};\n}\n\nfunction wrapNativeResponseHook(\n\thook: LifecycleHookFunction,\n): (payload: StructuredHandlerResponse) => Promise<NativeLifecycleHookResult> {\n\treturn async (payload) => {\n\t\tconst current = await normalizeStructuredResponse(payload);\n\t\tconst result = await hook(current);\n\t\tconst maybeRequest = ensureWasmRequest(result);\n\t\tif (maybeRequest) {\n\t\t\treturn { type: \"response\", payload: current };\n\t\t}\n\t\tconst updated = await normalizeStructuredResponse(result, current);\n\t\treturn { type: \"response\", payload: updated };\n\t};\n}\n\nfunction serializeWasmRequest(request: WasmRequest): InternalRequestPayload {\n\treturn request.toPayload();\n}\n\nfunction normalizeJsonValue(value: unknown): JsonValue {\n\tif (value instanceof Map) {\n\t\tconst result: Record<string, JsonValue> = {};\n\t\tfor (const [key, entry] of value.entries()) {\n\t\t\tresult[key] = normalizeJsonValue(entry);\n\t\t}\n\t\treturn result;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.map((entry) => normalizeJsonValue(entry)) as JsonValue;\n\t}\n\tif (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n\t\treturn value as JsonValue;\n\t}\n\tif (typeof value === \"bigint\") {\n\t\treturn value.toString();\n\t}\n\tif (typeof value === \"object\" && value) {\n\t\tconst result: Record<string, JsonValue> = {};\n\t\tfor (const [key, entry] of Object.entries(value as Record<string, unknown>)) {\n\t\t\tresult[key] = normalizeJsonValue(entry);\n\t\t}\n\t\treturn result;\n\t}\n\treturn value as JsonValue;\n}\n\nfunction lowerCaseHeaderKeys(headers: HeaderMap): HeaderMap {\n\tconst lowered: HeaderMap = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tlowered[key.toLowerCase()] = value;\n\t}\n\treturn lowered;\n}\n\nfunction tryUnwrapStructuredSnapshot(body: Uint8Array): StructuredHandlerResponse | null {\n\tif (body.length === 0) {\n\t\treturn null;\n\t}\n\tconst text = textDecoder.decode(body);\n\ttry {\n\t\tconst parsed = JSON.parse(text) as unknown;\n\t\tif (!isStructuredResponseLike(parsed)) {\n\t\t\treturn null;\n\t\t}\n\t\treturn parsed as StructuredHandlerResponse;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction flattenStructuredResponse(response: StructuredHandlerResponse): StructuredHandlerResponse {\n\tlet current: StructuredHandlerResponse = response;\n\tlet mergedHeaders: HeaderMap = normalizeRecord(current.headers ?? {});\n\n\twhile (current.body && typeof current.body === \"object\" && isStructuredResponseLike(current.body)) {\n\t\tconst next = current.body as unknown as StructuredHandlerResponse;\n\t\tmergedHeaders = {\n\t\t\t...mergedHeaders,\n\t\t\t...normalizeRecord(next.headers ?? {}),\n\t\t};\n\t\tcurrent = next;\n\t}\n\n\treturn {\n\t\t...current,\n\t\theaders: mergedHeaders,\n\t};\n}\n\nfunction encodeBodyBytes(body: HandlerBody): Uint8Array {\n\tif (body == null) {\n\t\treturn new Uint8Array();\n\t}\n\tif (typeof body === \"string\") {\n\t\treturn textEncoder.encode(body);\n\t}\n\treturn textEncoder.encode(JSON.stringify(body));\n}\n\nfunction toUint8Array(value: BinaryLike | ArrayLike<number>): Uint8Array {\n\tif (value instanceof Uint8Array) {\n\t\treturn value;\n\t}\n\tif (value instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(value);\n\t}\n\tif (ArrayBuffer.isView(value)) {\n\t\treturn new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n\t}\n\tif (typeof Blob !== \"undefined\" && value instanceof Blob) {\n\t\tthrow new Error(\"Blob payloads are not supported synchronously\");\n\t}\n\tif (isArrayLike(value)) {\n\t\treturn Uint8Array.from(value);\n\t}\n\tthrow new Error(\"Unsupported binary payload\");\n}\n\nfunction isArrayLike(value: unknown): value is ArrayLike<number> {\n\tif (typeof value === \"object\" && value !== null) {\n\t\tconst length = (value as { length?: unknown }).length;\n\t\treturn typeof length === \"number\";\n\t}\n\treturn false;\n}\n\nfunction gunzipBytes(data: Uint8Array): Uint8Array {\n\tif (gunzipImplementation) {\n\t\ttry {\n\t\t\treturn gunzipImplementation(data);\n\t\t} catch {\n\t\t\treturn data;\n\t\t}\n\t}\n\ttry {\n\t\treturn gunzipSync(data);\n\t} catch {\n\t\treturn data;\n\t}\n}\n\nfunction bufferToBase64(bytes: Uint8Array): string {\n\tconst bufferCtor = globalAny.Buffer as\n\t\t| { from: (data: Uint8Array) => { toString: (encoding: string) => string } }\n\t\t| undefined;\n\tif (bufferCtor) {\n\t\treturn bufferCtor.from(bytes).toString(\"base64\");\n\t}\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\tif (typeof btoa === \"function\") {\n\t\treturn btoa(binary);\n\t}\n\tthrow new Error(\"Base64 encoding is not supported in this environment\");\n}\n\nfunction isAbortSignalLike(value: unknown): value is AbortSignalLike {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst candidate = value as AbortSignalLike;\n\treturn (\n\t\ttypeof candidate.aborted === \"boolean\" &&\n\t\ttypeof candidate.addEventListener === \"function\" &&\n\t\ttypeof candidate.removeEventListener === \"function\"\n\t);\n}\n\nfunction wrapHandlers(handlers: Record<string, HandlerFunction>): Record<string, HandlerFunction> {\n\tconst wrapped: Record<string, HandlerFunction> = {};\n\tfor (const [name, handler] of Object.entries(handlers)) {\n\t\tconst looksLikeStringHandler = handler.toString().includes(\"JSON.parse\");\n\t\twrapped[name] = async (request) => {\n\t\t\tconst rawJson =\n\t\t\t\trequest && typeof request === \"object\" && RAW_REQUEST_KEY in request\n\t\t\t\t\t? String((request as { [RAW_REQUEST_KEY]?: unknown })[RAW_REQUEST_KEY] ?? \"\")\n\t\t\t\t\t: JSON.stringify(request);\n\t\t\tconst maybeSignal =\n\t\t\t\trequest && typeof request === \"object\" && ABORT_SIGNAL_KEY in request\n\t\t\t\t\t? (request as { [ABORT_SIGNAL_KEY]?: unknown })[ABORT_SIGNAL_KEY]\n\t\t\t\t\t: undefined;\n\t\t\tconst context: HandlerContext | undefined = isAbortSignalLike(maybeSignal) ? { signal: maybeSignal } : undefined;\n\t\t\tconst normalizedRequest = maybeWrapRequestPayload(request);\n\t\t\treturn looksLikeStringHandler ? handler(rawJson, context) : handler(normalizedRequest, context);\n\t\t};\n\t}\n\treturn wrapped;\n}\n\ntype RequestBodyKind = \"none\" | \"json\" | \"form\" | \"multipart\" | \"binary\" | \"text\";\n\ninterface BodyMetadata {\n\tkind: RequestBodyKind;\n\ttext?: string | null;\n\tjson?: JsonValue | null;\n\tform?: Record<string, string> | null;\n\tfiles?: MultipartFile[];\n\trawBase64?: string | null;\n}\n\ninterface InternalRequestPayload {\n\tmethod: string;\n\tpath: string;\n\tpathParams?: Record<string, string>;\n\tparams?: Record<string, JsonValue>;\n\tquery?: Record<string, JsonValue>;\n\trawQuery?: Record<string, string[]>;\n\theaders?: Record<string, string>;\n\tcookies?: Record<string, string>;\n\tbody?: JsonValue | null;\n\t__spikard_body_metadata__?: BodyMetadata | null;\n}\n\nclass WasmRequest implements Request {\n\tpublic readonly method: string;\n\tpublic readonly path: string;\n\tpublic readonly queryString: string;\n\tpublic readonly headers: Record<string, string>;\n\tpublic readonly params: Record<string, JsonValue>;\n\tpublic readonly pathParams: Record<string, string>;\n\tpublic readonly query: Record<string, JsonValue>;\n\tpublic readonly files?: MultipartFile[];\n\tprivate readonly rawJson: string;\n\tprivate readonly bodyKind: RequestBodyKind;\n\tprivate readonly bodyJson: JsonValue | undefined;\n\tprivate readonly formData: Record<string, string> | undefined;\n\tprivate readonly textBody: string | undefined;\n\tprivate bodyMetadata: BodyMetadata | null = null;\n\tprivate bodyDirty = false;\n\tprivate _body: Uint8Array | null;\n\n\tconstructor(payload: InternalRequestPayload, rawJson: string) {\n\t\tthis.rawJson = rawJson;\n\t\tthis.method = payload.method;\n\t\tthis.path = payload.path;\n\t\tthis.params = normalizeValueRecord(payload.params as Map<string, JsonValue> | Record<string, JsonValue>);\n\t\tthis.pathParams = normalizeValueRecord(payload.pathParams as Map<string, string> | Record<string, string>);\n\t\tthis.query = normalizeValueRecord(payload.query as Map<string, JsonValue> | Record<string, JsonValue>);\n\t\tthis.headers = normalizeRecord(payload.headers as HeaderInput);\n\t\tthis.queryString = buildQueryString(payload.rawQuery as Map<string, string[]> | Record<string, string[]>);\n\t\tconst normalizedBody = payload.body == null ? null : normalizeJsonValue(payload.body);\n\t\tlet metadata = payload.__spikard_body_metadata__ ?? null;\n\t\tif ((!metadata || metadata.kind === \"none\") && normalizedBody != null) {\n\t\t\tmetadata = buildBodyMetadata(normalizedBody);\n\t\t}\n\t\tif (metadata) {\n\t\t\tmetadata.kind = normalizeRequestBodyKind(metadata.kind);\n\t\t}\n\t\tthis.bodyMetadata = metadata ?? null;\n\t\tconst applied = applyBodyMetadata(this.bodyMetadata, normalizedBody);\n\t\tthis.bodyKind = applied.kind;\n\t\tthis.bodyJson = applied.jsonValue;\n\t\tthis.formData = applied.formValue;\n\t\tthis.textBody = applied.textValue;\n\t\tif (applied.files !== undefined) {\n\t\t\tthis.files = applied.files;\n\t\t}\n\t\tthis._body = applied.buffer;\n\t}\n\n\tget body(): Uint8Array | null {\n\t\treturn this._body;\n\t}\n\n\tset body(value: Uint8Array | null) {\n\t\tthis._body = value;\n\t\tthis.bodyDirty = true;\n\t}\n\n\tjson<T extends JsonValue = JsonValue>(): T {\n\t\tlet value: unknown;\n\t\tif (this.bodyKind === \"json\" && this.bodyJson !== undefined) {\n\t\t\tvalue = this.bodyJson;\n\t\t} else if (this.bodyKind === \"text\" && this.textBody !== undefined) {\n\t\t\ttry {\n\t\t\t\tvalue = JSON.parse(this.textBody);\n\t\t\t} catch {\n\t\t\t\tthrow new Error(\"Request body is not valid JSON\");\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error(\"Request body is not JSON\");\n\t\t}\n\t\treturn normalizeJsonValue(value) as T;\n\t}\n\n\tform(): Record<string, string> {\n\t\tif (this.formData) {\n\t\t\treturn { ...this.formData };\n\t\t}\n\t\tthrow new Error(\"Request body is not form data\");\n\t}\n\n\ttoPayload(): InternalRequestPayload {\n\t\tconst bodyValue = this.buildBodyValue();\n\t\tconst metadata = this.getOrBuildBodyMetadata(bodyValue);\n\t\tconst payload: InternalRequestPayload = {\n\t\t\tmethod: this.method,\n\t\t\tpath: this.path,\n\t\t\tpathParams: { ...this.pathParams },\n\t\t\tparams: { ...this.params },\n\t\t\tquery: { ...this.query },\n\t\t\trawQuery: buildRawQueryMap(this.queryString),\n\t\t\theaders: { ...this.headers },\n\t\t\tcookies: {},\n\t\t\tbody: bodyValue,\n\t\t};\n\t\tif (metadata) {\n\t\t\tpayload.__spikard_body_metadata__ = metadata;\n\t\t}\n\t\treturn payload;\n\t}\n\n\tprivate buildBodyValue(): JsonValue | null {\n\t\tconst currentBody = this.body;\n\t\tif (!currentBody) {\n\t\t\tswitch (this.bodyKind) {\n\t\t\t\tcase \"json\":\n\t\t\t\t\treturn this.bodyJson ?? null;\n\t\t\t\tcase \"text\":\n\t\t\t\t\treturn this.textBody ?? null;\n\t\t\t\tcase \"form\":\n\t\t\t\t\treturn this.formData ? { __spikard_form__: this.formData } : null;\n\t\t\t\tcase \"multipart\":\n\t\t\t\t\treturn this.formData || this.files\n\t\t\t\t\t\t? ({\n\t\t\t\t\t\t\t\t__spikard_multipart__: {\n\t\t\t\t\t\t\t\t\tfields: this.formData ?? {},\n\t\t\t\t\t\t\t\t\tfiles: this.files ?? [],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} as unknown as JsonValue)\n\t\t\t\t\t\t: null;\n\t\t\t\tcase \"binary\":\n\t\t\t\t\tif (this.bodyMetadata?.rawBase64) {\n\t\t\t\t\t\treturn { __spikard_base64__: this.bodyMetadata.rawBase64 };\n\t\t\t\t\t}\n\t\t\t\t\treturn null;\n\t\t\t\tdefault:\n\t\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\tif (currentBody instanceof Uint8Array) {\n\t\t\treturn { __spikard_base64__: bufferToBase64(currentBody) };\n\t\t}\n\t\treturn normalizeJsonValue(currentBody as Record<string, unknown>);\n\t}\n\n\tprivate getOrBuildBodyMetadata(bodyValue: JsonValue | null): BodyMetadata | null {\n\t\tif (!this.bodyDirty && this.bodyMetadata) {\n\t\t\treturn this.bodyMetadata;\n\t\t}\n\t\tconst metadata = buildBodyMetadata(bodyValue ?? null);\n\t\tif (metadata) {\n\t\t\tmetadata.kind = normalizeRequestBodyKind(metadata.kind);\n\t\t}\n\t\tthis.bodyMetadata = metadata;\n\t\tthis.bodyDirty = false;\n\t\treturn metadata;\n\t}\n\n\ttoString(): string {\n\t\treturn this.rawJson;\n\t}\n\n\tvalueOf(): string {\n\t\treturn this.rawJson;\n\t}\n\n\t[Symbol.toPrimitive](): string {\n\t\treturn this.rawJson;\n\t}\n\n\ttoJSON(): Record<string, unknown> {\n\t\ttry {\n\t\t\treturn JSON.parse(this.rawJson) as Record<string, unknown>;\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tmethod: this.method,\n\t\t\t\tpath: this.path,\n\t\t\t};\n\t\t}\n\t}\n}\n\nfunction isWasmRequest(value: unknown): value is WasmRequest {\n\treturn value instanceof WasmRequest;\n}\n\nfunction maybeWrapRequestPayload(payload: HandlerPayload | InternalRequestPayload): HandlerPayload {\n\tif (!payload || typeof payload !== \"object\") {\n\t\treturn payload as HandlerPayload;\n\t}\n\tif (!(\"method\" in payload) || !(\"path\" in payload)) {\n\t\treturn payload as HandlerPayload;\n\t}\n\tconst candidate = payload as InternalRequestPayload & { [RAW_REQUEST_KEY]?: string };\n\tconst rawJson =\n\t\ttypeof candidate[RAW_REQUEST_KEY] === \"string\" ? candidate[RAW_REQUEST_KEY] : JSON.stringify(candidate);\n\treturn new WasmRequest(candidate, rawJson) as unknown as HandlerPayload;\n}\n\nfunction buildQueryString(raw?: Map<string, string[]> | Record<string, string[]>): string {\n\tif (!raw) {\n\t\treturn \"\";\n\t}\n\tconst queryRecord = raw instanceof Map ? Object.fromEntries(raw.entries()) : raw;\n\tconst params = new URLSearchParams();\n\tfor (const [key, values] of Object.entries(queryRecord)) {\n\t\tfor (const value of values ?? []) {\n\t\t\tparams.append(key, value);\n\t\t}\n\t}\n\treturn params.toString();\n}\n\nfunction buildRawQueryMap(queryString: string): Record<string, string[]> {\n\tif (!queryString) {\n\t\treturn {};\n\t}\n\tconst params = new URLSearchParams(queryString);\n\tconst record: Record<string, string[]> = {};\n\tfor (const [key, value] of params.entries()) {\n\t\tif (!record[key]) {\n\t\t\trecord[key] = [];\n\t\t}\n\t\trecord[key].push(value);\n\t}\n\treturn record;\n}\n\nfunction base64ToUint8Array(base64: string): Uint8Array {\n\tconst bufferCtor = globalAny.Buffer as { from: (data: string, encoding: string) => Uint8Array } | undefined;\n\tif (bufferCtor) {\n\t\tconst buf = bufferCtor.from(base64, \"base64\");\n\t\treturn new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n\t}\n\tif (typeof atob === \"function\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let i = 0; i < binary.length; i += 1) {\n\t\t\tbytes[i] = binary.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\tthrow new Error(\"Base64 decoding is not supported in this environment\");\n}\n\nfunction decodeFormValues(values: Record<string, JsonValue>): Record<string, string> {\n\tconst form: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(values)) {\n\t\tif (value == null) {\n\t\t\tform[key] = \"\";\n\t\t} else if (typeof value === \"string\") {\n\t\t\tform[key] = value;\n\t\t} else {\n\t\t\tform[key] = JSON.stringify(value);\n\t\t}\n\t}\n\treturn form;\n}\n\nfunction buildBuffer(bytes: Uint8Array | null): Uint8Array | null {\n\tif (!bytes) {\n\t\treturn null;\n\t}\n\tconst bufferCtor = globalAny.Buffer as { from: (data: Uint8Array) => Uint8Array } | undefined;\n\tif (bufferCtor) {\n\t\tconst buf = bufferCtor.from(bytes);\n\t\treturn new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n\t}\n\treturn bytes;\n}\n\nfunction applyBodyMetadata(\n\tmetadata: BodyMetadata | null | undefined,\n\tpayloadBody: JsonValue | null | undefined,\n): {\n\tkind: RequestBodyKind;\n\tbuffer: Uint8Array | null;\n\tjsonValue: JsonValue | undefined;\n\tformValue: Record<string, string> | undefined;\n\ttextValue: string | undefined;\n\tfiles: MultipartFile[] | undefined;\n} {\n\tconst kind = normalizeRequestBodyKind(metadata?.kind);\n\tlet buffer: Uint8Array | null = null;\n\tif (metadata?.rawBase64) {\n\t\tbuffer = buildBuffer(base64ToUint8Array(metadata.rawBase64));\n\t}\n\n\tlet jsonValue: JsonValue | undefined;\n\tlet formValue: Record<string, string> | undefined;\n\tlet textValue: string | undefined;\n\tconst files = metadata?.files;\n\n\tswitch (kind) {\n\t\tcase \"json\":\n\t\t\tjsonValue = (metadata?.json as JsonValue) ?? (payloadBody as JsonValue);\n\t\t\tif (!buffer && payloadBody != null) {\n\t\t\t\tconst text = JSON.stringify(payloadBody);\n\t\t\t\tbuffer = buildBuffer(textEncoder.encode(text));\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"form\":\n\t\tcase \"multipart\":\n\t\t\tformValue = metadata?.form ?? undefined;\n\t\t\tbreak;\n\t\tcase \"text\":\n\t\t\ttextValue = metadata?.text ?? undefined;\n\t\t\tif (!buffer && textValue !== undefined) {\n\t\t\t\tbuffer = buildBuffer(textEncoder.encode(textValue));\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t}\n\n\treturn {\n\t\tkind,\n\t\tbuffer,\n\t\tjsonValue,\n\t\tformValue,\n\t\ttextValue,\n\t\tfiles,\n\t};\n}\n\nfunction buildBodyMetadata(body: JsonValue | null): BodyMetadata {\n\tif (body == null) {\n\t\treturn { kind: \"none\" };\n\t}\n\tif (typeof body === \"string\") {\n\t\tconst bytes = textEncoder.encode(body);\n\t\treturn {\n\t\t\tkind: \"text\",\n\t\t\ttext: body,\n\t\t\trawBase64: bufferToBase64(bytes),\n\t\t};\n\t}\n\tif (typeof body === \"number\" || typeof body === \"boolean\") {\n\t\tconst text = JSON.stringify(body);\n\t\treturn {\n\t\t\tkind: \"json\",\n\t\t\tjson: body as JsonValue,\n\t\t\trawBase64: bufferToBase64(textEncoder.encode(text)),\n\t\t};\n\t}\n\tif (typeof body === \"object\") {\n\t\tconst payload = body as Record<string, unknown>;\n\t\tif (typeof payload.__spikard_base64__ === \"string\") {\n\t\t\treturn {\n\t\t\t\tkind: \"binary\",\n\t\t\t\trawBase64: payload.__spikard_base64__ as string,\n\t\t\t};\n\t\t}\n\t\tif (payload.__spikard_form__ && typeof payload.__spikard_form__ === \"object\") {\n\t\t\tconst formSource = normalizeValueRecord(\n\t\t\t\tpayload.__spikard_form__ as Map<string, JsonValue> | Record<string, JsonValue>,\n\t\t\t);\n\t\t\tconst formValue = decodeFormValues(formSource);\n\t\t\treturn {\n\t\t\t\tkind: \"form\",\n\t\t\t\tform: formValue,\n\t\t\t\trawBase64: bufferToBase64(textEncoder.encode(new URLSearchParams(formValue).toString())),\n\t\t\t};\n\t\t}\n\t\tif (payload.__spikard_multipart__ && typeof payload.__spikard_multipart__ === \"object\") {\n\t\t\tconst multipart = payload.__spikard_multipart__ as {\n\t\t\t\tfields?: Record<string, JsonValue>;\n\t\t\t\tfiles?: MultipartFile[];\n\t\t\t};\n\t\t\tconst fields = normalizeValueRecord(multipart.fields as Map<string, JsonValue> | Record<string, JsonValue>);\n\t\t\tconst formValue = decodeFormValues(fields);\n\t\t\treturn {\n\t\t\t\tkind: \"multipart\",\n\t\t\t\tform: formValue,\n\t\t\t\tfiles: multipart.files ?? [],\n\t\t\t\trawBase64: bufferToBase64(textEncoder.encode(new URLSearchParams(formValue).toString())),\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkind: \"json\",\n\t\t\tjson: normalizeJsonValue(payload),\n\t\t\trawBase64: bufferToBase64(textEncoder.encode(JSON.stringify(payload))),\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"json\",\n\t\tjson: body,\n\t\trawBase64: bufferToBase64(textEncoder.encode(JSON.stringify(body))),\n\t};\n}\n\nfunction normalizeRequestBodyKind(value?: string | null): RequestBodyKind {\n\tswitch ((value ?? \"none\").toLowerCase()) {\n\t\tcase \"json\":\n\t\t\treturn \"json\";\n\t\tcase \"form\":\n\t\t\treturn \"form\";\n\t\tcase \"multipart\":\n\t\t\treturn \"multipart\";\n\t\tcase \"binary\":\n\t\t\treturn \"binary\";\n\t\tcase \"text\":\n\t\t\treturn \"text\";\n\t\tdefault:\n\t\t\treturn \"none\";\n\t}\n}\n\nfunction ensureWasmRequest(value: unknown): WasmRequest | null {\n\tif (value instanceof WasmRequest) {\n\t\treturn value;\n\t}\n\tif (value && typeof value === \"object\" && \"method\" in value && \"path\" in value) {\n\t\tconst rawJson =\n\t\t\ttypeof (value as Record<string, unknown>)[RAW_REQUEST_KEY] === \"string\"\n\t\t\t\t? ((value as Record<string, string>)[RAW_REQUEST_KEY] as string)\n\t\t\t\t: JSON.stringify(value);\n\t\treturn new WasmRequest(value as InternalRequestPayload, rawJson);\n\t}\n\treturn null;\n}\n\nasync function normalizeStructuredResponse(\n\tvalue: unknown,\n\tdefaultResponse?: StructuredHandlerResponse,\n): Promise<StructuredHandlerResponse> {\n\tif (typeof value === \"string\") {\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(value) as StructuredHandlerResponse;\n\t\t\treturn normalizeStructuredResponse(parsed);\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: {},\n\t\t\t\tbody: value,\n\t\t\t};\n\t\t}\n\t}\n\tif (value instanceof WasmRequest) {\n\t\treturn (\n\t\t\tdefaultResponse ?? {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: {},\n\t\t\t\tbody: null,\n\t\t\t}\n\t\t);\n\t}\n\tif (isStructuredResponseLike(value)) {\n\t\tconst headers = normalizeRecord(value.headers ?? {});\n\t\tconst status = value.status ?? value.statusCode ?? 200;\n\t\tconst body: HandlerBody =\n\t\t\tvalue.body === undefined\n\t\t\t\t? null\n\t\t\t\t: typeof value.body === \"object\" && value.body !== null\n\t\t\t\t\t? (value.body as HandlerBody)\n\t\t\t\t\t: (value.body as JsonValue);\n\t\treturn {\n\t\t\tstatus,\n\t\t\theaders,\n\t\t\tbody,\n\t\t};\n\t}\n\treturn {\n\t\tstatus: 200,\n\t\theaders: {},\n\t\tbody: value == null ? null : (value as JsonValue),\n\t};\n}\n\nfunction isStructuredResponseLike(value: unknown): value is StructuredHandlerResponse {\n\tif (!value || typeof value !== \"object\") {\n\t\treturn false;\n\t}\n\tconst hasStatus = \"status\" in value || \"statusCode\" in value;\n\tif (!hasStatus) {\n\t\treturn false;\n\t}\n\treturn \"headers\" in value || \"body\" in value;\n}\n\nfunction matchPath(template: string, actual: string): Record<string, string> | null {\n\tconst params: Record<string, string> = {};\n\tconst actualPath = actual.split(\"?\")[0] ?? actual;\n\n\tconst templateSegments = template.split(\"/\").filter(Boolean);\n\tconst actualSegments = actualPath.split(\"/\").filter(Boolean);\n\n\tif (templateSegments.length !== actualSegments.length) {\n\t\treturn null;\n\t}\n\n\tfor (let i = 0; i < templateSegments.length; i += 1) {\n\t\tconst templateSegment = templateSegments[i];\n\t\tconst actualSegment = actualSegments[i];\n\t\tif (templateSegment === undefined || actualSegment === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tif (templateSegment.startsWith(\"{\") && templateSegment.endsWith(\"}\")) {\n\t\t\tconst key = templateSegment.slice(1, -1);\n\t\t\tparams[key] = decodeURIComponent(actualSegment);\n\t\t} else if (templateSegment !== actualSegment) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn params;\n}\n\nfunction methodsMatch(routeMethod: string, actualMethod: string): boolean {\n\treturn routeMethod.toUpperCase() === actualMethod.toUpperCase();\n}\n","import type { ServerConfig } from \"./config\";\nimport type { SpikardApp } from \"./index\";\nimport { type MultipartFile, TestClient, type TestResponse } from \"./testing\";\nimport { isStreamingResponse } from \"./streaming\";\nimport type { BinaryLike, JsonValue, WebSocketHandler, WebSocketHandlerLike, WebSocketServerSocket } from \"./types\";\nimport type { RouteMetadata } from \"./index\";\n\nexport interface ServerOptions {\n\thost?: string;\n\tport?: number;\n}\n\ntype FetchHandler = (request: Request) => Promise<Response>;\n\nexport function createFetchHandler(app: SpikardApp): FetchHandler {\n\tconst client = new TestClient(app);\n\treturn async (request: Request) => {\n\t\tconst websocketResponse = await maybeHandleWebSocketUpgrade(app, request);\n\t\tif (websocketResponse) {\n\t\t\treturn websocketResponse;\n\t\t}\n\n\t\tconst url = new URL(request.url);\n\t\tconst path = `${url.pathname}${url.search}`;\n\t\tconst headers = headersToRecord(request.headers);\n\t\tconst method = request.method.toUpperCase();\n\t\tconst options = await buildRequestOptions(request);\n\t\tlet response: TestResponse;\n\n\t\tswitch (method) {\n\t\t\tcase \"GET\":\n\t\t\t\tresponse = await client.get(path, headers);\n\t\t\t\tbreak;\n\t\t\tcase \"DELETE\":\n\t\t\t\tresponse = await client.delete(path, headers);\n\t\t\t\tbreak;\n\t\t\tcase \"HEAD\":\n\t\t\t\tresponse = await client.head(path, headers);\n\t\t\t\tbreak;\n\t\t\tcase \"OPTIONS\":\n\t\t\t\tresponse = await client.options(path, headers);\n\t\t\t\tbreak;\n\t\t\tcase \"TRACE\":\n\t\t\t\tresponse = await client.trace(path, headers);\n\t\t\t\tbreak;\n\t\t\tcase \"POST\":\n\t\t\t\tresponse = await client.post(path, mergeHeaders(options, headers));\n\t\t\t\tbreak;\n\t\t\tcase \"PUT\":\n\t\t\t\tresponse = await client.put(path, mergeHeaders(options, headers));\n\t\t\t\tbreak;\n\t\t\tcase \"PATCH\":\n\t\t\t\tresponse = await client.patch(path, mergeHeaders(options, headers));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\treturn new Response(\"Method Not Allowed\", { status: 405 });\n\t\t}\n\n\t\treturn responseToFetch(response);\n\t};\n}\n\nexport function runServer(app: SpikardApp, config: ServerConfig | ServerOptions = {}): void {\n\tconst handler = createFetchHandler(app);\n\tconst options = resolveServerOptions(config);\n\tif (isBun()) {\n\t\tconst bun = (globalThis as unknown as { Bun: { serve: (...args: unknown[]) => unknown } }).Bun;\n\t\tbun.serve({\n\t\t\tfetch: (req: Request, server?: { upgrade: (req: Request, options?: { data?: unknown }) => boolean }) => {\n\t\t\t\tconst upgradeResult = maybeUpgradeBunWebSocket(req, server, app);\n\t\t\t\tif (upgradeResult) {\n\t\t\t\t\treturn upgradeResult;\n\t\t\t\t}\n\t\t\t\treturn handler(req);\n\t\t\t},\n\t\t\twebsocket: createBunWebSocketHandlers(),\n\t\t\thostname: options.host ?? \"0.0.0.0\",\n\t\t\tport: options.port ?? 0,\n\t\t});\n\t\treturn;\n\t}\n\tconst globalAny = globalThis as unknown as {\n\t\tDeno?: { serve?: (options: { hostname?: string; port?: number }, handler: FetchHandler) => void };\n\t\taddEventListener?: (\n\t\t\ttype: \"fetch\",\n\t\t\tlistener: (event: Event & { request: Request; respondWith(response: Promise<Response>): void }) => void,\n\t\t) => void;\n\t};\n\tif (globalAny.Deno && typeof globalAny.Deno.serve === \"function\") {\n\t\tglobalAny.Deno.serve(\n\t\t\t{\n\t\t\t\thostname: options.host ?? \"0.0.0.0\",\n\t\t\t\tport: options.port ?? 0,\n\t\t\t},\n\t\t\thandler,\n\t\t);\n\t\treturn;\n\t}\n\tif (typeof globalAny.addEventListener === \"function\") {\n\t\tglobalAny.addEventListener(\n\t\t\t\"fetch\",\n\t\t\t(event: Event & { request: Request; respondWith(response: Promise<Response>): void }) => {\n\t\t\t\tevent.respondWith(handler(event.request));\n\t\t\t},\n\t\t);\n\t\treturn;\n\t}\n\tthrow new Error(\"Unsupported runtime: unable to start WASM HTTP server\");\n}\n\nfunction isBun(): boolean {\n\tconst globalAny = globalThis as unknown as { Bun?: { serve?: unknown } };\n\treturn typeof globalAny.Bun === \"object\" && typeof globalAny.Bun?.serve === \"function\";\n}\n\nfunction headersToRecord(headers: Headers): Record<string, string> {\n\tconst record: Record<string, string> = {};\n\tfor (const [key, value] of headers.entries()) {\n\t\trecord[key] = value;\n\t}\n\treturn record;\n}\n\nasync function buildRequestOptions(request: Request) {\n\tconst method = request.method.toUpperCase();\n\tif (method === \"GET\" || method === \"HEAD\") {\n\t\treturn undefined;\n\t}\n\tconst contentType = request.headers.get(\"content-type\") ?? \"\";\n\tif (contentType.includes(\"application/json\")) {\n\t\tconst text = await request.text();\n\t\tif (!text) {\n\t\t\treturn { json: null };\n\t\t}\n\t\ttry {\n\t\t\treturn { json: JSON.parse(text) };\n\t\t} catch {\n\t\t\treturn { json: text };\n\t\t}\n\t}\n\tif (contentType.includes(\"application/x-www-form-urlencoded\")) {\n\t\tconst text = await request.text();\n\t\treturn text ? { formRaw: text } : undefined;\n\t}\n\tif (contentType.includes(\"multipart/form-data\") && typeof request.formData === \"function\") {\n\t\tconst formData = await request.formData();\n\t\tconst fields: Record<string, string> = {};\n\t\tconst files: MultipartFile[] = [];\n\t\tfor (const [key, value] of formData.entries()) {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tfields[key] = value;\n\t\t\t} else {\n\t\t\t\tconst buffer = new Uint8Array(await value.arrayBuffer());\n\t\t\t\tconst file: MultipartFile = {\n\t\t\t\t\tname: key,\n\t\t\t\t\tcontent: bufferToBase64(buffer),\n\t\t\t\t\t...(value.name ? { filename: value.name } : {}),\n\t\t\t\t\t...(value.type ? { contentType: value.type } : {}),\n\t\t\t\t};\n\t\t\t\tfiles.push(file);\n\t\t\t}\n\t\t}\n\t\treturn { multipart: { fields, files } };\n\t}\n\tconst buffer = new Uint8Array(await request.arrayBuffer());\n\tif (buffer.length === 0) {\n\t\treturn undefined;\n\t}\n\treturn { binary: bufferToBase64(buffer) };\n}\n\nfunction mergeHeaders(options: Parameters<TestClient[\"post\"]>[1], headers: Record<string, string>) {\n\tif (options) {\n\t\treturn {\n\t\t\t...options,\n\t\t\theaders: {\n\t\t\t\t...options.headers,\n\t\t\t\t...headers,\n\t\t\t},\n\t\t};\n\t}\n\treturn { headers };\n}\n\nfunction responseToFetch(response: TestResponse): Response {\n\tconst headers = new Headers(response.headers());\n\treturn new Response(response.raw(), {\n\t\tstatus: response.statusCode,\n\t\theaders,\n\t});\n}\n\nfunction bufferToBase64(bytes: Uint8Array): string {\n\tconst globalAny = globalThis as unknown as {\n\t\tBuffer?: { from: (bytes: Uint8Array) => { toString: (encoding: \"base64\") => string } };\n\t};\n\tif (globalAny.Buffer) {\n\t\treturn globalAny.Buffer.from(bytes).toString(\"base64\");\n\t}\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\tif (typeof btoa === \"function\") {\n\t\treturn btoa(binary);\n\t}\n\tthrow new Error(\"Base64 encoding is not supported in this runtime\");\n}\n\nfunction resolveServerOptions(config: ServerConfig | ServerOptions): ServerOptions {\n\tif (\"host\" in config || \"port\" in config) {\n\t\tconst options = config as ServerOptions;\n\t\tconst resolved: ServerOptions = {};\n\t\tif (options.host !== undefined) {\n\t\t\tresolved.host = options.host;\n\t\t}\n\t\tif (options.port !== undefined) {\n\t\t\tresolved.port = options.port;\n\t\t}\n\t\treturn resolved;\n\t}\n\treturn {};\n}\n\ntype WebSocketRouteMatch = {\n\tmetadata: RouteMetadata;\n\thandler: WebSocketHandlerLike;\n};\n\ntype WebSocketRegistry = {\n\troutes: RouteMetadata[];\n\thandlers: Record<string, WebSocketHandlerLike>;\n};\n\nasync function maybeHandleWebSocketUpgrade(app: SpikardApp, request: Request): Promise<Response | null> {\n\tif (!isWebSocketUpgrade(request)) {\n\t\treturn null;\n\t}\n\tconst url = new URL(request.url);\n\tconst match = findWebSocketRoute(app, url.pathname);\n\tif (!match) {\n\t\treturn new Response(\"WebSocket route not found\", { status: 404 });\n\t}\n\n\tconst denoUpgrade = getDenoUpgrade();\n\tif (denoUpgrade) {\n\t\tconst { socket, response } = denoUpgrade(request);\n\t\tstartWebSocketSession(socket, match.handler);\n\t\treturn response;\n\t}\n\n\tconst webSocketPair = getWebSocketPair();\n\tif (webSocketPair) {\n\t\tconst pair = new webSocketPair();\n\t\tconst [clientSocket, serverSocket] = pair;\n\t\tconst serverSocketWithAccept = serverSocket as WebSocket & { accept?: () => void };\n\t\tserverSocketWithAccept.accept?.();\n\t\tstartWebSocketSession(serverSocket, match.handler);\n\t\tconst responseInit: ResponseInit & { webSocket?: WebSocket } = {\n\t\t\tstatus: 101,\n\t\t\twebSocket: clientSocket,\n\t\t};\n\t\treturn new Response(null, responseInit);\n\t}\n\n\treturn new Response(\"WebSocket upgrade not supported in this runtime\", { status: 501 });\n}\n\nfunction buildWebSocketRegistry(app: SpikardApp): WebSocketRegistry {\n\treturn {\n\t\troutes: app.websocketRoutes ?? [],\n\t\thandlers: app.websocketHandlers ?? app.handlers ?? {},\n\t};\n}\n\nfunction findWebSocketRoute(app: SpikardApp, path: string): WebSocketRouteMatch | null {\n\tconst registry = buildWebSocketRegistry(app);\n\tconst routeMatch = findRouteByPath(registry.routes, path);\n\tif (routeMatch) {\n\t\tconst handler = registry.handlers[routeMatch.metadata.handler_name];\n\t\tif (handler) {\n\t\t\treturn { metadata: routeMatch.metadata, handler };\n\t\t}\n\t}\n\n\tconst fallback = findRouteByPath(app.routes ?? [], path);\n\tif (fallback) {\n\t\tconst handler = registry.handlers[fallback.metadata.handler_name];\n\t\tif (handler) {\n\t\t\treturn { metadata: fallback.metadata, handler };\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction findRouteByPath(\n\troutes: RouteMetadata[],\n\ttargetPath: string,\n): { metadata: RouteMetadata; params: Record<string, string> } | null {\n\tfor (const metadata of routes) {\n\t\tif (metadata.method !== \"GET\") {\n\t\t\tcontinue;\n\t\t}\n\t\tconst params = matchPath(metadata.path, targetPath);\n\t\tif (params) {\n\t\t\treturn { metadata, params };\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction isWebSocketUpgrade(request: Request): boolean {\n\tconst upgrade = request.headers.get(\"upgrade\");\n\tif (!upgrade || upgrade.toLowerCase() !== \"websocket\") {\n\t\treturn false;\n\t}\n\tconst connection = request.headers.get(\"connection\")?.toLowerCase();\n\treturn !connection || connection.includes(\"upgrade\");\n}\n\ntype DenoUpgrade = (request: Request) => { socket: WebSocket; response: Response };\n\nfunction getDenoUpgrade(): DenoUpgrade | null {\n\tconst denoGlobal = (globalThis as unknown as { Deno?: { upgradeWebSocket?: DenoUpgrade } }).Deno;\n\treturn denoGlobal?.upgradeWebSocket ?? null;\n}\n\ntype WebSocketPairCtor = new () => [WebSocket, WebSocket];\n\nfunction getWebSocketPair(): WebSocketPairCtor | null {\n\tconst pairCtor = (globalThis as unknown as { WebSocketPair?: WebSocketPairCtor }).WebSocketPair;\n\treturn pairCtor ?? null;\n}\n\nfunction startWebSocketSession(socket: WebSocket, handler: WebSocketHandlerLike): void {\n\tconst runtimeSocket = createRuntimeSocket(socket);\n\n\tif (isWebSocketHandler(handler) && handler.onOpen) {\n\t\tvoid handler.onOpen(runtimeSocket);\n\t}\n\n\tsocket.addEventListener(\"message\", (event: MessageEvent) => {\n\t\tvoid handleWebSocketMessage(runtimeSocket, handler, event.data).catch(() => {\n\t\t\tcloseSocket(runtimeSocket, 1011, \"WebSocket handler error\");\n\t\t});\n\t});\n\n\tsocket.addEventListener(\"close\", (event: CloseEvent) => {\n\t\tif (isWebSocketHandler(handler) && handler.onClose) {\n\t\t\tvoid handler.onClose(runtimeSocket, event.code, event.reason);\n\t\t}\n\t\truntimeSocket.close(event.code, event.reason);\n\t});\n}\n\nasync function handleWebSocketMessage(\n\tsocket: WebSocketServerSocket,\n\thandler: WebSocketHandlerLike,\n\tdata: unknown,\n): Promise<void> {\n\tconst payload = decodeWebSocketMessage(data);\n\tconst result = isWebSocketHandler(handler) ? await handler.onMessage?.(socket, payload) : await handler(payload);\n\n\tif (result === undefined) {\n\t\treturn;\n\t}\n\tif (isStreamingResponse(result)) {\n\t\tthrow new Error(\"WebSocket handlers cannot return streaming responses\");\n\t}\n\n\tawait sendWebSocketResult(socket, result);\n}\n\nasync function sendWebSocketResult(socket: WebSocketServerSocket, result: unknown): Promise<void> {\n\tif (result === null || result === undefined) {\n\t\treturn;\n\t}\n\tif (typeof result === \"string\") {\n\t\tawait socket.sendText(result);\n\t\treturn;\n\t}\n\tif (isBinaryLike(result)) {\n\t\tawait socket.sendBytes?.(result);\n\t\treturn;\n\t}\n\tawait socket.sendJson(result as JsonValue);\n}\n\nfunction decodeWebSocketMessage(data: unknown): JsonValue | string | BinaryLike {\n\tif (typeof data === \"string\") {\n\t\tconst parsed = safeParseJson(data);\n\t\treturn parsed ?? data;\n\t}\n\tif (data instanceof ArrayBuffer || ArrayBuffer.isView(data)) {\n\t\treturn data as BinaryLike;\n\t}\n\tif (typeof Blob !== \"undefined\" && data instanceof Blob) {\n\t\treturn data;\n\t}\n\treturn data as JsonValue;\n}\n\nfunction safeParseJson(text: string): JsonValue | null {\n\ttry {\n\t\treturn JSON.parse(text) as JsonValue;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction isBinaryLike(value: unknown): value is BinaryLike {\n\tif (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n\t\treturn true;\n\t}\n\treturn typeof Blob !== \"undefined\" && value instanceof Blob;\n}\n\nfunction createRuntimeSocket(socket: WebSocket): WebSocketServerSocket {\n\tlet closed = false;\n\treturn {\n\t\tsendText(message: string) {\n\t\t\tif (closed) {\n\t\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t\t}\n\t\t\tsocket.send(message);\n\t\t},\n\t\tsendJson(payload: JsonValue) {\n\t\t\tif (closed) {\n\t\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t\t}\n\t\t\tsocket.send(JSON.stringify(payload));\n\t\t},\n\t\tsendBytes(payload: BinaryLike) {\n\t\t\tif (closed) {\n\t\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t\t}\n\t\t\tsocket.send(payload);\n\t\t},\n\t\tclose(code?: number, reason?: string) {\n\t\t\tif (closed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclosed = true;\n\t\t\tsocket.close(code, reason);\n\t\t},\n\t\tisClosed() {\n\t\t\treturn closed || socket.readyState === 3;\n\t\t},\n\t};\n}\n\nfunction closeSocket(socket: WebSocketServerSocket, code?: number, reason?: string): void {\n\ttry {\n\t\tsocket.close(code, reason);\n\t} catch {}\n}\n\nfunction isWebSocketHandler(handler: WebSocketHandlerLike): handler is WebSocketHandler {\n\tif (typeof handler !== \"object\" || handler === null) {\n\t\treturn false;\n\t}\n\tconst candidate = handler as {\n\t\tonOpen?: unknown;\n\t\tonMessage?: unknown;\n\t\tonClose?: unknown;\n\t};\n\treturn (\n\t\ttypeof candidate.onOpen === \"function\" ||\n\t\ttypeof candidate.onMessage === \"function\" ||\n\t\ttypeof candidate.onClose === \"function\"\n\t);\n}\n\nfunction matchPath(template: string, actual: string): Record<string, string> | null {\n\tconst templateParts = template.split(\"/\").filter(Boolean);\n\tconst actualParts = actual.split(\"/\").filter(Boolean);\n\tif (templateParts.length !== actualParts.length) {\n\t\treturn null;\n\t}\n\tconst params: Record<string, string> = {};\n\tfor (let i = 0; i < templateParts.length; i++) {\n\t\tconst templatePart = templateParts[i];\n\t\tconst actualPart = actualParts[i];\n\t\tif (!templatePart || actualPart === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\tif (templatePart.startsWith(\":\")) {\n\t\t\tparams[templatePart.slice(1)] = decodeURIComponent(actualPart);\n\t\t} else if (templatePart !== actualPart) {\n\t\t\treturn null;\n\t\t}\n\t}\n\treturn params;\n}\n\ntype BunServer = { upgrade: (req: Request, options?: { data?: unknown }) => boolean };\n\nfunction maybeUpgradeBunWebSocket(request: Request, server: BunServer | undefined, app: SpikardApp): Response | null {\n\tif (!server || !isWebSocketUpgrade(request)) {\n\t\treturn null;\n\t}\n\tconst url = new URL(request.url);\n\tconst match = findWebSocketRoute(app, url.pathname);\n\tif (!match) {\n\t\treturn null;\n\t}\n\tconst upgraded = server.upgrade(request, { data: { handler: match.handler, path: url.pathname } });\n\tif (upgraded) {\n\t\treturn new Response(null, { status: 101 });\n\t}\n\treturn null;\n}\n\nfunction createBunWebSocketHandlers() {\n\treturn {\n\t\topen(ws: {\n\t\t\tdata?: { handler?: WebSocketHandlerLike; socket?: WebSocketServerSocket };\n\t\t\tsend: (data: unknown) => void;\n\t\t}) {\n\t\t\tconst handler = ws.data?.handler;\n\t\t\tif (!handler) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst runtimeSocket = createBunRuntimeSocket(ws);\n\t\t\tws.data = { handler, socket: runtimeSocket };\n\t\t\tif (isWebSocketHandler(handler) && handler.onOpen) {\n\t\t\t\tvoid handler.onOpen(runtimeSocket);\n\t\t\t}\n\t\t},\n\t\tasync message(\n\t\t\tws: { data?: { handler?: WebSocketHandlerLike; socket?: WebSocketServerSocket }; send: (data: unknown) => void },\n\t\t\tmessage: string | Uint8Array,\n\t\t) {\n\t\t\tconst handler = ws.data?.handler;\n\t\t\tconst runtimeSocket = ws.data?.socket;\n\t\t\tif (!handler || !runtimeSocket) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait handleWebSocketMessage(runtimeSocket, handler, message);\n\t\t\t} catch {\n\t\t\t\tcloseSocket(runtimeSocket, 1011, \"WebSocket handler error\");\n\t\t\t}\n\t\t},\n\t\tclose(\n\t\t\tws: { data?: { handler?: WebSocketHandlerLike; socket?: WebSocketServerSocket } },\n\t\t\tcode: number,\n\t\t\treason: string,\n\t\t) {\n\t\t\tconst handler = ws.data?.handler;\n\t\t\tconst runtimeSocket = ws.data?.socket;\n\t\t\tif (!handler || !runtimeSocket) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (isWebSocketHandler(handler) && handler.onClose) {\n\t\t\t\tvoid handler.onClose(runtimeSocket, code, reason);\n\t\t\t}\n\t\t},\n\t} satisfies Record<string, unknown>;\n}\n\nfunction createBunRuntimeSocket(ws: {\n\tsend: (data: unknown) => void;\n\tclose?: (code?: number, reason?: string) => void;\n}): WebSocketServerSocket {\n\tlet closed = false;\n\treturn {\n\t\tsendText(message: string) {\n\t\t\tif (closed) {\n\t\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t\t}\n\t\t\tws.send(message);\n\t\t},\n\t\tsendJson(payload: JsonValue) {\n\t\t\tif (closed) {\n\t\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t\t}\n\t\t\tws.send(JSON.stringify(payload));\n\t\t},\n\t\tsendBytes(payload: BinaryLike) {\n\t\t\tif (closed) {\n\t\t\t\tthrow new Error(\"WebSocket connection is closed\");\n\t\t\t}\n\t\t\tws.send(payload);\n\t\t},\n\t\tclose(code?: number, reason?: string) {\n\t\t\tif (closed) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclosed = true;\n\t\t\tws.close?.(code, reason);\n\t\t},\n\t\tisClosed() {\n\t\t\treturn closed;\n\t\t},\n\t};\n}\n","/**\n * Spikard application class\n */\n\nimport type { HandlerFunction, RouteMetadata, SpikardApp } from \"./index\";\nimport type { Request } from \"./request\";\nimport { runServer, type ServerOptions } from \"./server\";\nimport type { MaybePromise, StructuredHandlerResponse, WebSocketHandlerLike } from \"./types\";\nimport type { JsonSchema } from \"./index\";\n\n/**\n * Dependency value or factory configuration\n */\nexport type DependencyValue = unknown;\n\n/**\n * Factory function for creating dependencies\n */\nexport type DependencyFactory = (...args: unknown[]) => MaybePromise<unknown>;\n\n/**\n * Dependency registration options\n */\nexport interface DependencyOptions {\n\t/** List of dependency keys this factory depends on */\n\tdependsOn?: string[];\n\t/** Whether this is a singleton (resolved once globally) */\n\tsingleton?: boolean;\n\t/** Whether to cache per-request (default: false for factories, true for values) */\n\tcacheable?: boolean;\n}\n\ninterface DependencyDescriptor {\n\tisFactory: boolean;\n\tvalue?: DependencyValue | undefined;\n\tfactory?: ((dependenciesJson: string) => Promise<string>) | undefined;\n\tdependsOn: string[];\n\tsingleton: boolean;\n\tcacheable: boolean;\n}\n\n/**\n * Payload type provided to lifecycle hooks\n */\nexport type LifecycleHookPayload = Request | StructuredHandlerResponse;\n\n/**\n * Lifecycle hook function type\n *\n * Hooks can return:\n * - The (possibly modified) request to continue processing\n * - A Response object to short-circuit the request pipeline\n */\nexport type LifecycleHookFunction = (payload: unknown) => MaybePromise<unknown>;\n\n/**\n * Container for lifecycle hooks\n */\nexport interface LifecycleHooks {\n\tonRequest: LifecycleHookFunction[];\n\tpreValidation: LifecycleHookFunction[];\n\tpreHandler: LifecycleHookFunction[];\n\tonResponse: LifecycleHookFunction[];\n\tonError: LifecycleHookFunction[];\n}\n\n/**\n * Spikard application\n *\n * @example\n * ```typescript\n * import { Spikard, get, post } from 'spikard';\n *\n * const app = new Spikard();\n *\n * get('/')(async function root() {\n * return { message: 'Hello' };\n * });\n *\n * if (require.main === module) {\n * app.run({ port: 8000 });\n * }\n * ```\n */\nexport class Spikard implements SpikardApp {\n\troutes: RouteMetadata[] = [];\n\thandlers: Record<string, HandlerFunction> = {};\n\twebsocketRoutes: RouteMetadata[] = [];\n\twebsocketHandlers: Record<string, WebSocketHandlerLike> = {};\n\tlifecycleHooks: LifecycleHooks = {\n\t\tonRequest: [],\n\t\tpreValidation: [],\n\t\tpreHandler: [],\n\t\tonResponse: [],\n\t\tonError: [],\n\t};\n\tdependencies: Record<string, DependencyDescriptor> = {};\n\n\t/**\n\t * Add a route to the application\n\t *\n\t * @param metadata - Route configuration metadata\n\t * @param handler - Handler function (sync or async)\n\t */\n\taddRoute(metadata: RouteMetadata, handler: HandlerFunction): void {\n\t\tthis.routes.push(metadata);\n\t\tthis.handlers[metadata.handler_name] = handler;\n\t}\n\n\t/**\n\t * Register a WebSocket route (message-based)\n\t */\n\twebsocket(path: string, handler: WebSocketHandlerLike, options: WebSocketOptions = {}): void {\n\t\tconst handlerName =\n\t\t\toptions.handlerName ?? `ws_${this.websocketRoutes.length}_${path}`.replace(/[^a-zA-Z0-9_]/g, \"_\");\n\n\t\tconst route: RouteMetadata = {\n\t\t\tmethod: \"GET\",\n\t\t\tpath,\n\t\t\thandler_name: handlerName,\n\t\t\trequest_schema: options.messageSchema as never,\n\t\t\tresponse_schema: options.responseSchema as never,\n\t\t\tis_async: true,\n\t\t};\n\n\t\tthis.websocketRoutes.push(route);\n\t\tthis.websocketHandlers[handlerName] = handler;\n\t}\n\n\t/**\n\t * Run the server\n\t *\n\t * @param options - Server configuration\n\t */\n\trun(options: ServerOptions = {}): void {\n\t\trunServer(this, options);\n\t}\n\n\t/**\n\t * Register a dependency value or factory\n\t *\n\t * Dependencies are normalized to `snake_case` so fixtures and cross-language\n\t * bindings stay aligned.\n\t */\n\tprovide(key: string, valueOrFactory: DependencyValue | DependencyFactory, options?: DependencyOptions): this {\n\t\tconst normalizedKey = normalizeDependencyKey(key);\n\t\tconst isFactory = typeof valueOrFactory === \"function\";\n\n\t\tconst dependsOn =\n\t\t\toptions?.dependsOn?.map((depKey) => normalizeDependencyKey(depKey)) ??\n\t\t\t(isFactory ? inferFactoryDependencies(valueOrFactory as DependencyFactory) : []);\n\n\t\tthis.dependencies[normalizedKey] = {\n\t\t\tisFactory,\n\t\t\tvalue: isFactory ? undefined : valueOrFactory,\n\t\t\tfactory: isFactory ? wrapFactory(valueOrFactory as DependencyFactory) : undefined,\n\t\t\tdependsOn,\n\t\t\tsingleton: options?.singleton ?? false,\n\t\t\tcacheable: options?.cacheable ?? !isFactory,\n\t\t};\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Register an onRequest lifecycle hook\n\t *\n\t * Runs before routing. Can inspect/modify the request or short-circuit with a response.\n\t *\n\t * @param hook - Async function that receives a request and returns either:\n\t * - The (possibly modified) request to continue processing\n\t * - A Response object to short-circuit the request pipeline\n\t * @returns The hook function (for decorator usage)\n\t *\n\t * @example\n\t * ```typescript\n\t * app.onRequest(async (request) => {\n\t * console.log(`Request: ${request.method} ${request.path}`);\n\t * return request;\n\t * });\n\t * ```\n\t */\n\tonRequest(hook: LifecycleHookFunction): LifecycleHookFunction {\n\t\tthis.lifecycleHooks.onRequest.push(hook);\n\t\treturn hook;\n\t}\n\n\t/**\n\t * Register a preValidation lifecycle hook\n\t *\n\t * Runs after routing but before validation. Useful for rate limiting.\n\t *\n\t * @param hook - Async function that receives a request and returns either:\n\t * - The (possibly modified) request to continue processing\n\t * - A Response object to short-circuit the request pipeline\n\t * @returns The hook function (for decorator usage)\n\t *\n\t * @example\n\t * ```typescript\n\t * app.preValidation(async (request) => {\n\t * if (tooManyRequests()) {\n\t * return { error: \"Rate limit exceeded\", status: 429 };\n\t * }\n\t * return request;\n\t * });\n\t * ```\n\t */\n\tpreValidation(hook: LifecycleHookFunction): LifecycleHookFunction {\n\t\tthis.lifecycleHooks.preValidation.push(hook);\n\t\treturn hook;\n\t}\n\n\t/**\n\t * Register a preHandler lifecycle hook\n\t *\n\t * Runs after validation but before the handler. Ideal for authentication/authorization.\n\t *\n\t * @param hook - Async function that receives a request and returns either:\n\t * - The (possibly modified) request to continue processing\n\t * - A Response object to short-circuit the request pipeline\n\t * @returns The hook function (for decorator usage)\n\t *\n\t * @example\n\t * ```typescript\n\t * app.preHandler(async (request) => {\n\t * if (!validToken(request.headers.authorization)) {\n\t * return { error: \"Unauthorized\", status: 401 };\n\t * }\n\t * return request;\n\t * });\n\t * ```\n\t */\n\tpreHandler(hook: LifecycleHookFunction): LifecycleHookFunction {\n\t\tthis.lifecycleHooks.preHandler.push(hook);\n\t\treturn hook;\n\t}\n\n\t/**\n\t * Register an onResponse lifecycle hook\n\t *\n\t * Runs after the handler executes. Can modify the response.\n\t *\n\t * @param hook - Async function that receives a response and returns the (possibly modified) response\n\t * @returns The hook function (for decorator usage)\n\t *\n\t * @example\n\t * ```typescript\n\t * app.onResponse(async (response) => {\n\t * response.headers[\"X-Frame-Options\"] = \"DENY\";\n\t * return response;\n\t * });\n\t * ```\n\t */\n\tonResponse(hook: LifecycleHookFunction): LifecycleHookFunction {\n\t\tthis.lifecycleHooks.onResponse.push(hook);\n\t\treturn hook;\n\t}\n\n\t/**\n\t * Register an onError lifecycle hook\n\t *\n\t * Runs when an error occurs. Can customize error responses.\n\t *\n\t * @param hook - Async function that receives an error response and returns a (possibly modified) response\n\t * @returns The hook function (for decorator usage)\n\t *\n\t * @example\n\t * ```typescript\n\t * app.onError(async (response) => {\n\t * response.headers[\"Content-Type\"] = \"application/json\";\n\t * return response;\n\t * });\n\t * ```\n\t */\n\tonError(hook: LifecycleHookFunction): LifecycleHookFunction {\n\t\tthis.lifecycleHooks.onError.push(hook);\n\t\treturn hook;\n\t}\n\n\t/**\n\t * Get all registered lifecycle hooks\n\t *\n\t * @returns Dictionary of hook lists by type\n\t */\n\tgetLifecycleHooks(): LifecycleHooks {\n\t\treturn {\n\t\t\tonRequest: [...this.lifecycleHooks.onRequest],\n\t\t\tpreValidation: [...this.lifecycleHooks.preValidation],\n\t\t\tpreHandler: [...this.lifecycleHooks.preHandler],\n\t\t\tonResponse: [...this.lifecycleHooks.onResponse],\n\t\t\tonError: [...this.lifecycleHooks.onError],\n\t\t};\n\t}\n}\n\nexport interface WebSocketOptions {\n\thandlerName?: string;\n\tmessageSchema?: JsonSchema;\n\tresponseSchema?: JsonSchema;\n}\n\nfunction normalizeDependencyKey(key: string): string {\n\tif (key.startsWith(\"__spikard_\")) {\n\t\treturn key;\n\t}\n\tconst trimmed = key.replace(/^_+/, \"\");\n\tif (trimmed.includes(\"_\")) {\n\t\treturn trimmed.toLowerCase();\n\t}\n\treturn trimmed\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n\t\t.replace(/([A-Z])([A-Z][a-z])/g, \"$1_$2\")\n\t\t.toLowerCase();\n}\n\nfunction inferFactoryDependencies(factory: DependencyFactory): string[] {\n\tconst params = getFactoryParameterNames(factory);\n\treturn params.map((name) => normalizeDependencyKey(name));\n}\n\nfunction getFactoryParameterNames(factory: DependencyFactory): string[] {\n\tconst source = factory.toString().trim();\n\tconst openParen = source.indexOf(\"(\");\n\tif (openParen === -1) {\n\t\treturn [];\n\t}\n\tconst closeParen = source.indexOf(\")\", openParen + 1);\n\tif (closeParen === -1) {\n\t\treturn [];\n\t}\n\tconst raw = source.slice(openParen + 1, closeParen).trim();\n\tif (!raw) {\n\t\treturn [];\n\t}\n\n\treturn raw\n\t\t.split(\",\")\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0)\n\t\t.map(\n\t\t\t(entry) =>\n\t\t\t\tentry\n\t\t\t\t\t.replace(/^\\.\\.\\./, \"\")\n\t\t\t\t\t.split(\"=\")[0]\n\t\t\t\t\t?.trim() ?? \"\",\n\t\t)\n\t\t.filter((entry) => entry.length > 0 && !entry.startsWith(\"{\") && !entry.startsWith(\"[\"));\n}\n\ntype GeneratorWithReturn = AsyncGenerator<unknown, unknown, unknown> & { return?: (value?: unknown) => unknown };\n\nconst DI_REQUEST_ID_KEY = \"__spikard_request_id__\";\n\nconst globalDi = globalThis as unknown as {\n\t__spikard_di_generators__?: Record<string, GeneratorWithReturn[]>;\n\t__spikard_di_cleanup__?: (requestId: string) => Promise<void>;\n};\n\nfunction registerDependencyGenerator(requestId: string, generator: GeneratorWithReturn): void {\n\tlet registry = globalDi.__spikard_di_generators__;\n\tif (!registry) {\n\t\tregistry = {};\n\t\tglobalDi.__spikard_di_generators__ = registry;\n\t}\n\n\tlet generators = registry[requestId];\n\tif (!generators) {\n\t\tgenerators = [];\n\t\tregistry[requestId] = generators;\n\t}\n\n\tgenerators.push(generator);\n}\n\nasync function cleanupDependencyGenerators(requestId: string): Promise<void> {\n\tconst registry = globalDi.__spikard_di_generators__;\n\tif (!registry) {\n\t\treturn;\n\t}\n\tconst generators = registry[requestId];\n\tif (!generators || generators.length === 0) {\n\t\treturn;\n\t}\n\tfor (let idx = generators.length - 1; idx >= 0; idx -= 1) {\n\t\tconst generator = generators[idx];\n\t\tif (!generator) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tif (typeof generator.return === \"function\") {\n\t\t\t\tawait generator.return(undefined);\n\t\t\t}\n\t\t} catch {}\n\t}\n\tdelete registry[requestId];\n}\n\nif (!globalDi.__spikard_di_cleanup__) {\n\tglobalDi.__spikard_di_cleanup__ = cleanupDependencyGenerators;\n}\n\nfunction wrapFactory(factory: DependencyFactory): (dependenciesJson: string) => Promise<string> {\n\treturn async (dependenciesJson) => {\n\t\tconst depsUnknown = JSON.parse(dependenciesJson) as unknown;\n\t\tconst deps = typeof depsUnknown === \"object\" && depsUnknown ? (depsUnknown as Record<string, unknown>) : {};\n\t\tconst requestId = typeof deps[DI_REQUEST_ID_KEY] === \"string\" ? (deps[DI_REQUEST_ID_KEY] as string) : null;\n\n\t\tconst paramNames = getFactoryParameterNames(factory);\n\t\tconst args = paramNames.map((name) => deps[normalizeDependencyKey(name)]);\n\n\t\tconst result = await factory(...args);\n\n\t\tif (result && typeof result === \"object\" && Symbol.asyncIterator in (result as object)) {\n\t\t\tconst generator = result as GeneratorWithReturn;\n\t\t\tconst first = await generator.next();\n\t\t\tconst value = first.value;\n\t\t\tif (requestId) {\n\t\t\t\tregisterDependencyGenerator(requestId, generator);\n\t\t\t} else {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof generator.return === \"function\") {\n\t\t\t\t\t\tawait generator.return(undefined);\n\t\t\t\t\t}\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t\treturn JSON.stringify(value ?? null);\n\t\t}\n\n\t\treturn JSON.stringify(result ?? null);\n\t};\n}\n","/** Schedule work to run after the HTTP response resolves. */\nexport function run(work: () => void | Promise<void>): void {\n\tvoid Promise.resolve().then(() => work());\n}\n","/**\n * Routing decorators and utilities for Spikard\n */\n\nimport type { CorsConfig, HandlerFunction, JsonSchema, RouteMetadata } from \"./index\";\nimport type { Request } from \"./request\";\nimport type { HandlerResult, JsonValue, MaybePromise } from \"./types\";\n\n/**\n * Route configuration options\n */\nexport interface RouteOptions {\n\t/**\n\t * HTTP method(s) for this route\n\t * Can be a single method or an array of methods\n\t */\n\tmethods?: string | string[];\n\n\t/**\n\t * Request body schema (JSON Schema or Zod schema)\n\t */\n\tbodySchema?: JsonSchema;\n\n\t/**\n\t * Response schema (JSON Schema or Zod schema)\n\t */\n\tresponseSchema?: JsonSchema;\n\n\t/**\n\t * Parameter schema (JSON Schema or Zod schema for path and query parameters)\n\t */\n\tparameterSchema?: JsonSchema;\n\n\t/**\n\t * CORS configuration\n\t */\n\tcors?: CorsConfig;\n}\n\ntype RouteArgument = Request | JsonValue | string | number | boolean | null | undefined;\n\ntype RouteHandler = (...args: RouteArgument[]) => MaybePromise<HandlerResult>;\n\n/**\n * Route decorator for defining HTTP routes\n *\n * @param path - The route path (e.g., \"/users/:id\")\n * @param options - Route configuration options\n * @returns A decorator function\n *\n * @example\n * ```typescript\n * import { route, Spikard } from 'spikard';\n * import { z } from 'zod';\n *\n * const app = new Spikard();\n *\n * const UserSchema = z.object({\n * name: z.string(),\n * email: z.string().email(),\n * });\n *\n * route(\"/users\", { methods: [\"POST\"], bodySchema: UserSchema})\n * async function createUser() {\n * return { created: true };\n * }\n *\n * app.run();\n * ```\n */\nexport function route(path: string, options: RouteOptions = {}): (handler: RouteHandler) => RouteHandler {\n\treturn (handler: RouteHandler) => {\n\t\tconst methods = options.methods ? (Array.isArray(options.methods) ? options.methods : [options.methods]) : [\"GET\"];\n\n\t\tconst metadata: RouteMetadata = {\n\t\t\tmethod: methods.join(\",\"),\n\t\t\tpath,\n\t\t\thandler_name: handler.name || \"anonymous\",\n\t\t\t...(options.bodySchema !== undefined && { request_schema: options.bodySchema }),\n\t\t\t...(options.responseSchema !== undefined && { response_schema: options.responseSchema }),\n\t\t\t...(options.parameterSchema !== undefined && { parameter_schema: options.parameterSchema }),\n\t\t\t...(options.cors !== undefined && { cors: options.cors }),\n\t\t\tis_async: true,\n\t\t};\n\n\t\t(handler as HandlerFunction & { __route_metadata__?: RouteMetadata }).__route_metadata__ = metadata;\n\n\t\treturn handler;\n\t};\n}\n\n/**\n * GET route decorator\n *\n * @param path - The route path\n * @param options - Route configuration options (excluding methods)\n * @returns A decorator function\n *\n * @example\n * ```typescript\n * import { get } from 'spikard';\n *\n * get(\"/users/:id\")\n * function getUser(request: Request, id: Path<string>) {\n * // Implementation\n * }\n * ```\n */\nexport function get(\n\tpath: string,\n\toptions: Omit<RouteOptions, \"methods\"> = {},\n): (handler: RouteHandler) => RouteHandler {\n\treturn route(path, { ...options, methods: [\"GET\"] });\n}\n\n/**\n * POST route decorator\n */\nexport function post(\n\tpath: string,\n\toptions: Omit<RouteOptions, \"methods\"> = {},\n): (handler: RouteHandler) => RouteHandler {\n\treturn route(path, { ...options, methods: [\"POST\"] });\n}\n\n/**\n * PUT route decorator\n */\nexport function put(\n\tpath: string,\n\toptions: Omit<RouteOptions, \"methods\"> = {},\n): (handler: RouteHandler) => RouteHandler {\n\treturn route(path, { ...options, methods: [\"PUT\"] });\n}\n\n/**\n * DELETE route decorator\n */\nexport function del(\n\tpath: string,\n\toptions: Omit<RouteOptions, \"methods\"> = {},\n): (handler: RouteHandler) => RouteHandler {\n\treturn route(path, { ...options, methods: [\"DELETE\"] });\n}\n\n/**\n * PATCH route decorator\n */\nexport function patch(\n\tpath: string,\n\toptions: Omit<RouteOptions, \"methods\"> = {},\n): (handler: RouteHandler) => RouteHandler {\n\treturn route(path, { ...options, methods: [\"PATCH\"] });\n}\n"]}
|