@kozojs/core 0.3.9 → 0.3.11
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/lib/index.d.ts +3 -0
- package/lib/index.js +4 -1
- package/lib/index.js.map +1 -1
- package/package.json +11 -7
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/app.ts","../src/client-generator.ts","../src/uws-transport.ts","../src/errors.ts","../src/fast-response.ts","../src/compiler.ts","../src/shutdown.ts","../src/router.ts","../src/utils/file-to-path.ts","../src/native-context.ts","../src/index.ts","../src/openapi.ts","../src/middleware/logger.ts","../src/middleware/cors.ts","../src/middleware/rate-limit.ts","../src/middleware/error-handler.ts","../src/middleware/fileSystemRouting.ts"],"sourcesContent":["// Use hono/quick for guaranteed RegExpRouter (fastest for benchmarks)\n// SmartRouter sometimes falls back to TrieRouter on complex patterns\nimport { Hono } from 'hono/quick';\nimport { serve } from '@hono/node-server';\nimport type { Server } from 'node:http';\nimport type { KozoConfig, Services, RouteSchema, KozoHandler, RouteMeta } from './types.js';\nimport { generateTypedClient, type ClientGeneratorOptions, type RouteInfo } from './client-generator.js';\nimport { compileRouteHandler, compileUwsNativeHandler, SchemaCompiler } from './compiler.js';\nimport { KozoError, internalErrorResponse } from './errors.js';\nimport { ShutdownManager, type ShutdownOptions } from './shutdown.js';\nimport { scanRoutes } from './router.js';\nimport { tryLoadUws, createUwsServer, type UwsRouteEntry } from './uws-transport.js';\n\n// Plugin Architecture\nexport interface Plugin {\n name: string;\n version?: string;\n install: (app: Kozo) => void | Promise<void>;\n}\n\n/**\n * Kozo - High-performance TypeScript framework with Zod schemas\n *\n * @typeParam TServices - Shape of the services object injected into every handler.\n * Pass it once at construction: `createKozo<{ db: Database }>({ services: { db } })`\n * and all handler contexts will have `ctx.services.db` fully typed.\n */\nexport class Kozo<TServices extends Services = Services> {\n private app: Hono;\n private services: TServices;\n private routes: Array<{ method: string; path: string; schema: RouteSchema; meta?: RouteMeta }> = [];\n /** Routes registered directly with the uWS C++ radix router. */\n private uwsRoutes: UwsRouteEntry[] = [];\n private shutdownManager = new ShutdownManager();\n private _routesDir?: string;\n\n constructor(config: KozoConfig<TServices> = {}) {\n this.app = new Hono();\n this.services = (config.services ?? {}) as TServices;\n this._routesDir = config.routesDir;\n\n // Global Error Handler (RFC 7807 Problem Details)\n this.app.onError((err, c) => {\n // 1. Known Kozo errors (NotFoundError, ForbiddenError, etc.)\n if (err instanceof KozoError) {\n return err.toResponse(c.req.path);\n }\n\n // 2. Unknown errors (bugs in user code)\n console.error('[Kozo] Unhandled error:', err);\n return internalErrorResponse(err as Error, c.req.path);\n });\n }\n\n // Plugin system\n use(plugin: Plugin): this {\n plugin.install(this);\n return this;\n }\n\n /**\n * Load routes from the file system using the configured routesDir.\n * Each route file is dynamically imported, its schema compiled, and handler registered.\n * This is a no-op if routesDir is not configured.\n */\n async loadRoutes(routesDir?: string): Promise<this> {\n const dir = routesDir ?? this._routesDir;\n if (!dir) return this;\n\n const routes = await scanRoutes({ routesDir: dir, verbose: false });\n for (const route of routes) {\n const { path, method, module } = route;\n const schema: RouteSchema = module.schema ?? {};\n const compiled = SchemaCompiler.compile(schema);\n const userHandler = module.default;\n const optimizedHandler = compileRouteHandler(\n (ctx: any) => userHandler(ctx),\n schema,\n this.services,\n compiled,\n );\n this.routes.push({ method, path, schema, meta: module.meta });\n (this.app as any)[method](path, optimizedHandler);\n\n // Register uWS route\n const paramNames: string[] = [];\n path.replace(/:([^/]+)/g, (_: string, name: string) => { paramNames.push(name); return name; });\n const uwsHandler = compileUwsNativeHandler((ctx: any) => userHandler(ctx), schema, this.services, compiled);\n this.uwsRoutes.push({ method: method.toUpperCase(), path, paramNames, handler: uwsHandler });\n }\n\n return this;\n }\n\n // Code generation with overloads\n generateClient(baseUrl?: string): string;\n generateClient(options?: ClientGeneratorOptions): string;\n generateClient(baseUrlOrOptions?: string | ClientGeneratorOptions): string {\n const options: ClientGeneratorOptions =\n typeof baseUrlOrOptions === 'string'\n ? { baseUrl: baseUrlOrOptions, includeValidation: false }\n : baseUrlOrOptions || {};\n\n const routeInfos: RouteInfo[] = this.routes.map(r => ({\n method: r.method,\n path: r.path,\n schema: r.schema,\n }));\n\n return generateTypedClient(routeInfos, options);\n }\n\n get<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('get', path, schema, handler);\n }\n\n post<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('post', path, schema, handler);\n }\n\n put<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('put', path, schema, handler);\n }\n\n patch<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('patch', path, schema, handler);\n }\n\n delete<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('delete', path, schema, handler);\n }\n\n private register(method: string, path: string, schema: RouteSchema, handler: KozoHandler<any, any>): this {\n this.routes.push({ method, path, schema });\n\n // 1. Compile schemas (Zod -> Ajv validators + fast-json-stringify serializer)\n const compiled = SchemaCompiler.compile(schema);\n\n // 2. Generate the optimized Hono handler\n const optimizedHandler = compileRouteHandler(\n handler,\n schema,\n this.services,\n compiled,\n );\n\n // 3. Register the compiled handler with Hono\n (this.app as any)[method](path, optimizedHandler);\n\n // 4. Compile and store the uWS native handler (zero-shim, direct C++ dispatch)\n const paramNames: string[] = [];\n path.replace(/:([^/]+)/g, (_: string, name: string) => { paramNames.push(name); return name; });\n const uwsHandler = compileUwsNativeHandler(handler, schema, this.services, compiled);\n this.uwsRoutes.push({ method: method.toUpperCase(), path, paramNames, handler: uwsHandler });\n\n return this;\n }\n\n /**\n * Start a uWebSockets.js HTTP server.\n *\n * All routes are registered directly with uWS's C++ radix trie router —\n * zero JS routing overhead per request. The C++ HTTP parser (µHttpParser)\n * eliminates all IncomingMessage/ServerResponse allocations.\n *\n * Throws if uWebSockets.js is not installed.\n * Returns { port, server } so callers can close the server when done.\n */\n async nativeListen(port: number = 3000): Promise<{ port: number; server: Server }> {\n const uwsBindings = await tryLoadUws();\n if (!uwsBindings) {\n throw new Error(\n '[Kozo] uWebSockets.js is required but not installed.\\n' +\n 'Run: pnpm add uWebSockets.js',\n );\n }\n\n console.log('🚀 uWebSockets.js transport active (C++ HTTP parser + native radix router)');\n return createUwsServer({\n uws: uwsBindings,\n routes: this.uwsRoutes,\n port,\n }) as Promise<{ port: number; server: Server }>;\n }\n\n async listen(port?: number): Promise<void> {\n const finalPort = port ?? 3000;\n const manager = this.shutdownManager;\n\n // Wrap fetch to reject incoming requests during shutdown and track in-flight count\n const shutdownFetch = async (req: Request, ...args: any[]) => {\n if (manager.isShuttingDown()) {\n return new Response(\n JSON.stringify({\n type: 'about:blank',\n title: 'Service Unavailable',\n status: 503,\n detail: 'Server is shutting down, please retry later',\n }),\n {\n status: 503,\n headers: { 'Content-Type': 'application/problem+json' },\n },\n );\n }\n const untrack = manager.trackRequest();\n try {\n return await (this.app.fetch as any)(req, ...args);\n } finally {\n untrack();\n }\n };\n\n const server = serve({\n fetch: shutdownFetch,\n port: finalPort,\n }) as unknown as Server;\n\n manager.setServer(server);\n console.log(`🚀 Kozo server listening on http://localhost:${finalPort}`);\n }\n\n /**\n * Graceful shutdown — drains in-flight requests before closing.\n * Use getShutdownManager().setDatabase(db, provider) to register DB cleanup.\n */\n async shutdown(options?: ShutdownOptions): Promise<void> {\n return this.shutdownManager.shutdown(options);\n }\n\n getShutdownManager(): ShutdownManager {\n return this.shutdownManager;\n }\n\n getApp(): Hono {\n return this.app;\n }\n\n get fetch() {\n return this.app.fetch;\n }\n}\n\n// ============================================\n// AI Schema Generation utility\n// ============================================\n\nfunction inferType(value: any): string {\n if (value === null || value === undefined) return 'any';\n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (Array.isArray(value)) {\n if (value.length === 0) return 'array';\n const itemTypes = [...new Set(value.map(inferType))];\n return `array<${itemTypes.length === 1 ? itemTypes[0] : 'any'}>`;\n }\n if (typeof value === 'object') return 'object';\n return 'any';\n}\n\nfunction generateZodSchema(examples: any[]): string {\n if (examples.length === 0) return 'z.any()';\n\n const first = examples[0];\n const type = inferType(first);\n\n switch (type) {\n case 'string': {\n const hasEmail = examples.some(e => typeof e === 'string' && e.includes('@'));\n const hasUUID = examples.some(\n e => typeof e === 'string' && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e),\n );\n if (hasEmail) return 'z.string().email()';\n if (hasUUID) return 'z.string().uuid()';\n return 'z.string()';\n }\n case 'number':\n return 'z.number()';\n case 'boolean':\n return 'z.boolean()';\n case 'array': {\n const itemType = inferType(first[0]);\n switch (itemType) {\n case 'string': return 'z.array(z.string())';\n case 'number': return 'z.array(z.number())';\n case 'boolean': return 'z.array(z.boolean())';\n default: return 'z.array(z.any())';\n }\n }\n case 'object': {\n const props: string[] = [];\n for (const example of examples) {\n if (typeof example === 'object' && example !== null) {\n for (const key of Object.keys(example)) {\n if (props.some(p => p.startsWith(`${key}:`))) continue;\n const values = examples.map(e => e?.[key]).filter(v => v !== undefined);\n const propType = inferType(values[0]);\n switch (propType) {\n case 'string': {\n const hasEmail = values.some(v => typeof v === 'string' && v.includes('@'));\n const hasUUID = values.some(\n v => typeof v === 'string' &&\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v),\n );\n if (hasEmail) props.push(`${key}: z.string().email()`);\n else if (hasUUID) props.push(`${key}: z.string().uuid()`);\n else props.push(`${key}: z.string()`);\n break;\n }\n case 'number': props.push(`${key}: z.number()`); break;\n case 'boolean': props.push(`${key}: z.boolean()`); break;\n case 'array': props.push(`${key}: z.array(z.any())`); break;\n default: props.push(`${key}: z.any()`); break;\n }\n }\n }\n }\n return `z.object({\\n ${props.join(',\\n ')}\\n})`;\n }\n default:\n return 'z.any()';\n }\n}\n\nexport function generateSchema(examples: any[]) {\n return generateZodSchema(examples);\n}\n\nexport function createKozo<TServices extends Services = Services>(\n config?: KozoConfig<TServices>,\n): Kozo<TServices> {\n return new Kozo<TServices>(config);\n}\n","import type { RouteSchema } from './types.js';\r\n\r\n/**\r\n * Client Generator Options\r\n */\r\nexport interface ClientGeneratorOptions {\r\n /** Include Zod schemas for client-side validation (default: true) */\r\n includeValidation?: boolean;\r\n \r\n /** Base URL for the API (default: '') */\r\n baseUrl?: string;\r\n \r\n /** Enable runtime validation by default (default: false) */\r\n validateByDefault?: boolean;\r\n \r\n /** Custom headers to include in all requests */\r\n defaultHeaders?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Route information for client generation\r\n */\r\nexport interface RouteInfo {\r\n method: string;\r\n path: string;\r\n schema: RouteSchema;\r\n /** Optional: store the Zod schema instance for type extraction */\r\n zodSchemas?: {\r\n body?: any;\r\n query?: any;\r\n params?: any;\r\n response?: any;\r\n };\r\n}\r\n\r\n/**\r\n * Generate a safe method name from a route path\r\n */\r\nfunction generateMethodName(method: string, path: string): string {\r\n // Remove leading/trailing slashes\r\n const cleanPath = path.replace(/^\\/+|\\/+$/g, '');\r\n \r\n // Replace path params with their names\r\n const withParams = cleanPath.replace(/:(\\w+)/g, 'By$1');\r\n \r\n // Replace slashes and special chars with underscores\r\n const safeName = withParams\r\n .replace(/[\\/\\-\\.]/g, '_')\r\n .replace(/[^\\w]/g, '');\r\n \r\n // Prepend method name if not GET\r\n if (method.toLowerCase() !== 'get') {\r\n return method.toLowerCase() + safeName.charAt(0).toUpperCase() + safeName.slice(1);\r\n }\r\n \r\n return safeName || 'index';\r\n}\r\n\r\n/**\r\n * Extract path parameters from a route path\r\n */\r\nfunction extractPathParams(path: string): string[] {\r\n const matches = path.match(/:(\\w+)/g);\r\n return matches ? matches.map(m => m.slice(1)) : [];\r\n}\r\n\r\n/**\r\n * Generate typed client code from routes\r\n */\r\nexport function generateTypedClient(\r\n routes: RouteInfo[],\r\n options: ClientGeneratorOptions = {}\r\n): string {\r\n const {\r\n includeValidation = true,\r\n baseUrl = '',\r\n validateByDefault = false,\r\n defaultHeaders = {}\r\n } = options;\r\n\r\n const imports: string[] = [];\r\n const typeDefinitions: string[] = [];\r\n const schemaExports: string[] = [];\r\n const methodImplementations: string[] = [];\r\n \r\n // Add base imports\r\n if (includeValidation) {\r\n imports.push(`import { z } from 'zod';`);\r\n }\r\n\r\n // Header\r\n let code = `// Auto-generated Kozo Client\\n`;\r\n code += `// Generated at ${new Date().toISOString()}\\n`;\r\n code += `// DO NOT EDIT - Changes will be overwritten\\n\\n`;\r\n\r\n // Track schema variable names for type inference\r\n const schemaVars = new Map<string, string>();\r\n\r\n // Process each route\r\n for (const route of routes) {\r\n const methodName = generateMethodName(route.method, route.path);\r\n const pathParams = extractPathParams(route.path);\r\n \r\n // Generate type definitions using z.infer\r\n let paramsType = 'void';\r\n let bodyType = 'void';\r\n let queryType = 'void';\r\n let responseType = 'unknown';\r\n \r\n if (pathParams.length > 0) {\r\n paramsType = `{ ${pathParams.map(p => `${p}: string`).join('; ')} }`;\r\n }\r\n \r\n if (route.zodSchemas?.body || route.schema.body) {\r\n const schemaVarName = `${capitalize(methodName)}BodySchema`;\r\n schemaVars.set(`${methodName}_body`, schemaVarName);\r\n bodyType = `z.infer<typeof ${schemaVarName}>`;\r\n \r\n if (includeValidation) {\r\n // Store schema as serialized string that will be evaluated\r\n schemaExports.push(`// @ts-ignore - Schema defined at runtime\\nexport const ${schemaVarName}: any = null;`);\r\n }\r\n }\r\n \r\n if (route.zodSchemas?.query || route.schema.query) {\r\n const schemaVarName = `${capitalize(methodName)}QuerySchema`;\r\n schemaVars.set(`${methodName}_query`, schemaVarName);\r\n queryType = `z.infer<typeof ${schemaVarName}>`;\r\n \r\n if (includeValidation) {\r\n schemaExports.push(`// @ts-ignore - Schema defined at runtime\\nexport const ${schemaVarName}: any = null;`);\r\n }\r\n }\r\n \r\n if (route.zodSchemas?.response || route.schema.response) {\r\n const schemaVarName = `${capitalize(methodName)}ResponseSchema`;\r\n schemaVars.set(`${methodName}_response`, schemaVarName);\r\n responseType = `z.infer<typeof ${schemaVarName}>`;\r\n \r\n if (includeValidation) {\r\n schemaExports.push(`// @ts-ignore - Schema defined at runtime\\nexport const ${schemaVarName}: any = null;`);\r\n }\r\n }\r\n \r\n // Generate type aliases\r\n if (bodyType !== 'void' && !bodyType.includes('z.infer')) {\r\n typeDefinitions.push(`export type ${capitalize(methodName)}Body = ${bodyType};`);\r\n }\r\n if (queryType !== 'void' && !queryType.includes('z.infer')) {\r\n typeDefinitions.push(`export type ${capitalize(methodName)}Query = ${queryType};`);\r\n }\r\n if (!responseType.includes('z.infer')) {\r\n typeDefinitions.push(`export type ${capitalize(methodName)}Response = ${responseType};`);\r\n }\r\n \r\n // Generate method signature\r\n const args: string[] = [];\r\n if (paramsType !== 'void') args.push(`params: ${paramsType}`);\r\n if (bodyType !== 'void') args.push(`body: ${bodyType}`);\r\n if (queryType !== 'void') args.push(`query?: ${queryType}`);\r\n \r\n const argsStr = args.join(', ');\r\n const returnType = `Promise<${responseType}>`;\r\n \r\n // Generate method implementation\r\n let methodBody = ` async ${methodName}(${argsStr}): ${returnType} {\\n`;\r\n \r\n // Validation\r\n if (includeValidation && bodyType !== 'void') {\r\n const schemaVar = schemaVars.get(`${methodName}_body`);\r\n if (schemaVar) {\r\n methodBody += ` if (this.validateRequests && ${schemaVar}) {\\n`;\r\n methodBody += ` ${schemaVar}.parse(body);\\n`;\r\n methodBody += ` }\\n`;\r\n }\r\n }\r\n \r\n // URL construction\r\n let urlExpression = `\\`\\${this.baseUrl}${route.path}\\``;\r\n if (pathParams.length > 0) {\r\n // Replace :param with ${params.param}\r\n const pathWithParams = route.path.replace(/:(\\w+)/g, '${params.$1}');\r\n urlExpression = `\\`\\${this.baseUrl}${pathWithParams}\\``;\r\n }\r\n \r\n methodBody += ` let url = ${urlExpression};\\n`;\r\n \r\n // Query string\r\n if (queryType !== 'void') {\r\n methodBody += ` if (query) {\\n`;\r\n methodBody += ` const queryString = new URLSearchParams(query as any).toString();\\n`;\r\n methodBody += ` url += \\`?\\${queryString}\\`;\\n`;\r\n methodBody += ` }\\n`;\r\n }\r\n \r\n // Fetch options\r\n methodBody += ` const options: RequestInit = {\\n`;\r\n methodBody += ` method: '${route.method.toUpperCase()}',\\n`;\r\n methodBody += ` headers: { ...this.defaultHeaders, 'Content-Type': 'application/json' },\\n`;\r\n if (bodyType !== 'void') {\r\n methodBody += ` body: JSON.stringify(body),\\n`;\r\n }\r\n methodBody += ` };\\n`;\r\n \r\n // Execute request\r\n methodBody += ` const response = await fetch(url, options);\\n`;\r\n methodBody += ` if (!response.ok) {\\n`;\r\n methodBody += ` throw new Error(\\`HTTP \\${response.status}: \\${response.statusText}\\`);\\n`;\r\n methodBody += ` }\\n`;\r\n methodBody += ` return response.json();\\n`;\r\n methodBody += ` }\\n`;\r\n \r\n methodImplementations.push(methodBody);\r\n }\r\n\r\n // Build final code\r\n if (imports.length > 0) {\r\n code += imports.join('\\n') + '\\n\\n';\r\n }\r\n\r\n if (typeDefinitions.length > 0) {\r\n code += '// Type Definitions\\n';\r\n code += typeDefinitions.join('\\n') + '\\n\\n';\r\n }\r\n\r\n if (includeValidation && schemaExports.length > 0) {\r\n code += '// Zod Schemas\\n';\r\n code += schemaExports.join('\\n') + '\\n\\n';\r\n }\r\n\r\n // Client class\r\n code += `export interface KozoClientOptions {\\n`;\r\n code += ` baseUrl?: string;\\n`;\r\n code += ` validateRequests?: boolean;\\n`;\r\n code += ` defaultHeaders?: Record<string, string>;\\n`;\r\n code += `}\\n\\n`;\r\n\r\n code += `export class KozoClient {\\n`;\r\n code += ` private baseUrl: string;\\n`;\r\n code += ` private validateRequests: boolean;\\n`;\r\n code += ` private defaultHeaders: Record<string, string>;\\n\\n`;\r\n \r\n code += ` constructor(options: KozoClientOptions = {}) {\\n`;\r\n code += ` this.baseUrl = options.baseUrl || '${baseUrl}';\\n`;\r\n code += ` this.validateRequests = options.validateRequests ?? ${validateByDefault};\\n`;\r\n code += ` this.defaultHeaders = options.defaultHeaders || ${JSON.stringify(defaultHeaders)};\\n`;\r\n code += ` }\\n\\n`;\r\n \r\n // Add all methods\r\n code += methodImplementations.join('\\n');\r\n \r\n code += `}\\n\\n`;\r\n code += `export default KozoClient;\\n`;\r\n\r\n return code;\r\n}\r\n\r\n/**\r\n * Capitalize first letter\r\n */\r\nfunction capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n","// ============================================================================\n// Kozo uWS Transport — uWebSockets.js adapter for nativeListen\n// ============================================================================\n//\n// Architecture:\n//\n// Each route is registered directly with uWS's C++ radix trie router\n// (app.get, app.post, …) — zero JS routing overhead per request.\n//\n// Compiled handlers (UwsNativeHandler) are called with pre-extracted\n// parameters from uWS C++ — no WASM trie, no JS dispatch, no shims.\n//\n// uWS C++ trie match → JS callback → UwsNativeHandler(uwsRes, url, body, params)\n//\n// Performance gains:\n// 1. No IncomingMessage / ServerResponse object allocation\n// 2. cork() batches all header + body writes into one kernel send()\n// 3. C++ radix trie routes — zero JS routing per request\n// 4. HTTP parser in C++ — zero JS allocation per header field\n// 5. Zero-shim handlers write directly via cork()\n//\n// Usage:\n// const uws = await tryLoadUws();\n// if (uws) { /* use createUwsServer() */ }\n// else { /* fall back to node:http */ }\n// ============================================================================\n\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { createServer as netCreateServer } from 'node:net';\nimport { KozoError } from './errors.js';\n\n// ── Minimal uWS type surface ─────────────────────────────────────────────────\n\nexport interface UwsBindings {\n App(): UwsApp;\n us_listen_socket_close(token: unknown): void;\n}\n\nexport interface UwsApp {\n get(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n post(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n put(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n patch(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n del(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n options(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n head(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n any(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n listen(port: number, cb: (listenSocket: unknown) => void): void;\n}\n\nexport interface UwsHttpRes {\n cork(fn: () => void): void;\n writeStatus(status: string): UwsHttpRes;\n writeHeader(key: string, value: string): UwsHttpRes;\n end(body?: string): UwsHttpRes;\n onData(cb: (chunk: ArrayBuffer, isLast: boolean) => void): UwsHttpRes;\n onAborted(cb: () => void): UwsHttpRes;\n}\n\nexport interface UwsHttpReq {\n getMethod(): string;\n getUrl(): string;\n getQuery(): string;\n getParameter(index: number): string;\n}\n\n// ── Status text cache ─────────────────────────────────────────────────────────\n\nconst STATUS_TEXT: Record<number, string> = {\n 200: '200 OK', 201: '201 Created', 204: '204 No Content',\n 301: '301 Moved Permanently', 302: '302 Found',\n 400: '400 Bad Request', 401: '401 Unauthorized', 403: '403 Forbidden',\n 404: '404 Not Found', 405: '405 Method Not Allowed',\n 422: '422 Unprocessable Entity', 429: '429 Too Many Requests',\n 500: '500 Internal Server Error', 503: '503 Service Unavailable',\n};\n\n// ── Pre-built 404 body ────────────────────────────────────────────────────────\n\nconst BODY_404 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#not-found',\n title: 'Resource Not Found',\n status: 404,\n});\n\n// ── HTTP methods that never carry a request body ──────────────────────────────\n\nconst NO_BODY_METHODS = new Set(['GET', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']);\n\n// ── Content-Type constants ────────────────────────────────────────────────────\n\nconst CT_JSON = 'application/json';\nconst CT_PROBLEM = 'application/problem+json';\n\n// ── Pre-built 500 body ────────────────────────────────────────────────────────\n\nconst BODY_500 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#internal-error',\n title: 'Internal Server Error',\n status: 500,\n});\n\n// ============================================================================\n// uWS-native fast response functions\n//\n// These are zero-shim equivalents of fast-response.ts helpers.\n// They write directly via cork() — no shimReq/shimRes allocation,\n// no writeHead capture, no header loop indirection.\n// ============================================================================\n\n/** Write a 200 JSON response directly to uWS. */\nexport function uwsFastWriteJson(uwsRes: UwsHttpRes, body: string): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus('200 OK');\n uwsRes.writeHeader('Content-Type', CT_JSON);\n uwsRes.end(body);\n });\n}\n\n/** Write a JSON response with a custom HTTP status code. */\nexport function uwsFastWriteJsonStatus(uwsRes: UwsHttpRes, body: string, status: number): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus(STATUS_TEXT[status] ?? `${status}`);\n uwsRes.writeHeader('Content-Type', CT_JSON);\n uwsRes.end(body);\n });\n}\n\n/** Write a 400 Validation Failed response. */\nexport function uwsFastWrite400(field: string, errors: any, uwsRes: UwsHttpRes): void {\n const body = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: 'Validation Failed',\n status: 400,\n errors: (errors ?? []).map((e: any) => ({\n field: e.instancePath?.replace(/^\\//, '').replace(/\\//g, '.') || e.params?.missingProperty || 'unknown',\n message: e.message || 'Invalid value',\n code: e.keyword || 'invalid',\n })),\n });\n uwsRes.cork(() => {\n uwsRes.writeStatus('400 Bad Request');\n uwsRes.writeHeader('Content-Type', CT_PROBLEM);\n uwsRes.end(body);\n });\n}\n\n/** Write a 500 Internal Server Error response. */\nexport function uwsFastWrite500(uwsRes: UwsHttpRes): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus('500 Internal Server Error');\n uwsRes.writeHeader('Content-Type', CT_PROBLEM);\n uwsRes.end(BODY_500);\n });\n}\n\n/** Write a KozoError or fall back to 500. */\nexport function uwsFastWriteError(err: unknown, uwsRes: UwsHttpRes): void {\n if (err instanceof KozoError) {\n const body = JSON.stringify({\n type: `https://kozo-docs.vercel.app/docs/core/errors#${err.code}`,\n title: err.message,\n status: err.statusCode,\n });\n uwsRes.cork(() => {\n uwsRes.writeStatus(STATUS_TEXT[err.statusCode] ?? `${err.statusCode}`);\n uwsRes.writeHeader('Content-Type', CT_PROBLEM);\n uwsRes.end(body);\n });\n } else {\n uwsFastWrite500(uwsRes);\n }\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Try to load uWebSockets.js via CJS require (it ships as a native .node file).\n * Returns null if the module is not installed or fails to load.\n */\nexport async function tryLoadUws(): Promise<UwsBindings | null> {\n const { createRequire } = await import('node:module');\n\n // 1. Try relative to this package (normal install)\n try {\n const req = createRequire(import.meta.url);\n return req('uWebSockets.js') as UwsBindings;\n } catch { /* not found here */ }\n\n // 2. Fall back to the caller's cwd (e.g. pnpm workspace consumer)\n try {\n const req = createRequire(new URL(`file://${process.cwd()}/index.js`));\n return req('uWebSockets.js') as UwsBindings;\n } catch {\n return null;\n }\n}\n\n/**\n * Write a pre-built 404 response directly to a uWS response.\n */\nexport function uwsWrite404(uwsRes: UwsHttpRes): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus('404 Not Found');\n uwsRes.writeHeader('Content-Type', 'application/problem+json');\n uwsRes.end(BODY_404);\n });\n}\n\n// ============================================================================\n// Shim factories\n// ============================================================================\n\n/**\n * Lightweight fake ServerResponse.\n *\n * Our compiled handlers call:\n * res.writeHead(status, [key, val, key, val, …])\n * res.end(body)\n *\n * We capture the status + flat header array and flush everything via a single\n * uWS cork() call — zero extra syscalls.\n */\nexport function makeShimRes(uwsRes: UwsHttpRes): ServerResponse {\n let _status = 200;\n let _headers: string[] = [];\n\n return {\n writeHead(status: number, headers: string[]) {\n _status = status;\n _headers = headers;\n },\n end(body: string = '') {\n uwsRes.cork(() => {\n uwsRes.writeStatus(STATUS_TEXT[_status] ?? String(_status));\n for (let i = 0; i + 1 < _headers.length; i += 2) {\n // Skip Content-Length — uWS auto-computes it from the body passed to end().\n // Writing it manually would cause a \"Duplicate Content-Length\" parse error.\n if (_headers[i] === 'Content-Length') continue;\n uwsRes.writeHeader(_headers[i], _headers[i + 1]);\n }\n uwsRes.end(body);\n });\n },\n } as unknown as ServerResponse;\n}\n\n/**\n * Lightweight fake IncomingMessage for no-body routes (GET, DELETE, …).\n *\n * The compiled S1/S2 handlers only access req.method and req.url — nothing\n * else. We allocate a plain object with just those two fields.\n */\nexport function makeShimReqNoBody(method: string, url: string): IncomingMessage {\n return { method, url } as unknown as IncomingMessage;\n}\n\n/**\n * Lightweight fake IncomingMessage for body routes (POST, PUT, PATCH).\n *\n * readNativeBody() in compiler.ts does:\n * req.on('data', chunk => …)\n * req.on('end', () => …)\n * req.on('error', e => …)\n *\n * We pre-buffer the body from uWS's onData, then replay it as a Node stream\n * using queueMicrotask so the Promise in readNativeBody resolves correctly.\n */\nexport function makeShimReqWithBody(method: string, url: string, rawBody: string): IncomingMessage {\n const dataListeners: Array<(chunk: Buffer) => void> = [];\n const endListeners: Array<() => void> = [];\n let scheduled = false;\n\n function scheduleEmit() {\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(() => {\n const buf = rawBody ? Buffer.from(rawBody, 'utf8') : null;\n if (buf) for (const l of dataListeners) l(buf);\n for (const l of endListeners) l();\n // Clear listener arrays after emit to prevent memory leaks\n dataListeners.length = 0;\n endListeners.length = 0;\n });\n }\n\n return {\n method,\n url,\n on(event: string, listener: Function) {\n if (event === 'data') { dataListeners.push(listener as any); scheduleEmit(); }\n else if (event === 'end') { endListeners.push(listener as any); scheduleEmit(); }\n // 'error' listeners intentionally ignored — uWS aborts are handled separately\n return this;\n },\n } as unknown as IncomingMessage;\n}\n\n// ============================================================================\n// Core uWS dispatch factory\n// ============================================================================\n\n/**\n * Zero-shim uWS native handler signature.\n *\n * Parameters are passed directly from the uWS dispatcher:\n * uwsRes — uWS response (write via cork/writeStatus/writeHeader/end)\n * url — full URL including query string e.g. '/api/users?page=1'\n * rawBody — pre-buffered request body string (empty string for no-body routes)\n * params — path parameters extracted by the router e.g. { id: '42' }\n */\nexport type UwsNativeHandler = (\n uwsRes: UwsHttpRes,\n url: string,\n rawBody: string,\n params: Record<string, string>,\n) => void | Promise<void>;\n\nexport interface UwsRouteEntry {\n method: string; // uppercase: 'GET', 'POST', etc.\n path: string; // original pattern: '/api/users/:id'\n paramNames: string[]; // extracted param names: ['id'] or []\n handler: UwsNativeHandler;\n}\n\nexport interface UwsDispatchOptions {\n uws: UwsBindings;\n /** Routes to register directly with uWS C++ router. */\n routes: UwsRouteEntry[];\n port: number;\n}\n\n/**\n * Find an available TCP port (for port=0 ephemeral binding with uWS).\\\n * We ask node:net for a free port, then release it before handing it to uWS.\n * Slight race condition is acceptable — this is startup-only.\n */\nfunction getFreePort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const srv = netCreateServer();\n srv.listen(0, '0.0.0.0', () => {\n const port = (srv.address() as { port: number }).port;\n srv.close((err) => err ? reject(err) : resolve(port));\n });\n });\n}\n\n// ── uWS method name map (HTTP verb → uWS app method) ─────────────────────────\n\nconst UWS_METHOD: Record<string, string> = {\n GET: 'get', POST: 'post', PUT: 'put', PATCH: 'patch',\n DELETE: 'del', OPTIONS: 'options', HEAD: 'head',\n};\n\n/**\n * Create a uWS HTTP server with native per-route C++ matching.\n *\n * Each route is registered directly with uWS (app.get, app.post, …) so the\n * C++ radix trie handles all URL matching — zero JS routing overhead.\n * A catch-all `any('/*')` returns 404 for unmatched paths.\n *\n * Returns { port, server } matching the nativeListen contract.\n */\nexport async function createUwsServer(opts: UwsDispatchOptions): Promise<{ port: number; server: { close(): void } }> {\n const { uws, routes } = opts;\n // uWS does not support ephemeral port 0 — find a free port via node:net first\n const port = opts.port === 0 ? await getFreePort() : opts.port;\n const emptyParams = Object.freeze({}) as Record<string, string>;\n\n return new Promise((resolve, reject) => {\n const uwsApp = uws.App();\n\n // ── Register each route directly with uWS C++ router ────────────────\n for (const route of routes) {\n const fn = UWS_METHOD[route.method];\n if (!fn) continue;\n\n const h = route.handler;\n const names = route.paramNames;\n const hasParams = names.length > 0;\n const noBody = NO_BODY_METHODS.has(route.method);\n\n if (noBody && !hasParams) {\n // ── Fastest path: static GET/HEAD/DELETE/OPTIONS, no params ──────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const query = uwsReq.getQuery();\n h(uwsRes, query ? `${uwsReq.getUrl()}?${query}` : uwsReq.getUrl(), '', emptyParams);\n });\n\n } else if (noBody && hasParams) {\n // ── GET/HEAD/DELETE with path params ─────────────────────────────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const rawPath = uwsReq.getUrl();\n const query = uwsReq.getQuery();\n const params: Record<string, string> = {};\n for (let i = 0; i < names.length; i++) params[names[i]] = uwsReq.getParameter(i);\n h(uwsRes, query ? `${rawPath}?${query}` : rawPath, '', params);\n });\n\n } else if (!hasParams) {\n // ── POST/PUT/PATCH without path params ──────────────────────────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const rawPath = uwsReq.getUrl();\n const query = uwsReq.getQuery();\n const url = query ? `${rawPath}?${query}` : rawPath;\n let aborted = false;\n let bodyStr = '';\n uwsRes.onAborted(() => { aborted = true; });\n uwsRes.onData((chunk, isLast) => {\n if (aborted) return;\n if (chunk.byteLength > 0) bodyStr += Buffer.from(chunk).toString('utf8');\n if (isLast) h(uwsRes, url, bodyStr, emptyParams);\n });\n });\n\n } else {\n // ── POST/PUT/PATCH with path params ─────────────────────────────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const rawPath = uwsReq.getUrl();\n const query = uwsReq.getQuery();\n const url = query ? `${rawPath}?${query}` : rawPath;\n const params: Record<string, string> = {};\n for (let i = 0; i < names.length; i++) params[names[i]] = uwsReq.getParameter(i);\n let aborted = false;\n let bodyStr = '';\n uwsRes.onAborted(() => { aborted = true; });\n uwsRes.onData((chunk, isLast) => {\n if (aborted) return;\n if (chunk.byteLength > 0) bodyStr += Buffer.from(chunk).toString('utf8');\n if (isLast) h(uwsRes, url, bodyStr, params);\n });\n });\n }\n }\n\n // ── Catch-all 404 for unmatched routes ──────────────────────────────\n uwsApp.any('/*', (uwsRes) => { uwsWrite404(uwsRes); });\n\n let listenToken: unknown = null;\n\n uwsApp.listen(port, (token) => {\n if (!token) {\n reject(new Error(`[Kozo] uWS failed to listen on port ${port}`));\n return;\n }\n listenToken = token;\n\n resolve({\n port,\n server: {\n close() {\n if (listenToken) uws.us_listen_socket_close(listenToken);\n },\n },\n });\n });\n });\n}\n","/**\n * Kozo Error System - RFC 7807 Problem Details\n *\n * Standardized error format for all validation and runtime errors.\n * Pre-serialized templates + frozen ResponseInit objects eliminate\n * per-request allocations on the hot path.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7807\n */\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\nexport interface ValidationError {\n field: string;\n message: string;\n code: string;\n value?: unknown;\n}\n\nexport interface ProblemDetails {\n type: string;\n title: string;\n status: number;\n detail?: string;\n instance?: string;\n errors?: ValidationError[];\n}\n\n// ============================================================================\n// Pre-compiled Error Responses (Zero allocation at runtime)\n// ============================================================================\n\nconst CONTENT_TYPE_PROBLEM = 'application/problem+json';\n\nexport const ERROR_RESPONSES = {\n VALIDATION_FAILED: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: 'Validation Failed',\n status: 400,\n },\n INVALID_BODY: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#invalid-body',\n title: 'Invalid Request Body',\n status: 400,\n },\n INVALID_QUERY: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#invalid-query',\n title: 'Invalid Query Parameters',\n status: 400,\n },\n INVALID_PARAMS: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#invalid-params',\n title: 'Invalid Path Parameters',\n status: 400,\n },\n INTERNAL_ERROR: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#internal-error',\n title: 'Internal Server Error',\n status: 500,\n },\n NOT_FOUND: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#not-found',\n title: 'Resource Not Found',\n status: 404,\n },\n UNAUTHORIZED: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#unauthorized',\n title: 'Unauthorized',\n status: 401,\n },\n FORBIDDEN: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#forbidden',\n title: 'Forbidden',\n status: 403,\n },\n} as const;\n\n// ============================================================================\n// Pre-frozen ResponseInit objects — V8 can constant-fold header reads\n// ============================================================================\n\nconst HDR_PROBLEM = { 'Content-Type': CONTENT_TYPE_PROBLEM };\n\nconst INIT_400 = Object.freeze({ status: 400, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_401 = Object.freeze({ status: 401, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_403 = Object.freeze({ status: 403, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_404 = Object.freeze({ status: 404, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_500 = Object.freeze({ status: 500, headers: HDR_PROBLEM }) as ResponseInit;\n\n// ============================================================================\n// Error Formatters\n// ============================================================================\n\n/**\n * Convert Ajv validation errors to standardized format\n */\nexport function formatAjvErrors(errors: any[] | null | undefined): ValidationError[] {\n if (!errors || errors.length === 0) return [];\n\n return errors.map(err => ({\n field: err.instancePath?.replace(/^\\//, '').replace(/\\//g, '.') || err.params?.missingProperty || 'unknown',\n message: err.message || 'Invalid value',\n code: err.keyword || 'invalid',\n value: err.data,\n }));\n}\n\n/**\n * Convert Zod validation errors to standardized format\n */\nexport function formatZodErrors(errors: any): ValidationError[] {\n if (!errors?.issues) return [];\n\n return errors.issues.map((issue: any) => ({\n field: issue.path?.join('.') || 'unknown',\n message: issue.message || 'Invalid value',\n code: issue.code || 'invalid',\n value: issue.input,\n }));\n}\n\n// ============================================================================\n// Response Builders\n//\n// Hot-path functions (validationErrorResponse, internalErrorResponse) avoid\n// any per-call object creation beyond the unavoidable JSON.stringify of the\n// dynamic payload.\n// ============================================================================\n\n/**\n * Build a 400 Validation Failed response.\n * Called on every invalid request — kept as lean as possible.\n */\nexport function validationErrorResponse(\n field: string,\n ajvErrors: any[] | null | undefined,\n instance?: string,\n): Response {\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.VALIDATION_FAILED.type,\n title: ERROR_RESPONSES.VALIDATION_FAILED.title,\n status: 400,\n errors: formatAjvErrors(ajvErrors),\n };\n if (instance) body.instance = instance;\n return new Response(JSON.stringify(body), INIT_400);\n}\n\n/**\n * Build a 500 Internal Server Error response.\n */\nexport function internalErrorResponse(err: Error, instance?: string): Response {\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.INTERNAL_ERROR.type,\n title: ERROR_RESPONSES.INTERNAL_ERROR.title,\n status: 500,\n detail: err?.message,\n };\n if (instance) body.instance = instance;\n return new Response(JSON.stringify(body), INIT_500);\n}\n\n/**\n * Build a 404 Not Found response.\n * Pre-serialized for the common case (no instance).\n */\n\n// Pre-serialized static bodies — zero allocation for the common case\nconst BODY_404_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.NOT_FOUND.type,\n title: ERROR_RESPONSES.NOT_FOUND.title,\n status: 404,\n});\n\nexport function notFoundResponse(instance?: string): Response {\n if (!instance) return new Response(BODY_404_STATIC, INIT_404);\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.NOT_FOUND.type,\n title: ERROR_RESPONSES.NOT_FOUND.title,\n status: 404,\n instance,\n };\n return new Response(JSON.stringify(body), INIT_404);\n}\n\n/**\n * Build a 401 Unauthorized response.\n */\n\nconst BODY_401_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.UNAUTHORIZED.type,\n title: ERROR_RESPONSES.UNAUTHORIZED.title,\n status: 401,\n});\n\nexport function unauthorizedResponse(instance?: string): Response {\n if (!instance) return new Response(BODY_401_STATIC, INIT_401);\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.UNAUTHORIZED.type,\n title: ERROR_RESPONSES.UNAUTHORIZED.title,\n status: 401,\n instance,\n };\n return new Response(JSON.stringify(body), INIT_401);\n}\n\n/**\n * Build a 403 Forbidden response.\n */\n\nconst BODY_403_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.FORBIDDEN.type,\n title: ERROR_RESPONSES.FORBIDDEN.title,\n status: 403,\n});\n\nexport function forbiddenResponse(instance?: string): Response {\n if (!instance) return new Response(BODY_403_STATIC, INIT_403);\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.FORBIDDEN.type,\n title: ERROR_RESPONSES.FORBIDDEN.title,\n status: 403,\n instance,\n };\n return new Response(JSON.stringify(body), INIT_403);\n}\n\n/**\n * Build a 500 Internal Server Error response (static, no detail).\n */\nconst BODY_500_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.INTERNAL_ERROR.type,\n title: ERROR_RESPONSES.INTERNAL_ERROR.title,\n status: 500,\n});\n\nexport function internalErrorResponseStatic(): Response {\n return new Response(BODY_500_STATIC, INIT_500);\n}\n\n// ============================================================================\n// KozoError — Base Error Class\n// ============================================================================\n\nexport class KozoError extends Error {\n readonly statusCode: number;\n readonly code: string;\n\n constructor(message: string, statusCode: number, code: string) {\n super(message);\n this.name = 'KozoError';\n this.statusCode = statusCode;\n this.code = code;\n }\n\n toResponse(instance?: string): Response {\n const body: ProblemDetails = {\n type: `https://kozo-docs.vercel.app/docs/core/errors#${this.code}`,\n title: this.message,\n status: this.statusCode,\n };\n if (instance) body.instance = instance;\n const init = _initForStatus(this.statusCode);\n return new Response(JSON.stringify(body), init);\n }\n}\n\n// Inline status → init lookup (avoids switch overhead for common codes)\nfunction _initForStatus(status: number): ResponseInit {\n if (status === 400) return INIT_400;\n if (status === 401) return INIT_401;\n if (status === 403) return INIT_403;\n if (status === 404) return INIT_404;\n if (status === 500) return INIT_500;\n return Object.freeze({ status, headers: HDR_PROBLEM }) as ResponseInit;\n}\n\n// ============================================================================\n// Concrete Error Classes\n// ============================================================================\n\nexport class ValidationFailedError extends KozoError {\n readonly errors: ValidationError[];\n\n constructor(message: string, errors: ValidationError[] = []) {\n super(message, 400, 'validation-failed');\n this.name = 'ValidationFailedError';\n this.errors = errors;\n }\n\n override toResponse(instance?: string): Response {\n const body: ProblemDetails = {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: this.message,\n status: 400,\n errors: this.errors,\n };\n if (instance) body.instance = instance;\n return new Response(JSON.stringify(body), INIT_400);\n }\n}\n\nexport class NotFoundError extends KozoError {\n constructor(message = 'Resource Not Found') {\n super(message, 404, 'not-found');\n this.name = 'NotFoundError';\n }\n}\n\nexport class UnauthorizedError extends KozoError {\n constructor(message = 'Unauthorized') {\n super(message, 401, 'unauthorized');\n this.name = 'UnauthorizedError';\n }\n}\n\nexport class ForbiddenError extends KozoError {\n constructor(message = 'Forbidden') {\n super(message, 403, 'forbidden');\n this.name = 'ForbiddenError';\n }\n}\n\n// ============================================================================\n// Middleware-friendly Http* aliases (avoid collision with KozoError hierarchy)\n// ============================================================================\n\nexport class HttpError extends KozoError {}\nexport class HttpBadRequestError extends KozoError {\n constructor(message = 'Bad Request') { super(message, 400, 'bad-request'); }\n}\nexport class HttpUnauthorizedError extends UnauthorizedError {}\nexport class HttpForbiddenError extends ForbiddenError {}\nexport class HttpNotFoundError extends NotFoundError {}\nexport class HttpInternalError extends KozoError {\n constructor(message = 'Internal Server Error') { super(message, 500, 'internal-error'); }\n}\n","// ============================================================================\n// Kozo Fast Response — Optimized HTTP response writing for nativeListen\n// ============================================================================\n//\n// Key optimisations over vanilla Node.js ServerResponse:\n//\n// 1. ASCII body length → JSON output is always ASCII-safe (fast-json-\n// stringify escapes non-ASCII to \\uXXXX). body.length === byte length,\n// so we skip the expensive Buffer.byteLength() call (~60–100 ns saved).\n//\n// 2. Content-Length cache → pre-computed String(n) for sizes 0–9999\n// avoids per-request String() conversion (~12 ns saved).\n//\n// 3. Pre-built error buffers → 404 / 500 responses are constant strings,\n// written once at import time. Zero allocation on error paths.\n//\n// These utilities are used internally by the native handler compiler\n// (compiler.ts) and the nativeListen dispatch function (app.ts).\n// They are NOT part of the public developer API.\n// ============================================================================\n\nimport type { ServerResponse } from 'node:http';\nimport { KozoError } from './errors.js';\n\n// ── Content-Length string cache ─────────────────────────────────────────\n// Pre-allocate stringified numbers for sizes 0–9999 (covers 99%+ of\n// JSON API responses). Avoids `String(n)` allocation on every request.\nconst CL_CACHE: string[] = /* @__PURE__ */ (() => {\n const arr = new Array<string>(10_000);\n for (let i = 0; i < 10_000; i++) arr[i] = String(i);\n return arr;\n})();\n\n/** Fast number → string for Content-Length. Cached for values < 10 000. */\nexport function fastCL(n: number): string {\n return n < 10_000 ? CL_CACHE[n] : String(n);\n}\n\n// ── Content-Type constants ──────────────────────────────────────────────\nconst CT_JSON = 'application/json';\nconst CT_PROBLEM = 'application/problem+json';\nconst CT_TEXT = 'text/plain';\nconst CT_HTML = 'text/html; charset=utf-8';\n\n// ── Pre-built error response buffers ────────────────────────────────────\nconst BODY_404 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#not-found',\n title: 'Resource Not Found',\n status: 404,\n});\nconst LEN_404 = fastCL(BODY_404.length);\n\nconst BODY_500 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#internal-error',\n title: 'Internal Server Error',\n status: 500,\n});\nconst LEN_500 = fastCL(BODY_500.length);\n\n// ════════════════════════════════════════════════════════════════════════\n// Public helpers — used by compiler.ts native handler scenarios\n// ════════════════════════════════════════════════════════════════════════\n\n/**\n * Write a 200 JSON response.\n *\n * IMPORTANT: `body` MUST be ASCII-safe (i.e. produced by JSON.stringify\n * or fast-json-stringify). We use `body.length` instead of\n * `Buffer.byteLength(body)` — valid because JSON serializers escape\n * non-ASCII to `\\uXXXX`, keeping the output 7-bit clean.\n */\nexport function fastWriteJson(res: ServerResponse, body: string): void {\n res.writeHead(200, [\n 'Content-Type', CT_JSON,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n}\n\n/**\n * Write a plain text response.\n */\nexport function fastWriteText(res: ServerResponse, body: string, status: number = 200): void {\n const len = Buffer.byteLength(body); // text may contain UTF-8\n res.writeHead(status, [\n 'Content-Type', CT_TEXT,\n 'Content-Length', fastCL(len),\n ]);\n res.end(body);\n}\n\n/**\n * Write an HTML response (SSR page rendering).\n */\nexport function fastWriteHtml(res: ServerResponse, body: string, status: number = 200): void {\n const len = Buffer.byteLength(body); // HTML may contain UTF-8\n res.writeHead(status, [\n 'Content-Type', CT_HTML,\n 'Content-Length', fastCL(len),\n ]);\n res.end(body);\n}\n\n/**\n * Write a JSON response with a custom status code.\n */\nexport function fastWriteJsonStatus(res: ServerResponse, body: string, status: number): void {\n res.writeHead(status, [\n 'Content-Type', CT_JSON,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n}\n\n/**\n * Write a pre-built 404 Not Found response (zero allocation).\n */\nexport function fastWrite404(res: ServerResponse): void {\n res.writeHead(404, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', LEN_404,\n ]);\n res.end(BODY_404);\n}\n\n/**\n * Write a pre-built 500 Internal Server Error response (zero allocation).\n */\nexport function fastWrite500(res: ServerResponse): void {\n res.writeHead(500, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', LEN_500,\n ]);\n res.end(BODY_500);\n}\n\n/**\n * Write a 400 validation error response.\n * Allocates only the error body string.\n */\nexport function fastWrite400(field: string, errors: any, res: ServerResponse): void {\n const body = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: 'Validation Failed',\n status: 400,\n errors: (errors ?? []).map((e: any) => ({\n field: e.instancePath?.replace(/^\\//, '').replace(/\\//g, '.') || e.params?.missingProperty || 'unknown',\n message: e.message || 'Invalid value',\n code: e.keyword || 'invalid',\n })),\n });\n res.writeHead(400, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n}\n\n/**\n * Write a KozoError as an RFC 7807 problem+json response.\n * Falls back to 500 for unknown errors.\n */\nexport function fastWriteError(err: unknown, res: ServerResponse): void {\n if (err instanceof KozoError) {\n const body = JSON.stringify({\n type: `https://kozo-docs.vercel.app/docs/core/errors#${err.code}`,\n title: err.message,\n status: err.statusCode,\n });\n res.writeHead(err.statusCode, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n } else {\n fastWrite500(res);\n }\n}\n","import type { Context } from 'hono';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Services, RouteSchema } from './types.js';\nimport type { UwsHttpRes, UwsNativeHandler } from './uws-transport.js';\nimport { uwsFastWriteJson, uwsFastWrite400, uwsFastWriteError } from './uws-transport.js';\nimport { z } from 'zod';\n\n// ============================================================================\n// Zod-native validator — replaces Ajv (removes eval/URL-string supply chain flags)\n//\n// API is intentionally Ajv-compatible: callable → boolean, with a mutable\n// `.errors` side-channel. This means ZERO changes to the ~50 scenario\n// closures below that do: if (!vq(query)) return err(vq.errors, …)\n//\n// In-place mutation (same as Ajv removeAdditional + coerceTypes):\n// • Extra keys on plain objects are deleted\n// • Coerced/transformed values from Zod overwrite the originals\n// Safe in Node.js single-threaded model: no `await` occurs between the\n// validator call and the `.errors` read in any scenario.\n// ============================================================================\ntype ZValidatorErrors = { instancePath: string; message: string }[];\ntype ZValidator = ((data: unknown) => boolean) & { errors: ZValidatorErrors | null };\n\nfunction makeZValidator(schema: z.ZodType): ZValidator {\n const fn = function (data: unknown): boolean {\n const r = schema.safeParse(data);\n fn.errors = null;\n if (r.success) {\n // Mutate plain objects in-place: strip unknown keys + apply coerced values\n // (mirrors Ajv removeAdditional:'all' + coerceTypes:true behaviour)\n if (data !== null && typeof data === 'object' && !Array.isArray(data)) {\n const d = data as Record<string, unknown>;\n const rd = r.data as Record<string, unknown>;\n for (const k of Object.keys(d)) if (!(k in rd)) delete d[k];\n Object.assign(d, rd);\n }\n return true;\n }\n fn.errors = r.error.issues.map(i => ({\n instancePath: i.path.length ? '/' + i.path.join('/') : '',\n message: i.message,\n }));\n return false;\n } as ZValidator;\n fn.errors = null;\n return fn;\n}\nimport {\n validationErrorResponse,\n internalErrorResponse,\n internalErrorResponseStatic,\n KozoError,\n} from './errors.js';\nimport {\n fastWriteJson,\n fastWriteError,\n fastWrite400,\n fastWrite500,\n} from './fast-response.js';\n\ntype CompiledHandler = (c: Context) => Promise<Response> | Response;\ntype UserHandler = (c: any) => any;\n\nexport type NativeRouteHandler = (\n req: IncomingMessage,\n res: ServerResponse,\n params: Record<string, string>,\n) => void;\n\nexport type CompiledRoute = {\n validateBody?: ZValidator;\n validateQuery?: ZValidator;\n validateParams?: ZValidator;\n serialize?: (data: any) => string;\n};\n\nfunction isZodSchema(schema: any): schema is z.ZodType {\n return typeof schema === 'object' && schema !== null && 'safeParse' in schema;\n}\n\n// ============================================================================\n// Pre-allocated response init objects — frozen so V8 can constant-fold reads\n// ============================================================================\nconst HDR_JSON = { 'Content-Type': 'application/json' };\nconst RESPONSE_INIT_200 = Object.freeze({ status: 200, headers: HDR_JSON }) as ResponseInit;\n\n// Single reusable factory — avoids inline object literal allocation at call sites\nfunction jsonResponse200(body: string): Response {\n return new Response(body, RESPONSE_INIT_200);\n}\n\n// ============================================================================\n// Pre-built empty-body handler — captured once, never re-allocated\n// ============================================================================\nconst EMPTY_BODY: Record<string, never> = Object.freeze({}) as Record<string, never>;\nconst EMPTY_BODY_HANDLER = () => EMPTY_BODY;\n\n// ============================================================================\n// Fast serializer — skips JSON.stringify for plain strings\n// ============================================================================\nfunction toJsonBody(result: any): string {\n if (typeof result === 'string') return result;\n return JSON.stringify(result);\n}\n\nexport class SchemaCompiler {\n static compile(schema: RouteSchema): CompiledRoute {\n const compiled: CompiledRoute = {};\n\n // 1. Body — Zod-native validation (no Ajv, no eval)\n if (schema.body && isZodSchema(schema.body)) {\n compiled.validateBody = makeZValidator(schema.body);\n }\n\n // 2. Query\n if (schema.query && isZodSchema(schema.query)) {\n compiled.validateQuery = makeZValidator(schema.query);\n }\n\n // 3. Params\n if (schema.params && isZodSchema(schema.params)) {\n compiled.validateParams = makeZValidator(schema.params);\n }\n\n // 4. Serializer — JSON.stringify (no eval, no supply chain risk)\n if (schema.response) {\n compiled.serialize = JSON.stringify;\n }\n\n return compiled;\n }\n}\n\n// ============================================================================\n// LA CHIAVE DI VOLTA: Route Handler Compiler\n//\n// Executed ONCE at startup per route.\n// Builds a monomorphic closure that captures all validators/serializers.\n// Zero runtime branching — scenario selected at compile time.\n//\n// Scenario matrix (selected once at route registration):\n//\n// S1 bare no validation, no services\n// S1s services no validation, with services\n// S2a query query only, ±services\n// S2b params params only, ±services\n// S2c query+params both, ±services\n// S3 full+ser body + serializer, ±services\n// S4 full noser body, no serializer, ±services\n//\n// Each scenario further splits on hasServices → 2 monomorphic closures.\n// V8 JIT-compiles each independently with fixed hidden class and inline budget.\n//\n// Hot path micro-opts applied to every scenario:\n// • c.req.path extracted once before try (single getter call)\n// • toJsonBody() skips JSON.stringify for plain string returns\n// • internalErrorResponseStatic() used in bare paths (no err.message needed)\n// ============================================================================\nexport function compileRouteHandler(\n handler: UserHandler,\n schema: RouteSchema,\n services: Services,\n compiled: CompiledRoute,\n): CompiledHandler {\n const { validateBody, validateQuery, validateParams, serialize } = compiled;\n\n // Compile-time flags — captured in closure, never re-evaluated\n const hasServices = services != null && Object.keys(services).length > 0;\n const hasQuery = !!validateQuery;\n const hasParams = !!validateParams;\n const hasBody = !!validateBody;\n const hasSer = !!serialize;\n // handler.length === 0 → handler declares no params, skip { c } allocation entirely.\n // Safe: zero-arg handlers cannot reference context regardless.\n const handlerIgnoresArgs = handler.length === 0;\n\n // ─── SCENARIO 1: Zero validation, no services ──────────────────────────────\n // Sync-capable: no async/await — eliminates one microtask for sync handlers.\n // Promise-detect fallback covers async user handlers transparently.\n // Compile-time hasSer split: uses JSON.stringify when schema is present,\n // avoids runtime ternary on every request.\n if (!hasBody && !hasQuery && !hasParams && !hasServices) {\n if (hasSer) {\n const ser = serialize!;\n return function scenario1_bare_ser(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario1_bare(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 1b: Zero validation, WITH services ───────────────────────────\n if (!hasBody && !hasQuery && !hasParams && hasServices) {\n if (hasSer) {\n const ser = serialize!;\n return function scenario1_services_ser(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario1_services(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 2a: Query only (no params, no body) ──────────────────────────\n // Sync-capable: validation is sync, handler call uses promise-detect.\n // Lazy path (c.req.path) accessed only on error branch.\n // Compile-time hasSer split: eliminates runtime ternary on every request.\n if (hasQuery && !hasParams && !hasBody) {\n const vq = validateQuery!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function scenario2a_query_ser(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2a_query_svc_ser(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n if (!hasServices) {\n return function scenario2a_query(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2a_query_svc(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 2b: Params only (no query, no body) ──────────────────────────\n if (hasParams && !hasQuery && !hasBody) {\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function scenario2b_params_ser(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2b_params_svc_ser(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n if (!hasServices) {\n return function scenario2b_params(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2b_params_svc(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 2c: Query + Params (no body) ─────────────────────────────────\n if (hasQuery && hasParams && !hasBody) {\n const vq = validateQuery!;\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function scenario2c_qp_ser(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2c_qp_svc_ser(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n if (!hasServices) {\n return function scenario2c_qp(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2c_qp_svc(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 3: Full path WITH serializer ─────────────────────────────────\n if (hasBody && hasSer) {\n const vb = validateBody!;\n const ser = serialize!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function scenario3_full_ser(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params });\n if (result instanceof Response) return result;\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n return async function scenario3_full_ser_svc(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params, services });\n if (result instanceof Response) return result;\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n\n // ─── SCENARIO 4: Full path WITHOUT serializer ──────────────────────────────\n if (hasBody && !hasSer) {\n const vb = validateBody!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function scenario4_full_noser(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params });\n if (result instanceof Response) return result;\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n return async function scenario4_full_noser_svc(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params, services });\n if (result instanceof Response) return result;\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n\n // ─── SCENARIO 5: Fallback (should never be reached in practice) ────────────\n return async function scenario5_fallback(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const result = await handler({ c, services: hasServices ? services : undefined });\n if (result instanceof Response) return result;\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n}\n\n// ============================================================================\n// NATIVE NODE.JS HANDLER COMPILER\n//\n// Produces (req, res, params) => void handlers that write directly to the\n// Node.js ServerResponse socket — no Web API Request/Response allocation,\n// no @hono/node-server adapter overhead.\n//\n// Used by Kozo.nativeListen() for maximum throughput.\n// ============================================================================\n\n// ============================================================================\n// Native response helpers — delegated to fast-response.ts\n//\n// Key performance wins over the old inline helpers:\n// • Cork/uncork: entire HTTP response sent as a single TCP frame\n// • ASCII body length: body.length instead of Buffer.byteLength()\n// • Content-Length cache: pre-stringified values for sizes 0–9999\n// ============================================================================\n// fastWriteJson → fastWriteJson (imported from fast-response.ts)\n// fastWriteError → fastWriteError (imported from fast-response.ts)\n// fastWrite400 → fastWrite400 (imported from fast-response.ts)\n\nfunction parseNativeQuery(url: string): Record<string, string> {\n const qIdx = url.indexOf('?');\n if (qIdx === -1) return {};\n const sp = new URLSearchParams(url.slice(qIdx + 1));\n const result: Record<string, string> = {};\n sp.forEach((v, k) => { result[k] = v; });\n return result;\n}\n\nfunction readNativeBody(req: IncomingMessage): Promise<any> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n\n const onData = (chunk: Buffer) => chunks.push(chunk);\n const onEnd = () => {\n req.removeListener('data', onData);\n req.removeListener('end', onEnd);\n req.removeListener('error', onError);\n try {\n const str = Buffer.concat(chunks).toString('utf8');\n resolve(str ? JSON.parse(str) : {});\n } catch {\n resolve({});\n }\n };\n const onError = (err: Error) => {\n req.removeListener('data', onData);\n req.removeListener('end', onEnd);\n req.removeListener('error', onError);\n reject(err);\n };\n\n req.on('data', onData);\n req.on('end', onEnd);\n req.on('error', onError);\n });\n}\n\nexport function compileNativeHandler(\n handler: UserHandler,\n schema: RouteSchema,\n services: Services,\n compiled: CompiledRoute,\n): NativeRouteHandler {\n const { validateBody, validateQuery, validateParams, serialize } = compiled;\n\n const hasServices = services != null && Object.keys(services).length > 0;\n const hasQuery = !!validateQuery;\n const hasParams = !!validateParams;\n const hasBody = !!validateBody;\n const hasSer = !!serialize;\n const handlerIgnoresArgs = handler.length === 0;\n\n // ─── S1: no validation, no services ─────────────────────────────────────\n // Hot path: handlerIgnoresArgs=true + hasSer=true is the benchmark scenario.\n // Fully inline — no branching, no allocation beyond the serialized string.\n if (!hasBody && !hasQuery && !hasParams && !hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function native_s1_bare_ser_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_bare_ser(req, res, _p) {\n try {\n const result = handler({ req });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (handlerIgnoresArgs) {\n return function native_s1_bare_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_bare(req, res, _p) {\n try {\n const result = handler({ req });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S1b: no validation, WITH services ───────────────────────────────────\n if (!hasBody && !hasQuery && !hasParams && hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function native_s1_svc_ser_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_svc_ser(req, res, _p) {\n try {\n const result = handler({ req, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (handlerIgnoresArgs) {\n return function native_s1_svc_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_svc(req, res, _p) {\n try {\n const result = handler({ req, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S2a: query only (no params, no body) ────────────────────────────────\n if (hasQuery && !hasParams && !hasBody) {\n const vq = validateQuery!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function native_s2a_q_ser(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2a_q_svc_ser(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (!hasServices) {\n return function native_s2a_q(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2a_q_svc(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S2b: params only (no query, no body) ────────────────────────────────\n if (hasParams && !hasQuery && !hasBody) {\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function native_s2b_p_ser(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2b_p_svc_ser(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (!hasServices) {\n return function native_s2b_p(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2b_p_svc(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S2c: query + params (no body) ───────────────────────────────────────\n if (hasQuery && hasParams && !hasBody) {\n const vq = validateQuery!;\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function native_s2c_qp_ser(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2c_qp_svc_ser(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (!hasServices) {\n return function native_s2c_qp(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2c_qp_svc(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S3: body + serializer (async body read) ─────────────────────────────\n if (hasBody && hasSer) {\n const vb = validateBody!;\n const ser = serialize!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function native_s3_body_ser(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params });\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return async function native_s3_body_ser_svc(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params, services });\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S4: body, no serializer ─────────────────────────────────────────────\n if (hasBody && !hasSer) {\n const vb = validateBody!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function native_s4_body_noser(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params });\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return async function native_s4_body_noser_svc(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params, services });\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── Fallback ─────────────────────────────────────────────────────────────\n return function native_fallback(req, res, _p) {\n fastWriteError(new Error('Route scenario not implemented'), res);\n };\n}\n\n// ============================================================================\n// compileUwsNativeHandler — zero-shim uWS-native handler compiler\n//\n// Mirrors compileNativeHandler but generates UwsNativeHandler instead of\n// NativeRouteHandler. Key differences:\n// 1. Handler signature: (uwsRes, url, rawBody, params) — no shimReq/shimRes\n// 2. Body parsing: synchronous from pre-buffered rawBody (no await/queueMicrotask)\n// 3. Response writing: uwsFastWriteJson / uwsFastWrite400 / uwsFastWriteError\n// call uwsRes.cork() directly — one syscall per response, zero indirection\n// ============================================================================\nexport function compileUwsNativeHandler(\n handler: UserHandler,\n schema: RouteSchema,\n services: Services,\n compiled: CompiledRoute,\n): UwsNativeHandler {\n const { validateBody, validateQuery, validateParams, serialize } = compiled;\n\n const hasServices = services != null && Object.keys(services).length > 0;\n const hasQuery = !!validateQuery;\n const hasParams = !!validateParams;\n const hasBody = !!validateBody;\n const hasSer = !!serialize;\n const handlerIgnoresArgs = handler.length === 0;\n\n // ─── S1: no validation, no services ──────────────────────────────────────\n if (!hasBody && !hasQuery && !hasParams && !hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function uws_s1_bare_ser_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1_bare_ser(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url } });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (handlerIgnoresArgs) {\n return function uws_s1_bare_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1_bare(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url } });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S1b: no validation, WITH services ───────────────────────────────────\n if (!hasBody && !hasQuery && !hasParams && hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function uws_s1b_svc_ser_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1b_svc_ser(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url }, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (handlerIgnoresArgs) {\n return function uws_s1b_svc_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1b_svc(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url }, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S2a: query only ─────────────────────────────────────────────────────\n if (hasQuery && !hasParams && !hasBody) {\n const vq = validateQuery!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function uws_s2a_q_ser(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2a_q_svc_ser(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (!hasServices) {\n return function uws_s2a_q(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2a_q_svc(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S2b: params only ────────────────────────────────────────────────────\n if (hasParams && !hasQuery && !hasBody) {\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function uws_s2b_p_ser(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2b_p_svc_ser(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (!hasServices) {\n return function uws_s2b_p(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2b_p_svc(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S2c: query + params ─────────────────────────────────────────────────\n if (hasQuery && hasParams && !hasBody) {\n const vq = validateQuery!;\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function uws_s2c_qp_ser(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2c_qp_svc_ser(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (!hasServices) {\n return function uws_s2c_qp(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2c_qp_svc(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S3: body + serializer — sync body parse (rawBody pre-buffered by uWS) ──\n if (hasBody && hasSer) {\n const vb = validateBody!;\n const ser = serialize!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return function uws_s3_body_ser(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result as any));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s3_body_ser_svc(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result as any));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S4: body, no serializer ─────────────────────────────────────────────\n if (hasBody && !hasSer) {\n const vb = validateBody!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return function uws_s4_body_noser(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s4_body_noser_svc(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── Fallback ─────────────────────────────────────────────────────────────\n return function uws_fallback(uwsRes, _url, _raw, _p) {\n uwsFastWriteError(new Error('Route scenario not implemented'), uwsRes);\n };\n}\n","// ============================================\n// GRACEFUL SHUTDOWN INFRASTRUCTURE\n// ============================================\n\nimport type { Server } from 'node:http';\n\n// Local type definitions to avoid cross-package dependency\ntype DatabaseProvider = 'postgresql' | 'mysql' | 'sqlite';\ntype DatabaseInstance = Record<string, unknown>;\n\n/**\n * Shutdown configuration options\n */\nexport interface ShutdownOptions {\n /** Maximum time to wait for in-flight requests to complete (default: 30000ms) */\n timeoutMs?: number;\n /** Callback fired when shutdown starts */\n onShutdownStart?: (inflightCount: number) => void;\n /** Callback fired when all requests complete before timeout */\n onShutdownComplete?: () => void;\n /** Callback fired when shutdown times out */\n onShutdownTimeout?: (remainingInflight: number) => void;\n /** Database instance to close (optional) */\n database?: DatabaseInstance;\n /** Database provider type (required if database is provided) */\n databaseProvider?: DatabaseProvider;\n}\n\n/**\n * Internal state for tracking in-flight requests\n */\nexport interface InflightTracker {\n count: number;\n requests: Set<Promise<unknown>>;\n}\n\n/**\n * Create an in-flight request tracker\n */\nexport function createInflightTracker(): InflightTracker {\n return {\n count: 0,\n requests: new Set(),\n };\n}\n\n/**\n * Track a request - call at the start of each request\n */\nexport function trackRequest(tracker: InflightTracker): () => void {\n tracker.count++;\n let resolvePromise: () => void;\n const promise = new Promise<void>((resolve) => {\n resolvePromise = resolve;\n });\n tracker.requests.add(promise);\n \n // Return untrack function to call when request completes\n return () => {\n tracker.count--;\n tracker.requests.delete(promise);\n resolvePromise();\n };\n}\n\n/**\n * Shutdown state machine\n */\nexport type ShutdownState = 'running' | 'shutting-down' | 'shutdown';\n\n/**\n * Graceful shutdown manager\n */\nexport class ShutdownManager {\n private state: ShutdownState = 'running';\n private abortController: AbortController | null = null;\n private server: Server | null = null;\n private tracker: InflightTracker;\n private database: DatabaseInstance | null = null;\n private databaseProvider: DatabaseProvider | null = null;\n\n constructor() {\n this.tracker = createInflightTracker();\n }\n\n /**\n * Get current shutdown state\n */\n getState(): ShutdownState {\n return this.state;\n }\n\n /**\n * Check if server is shutting down\n */\n isShuttingDown(): boolean {\n return this.state !== 'running';\n }\n\n /**\n * Get current in-flight request count\n */\n getInflightCount(): number {\n return this.tracker.count;\n }\n\n /**\n * Set the server instance for shutdown\n */\n setServer(server: Server): void {\n this.server = server;\n }\n\n /**\n * Set database for cleanup\n */\n setDatabase(db: DatabaseInstance, provider: DatabaseProvider): void {\n this.database = db;\n this.databaseProvider = provider;\n }\n\n /**\n * Get the AbortController signal for request cancellation\n */\n getAbortSignal(): AbortSignal | undefined {\n return this.abortController?.signal;\n }\n\n /**\n * Create a request tracker middleware\n * Returns an untrack function to call when request completes\n */\n trackRequest(): () => void {\n return trackRequest(this.tracker);\n }\n\n /**\n * Initiate graceful shutdown\n */\n async shutdown(options: ShutdownOptions = {}): Promise<void> {\n const {\n timeoutMs = 30000,\n onShutdownStart,\n onShutdownComplete,\n onShutdownTimeout,\n } = options;\n\n // Handle already-shutdown state\n if (this.state === 'shutdown') {\n console.warn('[Kozo] Shutdown already completed');\n return;\n }\n\n // Handle in-progress shutdown\n if (this.state === 'shutting-down') {\n console.warn('[Kozo] Shutdown already in progress');\n return;\n }\n\n this.state = 'shutting-down';\n\n // Create AbortController to signal all handlers\n this.abortController = new AbortController();\n this.abortController.abort();\n\n const inflightCount = this.tracker.count;\n onShutdownStart?.(inflightCount);\n\n if (inflightCount > 0) {\n console.log(`[Kozo] Graceful shutdown: waiting for ${inflightCount} in-flight requests`);\n }\n\n // Stop accepting new connections\n if (this.server) {\n this.server.close(() => {\n console.log('[Kozo] HTTP server closed');\n });\n }\n\n // Wait for in-flight requests with timeout\n const drainPromise = this.drainRequests();\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => {\n onShutdownTimeout?.(this.tracker.count);\n resolve();\n }, timeoutMs);\n });\n\n await Promise.race([drainPromise, timeoutPromise]);\n\n // Close database connections\n await this.closeDatabase();\n\n this.state = 'shutdown';\n onShutdownComplete?.();\n console.log('[Kozo] Graceful shutdown complete');\n }\n\n /**\n * Wait for all in-flight requests to complete\n */\n private async drainRequests(): Promise<void> {\n if (this.tracker.requests.size === 0) {\n return;\n }\n await Promise.all([...this.tracker.requests]);\n }\n\n /**\n * Close database connections based on provider\n */\n private async closeDatabase(): Promise<void> {\n if (!this.database || !this.databaseProvider) {\n return;\n }\n\n try {\n switch (this.databaseProvider) {\n case 'postgresql': {\n // postgres.js client has end() method\n const client = (this.database as any).$client;\n if (client && typeof client.end === 'function') {\n await client.end();\n console.log('[Kozo] PostgreSQL connection closed');\n }\n break;\n }\n case 'mysql': {\n // mysql2 connection has end() method\n const client = (this.database as any).$client;\n if (client && typeof client.end === 'function') {\n await client.end();\n console.log('[Kozo] MySQL connection closed');\n }\n break;\n }\n case 'sqlite': {\n // better-sqlite3 has close() method (synchronous)\n const client = (this.database as any).$client;\n if (client && typeof client.close === 'function') {\n client.close();\n console.log('[Kozo] SQLite connection closed');\n }\n break;\n }\n }\n } catch (err) {\n console.error('[Kozo] Error closing database connection:', err);\n }\n }\n}\n\n/**\n * Create a shutdown manager instance\n */\nexport function createShutdownManager(): ShutdownManager {\n return new ShutdownManager();\n}\n","import { readdir } from 'node:fs/promises';\r\nimport { join } from 'node:path';\r\nimport { pathToFileURL } from 'node:url';\r\nimport type { RouteDefinition, RouteModule, HttpMethod } from './types.js';\r\nimport { fileToPath, isRouteFile } from './utils/file-to-path.js';\r\n\r\n/** Recursively list *.ts and *.js files, skipping underscore/test/spec files */\r\nasync function scanFiles(dir: string, base = ''): Promise<string[]> {\r\n const results: string[] = [];\r\n const entries = await readdir(dir, { withFileTypes: true });\r\n for (const e of entries) {\r\n const rel = base ? `${base}/${e.name}` : e.name;\r\n if (e.isDirectory()) {\r\n results.push(...await scanFiles(join(dir, e.name), rel));\r\n } else if (/\\.(ts|js)$/.test(e.name) &&\r\n !e.name.startsWith('_') &&\r\n !e.name.endsWith('.test.ts') && !e.name.endsWith('.test.js') &&\r\n !e.name.endsWith('.spec.ts') && !e.name.endsWith('.spec.js')) {\r\n results.push(rel);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\nexport interface ScanOptions {\r\n routesDir: string;\r\n verbose?: boolean;\r\n}\r\n\r\n/**\r\n * Scan routes directory and return route definitions\r\n */\r\nexport async function scanRoutes(options: ScanOptions): Promise<RouteDefinition[]> {\r\n const { routesDir, verbose = true } = options;\r\n const routes: RouteDefinition[] = [];\r\n\r\n if (verbose) {\r\n console.log(`\\n🔍 Scanning routes in: ${routesDir}\\n`);\r\n }\r\n\r\n // Find all .ts and .js files\r\n const files = await scanFiles(routesDir);\r\n\r\n for (const file of files) {\r\n if (!isRouteFile(file)) continue;\r\n\r\n const parsed = fileToPath(file);\r\n if (!parsed) continue;\r\n\r\n const fullPath = join(routesDir, file);\r\n \r\n try {\r\n // Dynamic import\r\n const fileUrl = pathToFileURL(fullPath).href;\r\n const module = await import(fileUrl) as RouteModule;\r\n\r\n // Validate module has default export\r\n if (typeof module.default !== 'function') {\r\n console.warn(`⚠️ Skipping ${file}: no default export function`);\r\n continue;\r\n }\r\n\r\n routes.push({\r\n path: parsed.path,\r\n method: parsed.method,\r\n filePath: fullPath,\r\n module\r\n });\r\n\r\n if (verbose) {\r\n const methodLabel = parsed.method.toUpperCase().padEnd(6);\r\n console.log(` ${methodLabel} ${parsed.path}`);\r\n }\r\n } catch (err) {\r\n console.error(`❌ Failed to load route: ${file}`);\r\n console.error(err);\r\n }\r\n }\r\n\r\n if (verbose) {\r\n console.log(`\\n✅ Loaded ${routes.length} routes\\n`);\r\n }\r\n\r\n // Sort routes: static paths before dynamic, longer paths first\r\n routes.sort((a, b) => {\r\n const aScore = routeScore(a.path);\r\n const bScore = routeScore(b.path);\r\n return bScore - aScore;\r\n });\r\n\r\n return routes;\r\n}\r\n\r\n/**\r\n * Score a route for sorting (higher = more priority)\r\n * Static paths get higher scores than dynamic ones\r\n */\r\nfunction routeScore(path: string): number {\r\n const segments = path.split('/').filter(Boolean);\r\n let score = segments.length * 10;\r\n\r\n for (const segment of segments) {\r\n if (segment === '*') {\r\n score -= 100; // Catch-all has lowest priority\r\n } else if (segment.startsWith(':')) {\r\n score -= 5; // Dynamic params have lower priority\r\n } else {\r\n score += 1; // Static segments increase priority\r\n }\r\n }\r\n\r\n return score;\r\n}\r\n\r\nexport { fileToPath, isRouteFile };\r\n","import { parse } from 'node:path';\r\n\r\n// HTTP methods that can be used as filenames\r\nconst HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const;\r\ntype HttpMethod = (typeof HTTP_METHODS)[number];\r\n\r\nexport interface ParsedRoute {\r\n path: string;\r\n method: HttpMethod;\r\n}\r\n\r\n/**\r\n * Convert file path to URL path and HTTP method\r\n * \r\n * Examples:\r\n * users/index.ts → GET /users\r\n * users/get.ts → GET /users\r\n * users/post.ts → POST /users\r\n * users/[id].ts → GET /users/:id\r\n * users/[id]/get.ts → GET /users/:id\r\n * users/[id]/patch.ts → PATCH /users/:id\r\n * users/[id?].ts → GET /users/:id? (optional param)\r\n * posts/[...slug].ts → GET /posts/* (catch-all)\r\n * health.ts → GET /health\r\n * [id?]/posts/[postId?].ts → GET /:id?/posts/:postId?\r\n */\r\nexport function fileToPath(filePath: string): ParsedRoute | null {\r\n // Normalize path separators\r\n const normalized = filePath.replace(/\\\\/g, '/');\r\n const parsed = parse(normalized);\r\n \r\n // Get filename without extension\r\n const filename = parsed.name.toLowerCase();\r\n \r\n // Determine HTTP method\r\n let method: HttpMethod = 'get';\r\n let includeName = true;\r\n \r\n if (HTTP_METHODS.includes(filename as HttpMethod)) {\r\n method = filename as HttpMethod;\r\n includeName = false;\r\n } else if (filename === 'index') {\r\n includeName = false;\r\n }\r\n \r\n // Build path from directory + optional filename\r\n let segments = parsed.dir ? parsed.dir.split('/').filter(Boolean) : [];\r\n \r\n if (includeName) {\r\n segments.push(parsed.name);\r\n }\r\n \r\n // Convert path segments\r\n const urlSegments = segments.map(segment => {\r\n // Catch-all: [...slug] → *\r\n if (segment.startsWith('[...') && segment.endsWith(']')) {\r\n return '*';\r\n }\r\n // Optional dynamic param: [id?] → :id?\r\n if (segment.startsWith('[') && segment.endsWith('?]')) {\r\n return ':' + segment.slice(1, -2) + '?';\r\n }\r\n // Dynamic param: [id] → :id\r\n if (segment.startsWith('[') && segment.endsWith(']')) {\r\n return ':' + segment.slice(1, -1);\r\n }\r\n return segment;\r\n });\r\n \r\n // Build final path\r\n let path = '/' + urlSegments.join('/');\r\n \r\n // Clean up\r\n path = path.replace(/\\/+/g, '/');\r\n if (path.length > 1 && path.endsWith('/')) {\r\n path = path.slice(0, -1);\r\n }\r\n \r\n return { path, method };\r\n}\r\n\r\n/**\r\n * Check if a file should be treated as a route\r\n */\r\nexport function isRouteFile(filename: string): boolean {\r\n // Skip files/directories where any segment starts with _\r\n const segments = filename.replace(/\\\\/g, '/').split('/');\r\n if (segments.some(s => s.startsWith('_'))) return false;\r\n \r\n // Skip test files\r\n if (filename.includes('.test.') || filename.includes('.spec.')) return false;\r\n \r\n // Must be .ts or .js\r\n return filename.endsWith('.ts') || filename.endsWith('.js');\r\n}\r\n","// ============================================================================\n// Kozo NativeContext — Runtime implementation of NativeKozoContext\n// ============================================================================\n//\n// This module provides the `buildNativeContext()` factory that creates the\n// typed context object passed to `NativeKozoHandler` functions.\n//\n// The context wraps Node.js IncomingMessage / ServerResponse and adds:\n// • Lazy query/headers parsing (only on first access)\n// • Type-safe params, body, query from schema\n// • Response helpers: json(), text(), html(), redirect(), header()\n// • Cork/uncork socket batching via fast-response.ts utilities\n//\n// V8 Hidden Class: all properties are declared upfront in the object literal,\n// even if initially undefined. This prevents shape transitions that would\n// deoptimize property access.\n// ============================================================================\n\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Services, RouteSchema, NativeKozoContext } from './types.js';\nimport { fastWriteJson, fastWriteText, fastWriteHtml, fastWriteJsonStatus, fastCL } from './fast-response.js';\n\n/**\n * Build a NativeKozoContext for a native route handler.\n *\n * Called by the native handler compiler (`compiler.ts`) when the route\n * is registered via `nativeRoute()`. Not intended for direct use.\n *\n * @internal\n */\nexport function buildNativeContext<S extends RouteSchema, TSvc extends Services>(\n req: IncomingMessage,\n res: ServerResponse,\n params: Record<string, string>,\n body: any,\n services: TSvc,\n serialize?: (data: any) => string,\n): NativeKozoContext<S, TSvc> {\n // Lazy-parsed query cache\n let _query: Record<string, string> | undefined;\n // Extra headers set via ctx.header()\n let _extraHeaders: [string, string][] | undefined;\n\n const ctx: NativeKozoContext<S, TSvc> = {\n req,\n res,\n params: params as any,\n body: body as any,\n services,\n\n get query(): any {\n if (_query === undefined) {\n const url = req.url ?? '/';\n const qIdx = url.indexOf('?');\n if (qIdx === -1) {\n _query = {};\n } else {\n const sp = new URLSearchParams(url.slice(qIdx + 1));\n _query = {};\n sp.forEach((v, k) => { _query![k] = v; });\n }\n }\n return _query;\n },\n\n json(data: any, status?: number): void {\n const jsonBody = serialize ? serialize(data) : JSON.stringify(data);\n if (_extraHeaders) {\n const hdrs: string[] = ['Content-Type', 'application/json', 'Content-Length', fastCL(jsonBody.length)];\n for (const [k, v] of _extraHeaders) hdrs.push(k, v);\n res.writeHead(status ?? 200, hdrs);\n res.end(jsonBody);\n } else if (status !== undefined && status !== 200) {\n fastWriteJsonStatus(res, jsonBody, status);\n } else {\n fastWriteJson(res, jsonBody);\n }\n },\n\n text(data: string, status?: number): void {\n fastWriteText(res, data, status ?? 200);\n },\n\n html(data: string, status?: number): void {\n fastWriteHtml(res, data, status ?? 200);\n },\n\n header(name: string, value: string) {\n if (!_extraHeaders) _extraHeaders = [];\n _extraHeaders.push([name, value]);\n return ctx;\n },\n\n redirect(url: string, status?: number): void {\n const code = status ?? 302;\n res.writeHead(code, ['Location', url, 'Content-Length', '0']);\n res.end();\n },\n };\n\n return ctx;\n}\n","// ============================================\r\n// KOZO V2 - High-Performance Framework\r\n// ============================================\r\n\r\n// Main exports\r\nexport { Kozo, createKozo } from './app.js';\r\nexport type { Plugin } from './app.js';\r\nexport type { KozoConfig } from './types.js';\r\n\r\n// Types\r\nexport type {\r\n Services,\r\n RouteSchema,\r\n KozoContext,\r\n KozoHandler,\r\n KozoEnv,\r\n NativeKozoContext,\r\n NativeKozoHandler,\r\n InferSchema,\r\n InferResponse,\r\n} from './types.js';\r\n\r\n// Client SDK Generation\r\nexport { generateTypedClient } from './client-generator.js';\r\nexport type {\r\n ClientGeneratorOptions,\r\n RouteInfo\r\n} from './client-generator.js';\r\n\r\n// Advanced: Route Compilation (La Chiave di Volta)\r\nexport { SchemaCompiler, compileRouteHandler } from './compiler.js';\r\nexport type { CompiledRoute } from './compiler.js';\r\n\r\n// Native context builder (for power-user native handlers)\r\nexport { buildNativeContext } from './native-context.js';\r\n\r\n// Fast response utilities (for custom native middleware / handlers)\r\nexport {\r\n fastWriteJson,\r\n fastWriteText,\r\n fastWriteHtml,\r\n fastWriteJsonStatus,\r\n fastWrite404,\r\n fastWrite500,\r\n fastWrite400,\r\n fastWriteError,\r\n fastCL,\r\n} from './fast-response.js';\r\n\r\n// Error System (RFC 7807 Problem Details)\r\nexport {\r\n KozoError,\r\n ValidationFailedError,\r\n NotFoundError,\r\n UnauthorizedError,\r\n ForbiddenError,\r\n validationErrorResponse,\r\n internalErrorResponse,\r\n notFoundResponse,\r\n unauthorizedResponse,\r\n forbiddenResponse,\r\n formatAjvErrors,\r\n formatZodErrors,\r\n ERROR_RESPONSES,\r\n} from './errors.js';\r\nexport type {\r\n ValidationError,\r\n ProblemDetails,\r\n} from './errors.js';\r\n\r\n// Re-export Zod for convenience\r\nexport { z } from 'zod';\r\n\r\n// Graceful Shutdown\r\nexport {\r\n ShutdownManager,\r\n createShutdownManager,\r\n createInflightTracker,\r\n trackRequest,\r\n} from './shutdown.js';\r\nexport type { ShutdownOptions, ShutdownState, InflightTracker } from './shutdown.js';\r\n\r\n// OpenAPI Generation\r\nexport {\r\n OpenAPIGenerator,\r\n createOpenAPIGenerator,\r\n generateSwaggerHtml,\r\n} from './openapi.js';\r\nexport type {\r\n OpenAPIConfig,\r\n OpenAPIInfo,\r\n OpenAPISpec,\r\n} from './openapi.js';\r\n\r\n// Middleware\r\nexport * from './middleware/index.js';\r\n","import type { RouteDefinition, RouteSchema, RouteMeta, HttpMethod } from './types.js';\r\nimport type { z } from 'zod';\r\nimport { zodToJsonSchema as _zodToJsonSchema } from 'zod-to-json-schema';\r\n\r\n// ============================================\r\n// OPENAPI TYPES\r\n// ============================================\r\n\r\nexport interface OpenAPIInfo {\r\n title: string;\r\n version: string;\r\n description?: string;\r\n contact?: {\r\n name?: string;\r\n url?: string;\r\n email?: string;\r\n };\r\n license?: {\r\n name: string;\r\n url?: string;\r\n };\r\n}\r\n\r\nexport interface OpenAPIConfig {\r\n info: OpenAPIInfo;\r\n servers?: Array<{ url: string; description?: string }>;\r\n tags?: Array<{ name: string; description?: string }>;\r\n security?: Array<Record<string, string[]>>;\r\n}\r\n\r\nexport interface OpenAPISpec {\r\n openapi: '3.1.0';\r\n info: OpenAPIInfo;\r\n servers?: Array<{ url: string; description?: string }>;\r\n tags?: Array<{ name: string; description?: string }>;\r\n paths: Record<string, PathItem>;\r\n components: {\r\n schemas: Record<string, SchemaObject>;\r\n securitySchemes?: Record<string, SecurityScheme>;\r\n };\r\n security?: Array<Record<string, string[]>>;\r\n}\r\n\r\ninterface PathItem {\r\n [method: string]: OperationObject;\r\n}\r\n\r\ninterface OperationObject {\r\n operationId?: string;\r\n summary?: string;\r\n description?: string;\r\n tags?: string[];\r\n parameters?: ParameterObject[];\r\n requestBody?: RequestBodyObject;\r\n responses: Record<string, ResponseObject>;\r\n security?: Array<Record<string, string[]>>;\r\n}\r\n\r\ninterface ParameterObject {\r\n name: string;\r\n in: 'query' | 'path' | 'header' | 'cookie';\r\n required?: boolean;\r\n schema: SchemaObject;\r\n description?: string;\r\n}\r\n\r\ninterface RequestBodyObject {\r\n required?: boolean;\r\n content: {\r\n 'application/json': {\r\n schema: SchemaObject;\r\n };\r\n };\r\n}\r\n\r\ninterface ResponseObject {\r\n description: string;\r\n content?: {\r\n 'application/json': {\r\n schema: SchemaObject;\r\n };\r\n };\r\n}\r\n\r\ninterface SchemaObject {\r\n type?: string;\r\n format?: string;\r\n properties?: Record<string, SchemaObject>;\r\n items?: SchemaObject;\r\n required?: string[];\r\n enum?: unknown[];\r\n minimum?: number;\r\n maximum?: number;\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: string;\r\n description?: string;\r\n default?: unknown;\r\n nullable?: boolean;\r\n oneOf?: SchemaObject[];\r\n anyOf?: SchemaObject[];\r\n allOf?: SchemaObject[];\r\n additionalProperties?: SchemaObject | boolean;\r\n $ref?: string;\r\n}\r\n\r\ninterface SecurityScheme {\r\n type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';\r\n scheme?: string;\r\n bearerFormat?: string;\r\n name?: string;\r\n in?: 'query' | 'header' | 'cookie';\r\n}\r\n\r\n// ============================================\r\n// ZOD TO JSON SCHEMA CONVERTER\r\n// Uses zod-to-json-schema which supports Zod v3 and v4\r\n// ============================================\r\n\r\nfunction zodToJsonSchema(zodSchema: z.ZodType): SchemaObject {\r\n return _zodToJsonSchema(zodSchema as any, { $refStrategy: 'none' }) as SchemaObject;\r\n}\r\n\r\n// ============================================\r\n// OPENAPI GENERATOR\r\n// ============================================\r\n\r\nexport class OpenAPIGenerator {\r\n private config: OpenAPIConfig;\r\n private schemas: Map<string, SchemaObject> = new Map();\r\n private schemaCounter = 0;\r\n\r\n constructor(config: OpenAPIConfig) {\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Generate OpenAPI spec from routes\r\n */\r\n generate(routes: RouteDefinition[]): OpenAPISpec {\r\n const paths: Record<string, PathItem> = {};\r\n\r\n for (const route of routes) {\r\n const openApiPath = this.honoPathToOpenApi(route.path);\r\n \r\n if (!paths[openApiPath]) {\r\n paths[openApiPath] = {};\r\n }\r\n\r\n paths[openApiPath][route.method] = this.routeToOperation(route);\r\n }\r\n\r\n return {\r\n openapi: '3.1.0',\r\n info: this.config.info,\r\n servers: this.config.servers,\r\n tags: this.config.tags,\r\n paths,\r\n components: {\r\n schemas: Object.fromEntries(this.schemas),\r\n securitySchemes: {\r\n bearerAuth: {\r\n type: 'http',\r\n scheme: 'bearer',\r\n bearerFormat: 'JWT'\r\n }\r\n }\r\n },\r\n security: this.config.security\r\n };\r\n }\r\n\r\n /**\r\n * Convert Hono path params to OpenAPI format\r\n * :id -> {id}\r\n */\r\n private honoPathToOpenApi(path: string): string {\r\n return path.replace(/:([^/]+)/g, '{$1}');\r\n }\r\n\r\n /**\r\n * Convert route to OpenAPI operation\r\n */\r\n private routeToOperation(route: RouteDefinition): OperationObject {\r\n const { path, method, module } = route;\r\n const { schema, meta } = module;\r\n\r\n const operation: OperationObject = {\r\n operationId: this.generateOperationId(path, method),\r\n summary: meta?.summary || `${method.toUpperCase()} ${path}`,\r\n description: meta?.description,\r\n tags: meta?.tags || [this.extractTag(path)],\r\n parameters: [],\r\n responses: {\r\n '200': {\r\n description: 'Successful response',\r\n content: {\r\n 'application/json': {\r\n schema: { type: 'object' }\r\n }\r\n }\r\n },\r\n '400': {\r\n description: 'Validation error'\r\n },\r\n '500': {\r\n description: 'Internal server error'\r\n }\r\n }\r\n };\r\n\r\n // Add path parameters\r\n const pathParams = path.match(/:([^/]+)/g);\r\n if (pathParams) {\r\n for (const param of pathParams) {\r\n const paramName = param.slice(1); // Remove :\r\n operation.parameters!.push({\r\n name: paramName,\r\n in: 'path',\r\n required: true,\r\n schema: { type: 'string' }\r\n });\r\n }\r\n }\r\n\r\n // Add query parameters from schema\r\n if (schema?.query) {\r\n const querySchema = zodToJsonSchema(schema.query as z.ZodType);\r\n if (querySchema.properties) {\r\n for (const [name, propSchema] of Object.entries(querySchema.properties)) {\r\n operation.parameters!.push({\r\n name,\r\n in: 'query',\r\n required: querySchema.required?.includes(name) || false,\r\n schema: propSchema as SchemaObject\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Add params schema override\r\n if (schema?.params) {\r\n const paramsSchema = zodToJsonSchema(schema.params as z.ZodType);\r\n if (paramsSchema.properties) {\r\n for (const [name, propSchema] of Object.entries(paramsSchema.properties)) {\r\n // Find and update existing param\r\n const existingIdx = operation.parameters!.findIndex(\r\n p => p.name === name && p.in === 'path'\r\n );\r\n if (existingIdx >= 0) {\r\n operation.parameters![existingIdx].schema = propSchema as SchemaObject;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Add request body for POST/PUT/PATCH\r\n if (['post', 'put', 'patch'].includes(method) && schema?.body) {\r\n operation.requestBody = {\r\n required: true,\r\n content: {\r\n 'application/json': {\r\n schema: zodToJsonSchema(schema.body as z.ZodType)\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Add response schemas\r\n if (schema?.response) {\r\n for (const [status, responseSchema] of Object.entries(schema.response)) {\r\n operation.responses[status] = {\r\n description: this.getStatusDescription(parseInt(status)),\r\n content: {\r\n 'application/json': {\r\n schema: zodToJsonSchema(responseSchema as z.ZodType)\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n // Add auth requirement\r\n if (meta?.auth) {\r\n operation.security = [{ bearerAuth: [] }];\r\n }\r\n\r\n return operation;\r\n }\r\n\r\n /**\r\n * Generate operation ID from path and method\r\n */\r\n private generateOperationId(path: string, method: HttpMethod): string {\r\n const parts = path\r\n .split('/')\r\n .filter(Boolean)\r\n .map(part => {\r\n if (part.startsWith(':')) {\r\n return 'By' + this.capitalize(part.slice(1));\r\n }\r\n return this.capitalize(part);\r\n });\r\n\r\n return method + parts.join('');\r\n }\r\n\r\n /**\r\n * Extract tag from path (first segment)\r\n */\r\n private extractTag(path: string): string {\r\n const firstSegment = path.split('/').filter(Boolean)[0];\r\n return firstSegment ? this.capitalize(firstSegment) : 'Default';\r\n }\r\n\r\n /**\r\n * Get HTTP status description\r\n */\r\n private getStatusDescription(status: number): string {\r\n const descriptions: Record<number, string> = {\r\n 200: 'OK',\r\n 201: 'Created',\r\n 204: 'No Content',\r\n 400: 'Bad Request',\r\n 401: 'Unauthorized',\r\n 403: 'Forbidden',\r\n 404: 'Not Found',\r\n 500: 'Internal Server Error'\r\n };\r\n return descriptions[status] || 'Response';\r\n }\r\n\r\n private capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n}\r\n\r\n// ============================================\r\n// SWAGGER UI HTML\r\n// ============================================\r\n\r\nexport function generateSwaggerHtml(specUrl: string, title: string = 'API Documentation'): string {\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"utf-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\r\n <title>${title}</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css\" />\r\n <style>\r\n body { margin: 0; padding: 0; }\r\n .swagger-ui .topbar { display: none; }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"swagger-ui\"></div>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js\" crossorigin></script>\r\n <script>\r\n window.onload = () => {\r\n window.ui = SwaggerUIBundle({\r\n url: '${specUrl}',\r\n dom_id: '#swagger-ui',\r\n deepLinking: true,\r\n presets: [\r\n SwaggerUIBundle.presets.apis,\r\n SwaggerUIBundle.SwaggerUIStandalonePreset\r\n ],\r\n layout: \"BaseLayout\",\r\n persistAuthorization: true\r\n });\r\n };\r\n </script>\r\n</body>\r\n</html>`;\r\n}\r\n\r\n// ============================================\r\n// FACTORY FUNCTION\r\n// ============================================\r\n\r\nexport function createOpenAPIGenerator(config: OpenAPIConfig): OpenAPIGenerator {\r\n return new OpenAPIGenerator(config);\r\n}\r\n","import type { Context, Next } from 'hono';\r\n\r\nexport interface LoggerOptions {\r\n prefix?: string;\r\n colorize?: boolean;\r\n}\r\n\r\n/**\r\n * Request logger middleware\r\n */\r\nexport function logger(options: LoggerOptions = {}) {\r\n const { prefix = '🌐', colorize = true } = options;\r\n\r\n return async (c: Context, next: Next) => {\r\n const start = Date.now();\r\n const method = c.req.method;\r\n const path = new URL(c.req.url).pathname;\r\n\r\n await next();\r\n\r\n const duration = Date.now() - start;\r\n const status = c.res.status;\r\n\r\n const statusColor = status >= 500 ? '🔴' : status >= 400 ? '🟡' : '🟢';\r\n const log = `${prefix} ${method.padEnd(6)} ${path} ${statusColor} ${status} ${duration}ms`;\r\n \r\n console.log(log);\r\n };\r\n}\r\n","import { cors as honoCors } from 'hono/cors';\r\n\r\nexport interface CorsOptions {\r\n origin?: string | string[] | ((origin: string) => string | undefined | null);\r\n allowMethods?: string[];\r\n allowHeaders?: string[];\r\n exposeHeaders?: string[];\r\n maxAge?: number;\r\n credentials?: boolean;\r\n}\r\n\r\n/**\r\n * CORS middleware wrapper\r\n */\r\nexport function cors(options: CorsOptions = {}) {\r\n return honoCors({\r\n origin: options.origin || '*',\r\n allowMethods: options.allowMethods || ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],\r\n allowHeaders: options.allowHeaders || ['Content-Type', 'Authorization'],\r\n exposeHeaders: options.exposeHeaders || [],\r\n maxAge: options.maxAge || 86400,\r\n credentials: options.credentials || false\r\n });\r\n}\r\n","import type { Context, Next } from 'hono';\n\nexport interface RateLimitOptions {\n max: number;\n window: number; // in seconds\n keyGenerator?: (c: Context) => string;\n message?: string;\n}\n\n// In-memory store (use Redis in production)\nconst store = new Map<string, { count: number; resetAt: number }>();\n\n/**\n * Simple rate limiting middleware\n * For production, replace in-memory store with Redis\n */\nexport function rateLimit(options: RateLimitOptions) {\n const {\n max = 100,\n window = 60,\n keyGenerator = (c: Context) =>\n c.req.header('x-forwarded-for') ?? c.req.header('x-real-ip') ?? 'anonymous',\n message = 'Too many requests',\n } = options;\n\n return async (c: Context, next: Next) => {\n const key = keyGenerator(c);\n const now = Date.now();\n const windowMs = window * 1000;\n\n let record = store.get(key);\n\n if (!record || now > record.resetAt) {\n // Evict expired entries when the store grows too large to prevent unbounded memory growth\n if (store.size > 10_000) {\n for (const [k, v] of store) {\n if (now > v.resetAt) store.delete(k);\n }\n }\n record = { count: 0, resetAt: now + windowMs };\n }\n\n record.count++;\n store.set(key, record);\n\n // Set rate limit headers\n c.header('X-RateLimit-Limit', String(max));\n c.header('X-RateLimit-Remaining', String(Math.max(0, max - record.count)));\n c.header('X-RateLimit-Reset', String(Math.ceil(record.resetAt / 1000)));\n\n if (record.count > max) {\n return c.json({ error: message }, 429);\n }\n\n await next();\n };\n}\n\n/**\n * Clear rate limit store (for testing)\n */\nexport function clearRateLimitStore() {\n store.clear();\n}\n","import type { Context, Next } from 'hono';\r\n\r\nexport class HttpError extends Error {\r\n constructor(\r\n public statusCode: number,\r\n message: string,\r\n public details?: unknown\r\n ) {\r\n super(message);\r\n this.name = 'HttpError';\r\n }\r\n}\r\n\r\nexport class BadRequestError extends HttpError {\r\n constructor(message = 'Bad Request', details?: unknown) {\r\n super(400, message, details);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends HttpError {\r\n constructor(message = 'Unauthorized') {\r\n super(401, message);\r\n }\r\n}\r\n\r\nexport class ForbiddenError extends HttpError {\r\n constructor(message = 'Forbidden') {\r\n super(403, message);\r\n }\r\n}\r\n\r\nexport class NotFoundError extends HttpError {\r\n constructor(message = 'Not Found') {\r\n super(404, message);\r\n }\r\n}\r\n\r\nexport class ConflictError extends HttpError {\r\n constructor(message = 'Conflict', details?: unknown) {\r\n super(409, message, details);\r\n }\r\n}\r\n\r\nexport class InternalServerError extends HttpError {\r\n constructor(message = 'Internal Server Error') {\r\n super(500, message);\r\n }\r\n}\r\n\r\n/**\r\n * Global error handler middleware\r\n */\r\nexport function errorHandler() {\r\n return async (c: Context, next: Next) => {\r\n try {\r\n await next();\r\n } catch (err) {\r\n if (err instanceof HttpError) {\r\n return c.json({\r\n error: err.message,\r\n status: err.statusCode,\r\n ...(err.details ? { details: err.details } : {})\r\n }, err.statusCode as any);\r\n }\r\n\r\n // Unknown error\r\n console.error('Unhandled error:', err);\r\n return c.json({\r\n error: 'Internal Server Error',\r\n status: 500\r\n }, 500);\r\n }\r\n };\r\n}\r\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { Hono } from 'hono';\n\n// ============================================\n// MANIFEST TYPES\n// ============================================\n\nexport type ManifestHttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';\n\n/**\n * A single route entry as written to routes-manifest.json\n */\nexport interface ManifestRoute {\n /** URL path, e.g. /users/:id */\n path: string;\n /** HTTP method (lowercase) */\n method: ManifestHttpMethod;\n /** Absolute or project-relative path to the handler file */\n handler: string;\n /** Named URL params extracted from the path, e.g. ['id'] */\n params: string[];\n /** Whether the handler module exports a body schema */\n hasBodySchema: boolean;\n /** Whether the handler module exports a query schema */\n hasQuerySchema: boolean;\n}\n\n/**\n * The shape of routes-manifest.json\n */\nexport interface RoutesManifest {\n version: number;\n generatedAt: string;\n routes: ManifestRoute[];\n}\n\n// ============================================\n// OPTIONS\n// ============================================\n\nexport interface FileSystemRoutingOptions {\n /**\n * Path to the routes-manifest.json file.\n * Defaults to `./routes-manifest.json` relative to cwd.\n */\n manifestPath?: string;\n\n /**\n * If true, log registered routes to stdout.\n * @default false\n */\n verbose?: boolean;\n\n /**\n * Called when the manifest is missing or unreadable.\n * Defaults to a silent no-op (backward-compatible behaviour).\n */\n onMissingManifest?: (reason: Error) => void;\n\n /**\n * Custom log function used when `verbose` is true.\n * Defaults to `console.log`.\n */\n logger?: (...args: unknown[]) => void;\n}\n\n// ============================================\n// INTERNAL HELPERS\n// ============================================\n\n/**\n * Read and parse routes-manifest.json.\n * Returns null when the file does not exist or is malformed.\n */\nasync function readManifest(\n manifestPath: string,\n onMissing: (err: Error) => void,\n): Promise<RoutesManifest | null> {\n try {\n const raw = await readFile(manifestPath, 'utf-8');\n return JSON.parse(raw) as RoutesManifest;\n } catch (err) {\n onMissing(err instanceof Error ? err : new Error(String(err)));\n return null;\n }\n}\n\n/**\n * Dynamically import a route handler module and return its default export.\n * Accepts both absolute paths and file:// URLs.\n */\nasync function importHandler(handlerPath: string): Promise<((...args: any[]) => any) | null> {\n try {\n const url = handlerPath.startsWith('file://')\n ? handlerPath\n : pathToFileURL(handlerPath).href;\n const mod = await import(url);\n if (typeof mod.default !== 'function') {\n console.warn(\n `[kozo:fsr] Skipping ${handlerPath}: no default export function`,\n );\n return null;\n }\n return mod.default as (...args: any[]) => any;\n } catch (err) {\n console.warn(\n `[kozo:fsr] Failed to import handler ${handlerPath}:`,\n (err as Error).message,\n );\n return null;\n }\n}\n\n// ============================================\n// MIDDLEWARE FACTORY\n// ============================================\n\n/**\n * Register all routes declared in `routes-manifest.json` onto a Hono app.\n *\n * This function is **not** a Hono middleware in the classical sense — it is an\n * *async initializer* that must be awaited before the server starts accepting\n * requests. Calling it early (before user-defined routes) guarantees that\n * manifest routes take precedence.\n *\n * @example\n * ```ts\n * import { Hono } from 'hono';\n * import { applyFileSystemRouting } from '@kozojs/core/middleware';\n *\n * const app = new Hono();\n * await applyFileSystemRouting(app, { manifestPath: './routes-manifest.json' });\n *\n * // User-defined routes registered AFTER are appended normally\n * app.get('/health', c => c.json({ ok: true }));\n * ```\n */\nexport async function applyFileSystemRouting(\n app: Hono<any>,\n options: FileSystemRoutingOptions = {},\n): Promise<void> {\n const {\n manifestPath = resolve(process.cwd(), 'routes-manifest.json'),\n verbose = false,\n onMissingManifest = () => {\n // Silent by default — backward-compatible\n },\n logger = console.log,\n } = options;\n\n const manifest = await readManifest(manifestPath, onMissingManifest);\n\n // Gracefully skip when no manifest exists\n if (!manifest) return;\n\n const log = logger;\n\n if (verbose) {\n log(\n `\\n📋 [kozo:fsr] Loading ${manifest.routes.length} route(s) from manifest\\n`,\n );\n }\n\n for (const route of manifest.routes) {\n const handler = await importHandler(route.handler);\n if (!handler) continue;\n\n // Register on the Hono app using the correct HTTP method\n (app as any)[route.method](route.path, handler);\n\n if (verbose) {\n log(\n ` ${route.method.toUpperCase().padEnd(6)} ${route.path} → ${route.handler}`,\n );\n }\n }\n\n if (verbose) {\n log('');\n }\n}\n\n// ============================================\n// CONVENIENCE: createFileSystemRouting\n// ============================================\n\n/**\n * Alternative factory that returns an async function you can call with a Hono\n * app. Useful when you want to pre-configure options and apply them later.\n *\n * @example\n * ```ts\n * const fsr = createFileSystemRouting({ verbose: true });\n * await fsr(app);\n * ```\n */\nexport function createFileSystemRouting(options: FileSystemRoutingOptions = {}) {\n return (app: Hono<any>) => applyFileSystemRouting(app, options);\n}\n"],"mappings":"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","names":["resolve","CT_JSON","CT_PROBLEM","BODY_404","BODY_500","resolve","UnauthorizedError","ForbiddenError","NotFoundError","pathToFileURL","logger"]}
|
|
1
|
+
{"version":3,"sources":["../src/app.ts","../src/client-generator.ts","../src/uws-transport.ts","../src/errors.ts","../src/fast-response.ts","../src/compiler.ts","../src/shutdown.ts","../src/router.ts","../src/utils/file-to-path.ts","../src/native-context.ts","../src/index.ts","../src/openapi.ts","../src/middleware/logger.ts","../src/middleware/cors.ts","../src/middleware/rate-limit.ts","../src/middleware/error-handler.ts","../src/middleware/fileSystemRouting.ts"],"sourcesContent":["// Use hono/quick for guaranteed RegExpRouter (fastest for benchmarks)\n// SmartRouter sometimes falls back to TrieRouter on complex patterns\nimport { Hono } from 'hono/quick';\nimport { serve } from '@hono/node-server';\nimport type { Server } from 'node:http';\nimport type { KozoConfig, Services, RouteSchema, KozoHandler, RouteMeta } from './types.js';\nimport { generateTypedClient, type ClientGeneratorOptions, type RouteInfo } from './client-generator.js';\nimport { compileRouteHandler, compileUwsNativeHandler, SchemaCompiler } from './compiler.js';\nimport { KozoError, internalErrorResponse } from './errors.js';\nimport { ShutdownManager, type ShutdownOptions } from './shutdown.js';\nimport { scanRoutes } from './router.js';\nimport { tryLoadUws, createUwsServer, type UwsRouteEntry } from './uws-transport.js';\n\n// Plugin Architecture\nexport interface Plugin {\n name: string;\n version?: string;\n install: (app: Kozo) => void | Promise<void>;\n}\n\n/**\n * Kozo - High-performance TypeScript framework with Zod schemas\n *\n * @typeParam TServices - Shape of the services object injected into every handler.\n * Pass it once at construction: `createKozo<{ db: Database }>({ services: { db } })`\n * and all handler contexts will have `ctx.services.db` fully typed.\n */\nexport class Kozo<TServices extends Services = Services> {\n private app: Hono;\n private services: TServices;\n private routes: Array<{ method: string; path: string; schema: RouteSchema; meta?: RouteMeta }> = [];\n /** Routes registered directly with the uWS C++ radix router. */\n private uwsRoutes: UwsRouteEntry[] = [];\n private shutdownManager = new ShutdownManager();\n private _routesDir?: string;\n\n constructor(config: KozoConfig<TServices> = {}) {\n this.app = new Hono();\n this.services = (config.services ?? {}) as TServices;\n this._routesDir = config.routesDir;\n\n // Global Error Handler (RFC 7807 Problem Details)\n this.app.onError((err, c) => {\n // 1. Known Kozo errors (NotFoundError, ForbiddenError, etc.)\n if (err instanceof KozoError) {\n return err.toResponse(c.req.path);\n }\n\n // 2. Unknown errors (bugs in user code)\n console.error('[Kozo] Unhandled error:', err);\n return internalErrorResponse(err as Error, c.req.path);\n });\n }\n\n // Plugin system\n use(plugin: Plugin): this {\n plugin.install(this);\n return this;\n }\n\n /**\n * Load routes from the file system using the configured routesDir.\n * Each route file is dynamically imported, its schema compiled, and handler registered.\n * This is a no-op if routesDir is not configured.\n */\n async loadRoutes(routesDir?: string): Promise<this> {\n const dir = routesDir ?? this._routesDir;\n if (!dir) return this;\n\n const routes = await scanRoutes({ routesDir: dir, verbose: false });\n for (const route of routes) {\n const { path, method, module } = route;\n const schema: RouteSchema = module.schema ?? {};\n const compiled = SchemaCompiler.compile(schema);\n const userHandler = module.default;\n const optimizedHandler = compileRouteHandler(\n (ctx: any) => userHandler(ctx),\n schema,\n this.services,\n compiled,\n );\n this.routes.push({ method, path, schema, meta: module.meta });\n (this.app as any)[method](path, optimizedHandler);\n\n // Register uWS route\n const paramNames: string[] = [];\n path.replace(/:([^/]+)/g, (_: string, name: string) => { paramNames.push(name); return name; });\n const uwsHandler = compileUwsNativeHandler((ctx: any) => userHandler(ctx), schema, this.services, compiled);\n this.uwsRoutes.push({ method: method.toUpperCase(), path, paramNames, handler: uwsHandler });\n }\n\n return this;\n }\n\n // Code generation with overloads\n generateClient(baseUrl?: string): string;\n generateClient(options?: ClientGeneratorOptions): string;\n generateClient(baseUrlOrOptions?: string | ClientGeneratorOptions): string {\n const options: ClientGeneratorOptions =\n typeof baseUrlOrOptions === 'string'\n ? { baseUrl: baseUrlOrOptions, includeValidation: false }\n : baseUrlOrOptions || {};\n\n const routeInfos: RouteInfo[] = this.routes.map(r => ({\n method: r.method,\n path: r.path,\n schema: r.schema,\n }));\n\n return generateTypedClient(routeInfos, options);\n }\n\n get<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('get', path, schema, handler);\n }\n\n post<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('post', path, schema, handler);\n }\n\n put<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('put', path, schema, handler);\n }\n\n patch<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('patch', path, schema, handler);\n }\n\n delete<S extends RouteSchema>(path: string, schema: S, handler: KozoHandler<S, TServices>): this {\n return this.register('delete', path, schema, handler);\n }\n\n private register(method: string, path: string, schema: RouteSchema, handler: KozoHandler<any, any>): this {\n this.routes.push({ method, path, schema });\n\n // 1. Compile schemas (Zod -> Ajv validators + fast-json-stringify serializer)\n const compiled = SchemaCompiler.compile(schema);\n\n // 2. Generate the optimized Hono handler\n const optimizedHandler = compileRouteHandler(\n handler,\n schema,\n this.services,\n compiled,\n );\n\n // 3. Register the compiled handler with Hono\n (this.app as any)[method](path, optimizedHandler);\n\n // 4. Compile and store the uWS native handler (zero-shim, direct C++ dispatch)\n const paramNames: string[] = [];\n path.replace(/:([^/]+)/g, (_: string, name: string) => { paramNames.push(name); return name; });\n const uwsHandler = compileUwsNativeHandler(handler, schema, this.services, compiled);\n this.uwsRoutes.push({ method: method.toUpperCase(), path, paramNames, handler: uwsHandler });\n\n return this;\n }\n\n /**\n * Start a uWebSockets.js HTTP server.\n *\n * All routes are registered directly with uWS's C++ radix trie router —\n * zero JS routing overhead per request. The C++ HTTP parser (µHttpParser)\n * eliminates all IncomingMessage/ServerResponse allocations.\n *\n * Throws if uWebSockets.js is not installed.\n * Returns { port, server } so callers can close the server when done.\n */\n async nativeListen(port: number = 3000): Promise<{ port: number; server: Server }> {\n const uwsBindings = await tryLoadUws();\n if (!uwsBindings) {\n throw new Error(\n '[Kozo] uWebSockets.js is required but not installed.\\n' +\n 'Run: pnpm add uWebSockets.js',\n );\n }\n\n console.log('🚀 uWebSockets.js transport active (C++ HTTP parser + native radix router)');\n return createUwsServer({\n uws: uwsBindings,\n routes: this.uwsRoutes,\n port,\n }) as Promise<{ port: number; server: Server }>;\n }\n\n async listen(port?: number): Promise<void> {\n const finalPort = port ?? 3000;\n const manager = this.shutdownManager;\n\n // Wrap fetch to reject incoming requests during shutdown and track in-flight count\n const shutdownFetch = async (req: Request, ...args: any[]) => {\n if (manager.isShuttingDown()) {\n return new Response(\n JSON.stringify({\n type: 'about:blank',\n title: 'Service Unavailable',\n status: 503,\n detail: 'Server is shutting down, please retry later',\n }),\n {\n status: 503,\n headers: { 'Content-Type': 'application/problem+json' },\n },\n );\n }\n const untrack = manager.trackRequest();\n try {\n return await (this.app.fetch as any)(req, ...args);\n } finally {\n untrack();\n }\n };\n\n const server = serve({\n fetch: shutdownFetch,\n port: finalPort,\n }) as unknown as Server;\n\n manager.setServer(server);\n console.log(`🚀 Kozo server listening on http://localhost:${finalPort}`);\n }\n\n /**\n * Graceful shutdown — drains in-flight requests before closing.\n * Use getShutdownManager().setDatabase(db, provider) to register DB cleanup.\n */\n async shutdown(options?: ShutdownOptions): Promise<void> {\n return this.shutdownManager.shutdown(options);\n }\n\n getShutdownManager(): ShutdownManager {\n return this.shutdownManager;\n }\n\n getApp(): Hono {\n return this.app;\n }\n\n get fetch() {\n return this.app.fetch;\n }\n}\n\n// ============================================\n// AI Schema Generation utility\n// ============================================\n\nfunction inferType(value: any): string {\n if (value === null || value === undefined) return 'any';\n if (typeof value === 'string') return 'string';\n if (typeof value === 'number') return 'number';\n if (typeof value === 'boolean') return 'boolean';\n if (Array.isArray(value)) {\n if (value.length === 0) return 'array';\n const itemTypes = [...new Set(value.map(inferType))];\n return `array<${itemTypes.length === 1 ? itemTypes[0] : 'any'}>`;\n }\n if (typeof value === 'object') return 'object';\n return 'any';\n}\n\nfunction generateZodSchema(examples: any[]): string {\n if (examples.length === 0) return 'z.any()';\n\n const first = examples[0];\n const type = inferType(first);\n\n switch (type) {\n case 'string': {\n const hasEmail = examples.some(e => typeof e === 'string' && e.includes('@'));\n const hasUUID = examples.some(\n e => typeof e === 'string' && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e),\n );\n if (hasEmail) return 'z.string().email()';\n if (hasUUID) return 'z.string().uuid()';\n return 'z.string()';\n }\n case 'number':\n return 'z.number()';\n case 'boolean':\n return 'z.boolean()';\n case 'array': {\n const itemType = inferType(first[0]);\n switch (itemType) {\n case 'string': return 'z.array(z.string())';\n case 'number': return 'z.array(z.number())';\n case 'boolean': return 'z.array(z.boolean())';\n default: return 'z.array(z.any())';\n }\n }\n case 'object': {\n const props: string[] = [];\n for (const example of examples) {\n if (typeof example === 'object' && example !== null) {\n for (const key of Object.keys(example)) {\n if (props.some(p => p.startsWith(`${key}:`))) continue;\n const values = examples.map(e => e?.[key]).filter(v => v !== undefined);\n const propType = inferType(values[0]);\n switch (propType) {\n case 'string': {\n const hasEmail = values.some(v => typeof v === 'string' && v.includes('@'));\n const hasUUID = values.some(\n v => typeof v === 'string' &&\n /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(v),\n );\n if (hasEmail) props.push(`${key}: z.string().email()`);\n else if (hasUUID) props.push(`${key}: z.string().uuid()`);\n else props.push(`${key}: z.string()`);\n break;\n }\n case 'number': props.push(`${key}: z.number()`); break;\n case 'boolean': props.push(`${key}: z.boolean()`); break;\n case 'array': props.push(`${key}: z.array(z.any())`); break;\n default: props.push(`${key}: z.any()`); break;\n }\n }\n }\n }\n return `z.object({\\n ${props.join(',\\n ')}\\n})`;\n }\n default:\n return 'z.any()';\n }\n}\n\nexport function generateSchema(examples: any[]) {\n return generateZodSchema(examples);\n}\n\nexport function createKozo<TServices extends Services = Services>(\n config?: KozoConfig<TServices>,\n): Kozo<TServices> {\n return new Kozo<TServices>(config);\n}\n","import type { RouteSchema } from './types.js';\r\n\r\n/**\r\n * Client Generator Options\r\n */\r\nexport interface ClientGeneratorOptions {\r\n /** Include Zod schemas for client-side validation (default: true) */\r\n includeValidation?: boolean;\r\n \r\n /** Base URL for the API (default: '') */\r\n baseUrl?: string;\r\n \r\n /** Enable runtime validation by default (default: false) */\r\n validateByDefault?: boolean;\r\n \r\n /** Custom headers to include in all requests */\r\n defaultHeaders?: Record<string, string>;\r\n}\r\n\r\n/**\r\n * Route information for client generation\r\n */\r\nexport interface RouteInfo {\r\n method: string;\r\n path: string;\r\n schema: RouteSchema;\r\n /** Optional: store the Zod schema instance for type extraction */\r\n zodSchemas?: {\r\n body?: any;\r\n query?: any;\r\n params?: any;\r\n response?: any;\r\n };\r\n}\r\n\r\n/**\r\n * Generate a safe method name from a route path\r\n */\r\nfunction generateMethodName(method: string, path: string): string {\r\n // Remove leading/trailing slashes\r\n const cleanPath = path.replace(/^\\/+|\\/+$/g, '');\r\n \r\n // Replace path params with their names\r\n const withParams = cleanPath.replace(/:(\\w+)/g, 'By$1');\r\n \r\n // Replace slashes and special chars with underscores\r\n const safeName = withParams\r\n .replace(/[\\/\\-\\.]/g, '_')\r\n .replace(/[^\\w]/g, '');\r\n \r\n // Prepend method name if not GET\r\n if (method.toLowerCase() !== 'get') {\r\n return method.toLowerCase() + safeName.charAt(0).toUpperCase() + safeName.slice(1);\r\n }\r\n \r\n return safeName || 'index';\r\n}\r\n\r\n/**\r\n * Extract path parameters from a route path\r\n */\r\nfunction extractPathParams(path: string): string[] {\r\n const matches = path.match(/:(\\w+)/g);\r\n return matches ? matches.map(m => m.slice(1)) : [];\r\n}\r\n\r\n/**\r\n * Generate typed client code from routes\r\n */\r\nexport function generateTypedClient(\r\n routes: RouteInfo[],\r\n options: ClientGeneratorOptions = {}\r\n): string {\r\n const {\r\n includeValidation = true,\r\n baseUrl = '',\r\n validateByDefault = false,\r\n defaultHeaders = {}\r\n } = options;\r\n\r\n const imports: string[] = [];\r\n const typeDefinitions: string[] = [];\r\n const schemaExports: string[] = [];\r\n const methodImplementations: string[] = [];\r\n \r\n // Add base imports\r\n if (includeValidation) {\r\n imports.push(`import { z } from 'zod';`);\r\n }\r\n\r\n // Header\r\n let code = `// Auto-generated Kozo Client\\n`;\r\n code += `// Generated at ${new Date().toISOString()}\\n`;\r\n code += `// DO NOT EDIT - Changes will be overwritten\\n\\n`;\r\n\r\n // Track schema variable names for type inference\r\n const schemaVars = new Map<string, string>();\r\n\r\n // Process each route\r\n for (const route of routes) {\r\n const methodName = generateMethodName(route.method, route.path);\r\n const pathParams = extractPathParams(route.path);\r\n \r\n // Generate type definitions using z.infer\r\n let paramsType = 'void';\r\n let bodyType = 'void';\r\n let queryType = 'void';\r\n let responseType = 'unknown';\r\n \r\n if (pathParams.length > 0) {\r\n paramsType = `{ ${pathParams.map(p => `${p}: string`).join('; ')} }`;\r\n }\r\n \r\n if (route.zodSchemas?.body || route.schema.body) {\r\n const schemaVarName = `${capitalize(methodName)}BodySchema`;\r\n schemaVars.set(`${methodName}_body`, schemaVarName);\r\n bodyType = `z.infer<typeof ${schemaVarName}>`;\r\n \r\n if (includeValidation) {\r\n // Store schema as serialized string that will be evaluated\r\n schemaExports.push(`// @ts-ignore - Schema defined at runtime\\nexport const ${schemaVarName}: any = null;`);\r\n }\r\n }\r\n \r\n if (route.zodSchemas?.query || route.schema.query) {\r\n const schemaVarName = `${capitalize(methodName)}QuerySchema`;\r\n schemaVars.set(`${methodName}_query`, schemaVarName);\r\n queryType = `z.infer<typeof ${schemaVarName}>`;\r\n \r\n if (includeValidation) {\r\n schemaExports.push(`// @ts-ignore - Schema defined at runtime\\nexport const ${schemaVarName}: any = null;`);\r\n }\r\n }\r\n \r\n if (route.zodSchemas?.response || route.schema.response) {\r\n const schemaVarName = `${capitalize(methodName)}ResponseSchema`;\r\n schemaVars.set(`${methodName}_response`, schemaVarName);\r\n responseType = `z.infer<typeof ${schemaVarName}>`;\r\n \r\n if (includeValidation) {\r\n schemaExports.push(`// @ts-ignore - Schema defined at runtime\\nexport const ${schemaVarName}: any = null;`);\r\n }\r\n }\r\n \r\n // Generate type aliases\r\n if (bodyType !== 'void' && !bodyType.includes('z.infer')) {\r\n typeDefinitions.push(`export type ${capitalize(methodName)}Body = ${bodyType};`);\r\n }\r\n if (queryType !== 'void' && !queryType.includes('z.infer')) {\r\n typeDefinitions.push(`export type ${capitalize(methodName)}Query = ${queryType};`);\r\n }\r\n if (!responseType.includes('z.infer')) {\r\n typeDefinitions.push(`export type ${capitalize(methodName)}Response = ${responseType};`);\r\n }\r\n \r\n // Generate method signature\r\n const args: string[] = [];\r\n if (paramsType !== 'void') args.push(`params: ${paramsType}`);\r\n if (bodyType !== 'void') args.push(`body: ${bodyType}`);\r\n if (queryType !== 'void') args.push(`query?: ${queryType}`);\r\n \r\n const argsStr = args.join(', ');\r\n const returnType = `Promise<${responseType}>`;\r\n \r\n // Generate method implementation\r\n let methodBody = ` async ${methodName}(${argsStr}): ${returnType} {\\n`;\r\n \r\n // Validation\r\n if (includeValidation && bodyType !== 'void') {\r\n const schemaVar = schemaVars.get(`${methodName}_body`);\r\n if (schemaVar) {\r\n methodBody += ` if (this.validateRequests && ${schemaVar}) {\\n`;\r\n methodBody += ` ${schemaVar}.parse(body);\\n`;\r\n methodBody += ` }\\n`;\r\n }\r\n }\r\n \r\n // URL construction\r\n let urlExpression = `\\`\\${this.baseUrl}${route.path}\\``;\r\n if (pathParams.length > 0) {\r\n // Replace :param with ${params.param}\r\n const pathWithParams = route.path.replace(/:(\\w+)/g, '${params.$1}');\r\n urlExpression = `\\`\\${this.baseUrl}${pathWithParams}\\``;\r\n }\r\n \r\n methodBody += ` let url = ${urlExpression};\\n`;\r\n \r\n // Query string\r\n if (queryType !== 'void') {\r\n methodBody += ` if (query) {\\n`;\r\n methodBody += ` const queryString = new URLSearchParams(query as any).toString();\\n`;\r\n methodBody += ` url += \\`?\\${queryString}\\`;\\n`;\r\n methodBody += ` }\\n`;\r\n }\r\n \r\n // Fetch options\r\n methodBody += ` const options: RequestInit = {\\n`;\r\n methodBody += ` method: '${route.method.toUpperCase()}',\\n`;\r\n methodBody += ` headers: { ...this.defaultHeaders, 'Content-Type': 'application/json' },\\n`;\r\n if (bodyType !== 'void') {\r\n methodBody += ` body: JSON.stringify(body),\\n`;\r\n }\r\n methodBody += ` };\\n`;\r\n \r\n // Execute request\r\n methodBody += ` const response = await fetch(url, options);\\n`;\r\n methodBody += ` if (!response.ok) {\\n`;\r\n methodBody += ` throw new Error(\\`HTTP \\${response.status}: \\${response.statusText}\\`);\\n`;\r\n methodBody += ` }\\n`;\r\n methodBody += ` return response.json();\\n`;\r\n methodBody += ` }\\n`;\r\n \r\n methodImplementations.push(methodBody);\r\n }\r\n\r\n // Build final code\r\n if (imports.length > 0) {\r\n code += imports.join('\\n') + '\\n\\n';\r\n }\r\n\r\n if (typeDefinitions.length > 0) {\r\n code += '// Type Definitions\\n';\r\n code += typeDefinitions.join('\\n') + '\\n\\n';\r\n }\r\n\r\n if (includeValidation && schemaExports.length > 0) {\r\n code += '// Zod Schemas\\n';\r\n code += schemaExports.join('\\n') + '\\n\\n';\r\n }\r\n\r\n // Client class\r\n code += `export interface KozoClientOptions {\\n`;\r\n code += ` baseUrl?: string;\\n`;\r\n code += ` validateRequests?: boolean;\\n`;\r\n code += ` defaultHeaders?: Record<string, string>;\\n`;\r\n code += `}\\n\\n`;\r\n\r\n code += `export class KozoClient {\\n`;\r\n code += ` private baseUrl: string;\\n`;\r\n code += ` private validateRequests: boolean;\\n`;\r\n code += ` private defaultHeaders: Record<string, string>;\\n\\n`;\r\n \r\n code += ` constructor(options: KozoClientOptions = {}) {\\n`;\r\n code += ` this.baseUrl = options.baseUrl || '${baseUrl}';\\n`;\r\n code += ` this.validateRequests = options.validateRequests ?? ${validateByDefault};\\n`;\r\n code += ` this.defaultHeaders = options.defaultHeaders || ${JSON.stringify(defaultHeaders)};\\n`;\r\n code += ` }\\n\\n`;\r\n \r\n // Add all methods\r\n code += methodImplementations.join('\\n');\r\n \r\n code += `}\\n\\n`;\r\n code += `export default KozoClient;\\n`;\r\n\r\n return code;\r\n}\r\n\r\n/**\r\n * Capitalize first letter\r\n */\r\nfunction capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n","// ============================================================================\n// Kozo uWS Transport — uWebSockets.js adapter for nativeListen\n// ============================================================================\n//\n// Architecture:\n//\n// Each route is registered directly with uWS's C++ radix trie router\n// (app.get, app.post, …) — zero JS routing overhead per request.\n//\n// Compiled handlers (UwsNativeHandler) are called with pre-extracted\n// parameters from uWS C++ — no WASM trie, no JS dispatch, no shims.\n//\n// uWS C++ trie match → JS callback → UwsNativeHandler(uwsRes, url, body, params)\n//\n// Performance gains:\n// 1. No IncomingMessage / ServerResponse object allocation\n// 2. cork() batches all header + body writes into one kernel send()\n// 3. C++ radix trie routes — zero JS routing per request\n// 4. HTTP parser in C++ — zero JS allocation per header field\n// 5. Zero-shim handlers write directly via cork()\n//\n// Usage:\n// const uws = await tryLoadUws();\n// if (uws) { /* use createUwsServer() */ }\n// else { /* fall back to node:http */ }\n// ============================================================================\n\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport { createServer as netCreateServer } from 'node:net';\nimport { KozoError } from './errors.js';\n\n// ── Minimal uWS type surface ─────────────────────────────────────────────────\n\nexport interface UwsBindings {\n App(): UwsApp;\n us_listen_socket_close(token: unknown): void;\n}\n\nexport interface UwsApp {\n get(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n post(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n put(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n patch(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n del(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n options(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n head(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n any(pattern: string, handler: (res: UwsHttpRes, req: UwsHttpReq) => void): UwsApp;\n listen(port: number, cb: (listenSocket: unknown) => void): void;\n}\n\nexport interface UwsHttpRes {\n cork(fn: () => void): void;\n writeStatus(status: string): UwsHttpRes;\n writeHeader(key: string, value: string): UwsHttpRes;\n end(body?: string): UwsHttpRes;\n onData(cb: (chunk: ArrayBuffer, isLast: boolean) => void): UwsHttpRes;\n onAborted(cb: () => void): UwsHttpRes;\n}\n\nexport interface UwsHttpReq {\n getMethod(): string;\n getUrl(): string;\n getQuery(): string;\n getParameter(index: number): string;\n}\n\n// ── Status text cache ─────────────────────────────────────────────────────────\n\nconst STATUS_TEXT: Record<number, string> = {\n 200: '200 OK', 201: '201 Created', 204: '204 No Content',\n 301: '301 Moved Permanently', 302: '302 Found',\n 400: '400 Bad Request', 401: '401 Unauthorized', 403: '403 Forbidden',\n 404: '404 Not Found', 405: '405 Method Not Allowed',\n 422: '422 Unprocessable Entity', 429: '429 Too Many Requests',\n 500: '500 Internal Server Error', 503: '503 Service Unavailable',\n};\n\n// ── Pre-built 404 body ────────────────────────────────────────────────────────\n\nconst BODY_404 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#not-found',\n title: 'Resource Not Found',\n status: 404,\n});\n\n// ── HTTP methods that never carry a request body ──────────────────────────────\n\nconst NO_BODY_METHODS = new Set(['GET', 'HEAD', 'DELETE', 'OPTIONS', 'TRACE']);\n\n// ── Content-Type constants ────────────────────────────────────────────────────\n\nconst CT_JSON = 'application/json';\nconst CT_PROBLEM = 'application/problem+json';\n\n// ── Pre-built 500 body ────────────────────────────────────────────────────────\n\nconst BODY_500 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#internal-error',\n title: 'Internal Server Error',\n status: 500,\n});\n\n// ============================================================================\n// uWS-native fast response functions\n//\n// These are zero-shim equivalents of fast-response.ts helpers.\n// They write directly via cork() — no shimReq/shimRes allocation,\n// no writeHead capture, no header loop indirection.\n// ============================================================================\n\n/** Write a 200 JSON response directly to uWS. */\nexport function uwsFastWriteJson(uwsRes: UwsHttpRes, body: string): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus('200 OK');\n uwsRes.writeHeader('Content-Type', CT_JSON);\n uwsRes.end(body);\n });\n}\n\n/** Write a JSON response with a custom HTTP status code. */\nexport function uwsFastWriteJsonStatus(uwsRes: UwsHttpRes, body: string, status: number): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus(STATUS_TEXT[status] ?? `${status}`);\n uwsRes.writeHeader('Content-Type', CT_JSON);\n uwsRes.end(body);\n });\n}\n\n/** Write a 400 Validation Failed response. */\nexport function uwsFastWrite400(field: string, errors: any, uwsRes: UwsHttpRes): void {\n const body = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: 'Validation Failed',\n status: 400,\n errors: (errors ?? []).map((e: any) => ({\n field: e.instancePath?.replace(/^\\//, '').replace(/\\//g, '.') || e.params?.missingProperty || 'unknown',\n message: e.message || 'Invalid value',\n code: e.keyword || 'invalid',\n })),\n });\n uwsRes.cork(() => {\n uwsRes.writeStatus('400 Bad Request');\n uwsRes.writeHeader('Content-Type', CT_PROBLEM);\n uwsRes.end(body);\n });\n}\n\n/** Write a 500 Internal Server Error response. */\nexport function uwsFastWrite500(uwsRes: UwsHttpRes): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus('500 Internal Server Error');\n uwsRes.writeHeader('Content-Type', CT_PROBLEM);\n uwsRes.end(BODY_500);\n });\n}\n\n/** Write a KozoError or fall back to 500. */\nexport function uwsFastWriteError(err: unknown, uwsRes: UwsHttpRes): void {\n if (err instanceof KozoError) {\n const body = JSON.stringify({\n type: `https://kozo-docs.vercel.app/docs/core/errors#${err.code}`,\n title: err.message,\n status: err.statusCode,\n });\n uwsRes.cork(() => {\n uwsRes.writeStatus(STATUS_TEXT[err.statusCode] ?? `${err.statusCode}`);\n uwsRes.writeHeader('Content-Type', CT_PROBLEM);\n uwsRes.end(body);\n });\n } else {\n uwsFastWrite500(uwsRes);\n }\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/**\n * Try to load uWebSockets.js via CJS require (it ships as a native .node file).\n * Returns null if the module is not installed or fails to load.\n */\nexport async function tryLoadUws(): Promise<UwsBindings | null> {\n const { createRequire } = await import('node:module');\n\n // 1. Try relative to this package (normal install)\n try {\n const req = createRequire(import.meta.url);\n return req('uWebSockets.js') as UwsBindings;\n } catch { /* not found here */ }\n\n // 2. Fall back to the caller's cwd (e.g. pnpm workspace consumer)\n try {\n const req = createRequire(new URL(`file://${process.cwd()}/index.js`));\n return req('uWebSockets.js') as UwsBindings;\n } catch {\n return null;\n }\n}\n\n/**\n * Write a pre-built 404 response directly to a uWS response.\n */\nexport function uwsWrite404(uwsRes: UwsHttpRes): void {\n uwsRes.cork(() => {\n uwsRes.writeStatus('404 Not Found');\n uwsRes.writeHeader('Content-Type', 'application/problem+json');\n uwsRes.end(BODY_404);\n });\n}\n\n// ============================================================================\n// Shim factories\n// ============================================================================\n\n/**\n * Lightweight fake ServerResponse.\n *\n * Our compiled handlers call:\n * res.writeHead(status, [key, val, key, val, …])\n * res.end(body)\n *\n * We capture the status + flat header array and flush everything via a single\n * uWS cork() call — zero extra syscalls.\n */\nexport function makeShimRes(uwsRes: UwsHttpRes): ServerResponse {\n let _status = 200;\n let _headers: string[] = [];\n\n return {\n writeHead(status: number, headers: string[]) {\n _status = status;\n _headers = headers;\n },\n end(body: string = '') {\n uwsRes.cork(() => {\n uwsRes.writeStatus(STATUS_TEXT[_status] ?? String(_status));\n for (let i = 0; i + 1 < _headers.length; i += 2) {\n // Skip Content-Length — uWS auto-computes it from the body passed to end().\n // Writing it manually would cause a \"Duplicate Content-Length\" parse error.\n if (_headers[i] === 'Content-Length') continue;\n uwsRes.writeHeader(_headers[i], _headers[i + 1]);\n }\n uwsRes.end(body);\n });\n },\n } as unknown as ServerResponse;\n}\n\n/**\n * Lightweight fake IncomingMessage for no-body routes (GET, DELETE, …).\n *\n * The compiled S1/S2 handlers only access req.method and req.url — nothing\n * else. We allocate a plain object with just those two fields.\n */\nexport function makeShimReqNoBody(method: string, url: string): IncomingMessage {\n return { method, url } as unknown as IncomingMessage;\n}\n\n/**\n * Lightweight fake IncomingMessage for body routes (POST, PUT, PATCH).\n *\n * readNativeBody() in compiler.ts does:\n * req.on('data', chunk => …)\n * req.on('end', () => …)\n * req.on('error', e => …)\n *\n * We pre-buffer the body from uWS's onData, then replay it as a Node stream\n * using queueMicrotask so the Promise in readNativeBody resolves correctly.\n */\nexport function makeShimReqWithBody(method: string, url: string, rawBody: string): IncomingMessage {\n const dataListeners: Array<(chunk: Buffer) => void> = [];\n const endListeners: Array<() => void> = [];\n let scheduled = false;\n\n function scheduleEmit() {\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(() => {\n const buf = rawBody ? Buffer.from(rawBody, 'utf8') : null;\n if (buf) for (const l of dataListeners) l(buf);\n for (const l of endListeners) l();\n // Clear listener arrays after emit to prevent memory leaks\n dataListeners.length = 0;\n endListeners.length = 0;\n });\n }\n\n return {\n method,\n url,\n on(event: string, listener: Function) {\n if (event === 'data') { dataListeners.push(listener as any); scheduleEmit(); }\n else if (event === 'end') { endListeners.push(listener as any); scheduleEmit(); }\n // 'error' listeners intentionally ignored — uWS aborts are handled separately\n return this;\n },\n } as unknown as IncomingMessage;\n}\n\n// ============================================================================\n// Core uWS dispatch factory\n// ============================================================================\n\n/**\n * Zero-shim uWS native handler signature.\n *\n * Parameters are passed directly from the uWS dispatcher:\n * uwsRes — uWS response (write via cork/writeStatus/writeHeader/end)\n * url — full URL including query string e.g. '/api/users?page=1'\n * rawBody — pre-buffered request body string (empty string for no-body routes)\n * params — path parameters extracted by the router e.g. { id: '42' }\n */\nexport type UwsNativeHandler = (\n uwsRes: UwsHttpRes,\n url: string,\n rawBody: string,\n params: Record<string, string>,\n) => void | Promise<void>;\n\nexport interface UwsRouteEntry {\n method: string; // uppercase: 'GET', 'POST', etc.\n path: string; // original pattern: '/api/users/:id'\n paramNames: string[]; // extracted param names: ['id'] or []\n handler: UwsNativeHandler;\n}\n\nexport interface UwsDispatchOptions {\n uws: UwsBindings;\n /** Routes to register directly with uWS C++ router. */\n routes: UwsRouteEntry[];\n port: number;\n}\n\n/**\n * Find an available TCP port (for port=0 ephemeral binding with uWS).\\\n * We ask node:net for a free port, then release it before handing it to uWS.\n * Slight race condition is acceptable — this is startup-only.\n */\nfunction getFreePort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const srv = netCreateServer();\n srv.listen(0, '0.0.0.0', () => {\n const port = (srv.address() as { port: number }).port;\n srv.close((err) => err ? reject(err) : resolve(port));\n });\n });\n}\n\n// ── uWS method name map (HTTP verb → uWS app method) ─────────────────────────\n\nconst UWS_METHOD: Record<string, string> = {\n GET: 'get', POST: 'post', PUT: 'put', PATCH: 'patch',\n DELETE: 'del', OPTIONS: 'options', HEAD: 'head',\n};\n\n/**\n * Create a uWS HTTP server with native per-route C++ matching.\n *\n * Each route is registered directly with uWS (app.get, app.post, …) so the\n * C++ radix trie handles all URL matching — zero JS routing overhead.\n * A catch-all `any('/*')` returns 404 for unmatched paths.\n *\n * Returns { port, server } matching the nativeListen contract.\n */\nexport async function createUwsServer(opts: UwsDispatchOptions): Promise<{ port: number; server: { close(): void } }> {\n const { uws, routes } = opts;\n // uWS does not support ephemeral port 0 — find a free port via node:net first\n const port = opts.port === 0 ? await getFreePort() : opts.port;\n const emptyParams = Object.freeze({}) as Record<string, string>;\n\n return new Promise((resolve, reject) => {\n const uwsApp = uws.App();\n\n // ── Register each route directly with uWS C++ router ────────────────\n for (const route of routes) {\n const fn = UWS_METHOD[route.method];\n if (!fn) continue;\n\n const h = route.handler;\n const names = route.paramNames;\n const hasParams = names.length > 0;\n const noBody = NO_BODY_METHODS.has(route.method);\n\n if (noBody && !hasParams) {\n // ── Fastest path: static GET/HEAD/DELETE/OPTIONS, no params ──────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const query = uwsReq.getQuery();\n h(uwsRes, query ? `${uwsReq.getUrl()}?${query}` : uwsReq.getUrl(), '', emptyParams);\n });\n\n } else if (noBody && hasParams) {\n // ── GET/HEAD/DELETE with path params ─────────────────────────────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const rawPath = uwsReq.getUrl();\n const query = uwsReq.getQuery();\n const params: Record<string, string> = {};\n for (let i = 0; i < names.length; i++) params[names[i]] = uwsReq.getParameter(i);\n h(uwsRes, query ? `${rawPath}?${query}` : rawPath, '', params);\n });\n\n } else if (!hasParams) {\n // ── POST/PUT/PATCH without path params ──────────────────────────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const rawPath = uwsReq.getUrl();\n const query = uwsReq.getQuery();\n const url = query ? `${rawPath}?${query}` : rawPath;\n let aborted = false;\n let bodyStr = '';\n uwsRes.onAborted(() => { aborted = true; });\n uwsRes.onData((chunk, isLast) => {\n if (aborted) return;\n if (chunk.byteLength > 0) bodyStr += Buffer.from(chunk).toString('utf8');\n if (isLast) h(uwsRes, url, bodyStr, emptyParams);\n });\n });\n\n } else {\n // ── POST/PUT/PATCH with path params ─────────────────────────────\n (uwsApp as any)[fn](route.path, (uwsRes: UwsHttpRes, uwsReq: UwsHttpReq) => {\n const rawPath = uwsReq.getUrl();\n const query = uwsReq.getQuery();\n const url = query ? `${rawPath}?${query}` : rawPath;\n const params: Record<string, string> = {};\n for (let i = 0; i < names.length; i++) params[names[i]] = uwsReq.getParameter(i);\n let aborted = false;\n let bodyStr = '';\n uwsRes.onAborted(() => { aborted = true; });\n uwsRes.onData((chunk, isLast) => {\n if (aborted) return;\n if (chunk.byteLength > 0) bodyStr += Buffer.from(chunk).toString('utf8');\n if (isLast) h(uwsRes, url, bodyStr, params);\n });\n });\n }\n }\n\n // ── Catch-all 404 for unmatched routes ──────────────────────────────\n uwsApp.any('/*', (uwsRes) => { uwsWrite404(uwsRes); });\n\n let listenToken: unknown = null;\n\n uwsApp.listen(port, (token) => {\n if (!token) {\n reject(new Error(`[Kozo] uWS failed to listen on port ${port}`));\n return;\n }\n listenToken = token;\n\n resolve({\n port,\n server: {\n close() {\n if (listenToken) uws.us_listen_socket_close(listenToken);\n },\n },\n });\n });\n });\n}\n","/**\n * Kozo Error System - RFC 7807 Problem Details\n *\n * Standardized error format for all validation and runtime errors.\n * Pre-serialized templates + frozen ResponseInit objects eliminate\n * per-request allocations on the hot path.\n *\n * @see https://datatracker.ietf.org/doc/html/rfc7807\n */\n\n// ============================================================================\n// Error Types\n// ============================================================================\n\nexport interface ValidationError {\n field: string;\n path?: (string | number)[];\n message: string;\n code: string;\n value?: unknown;\n}\n\nexport interface ProblemDetails {\n type: string;\n title: string;\n status: number;\n detail?: string;\n instance?: string;\n errors?: ValidationError[];\n}\n\n// ============================================================================\n// Pre-compiled Error Responses (Zero allocation at runtime)\n// ============================================================================\n\nconst CONTENT_TYPE_PROBLEM = 'application/problem+json';\n\nexport const ERROR_RESPONSES = {\n VALIDATION_FAILED: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: 'Validation Failed',\n status: 400,\n },\n INVALID_BODY: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#invalid-body',\n title: 'Invalid Request Body',\n status: 400,\n },\n INVALID_QUERY: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#invalid-query',\n title: 'Invalid Query Parameters',\n status: 400,\n },\n INVALID_PARAMS: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#invalid-params',\n title: 'Invalid Path Parameters',\n status: 400,\n },\n INTERNAL_ERROR: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#internal-error',\n title: 'Internal Server Error',\n status: 500,\n },\n NOT_FOUND: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#not-found',\n title: 'Resource Not Found',\n status: 404,\n },\n UNAUTHORIZED: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#unauthorized',\n title: 'Unauthorized',\n status: 401,\n },\n FORBIDDEN: {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#forbidden',\n title: 'Forbidden',\n status: 403,\n },\n} as const;\n\n// ============================================================================\n// Pre-frozen ResponseInit objects — V8 can constant-fold header reads\n// ============================================================================\n\nconst HDR_PROBLEM = { 'Content-Type': CONTENT_TYPE_PROBLEM };\n\nconst INIT_400 = Object.freeze({ status: 400, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_401 = Object.freeze({ status: 401, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_403 = Object.freeze({ status: 403, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_404 = Object.freeze({ status: 404, headers: HDR_PROBLEM }) as ResponseInit;\nconst INIT_500 = Object.freeze({ status: 500, headers: HDR_PROBLEM }) as ResponseInit;\n\n// ============================================================================\n// Error Formatters\n// ============================================================================\n\n/**\n * Convert Ajv validation errors to standardized format\n */\nexport function formatAjvErrors(errors: any[] | null | undefined): ValidationError[] {\n if (!errors || errors.length === 0) return [];\n\n return errors.map(err => ({\n field: err.instancePath?.replace(/^\\//, '').replace(/\\//g, '.') || err.params?.missingProperty || 'unknown',\n path: err.path as (string | number)[] | undefined,\n message: err.message || 'Invalid value',\n code: err.keyword || 'invalid',\n value: err.data,\n }));\n}\n\n/**\n * Convert Zod validation errors to standardized format\n */\nexport function formatZodErrors(errors: any): ValidationError[] {\n if (!errors?.issues) return [];\n\n return errors.issues.map((issue: any) => ({\n field: issue.path?.join('.') || 'unknown',\n message: issue.message || 'Invalid value',\n code: issue.code || 'invalid',\n value: issue.input,\n }));\n}\n\n// ============================================================================\n// Response Builders\n//\n// Hot-path functions (validationErrorResponse, internalErrorResponse) avoid\n// any per-call object creation beyond the unavoidable JSON.stringify of the\n// dynamic payload.\n// ============================================================================\n\n/**\n * Build a 400 Validation Failed response.\n * Called on every invalid request — kept as lean as possible.\n */\nexport function validationErrorResponse(\n field: string,\n ajvErrors: any[] | null | undefined,\n instance?: string,\n): Response {\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.VALIDATION_FAILED.type,\n title: ERROR_RESPONSES.VALIDATION_FAILED.title,\n status: 400,\n errors: formatAjvErrors(ajvErrors),\n };\n if (instance) body.instance = instance;\n return new Response(JSON.stringify(body), INIT_400);\n}\n\n/**\n * Build a 500 Internal Server Error response.\n */\nexport function internalErrorResponse(err: Error, instance?: string): Response {\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.INTERNAL_ERROR.type,\n title: ERROR_RESPONSES.INTERNAL_ERROR.title,\n status: 500,\n detail: err?.message,\n };\n if (instance) body.instance = instance;\n return new Response(JSON.stringify(body), INIT_500);\n}\n\n/**\n * Build a 404 Not Found response.\n * Pre-serialized for the common case (no instance).\n */\n\n// Pre-serialized static bodies — zero allocation for the common case\nconst BODY_404_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.NOT_FOUND.type,\n title: ERROR_RESPONSES.NOT_FOUND.title,\n status: 404,\n});\n\nexport function notFoundResponse(instance?: string): Response {\n if (!instance) return new Response(BODY_404_STATIC, INIT_404);\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.NOT_FOUND.type,\n title: ERROR_RESPONSES.NOT_FOUND.title,\n status: 404,\n instance,\n };\n return new Response(JSON.stringify(body), INIT_404);\n}\n\n/**\n * Build a 401 Unauthorized response.\n */\n\nconst BODY_401_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.UNAUTHORIZED.type,\n title: ERROR_RESPONSES.UNAUTHORIZED.title,\n status: 401,\n});\n\nexport function unauthorizedResponse(instance?: string): Response {\n if (!instance) return new Response(BODY_401_STATIC, INIT_401);\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.UNAUTHORIZED.type,\n title: ERROR_RESPONSES.UNAUTHORIZED.title,\n status: 401,\n instance,\n };\n return new Response(JSON.stringify(body), INIT_401);\n}\n\n/**\n * Build a 403 Forbidden response.\n */\n\nconst BODY_403_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.FORBIDDEN.type,\n title: ERROR_RESPONSES.FORBIDDEN.title,\n status: 403,\n});\n\nexport function forbiddenResponse(instance?: string): Response {\n if (!instance) return new Response(BODY_403_STATIC, INIT_403);\n const body: ProblemDetails = {\n type: ERROR_RESPONSES.FORBIDDEN.type,\n title: ERROR_RESPONSES.FORBIDDEN.title,\n status: 403,\n instance,\n };\n return new Response(JSON.stringify(body), INIT_403);\n}\n\n/**\n * Build a 500 Internal Server Error response (static, no detail).\n */\nconst BODY_500_STATIC = JSON.stringify({\n type: ERROR_RESPONSES.INTERNAL_ERROR.type,\n title: ERROR_RESPONSES.INTERNAL_ERROR.title,\n status: 500,\n});\n\nexport function internalErrorResponseStatic(): Response {\n return new Response(BODY_500_STATIC, INIT_500);\n}\n\n// ============================================================================\n// KozoError — Base Error Class\n// ============================================================================\n\nexport class KozoError extends Error {\n readonly statusCode: number;\n readonly code: string;\n\n constructor(message: string, statusCode: number, code: string) {\n super(message);\n this.name = 'KozoError';\n this.statusCode = statusCode;\n this.code = code;\n }\n\n toResponse(instance?: string): Response {\n const body: ProblemDetails = {\n type: `https://kozo-docs.vercel.app/docs/core/errors#${this.code}`,\n title: this.message,\n status: this.statusCode,\n };\n if (instance) body.instance = instance;\n const init = _initForStatus(this.statusCode);\n return new Response(JSON.stringify(body), init);\n }\n}\n\n// Inline status → init lookup (avoids switch overhead for common codes)\nfunction _initForStatus(status: number): ResponseInit {\n if (status === 400) return INIT_400;\n if (status === 401) return INIT_401;\n if (status === 403) return INIT_403;\n if (status === 404) return INIT_404;\n if (status === 500) return INIT_500;\n return Object.freeze({ status, headers: HDR_PROBLEM }) as ResponseInit;\n}\n\n// ============================================================================\n// Concrete Error Classes\n// ============================================================================\n\nexport class ValidationFailedError extends KozoError {\n readonly errors: ValidationError[];\n\n constructor(message: string, errors: ValidationError[] = []) {\n super(message, 400, 'validation-failed');\n this.name = 'ValidationFailedError';\n this.errors = errors;\n }\n\n override toResponse(instance?: string): Response {\n const body: ProblemDetails = {\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: this.message,\n status: 400,\n errors: this.errors,\n };\n if (instance) body.instance = instance;\n return new Response(JSON.stringify(body), INIT_400);\n }\n}\n\nexport class NotFoundError extends KozoError {\n constructor(message = 'Resource Not Found') {\n super(message, 404, 'not-found');\n this.name = 'NotFoundError';\n }\n}\n\nexport class UnauthorizedError extends KozoError {\n constructor(message = 'Unauthorized') {\n super(message, 401, 'unauthorized');\n this.name = 'UnauthorizedError';\n }\n}\n\nexport class ForbiddenError extends KozoError {\n constructor(message = 'Forbidden') {\n super(message, 403, 'forbidden');\n this.name = 'ForbiddenError';\n }\n}\n\n// ============================================================================\n// Middleware-friendly Http* aliases (avoid collision with KozoError hierarchy)\n// ============================================================================\n\nexport class HttpError extends KozoError {}\nexport class HttpBadRequestError extends KozoError {\n constructor(message = 'Bad Request') { super(message, 400, 'bad-request'); }\n}\nexport class HttpUnauthorizedError extends UnauthorizedError {}\nexport class HttpForbiddenError extends ForbiddenError {}\nexport class HttpNotFoundError extends NotFoundError {}\nexport class HttpInternalError extends KozoError {\n constructor(message = 'Internal Server Error') { super(message, 500, 'internal-error'); }\n}\n","// ============================================================================\n// Kozo Fast Response — Optimized HTTP response writing for nativeListen\n// ============================================================================\n//\n// Key optimisations over vanilla Node.js ServerResponse:\n//\n// 1. ASCII body length → JSON output is always ASCII-safe (fast-json-\n// stringify escapes non-ASCII to \\uXXXX). body.length === byte length,\n// so we skip the expensive Buffer.byteLength() call (~60–100 ns saved).\n//\n// 2. Content-Length cache → pre-computed String(n) for sizes 0–9999\n// avoids per-request String() conversion (~12 ns saved).\n//\n// 3. Pre-built error buffers → 404 / 500 responses are constant strings,\n// written once at import time. Zero allocation on error paths.\n//\n// These utilities are used internally by the native handler compiler\n// (compiler.ts) and the nativeListen dispatch function (app.ts).\n// They are NOT part of the public developer API.\n// ============================================================================\n\nimport type { ServerResponse } from 'node:http';\nimport { KozoError } from './errors.js';\n\n// ── Content-Length string cache ─────────────────────────────────────────\n// Pre-allocate stringified numbers for sizes 0–9999 (covers 99%+ of\n// JSON API responses). Avoids `String(n)` allocation on every request.\nconst CL_CACHE: string[] = /* @__PURE__ */ (() => {\n const arr = new Array<string>(10_000);\n for (let i = 0; i < 10_000; i++) arr[i] = String(i);\n return arr;\n})();\n\n/** Fast number → string for Content-Length. Cached for values < 10 000. */\nexport function fastCL(n: number): string {\n return n < 10_000 ? CL_CACHE[n] : String(n);\n}\n\n// ── Content-Type constants ──────────────────────────────────────────────\nconst CT_JSON = 'application/json';\nconst CT_PROBLEM = 'application/problem+json';\nconst CT_TEXT = 'text/plain';\nconst CT_HTML = 'text/html; charset=utf-8';\n\n// ── Pre-built error response buffers ────────────────────────────────────\nconst BODY_404 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#not-found',\n title: 'Resource Not Found',\n status: 404,\n});\nconst LEN_404 = fastCL(BODY_404.length);\n\nconst BODY_500 = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#internal-error',\n title: 'Internal Server Error',\n status: 500,\n});\nconst LEN_500 = fastCL(BODY_500.length);\n\n// ════════════════════════════════════════════════════════════════════════\n// Public helpers — used by compiler.ts native handler scenarios\n// ════════════════════════════════════════════════════════════════════════\n\n/**\n * Write a 200 JSON response.\n *\n * IMPORTANT: `body` MUST be ASCII-safe (i.e. produced by JSON.stringify\n * or fast-json-stringify). We use `body.length` instead of\n * `Buffer.byteLength(body)` — valid because JSON serializers escape\n * non-ASCII to `\\uXXXX`, keeping the output 7-bit clean.\n */\nexport function fastWriteJson(res: ServerResponse, body: string): void {\n res.writeHead(200, [\n 'Content-Type', CT_JSON,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n}\n\n/**\n * Write a plain text response.\n */\nexport function fastWriteText(res: ServerResponse, body: string, status: number = 200): void {\n const len = Buffer.byteLength(body); // text may contain UTF-8\n res.writeHead(status, [\n 'Content-Type', CT_TEXT,\n 'Content-Length', fastCL(len),\n ]);\n res.end(body);\n}\n\n/**\n * Write an HTML response (SSR page rendering).\n */\nexport function fastWriteHtml(res: ServerResponse, body: string, status: number = 200): void {\n const len = Buffer.byteLength(body); // HTML may contain UTF-8\n res.writeHead(status, [\n 'Content-Type', CT_HTML,\n 'Content-Length', fastCL(len),\n ]);\n res.end(body);\n}\n\n/**\n * Write a JSON response with a custom status code.\n */\nexport function fastWriteJsonStatus(res: ServerResponse, body: string, status: number): void {\n res.writeHead(status, [\n 'Content-Type', CT_JSON,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n}\n\n/**\n * Write a pre-built 404 Not Found response (zero allocation).\n */\nexport function fastWrite404(res: ServerResponse): void {\n res.writeHead(404, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', LEN_404,\n ]);\n res.end(BODY_404);\n}\n\n/**\n * Write a pre-built 500 Internal Server Error response (zero allocation).\n */\nexport function fastWrite500(res: ServerResponse): void {\n res.writeHead(500, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', LEN_500,\n ]);\n res.end(BODY_500);\n}\n\n/**\n * Write a 400 validation error response.\n * Allocates only the error body string.\n */\nexport function fastWrite400(field: string, errors: any, res: ServerResponse): void {\n const body = JSON.stringify({\n type: 'https://kozo-docs.vercel.app/docs/core/errors#validation-failed',\n title: 'Validation Failed',\n status: 400,\n errors: (errors ?? []).map((e: any) => ({\n field: e.instancePath?.replace(/^\\//, '').replace(/\\//g, '.') || e.params?.missingProperty || 'unknown',\n message: e.message || 'Invalid value',\n code: e.keyword || 'invalid',\n })),\n });\n res.writeHead(400, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n}\n\n/**\n * Write a KozoError as an RFC 7807 problem+json response.\n * Falls back to 500 for unknown errors.\n */\nexport function fastWriteError(err: unknown, res: ServerResponse): void {\n if (err instanceof KozoError) {\n const body = JSON.stringify({\n type: `https://kozo-docs.vercel.app/docs/core/errors#${err.code}`,\n title: err.message,\n status: err.statusCode,\n });\n res.writeHead(err.statusCode, [\n 'Content-Type', CT_PROBLEM,\n 'Content-Length', fastCL(body.length),\n ]);\n res.end(body);\n } else {\n fastWrite500(res);\n }\n}\n","import type { Context } from 'hono';\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Services, RouteSchema } from './types.js';\nimport type { UwsHttpRes, UwsNativeHandler } from './uws-transport.js';\nimport { uwsFastWriteJson, uwsFastWrite400, uwsFastWriteError } from './uws-transport.js';\nimport { z } from 'zod';\n\n// ============================================================================\n// Zod-native validator — replaces Ajv (removes eval/URL-string supply chain flags)\n//\n// API is intentionally Ajv-compatible: callable → boolean, with a mutable\n// `.errors` side-channel. This means ZERO changes to the ~50 scenario\n// closures below that do: if (!vq(query)) return err(vq.errors, …)\n//\n// In-place mutation (same as Ajv removeAdditional + coerceTypes):\n// • Extra keys on plain objects are deleted\n// • Coerced/transformed values from Zod overwrite the originals\n// Safe in Node.js single-threaded model: no `await` occurs between the\n// validator call and the `.errors` read in any scenario.\n// ============================================================================\ntype ZValidatorErrors = { instancePath: string; message: string; keyword?: string; path?: (string | number)[] }[];\ntype ZValidator = ((data: unknown) => boolean) & { errors: ZValidatorErrors | null };\n\nfunction makeZValidator(schema: z.ZodType): ZValidator {\n const fn = function (data: unknown): boolean {\n const r = schema.safeParse(data);\n fn.errors = null;\n if (r.success) {\n // Mutate plain objects in-place: strip unknown keys + apply coerced values\n // (mirrors Ajv removeAdditional:'all' + coerceTypes:true behaviour)\n if (data !== null && typeof data === 'object' && !Array.isArray(data)) {\n const d = data as Record<string, unknown>;\n const rd = r.data as Record<string, unknown>;\n for (const k of Object.keys(d)) if (!(k in rd)) delete d[k];\n Object.assign(d, rd);\n }\n return true;\n }\n fn.errors = r.error.issues.map(i => ({\n instancePath: i.path.length ? '/' + i.path.join('/') : '',\n message: i.message,\n keyword: (i as any).code,\n path: i.path as (string | number)[],\n }));\n return false;\n } as ZValidator;\n fn.errors = null;\n return fn;\n}\nimport {\n validationErrorResponse,\n internalErrorResponse,\n internalErrorResponseStatic,\n KozoError,\n} from './errors.js';\nimport {\n fastWriteJson,\n fastWriteError,\n fastWrite400,\n fastWrite500,\n} from './fast-response.js';\n\ntype CompiledHandler = (c: Context) => Promise<Response> | Response;\ntype UserHandler = (c: any) => any;\n\nexport type NativeRouteHandler = (\n req: IncomingMessage,\n res: ServerResponse,\n params: Record<string, string>,\n) => void;\n\nexport type CompiledRoute = {\n validateBody?: ZValidator;\n validateQuery?: ZValidator;\n validateParams?: ZValidator;\n serialize?: (data: any) => string;\n};\n\nfunction isZodSchema(schema: any): schema is z.ZodType {\n return typeof schema === 'object' && schema !== null && 'safeParse' in schema;\n}\n\n// ============================================================================\n// Pre-allocated response init objects — frozen so V8 can constant-fold reads\n// ============================================================================\nconst HDR_JSON = { 'Content-Type': 'application/json' };\nconst RESPONSE_INIT_200 = Object.freeze({ status: 200, headers: HDR_JSON }) as ResponseInit;\n\n// Single reusable factory — avoids inline object literal allocation at call sites\nfunction jsonResponse200(body: string): Response {\n return new Response(body, RESPONSE_INIT_200);\n}\n\n// ============================================================================\n// Pre-built empty-body handler — captured once, never re-allocated\n// ============================================================================\nconst EMPTY_BODY: Record<string, never> = Object.freeze({}) as Record<string, never>;\nconst EMPTY_BODY_HANDLER = () => EMPTY_BODY;\n\n// ============================================================================\n// Fast serializer — skips JSON.stringify for plain strings\n// ============================================================================\nfunction toJsonBody(result: any): string {\n if (typeof result === 'string') return result;\n return JSON.stringify(result);\n}\n\nexport class SchemaCompiler {\n static compile(schema: RouteSchema): CompiledRoute {\n const compiled: CompiledRoute = {};\n\n // 1. Body — Zod-native validation (no Ajv, no eval)\n if (schema.body && isZodSchema(schema.body)) {\n compiled.validateBody = makeZValidator(schema.body);\n }\n\n // 2. Query\n if (schema.query && isZodSchema(schema.query)) {\n compiled.validateQuery = makeZValidator(schema.query);\n }\n\n // 3. Params\n if (schema.params && isZodSchema(schema.params)) {\n compiled.validateParams = makeZValidator(schema.params);\n }\n\n // 4. Serializer — JSON.stringify (no eval, no supply chain risk)\n if (schema.response) {\n compiled.serialize = JSON.stringify;\n }\n\n return compiled;\n }\n}\n\n// ============================================================================\n// LA CHIAVE DI VOLTA: Route Handler Compiler\n//\n// Executed ONCE at startup per route.\n// Builds a monomorphic closure that captures all validators/serializers.\n// Zero runtime branching — scenario selected at compile time.\n//\n// Scenario matrix (selected once at route registration):\n//\n// S1 bare no validation, no services\n// S1s services no validation, with services\n// S2a query query only, ±services\n// S2b params params only, ±services\n// S2c query+params both, ±services\n// S3 full+ser body + serializer, ±services\n// S4 full noser body, no serializer, ±services\n//\n// Each scenario further splits on hasServices → 2 monomorphic closures.\n// V8 JIT-compiles each independently with fixed hidden class and inline budget.\n//\n// Hot path micro-opts applied to every scenario:\n// • c.req.path extracted once before try (single getter call)\n// • toJsonBody() skips JSON.stringify for plain string returns\n// • internalErrorResponseStatic() used in bare paths (no err.message needed)\n// ============================================================================\nexport function compileRouteHandler(\n handler: UserHandler,\n schema: RouteSchema,\n services: Services,\n compiled: CompiledRoute,\n): CompiledHandler {\n const { validateBody, validateQuery, validateParams, serialize } = compiled;\n\n // Compile-time flags — captured in closure, never re-evaluated\n const hasServices = services != null && Object.keys(services).length > 0;\n const hasQuery = !!validateQuery;\n const hasParams = !!validateParams;\n const hasBody = !!validateBody;\n const hasSer = !!serialize;\n // handler.length === 0 → handler declares no params, skip { c } allocation entirely.\n // Safe: zero-arg handlers cannot reference context regardless.\n const handlerIgnoresArgs = handler.length === 0;\n\n // ─── SCENARIO 1: Zero validation, no services ──────────────────────────────\n // Sync-capable: no async/await — eliminates one microtask for sync handlers.\n // Promise-detect fallback covers async user handlers transparently.\n // Compile-time hasSer split: uses JSON.stringify when schema is present,\n // avoids runtime ternary on every request.\n if (!hasBody && !hasQuery && !hasParams && !hasServices) {\n if (hasSer) {\n const ser = serialize!;\n return function scenario1_bare_ser(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario1_bare(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 1b: Zero validation, WITH services ───────────────────────────\n if (!hasBody && !hasQuery && !hasParams && hasServices) {\n if (hasSer) {\n const ser = serialize!;\n return function scenario1_services_ser(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario1_services(c: Context) {\n try {\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 2a: Query only (no params, no body) ──────────────────────────\n // Sync-capable: validation is sync, handler call uses promise-detect.\n // Lazy path (c.req.path) accessed only on error branch.\n // Compile-time hasSer split: eliminates runtime ternary on every request.\n if (hasQuery && !hasParams && !hasBody) {\n const vq = validateQuery!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function scenario2a_query_ser(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2a_query_svc_ser(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n if (!hasServices) {\n return function scenario2a_query(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2a_query_svc(c: Context) {\n try {\n const query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 2b: Params only (no query, no body) ──────────────────────────\n if (hasParams && !hasQuery && !hasBody) {\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function scenario2b_params_ser(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2b_params_svc_ser(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n if (!hasServices) {\n return function scenario2b_params(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2b_params_svc(c: Context) {\n try {\n const params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 2c: Query + Params (no body) ─────────────────────────────────\n if (hasQuery && hasParams && !hasBody) {\n const vq = validateQuery!;\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function scenario2c_qp_ser(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2c_qp_svc_ser(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(ser(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n if (!hasServices) {\n return function scenario2c_qp(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n return function scenario2c_qp_svc(c: Context) {\n try {\n const query = c.req.query();\n const params = c.req.param() as Record<string, string>;\n if (!vq(query)) return validationErrorResponse('query', vq.errors, c.req.path);\n if (!vp(params)) return validationErrorResponse('params', vp.errors, c.req.path);\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ c, query, params, services });\n if (result instanceof Response) return result;\n if (result != null && typeof (result as any).then === 'function') {\n return (result as Promise<any>).then(\n (r: any) => r instanceof Response ? r : jsonResponse200(toJsonBody(r)),\n (err: unknown) => err instanceof KozoError\n ? err.toResponse(c.req.path)\n : internalErrorResponse(err as Error, c.req.path),\n );\n }\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(c.req.path);\n return internalErrorResponse(err as Error, c.req.path);\n }\n };\n }\n\n // ─── SCENARIO 3: Full path WITH serializer ─────────────────────────────────\n if (hasBody && hasSer) {\n const vb = validateBody!;\n const ser = serialize!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function scenario3_full_ser(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params });\n if (result instanceof Response) return result;\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n return async function scenario3_full_ser_svc(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params, services });\n if (result instanceof Response) return result;\n return jsonResponse200(ser(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n\n // ─── SCENARIO 4: Full path WITHOUT serializer ──────────────────────────────\n if (hasBody && !hasSer) {\n const vb = validateBody!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function scenario4_full_noser(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params });\n if (result instanceof Response) return result;\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n return async function scenario4_full_noser_svc(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const body = await c.req.json().catch(EMPTY_BODY_HANDLER);\n if (!vb(body)) return validationErrorResponse('body', vb.errors, path);\n let query: Record<string, string> | undefined;\n let params: Record<string, string> | undefined;\n if (vq) {\n query = c.req.query();\n if (!vq(query)) return validationErrorResponse('query', vq.errors, path);\n }\n if (vp) {\n params = c.req.param() as Record<string, string>;\n if (!vp(params)) return validationErrorResponse('params', vp.errors, path);\n }\n const result = await handler({ c, body, query, params, services });\n if (result instanceof Response) return result;\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n }\n\n // ─── SCENARIO 5: Fallback (should never be reached in practice) ────────────\n return async function scenario5_fallback(c: Context): Promise<Response> {\n const path = c.req.path;\n try {\n const result = await handler({ c, services: hasServices ? services : undefined });\n if (result instanceof Response) return result;\n return jsonResponse200(toJsonBody(result));\n } catch (err) {\n if (err instanceof KozoError) return err.toResponse(path);\n return internalErrorResponse(err as Error, path);\n }\n };\n}\n\n// ============================================================================\n// NATIVE NODE.JS HANDLER COMPILER\n//\n// Produces (req, res, params) => void handlers that write directly to the\n// Node.js ServerResponse socket — no Web API Request/Response allocation,\n// no @hono/node-server adapter overhead.\n//\n// Used by Kozo.nativeListen() for maximum throughput.\n// ============================================================================\n\n// ============================================================================\n// Native response helpers — delegated to fast-response.ts\n//\n// Key performance wins over the old inline helpers:\n// • Cork/uncork: entire HTTP response sent as a single TCP frame\n// • ASCII body length: body.length instead of Buffer.byteLength()\n// • Content-Length cache: pre-stringified values for sizes 0–9999\n// ============================================================================\n// fastWriteJson → fastWriteJson (imported from fast-response.ts)\n// fastWriteError → fastWriteError (imported from fast-response.ts)\n// fastWrite400 → fastWrite400 (imported from fast-response.ts)\n\nfunction parseNativeQuery(url: string): Record<string, string> {\n const qIdx = url.indexOf('?');\n if (qIdx === -1) return {};\n const sp = new URLSearchParams(url.slice(qIdx + 1));\n const result: Record<string, string> = {};\n sp.forEach((v, k) => { result[k] = v; });\n return result;\n}\n\nfunction readNativeBody(req: IncomingMessage): Promise<any> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n\n const onData = (chunk: Buffer) => chunks.push(chunk);\n const onEnd = () => {\n req.removeListener('data', onData);\n req.removeListener('end', onEnd);\n req.removeListener('error', onError);\n try {\n const str = Buffer.concat(chunks).toString('utf8');\n resolve(str ? JSON.parse(str) : {});\n } catch {\n resolve({});\n }\n };\n const onError = (err: Error) => {\n req.removeListener('data', onData);\n req.removeListener('end', onEnd);\n req.removeListener('error', onError);\n reject(err);\n };\n\n req.on('data', onData);\n req.on('end', onEnd);\n req.on('error', onError);\n });\n}\n\nexport function compileNativeHandler(\n handler: UserHandler,\n schema: RouteSchema,\n services: Services,\n compiled: CompiledRoute,\n): NativeRouteHandler {\n const { validateBody, validateQuery, validateParams, serialize } = compiled;\n\n const hasServices = services != null && Object.keys(services).length > 0;\n const hasQuery = !!validateQuery;\n const hasParams = !!validateParams;\n const hasBody = !!validateBody;\n const hasSer = !!serialize;\n const handlerIgnoresArgs = handler.length === 0;\n\n // ─── S1: no validation, no services ─────────────────────────────────────\n // Hot path: handlerIgnoresArgs=true + hasSer=true is the benchmark scenario.\n // Fully inline — no branching, no allocation beyond the serialized string.\n if (!hasBody && !hasQuery && !hasParams && !hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function native_s1_bare_ser_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_bare_ser(req, res, _p) {\n try {\n const result = handler({ req });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (handlerIgnoresArgs) {\n return function native_s1_bare_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_bare(req, res, _p) {\n try {\n const result = handler({ req });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S1b: no validation, WITH services ───────────────────────────────────\n if (!hasBody && !hasQuery && !hasParams && hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function native_s1_svc_ser_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_svc_ser(req, res, _p) {\n try {\n const result = handler({ req, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (handlerIgnoresArgs) {\n return function native_s1_svc_noargs(req, res, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s1_svc(req, res, _p) {\n try {\n const result = handler({ req, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S2a: query only (no params, no body) ────────────────────────────────\n if (hasQuery && !hasParams && !hasBody) {\n const vq = validateQuery!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function native_s2a_q_ser(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2a_q_svc_ser(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (!hasServices) {\n return function native_s2a_q(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2a_q_svc(req, res, _p) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S2b: params only (no query, no body) ────────────────────────────────\n if (hasParams && !hasQuery && !hasBody) {\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function native_s2b_p_ser(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2b_p_svc_ser(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (!hasServices) {\n return function native_s2b_p(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2b_p_svc(req, res, params) {\n try {\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S2c: query + params (no body) ───────────────────────────────────────\n if (hasQuery && hasParams && !hasBody) {\n const vq = validateQuery!;\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function native_s2c_qp_ser(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2c_qp_svc_ser(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, ser(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n if (!hasServices) {\n return function native_s2c_qp(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return function native_s2c_qp_svc(req, res, params) {\n try {\n const query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n if (!vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => fastWriteJson(res, toJsonBody(r)),\n (err: unknown) => fastWriteError(err, res),\n );\n return;\n }\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S3: body + serializer (async body read) ─────────────────────────────\n if (hasBody && hasSer) {\n const vb = validateBody!;\n const ser = serialize!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function native_s3_body_ser(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params });\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return async function native_s3_body_ser_svc(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params, services });\n fastWriteJson(res, ser(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── S4: body, no serializer ─────────────────────────────────────────────\n if (hasBody && !hasSer) {\n const vb = validateBody!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return async function native_s4_body_noser(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params });\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n return async function native_s4_body_noser_svc(req, res, params) {\n try {\n const body = await readNativeBody(req);\n if (!vb(body)) { fastWrite400('body', vb.errors, res); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(req.url ?? '/');\n if (!vq(query)) { fastWrite400('query', vq.errors, res); return; }\n }\n if (vp && !vp(params)) { fastWrite400('params', vp.errors, res); return; }\n const result = await handler({ req, body, query, params, services });\n fastWriteJson(res, toJsonBody(result));\n } catch (err) { fastWriteError(err, res); }\n };\n }\n\n // ─── Fallback ─────────────────────────────────────────────────────────────\n return function native_fallback(req, res, _p) {\n fastWriteError(new Error('Route scenario not implemented'), res);\n };\n}\n\n// ============================================================================\n// compileUwsNativeHandler — zero-shim uWS-native handler compiler\n//\n// Mirrors compileNativeHandler but generates UwsNativeHandler instead of\n// NativeRouteHandler. Key differences:\n// 1. Handler signature: (uwsRes, url, rawBody, params) — no shimReq/shimRes\n// 2. Body parsing: synchronous from pre-buffered rawBody (no await/queueMicrotask)\n// 3. Response writing: uwsFastWriteJson / uwsFastWrite400 / uwsFastWriteError\n// call uwsRes.cork() directly — one syscall per response, zero indirection\n// ============================================================================\nexport function compileUwsNativeHandler(\n handler: UserHandler,\n schema: RouteSchema,\n services: Services,\n compiled: CompiledRoute,\n): UwsNativeHandler {\n const { validateBody, validateQuery, validateParams, serialize } = compiled;\n\n const hasServices = services != null && Object.keys(services).length > 0;\n const hasQuery = !!validateQuery;\n const hasParams = !!validateParams;\n const hasBody = !!validateBody;\n const hasSer = !!serialize;\n const handlerIgnoresArgs = handler.length === 0;\n\n // ─── S1: no validation, no services ──────────────────────────────────────\n if (!hasBody && !hasQuery && !hasParams && !hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function uws_s1_bare_ser_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1_bare_ser(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url } });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (handlerIgnoresArgs) {\n return function uws_s1_bare_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1_bare(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url } });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S1b: no validation, WITH services ───────────────────────────────────\n if (!hasBody && !hasQuery && !hasParams && hasServices) {\n if (hasSer) {\n const ser = serialize!;\n if (handlerIgnoresArgs) {\n return function uws_s1b_svc_ser_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1b_svc_ser(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url }, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (handlerIgnoresArgs) {\n return function uws_s1b_svc_noargs(uwsRes, _url, _raw, _p) {\n try {\n const result = (handler as any)();\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s1b_svc(uwsRes, url, _raw, _p) {\n try {\n const result = handler({ req: { url }, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S2a: query only ─────────────────────────────────────────────────────\n if (hasQuery && !hasParams && !hasBody) {\n const vq = validateQuery!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function uws_s2a_q_ser(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2a_q_svc_ser(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (!hasServices) {\n return function uws_s2a_q(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2a_q_svc(uwsRes, url, _raw, _p) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S2b: params only ────────────────────────────────────────────────────\n if (hasParams && !hasQuery && !hasBody) {\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function uws_s2b_p_ser(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2b_p_svc_ser(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (!hasServices) {\n return function uws_s2b_p(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2b_p_svc(uwsRes, url, _raw, params) {\n try {\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S2c: query + params ─────────────────────────────────────────────────\n if (hasQuery && hasParams && !hasBody) {\n const vq = validateQuery!;\n const vp = validateParams!;\n if (hasSer) {\n const ser = serialize!;\n if (!hasServices) {\n return function uws_s2c_qp_ser(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2c_qp_svc_ser(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n if (!hasServices) {\n return function uws_s2c_qp(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s2c_qp_svc(uwsRes, url, _raw, params) {\n try {\n const query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n if (!vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handlerIgnoresArgs ? (handler as any)() : handler({ req: { url }, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S3: body + serializer — sync body parse (rawBody pre-buffered by uWS) ──\n if (hasBody && hasSer) {\n const vb = validateBody!;\n const ser = serialize!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return function uws_s3_body_ser(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result as any));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s3_body_ser_svc(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, ser(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, ser(result as any));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── S4: body, no serializer ─────────────────────────────────────────────\n if (hasBody && !hasSer) {\n const vb = validateBody!;\n const vq = validateQuery;\n const vp = validateParams;\n if (!hasServices) {\n return function uws_s4_body_noser(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n return function uws_s4_body_noser_svc(uwsRes, url, rawBody, params) {\n try {\n let body: any;\n try { body = rawBody ? JSON.parse(rawBody) : {}; } catch { body = {}; }\n if (!vb(body)) { uwsFastWrite400('body', vb.errors, uwsRes); return; }\n let query: Record<string, string> | undefined;\n if (vq) {\n query = parseNativeQuery(url);\n if (!vq(query)) { uwsFastWrite400('query', vq.errors, uwsRes); return; }\n }\n if (vp && !vp(params)) { uwsFastWrite400('params', vp.errors, uwsRes); return; }\n const result = handler({ req: { url }, body, query, params, services });\n if (result != null && typeof (result as any).then === 'function') {\n (result as Promise<any>).then(\n (r: any) => uwsFastWriteJson(uwsRes, toJsonBody(r)),\n (err: unknown) => uwsFastWriteError(err, uwsRes),\n );\n return;\n }\n uwsFastWriteJson(uwsRes, toJsonBody(result));\n } catch (err) { uwsFastWriteError(err, uwsRes); }\n };\n }\n\n // ─── Fallback ─────────────────────────────────────────────────────────────\n return function uws_fallback(uwsRes, _url, _raw, _p) {\n uwsFastWriteError(new Error('Route scenario not implemented'), uwsRes);\n };\n}\n","// ============================================\n// GRACEFUL SHUTDOWN INFRASTRUCTURE\n// ============================================\n\nimport type { Server } from 'node:http';\n\n// Local type definitions to avoid cross-package dependency\ntype DatabaseProvider = 'postgresql' | 'mysql' | 'sqlite';\ntype DatabaseInstance = Record<string, unknown>;\n\n/**\n * Shutdown configuration options\n */\nexport interface ShutdownOptions {\n /** Maximum time to wait for in-flight requests to complete (default: 30000ms) */\n timeoutMs?: number;\n /** Callback fired when shutdown starts */\n onShutdownStart?: (inflightCount: number) => void;\n /** Callback fired when all requests complete before timeout */\n onShutdownComplete?: () => void;\n /** Callback fired when shutdown times out */\n onShutdownTimeout?: (remainingInflight: number) => void;\n /** Database instance to close (optional) */\n database?: DatabaseInstance;\n /** Database provider type (required if database is provided) */\n databaseProvider?: DatabaseProvider;\n}\n\n/**\n * Internal state for tracking in-flight requests\n */\nexport interface InflightTracker {\n count: number;\n requests: Set<Promise<unknown>>;\n}\n\n/**\n * Create an in-flight request tracker\n */\nexport function createInflightTracker(): InflightTracker {\n return {\n count: 0,\n requests: new Set(),\n };\n}\n\n/**\n * Track a request - call at the start of each request\n */\nexport function trackRequest(tracker: InflightTracker): () => void {\n tracker.count++;\n let resolvePromise: () => void;\n const promise = new Promise<void>((resolve) => {\n resolvePromise = resolve;\n });\n tracker.requests.add(promise);\n \n // Return untrack function to call when request completes\n return () => {\n tracker.count--;\n tracker.requests.delete(promise);\n resolvePromise();\n };\n}\n\n/**\n * Shutdown state machine\n */\nexport type ShutdownState = 'running' | 'shutting-down' | 'shutdown';\n\n/**\n * Graceful shutdown manager\n */\nexport class ShutdownManager {\n private state: ShutdownState = 'running';\n private abortController: AbortController | null = null;\n private server: Server | null = null;\n private tracker: InflightTracker;\n private database: DatabaseInstance | null = null;\n private databaseProvider: DatabaseProvider | null = null;\n\n constructor() {\n this.tracker = createInflightTracker();\n }\n\n /**\n * Get current shutdown state\n */\n getState(): ShutdownState {\n return this.state;\n }\n\n /**\n * Check if server is shutting down\n */\n isShuttingDown(): boolean {\n return this.state !== 'running';\n }\n\n /**\n * Get current in-flight request count\n */\n getInflightCount(): number {\n return this.tracker.count;\n }\n\n /**\n * Set the server instance for shutdown\n */\n setServer(server: Server): void {\n this.server = server;\n }\n\n /**\n * Set database for cleanup\n */\n setDatabase(db: DatabaseInstance, provider: DatabaseProvider): void {\n this.database = db;\n this.databaseProvider = provider;\n }\n\n /**\n * Get the AbortController signal for request cancellation\n */\n getAbortSignal(): AbortSignal | undefined {\n return this.abortController?.signal;\n }\n\n /**\n * Create a request tracker middleware\n * Returns an untrack function to call when request completes\n */\n trackRequest(): () => void {\n return trackRequest(this.tracker);\n }\n\n /**\n * Initiate graceful shutdown\n */\n async shutdown(options: ShutdownOptions = {}): Promise<void> {\n const {\n timeoutMs = 30000,\n onShutdownStart,\n onShutdownComplete,\n onShutdownTimeout,\n } = options;\n\n // Handle already-shutdown state\n if (this.state === 'shutdown') {\n console.warn('[Kozo] Shutdown already completed');\n return;\n }\n\n // Handle in-progress shutdown\n if (this.state === 'shutting-down') {\n console.warn('[Kozo] Shutdown already in progress');\n return;\n }\n\n this.state = 'shutting-down';\n\n // Create AbortController to signal all handlers\n this.abortController = new AbortController();\n this.abortController.abort();\n\n const inflightCount = this.tracker.count;\n onShutdownStart?.(inflightCount);\n\n if (inflightCount > 0) {\n console.log(`[Kozo] Graceful shutdown: waiting for ${inflightCount} in-flight requests`);\n }\n\n // Stop accepting new connections\n if (this.server) {\n this.server.close(() => {\n console.log('[Kozo] HTTP server closed');\n });\n }\n\n // Wait for in-flight requests with timeout\n const drainPromise = this.drainRequests();\n const timeoutPromise = new Promise<void>((resolve) => {\n setTimeout(() => {\n onShutdownTimeout?.(this.tracker.count);\n resolve();\n }, timeoutMs);\n });\n\n await Promise.race([drainPromise, timeoutPromise]);\n\n // Close database connections\n await this.closeDatabase();\n\n this.state = 'shutdown';\n onShutdownComplete?.();\n console.log('[Kozo] Graceful shutdown complete');\n }\n\n /**\n * Wait for all in-flight requests to complete\n */\n private async drainRequests(): Promise<void> {\n if (this.tracker.requests.size === 0) {\n return;\n }\n await Promise.all([...this.tracker.requests]);\n }\n\n /**\n * Close database connections based on provider\n */\n private async closeDatabase(): Promise<void> {\n if (!this.database || !this.databaseProvider) {\n return;\n }\n\n try {\n switch (this.databaseProvider) {\n case 'postgresql': {\n // postgres.js client has end() method\n const client = (this.database as any).$client;\n if (client && typeof client.end === 'function') {\n await client.end();\n console.log('[Kozo] PostgreSQL connection closed');\n }\n break;\n }\n case 'mysql': {\n // mysql2 connection has end() method\n const client = (this.database as any).$client;\n if (client && typeof client.end === 'function') {\n await client.end();\n console.log('[Kozo] MySQL connection closed');\n }\n break;\n }\n case 'sqlite': {\n // better-sqlite3 has close() method (synchronous)\n const client = (this.database as any).$client;\n if (client && typeof client.close === 'function') {\n client.close();\n console.log('[Kozo] SQLite connection closed');\n }\n break;\n }\n }\n } catch (err) {\n console.error('[Kozo] Error closing database connection:', err);\n }\n }\n}\n\n/**\n * Create a shutdown manager instance\n */\nexport function createShutdownManager(): ShutdownManager {\n return new ShutdownManager();\n}\n","import { readdir } from 'node:fs/promises';\r\nimport { join } from 'node:path';\r\nimport { pathToFileURL } from 'node:url';\r\nimport type { RouteDefinition, RouteModule, HttpMethod } from './types.js';\r\nimport { fileToPath, isRouteFile } from './utils/file-to-path.js';\r\n\r\n/** Recursively list *.ts and *.js files, skipping underscore/test/spec files */\r\nasync function scanFiles(dir: string, base = ''): Promise<string[]> {\r\n const results: string[] = [];\r\n const entries = await readdir(dir, { withFileTypes: true });\r\n for (const e of entries) {\r\n const rel = base ? `${base}/${e.name}` : e.name;\r\n if (e.isDirectory()) {\r\n results.push(...await scanFiles(join(dir, e.name), rel));\r\n } else if (/\\.(ts|js)$/.test(e.name) &&\r\n !e.name.startsWith('_') &&\r\n !e.name.endsWith('.test.ts') && !e.name.endsWith('.test.js') &&\r\n !e.name.endsWith('.spec.ts') && !e.name.endsWith('.spec.js')) {\r\n results.push(rel);\r\n }\r\n }\r\n return results;\r\n}\r\n\r\nexport interface ScanOptions {\r\n routesDir: string;\r\n verbose?: boolean;\r\n}\r\n\r\n/**\r\n * Scan routes directory and return route definitions\r\n */\r\nexport async function scanRoutes(options: ScanOptions): Promise<RouteDefinition[]> {\r\n const { routesDir, verbose = true } = options;\r\n const routes: RouteDefinition[] = [];\r\n\r\n if (verbose) {\r\n console.log(`\\n🔍 Scanning routes in: ${routesDir}\\n`);\r\n }\r\n\r\n // Find all .ts and .js files\r\n const files = await scanFiles(routesDir);\r\n\r\n for (const file of files) {\r\n if (!isRouteFile(file)) continue;\r\n\r\n const parsed = fileToPath(file);\r\n if (!parsed) continue;\r\n\r\n const fullPath = join(routesDir, file);\r\n \r\n try {\r\n // Dynamic import\r\n const fileUrl = pathToFileURL(fullPath).href;\r\n const module = await import(fileUrl) as RouteModule;\r\n\r\n // Validate module has default export\r\n if (typeof module.default !== 'function') {\r\n console.warn(`⚠️ Skipping ${file}: no default export function`);\r\n continue;\r\n }\r\n\r\n routes.push({\r\n path: parsed.path,\r\n method: parsed.method,\r\n filePath: fullPath,\r\n module\r\n });\r\n\r\n if (verbose) {\r\n const methodLabel = parsed.method.toUpperCase().padEnd(6);\r\n console.log(` ${methodLabel} ${parsed.path}`);\r\n }\r\n } catch (err) {\r\n console.error(`❌ Failed to load route: ${file}`);\r\n console.error(err);\r\n }\r\n }\r\n\r\n if (verbose) {\r\n console.log(`\\n✅ Loaded ${routes.length} routes\\n`);\r\n }\r\n\r\n // Sort routes: static paths before dynamic, longer paths first\r\n routes.sort((a, b) => {\r\n const aScore = routeScore(a.path);\r\n const bScore = routeScore(b.path);\r\n return bScore - aScore;\r\n });\r\n\r\n return routes;\r\n}\r\n\r\n/**\r\n * Score a route for sorting (higher = more priority)\r\n * Static paths get higher scores than dynamic ones\r\n */\r\nfunction routeScore(path: string): number {\r\n const segments = path.split('/').filter(Boolean);\r\n let score = segments.length * 10;\r\n\r\n for (const segment of segments) {\r\n if (segment === '*') {\r\n score -= 100; // Catch-all has lowest priority\r\n } else if (segment.startsWith(':')) {\r\n score -= 5; // Dynamic params have lower priority\r\n } else {\r\n score += 1; // Static segments increase priority\r\n }\r\n }\r\n\r\n return score;\r\n}\r\n\r\nexport { fileToPath, isRouteFile };\r\n","import { parse } from 'node:path';\r\n\r\n// HTTP methods that can be used as filenames\r\nconst HTTP_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const;\r\ntype HttpMethod = (typeof HTTP_METHODS)[number];\r\n\r\nexport interface ParsedRoute {\r\n path: string;\r\n method: HttpMethod;\r\n}\r\n\r\n/**\r\n * Convert file path to URL path and HTTP method\r\n * \r\n * Examples:\r\n * users/index.ts → GET /users\r\n * users/get.ts → GET /users\r\n * users/post.ts → POST /users\r\n * users/[id].ts → GET /users/:id\r\n * users/[id]/get.ts → GET /users/:id\r\n * users/[id]/patch.ts → PATCH /users/:id\r\n * users/[id?].ts → GET /users/:id? (optional param)\r\n * posts/[...slug].ts → GET /posts/* (catch-all)\r\n * health.ts → GET /health\r\n * [id?]/posts/[postId?].ts → GET /:id?/posts/:postId?\r\n */\r\nexport function fileToPath(filePath: string): ParsedRoute | null {\r\n // Normalize path separators\r\n const normalized = filePath.replace(/\\\\/g, '/');\r\n const parsed = parse(normalized);\r\n \r\n // Get filename without extension\r\n const filename = parsed.name.toLowerCase();\r\n \r\n // Determine HTTP method\r\n let method: HttpMethod = 'get';\r\n let includeName = true;\r\n \r\n if (HTTP_METHODS.includes(filename as HttpMethod)) {\r\n method = filename as HttpMethod;\r\n includeName = false;\r\n } else if (filename === 'index') {\r\n includeName = false;\r\n }\r\n \r\n // Build path from directory + optional filename\r\n let segments = parsed.dir ? parsed.dir.split('/').filter(Boolean) : [];\r\n \r\n if (includeName) {\r\n segments.push(parsed.name);\r\n }\r\n \r\n // Convert path segments\r\n const urlSegments = segments.map(segment => {\r\n // Catch-all: [...slug] → *\r\n if (segment.startsWith('[...') && segment.endsWith(']')) {\r\n return '*';\r\n }\r\n // Optional dynamic param: [id?] → :id?\r\n if (segment.startsWith('[') && segment.endsWith('?]')) {\r\n return ':' + segment.slice(1, -2) + '?';\r\n }\r\n // Dynamic param: [id] → :id\r\n if (segment.startsWith('[') && segment.endsWith(']')) {\r\n return ':' + segment.slice(1, -1);\r\n }\r\n return segment;\r\n });\r\n \r\n // Build final path\r\n let path = '/' + urlSegments.join('/');\r\n \r\n // Clean up\r\n path = path.replace(/\\/+/g, '/');\r\n if (path.length > 1 && path.endsWith('/')) {\r\n path = path.slice(0, -1);\r\n }\r\n \r\n return { path, method };\r\n}\r\n\r\n/**\r\n * Check if a file should be treated as a route\r\n */\r\nexport function isRouteFile(filename: string): boolean {\r\n // Skip files/directories where any segment starts with _\r\n const segments = filename.replace(/\\\\/g, '/').split('/');\r\n if (segments.some(s => s.startsWith('_'))) return false;\r\n \r\n // Skip test files\r\n if (filename.includes('.test.') || filename.includes('.spec.')) return false;\r\n \r\n // Must be .ts or .js\r\n return filename.endsWith('.ts') || filename.endsWith('.js');\r\n}\r\n","// ============================================================================\n// Kozo NativeContext — Runtime implementation of NativeKozoContext\n// ============================================================================\n//\n// This module provides the `buildNativeContext()` factory that creates the\n// typed context object passed to `NativeKozoHandler` functions.\n//\n// The context wraps Node.js IncomingMessage / ServerResponse and adds:\n// • Lazy query/headers parsing (only on first access)\n// • Type-safe params, body, query from schema\n// • Response helpers: json(), text(), html(), redirect(), header()\n// • Cork/uncork socket batching via fast-response.ts utilities\n//\n// V8 Hidden Class: all properties are declared upfront in the object literal,\n// even if initially undefined. This prevents shape transitions that would\n// deoptimize property access.\n// ============================================================================\n\nimport type { IncomingMessage, ServerResponse } from 'node:http';\nimport type { Services, RouteSchema, NativeKozoContext } from './types.js';\nimport { fastWriteJson, fastWriteText, fastWriteHtml, fastWriteJsonStatus, fastCL } from './fast-response.js';\n\n/**\n * Build a NativeKozoContext for a native route handler.\n *\n * Called by the native handler compiler (`compiler.ts`) when the route\n * is registered via `nativeRoute()`. Not intended for direct use.\n *\n * @internal\n */\nexport function buildNativeContext<S extends RouteSchema, TSvc extends Services>(\n req: IncomingMessage,\n res: ServerResponse,\n params: Record<string, string>,\n body: any,\n services: TSvc,\n serialize?: (data: any) => string,\n): NativeKozoContext<S, TSvc> {\n // Lazy-parsed query cache\n let _query: Record<string, string> | undefined;\n // Extra headers set via ctx.header()\n let _extraHeaders: [string, string][] | undefined;\n\n const ctx: NativeKozoContext<S, TSvc> = {\n req,\n res,\n params: params as any,\n body: body as any,\n services,\n\n get query(): any {\n if (_query === undefined) {\n const url = req.url ?? '/';\n const qIdx = url.indexOf('?');\n if (qIdx === -1) {\n _query = {};\n } else {\n const sp = new URLSearchParams(url.slice(qIdx + 1));\n _query = {};\n sp.forEach((v, k) => { _query![k] = v; });\n }\n }\n return _query;\n },\n\n json(data: any, status?: number): void {\n const jsonBody = serialize ? serialize(data) : JSON.stringify(data);\n if (_extraHeaders) {\n const hdrs: string[] = ['Content-Type', 'application/json', 'Content-Length', fastCL(jsonBody.length)];\n for (const [k, v] of _extraHeaders) hdrs.push(k, v);\n res.writeHead(status ?? 200, hdrs);\n res.end(jsonBody);\n } else if (status !== undefined && status !== 200) {\n fastWriteJsonStatus(res, jsonBody, status);\n } else {\n fastWriteJson(res, jsonBody);\n }\n },\n\n text(data: string, status?: number): void {\n fastWriteText(res, data, status ?? 200);\n },\n\n html(data: string, status?: number): void {\n fastWriteHtml(res, data, status ?? 200);\n },\n\n header(name: string, value: string) {\n if (!_extraHeaders) _extraHeaders = [];\n _extraHeaders.push([name, value]);\n return ctx;\n },\n\n redirect(url: string, status?: number): void {\n const code = status ?? 302;\n res.writeHead(code, ['Location', url, 'Content-Length', '0']);\n res.end();\n },\n };\n\n return ctx;\n}\n","// ============================================\r\n// KOZO V2 - High-Performance Framework\r\n// ============================================\r\n\r\n// Main exports\r\nexport { Kozo, createKozo } from './app.js';\r\nexport type { Plugin } from './app.js';\r\nexport type { KozoConfig } from './types.js';\r\n\r\n// Types\r\nexport type {\r\n Services,\r\n RouteSchema,\r\n KozoContext,\r\n KozoHandler,\r\n KozoEnv,\r\n NativeKozoContext,\r\n NativeKozoHandler,\r\n InferSchema,\r\n InferResponse,\r\n} from './types.js';\r\n\r\n// Client SDK Generation\r\nexport { generateTypedClient } from './client-generator.js';\r\nexport type {\r\n ClientGeneratorOptions,\r\n RouteInfo\r\n} from './client-generator.js';\r\n\r\n// Advanced: Route Compilation (La Chiave di Volta)\r\nexport { SchemaCompiler, compileRouteHandler } from './compiler.js';\r\nexport type { CompiledRoute } from './compiler.js';\r\n\r\n// Native context builder (for power-user native handlers)\r\nexport { buildNativeContext } from './native-context.js';\r\n\r\n// Fast response utilities (for custom native middleware / handlers)\r\nexport {\r\n fastWriteJson,\r\n fastWriteText,\r\n fastWriteHtml,\r\n fastWriteJsonStatus,\r\n fastWrite404,\r\n fastWrite500,\r\n fastWrite400,\r\n fastWriteError,\r\n fastCL,\r\n} from './fast-response.js';\r\n\r\n// Error System (RFC 7807 Problem Details)\r\nexport {\r\n KozoError,\r\n ValidationFailedError,\r\n NotFoundError,\r\n UnauthorizedError,\r\n ForbiddenError,\r\n validationErrorResponse,\r\n internalErrorResponse,\r\n notFoundResponse,\r\n unauthorizedResponse,\r\n forbiddenResponse,\r\n formatAjvErrors,\r\n formatZodErrors,\r\n ERROR_RESPONSES,\r\n} from './errors.js';\r\nexport type {\r\n ValidationError,\r\n ProblemDetails,\r\n} from './errors.js';\r\n\r\n// Re-export Zod for convenience\r\nexport { z } from 'zod';\r\n\r\n// Graceful Shutdown\r\nexport {\r\n ShutdownManager,\r\n createShutdownManager,\r\n createInflightTracker,\r\n trackRequest,\r\n} from './shutdown.js';\r\nexport type { ShutdownOptions, ShutdownState, InflightTracker } from './shutdown.js';\r\n\r\n// OpenAPI Generation\r\nexport {\r\n OpenAPIGenerator,\r\n createOpenAPIGenerator,\r\n generateSwaggerHtml,\r\n} from './openapi.js';\r\nexport type {\r\n OpenAPIConfig,\r\n OpenAPIInfo,\r\n OpenAPISpec,\r\n} from './openapi.js';\r\n\r\n// Middleware\r\nexport * from './middleware/index.js';\r\n","import type { RouteDefinition, RouteSchema, RouteMeta, HttpMethod } from './types.js';\r\nimport type { z } from 'zod';\r\nimport { zodToJsonSchema as _zodToJsonSchema } from 'zod-to-json-schema';\r\n\r\n// ============================================\r\n// OPENAPI TYPES\r\n// ============================================\r\n\r\nexport interface OpenAPIInfo {\r\n title: string;\r\n version: string;\r\n description?: string;\r\n contact?: {\r\n name?: string;\r\n url?: string;\r\n email?: string;\r\n };\r\n license?: {\r\n name: string;\r\n url?: string;\r\n };\r\n}\r\n\r\nexport interface OpenAPIConfig {\r\n info: OpenAPIInfo;\r\n servers?: Array<{ url: string; description?: string }>;\r\n tags?: Array<{ name: string; description?: string }>;\r\n security?: Array<Record<string, string[]>>;\r\n}\r\n\r\nexport interface OpenAPISpec {\r\n openapi: '3.1.0';\r\n info: OpenAPIInfo;\r\n servers?: Array<{ url: string; description?: string }>;\r\n tags?: Array<{ name: string; description?: string }>;\r\n paths: Record<string, PathItem>;\r\n components: {\r\n schemas: Record<string, SchemaObject>;\r\n securitySchemes?: Record<string, SecurityScheme>;\r\n };\r\n security?: Array<Record<string, string[]>>;\r\n}\r\n\r\ninterface PathItem {\r\n [method: string]: OperationObject;\r\n}\r\n\r\ninterface OperationObject {\r\n operationId?: string;\r\n summary?: string;\r\n description?: string;\r\n tags?: string[];\r\n parameters?: ParameterObject[];\r\n requestBody?: RequestBodyObject;\r\n responses: Record<string, ResponseObject>;\r\n security?: Array<Record<string, string[]>>;\r\n}\r\n\r\ninterface ParameterObject {\r\n name: string;\r\n in: 'query' | 'path' | 'header' | 'cookie';\r\n required?: boolean;\r\n schema: SchemaObject;\r\n description?: string;\r\n}\r\n\r\ninterface RequestBodyObject {\r\n required?: boolean;\r\n content: {\r\n 'application/json': {\r\n schema: SchemaObject;\r\n };\r\n };\r\n}\r\n\r\ninterface ResponseObject {\r\n description: string;\r\n content?: {\r\n 'application/json': {\r\n schema: SchemaObject;\r\n };\r\n };\r\n}\r\n\r\ninterface SchemaObject {\r\n type?: string;\r\n format?: string;\r\n properties?: Record<string, SchemaObject>;\r\n items?: SchemaObject;\r\n required?: string[];\r\n enum?: unknown[];\r\n minimum?: number;\r\n maximum?: number;\r\n minLength?: number;\r\n maxLength?: number;\r\n pattern?: string;\r\n description?: string;\r\n default?: unknown;\r\n nullable?: boolean;\r\n oneOf?: SchemaObject[];\r\n anyOf?: SchemaObject[];\r\n allOf?: SchemaObject[];\r\n additionalProperties?: SchemaObject | boolean;\r\n $ref?: string;\r\n}\r\n\r\ninterface SecurityScheme {\r\n type: 'apiKey' | 'http' | 'oauth2' | 'openIdConnect';\r\n scheme?: string;\r\n bearerFormat?: string;\r\n name?: string;\r\n in?: 'query' | 'header' | 'cookie';\r\n}\r\n\r\n// ============================================\r\n// ZOD TO JSON SCHEMA CONVERTER\r\n// Uses zod-to-json-schema which supports Zod v3 and v4\r\n// ============================================\r\n\r\nfunction zodToJsonSchema(zodSchema: z.ZodType): SchemaObject {\r\n return _zodToJsonSchema(zodSchema as any, { $refStrategy: 'none' }) as SchemaObject;\r\n}\r\n\r\n// ============================================\r\n// OPENAPI GENERATOR\r\n// ============================================\r\n\r\nexport class OpenAPIGenerator {\r\n private config: OpenAPIConfig;\r\n private schemas: Map<string, SchemaObject> = new Map();\r\n private schemaCounter = 0;\r\n\r\n constructor(config: OpenAPIConfig) {\r\n this.config = config;\r\n }\r\n\r\n /**\r\n * Generate OpenAPI spec from routes\r\n */\r\n generate(routes: RouteDefinition[]): OpenAPISpec {\r\n const paths: Record<string, PathItem> = {};\r\n\r\n for (const route of routes) {\r\n const openApiPath = this.honoPathToOpenApi(route.path);\r\n \r\n if (!paths[openApiPath]) {\r\n paths[openApiPath] = {};\r\n }\r\n\r\n paths[openApiPath][route.method] = this.routeToOperation(route);\r\n }\r\n\r\n return {\r\n openapi: '3.1.0',\r\n info: this.config.info,\r\n servers: this.config.servers,\r\n tags: this.config.tags,\r\n paths,\r\n components: {\r\n schemas: Object.fromEntries(this.schemas),\r\n securitySchemes: {\r\n bearerAuth: {\r\n type: 'http',\r\n scheme: 'bearer',\r\n bearerFormat: 'JWT'\r\n }\r\n }\r\n },\r\n security: this.config.security\r\n };\r\n }\r\n\r\n /**\r\n * Convert Hono path params to OpenAPI format\r\n * :id -> {id}\r\n */\r\n private honoPathToOpenApi(path: string): string {\r\n return path.replace(/:([^/]+)/g, '{$1}');\r\n }\r\n\r\n /**\r\n * Convert route to OpenAPI operation\r\n */\r\n private routeToOperation(route: RouteDefinition): OperationObject {\r\n const { path, method, module } = route;\r\n const { schema, meta } = module;\r\n\r\n const operation: OperationObject = {\r\n operationId: this.generateOperationId(path, method),\r\n summary: meta?.summary || `${method.toUpperCase()} ${path}`,\r\n description: meta?.description,\r\n tags: meta?.tags || [this.extractTag(path)],\r\n parameters: [],\r\n responses: {\r\n '200': {\r\n description: 'Successful response',\r\n content: {\r\n 'application/json': {\r\n schema: { type: 'object' }\r\n }\r\n }\r\n },\r\n '400': {\r\n description: 'Validation error'\r\n },\r\n '500': {\r\n description: 'Internal server error'\r\n }\r\n }\r\n };\r\n\r\n // Add path parameters\r\n const pathParams = path.match(/:([^/]+)/g);\r\n if (pathParams) {\r\n for (const param of pathParams) {\r\n const paramName = param.slice(1); // Remove :\r\n operation.parameters!.push({\r\n name: paramName,\r\n in: 'path',\r\n required: true,\r\n schema: { type: 'string' }\r\n });\r\n }\r\n }\r\n\r\n // Add query parameters from schema\r\n if (schema?.query) {\r\n const querySchema = zodToJsonSchema(schema.query as z.ZodType);\r\n if (querySchema.properties) {\r\n for (const [name, propSchema] of Object.entries(querySchema.properties)) {\r\n operation.parameters!.push({\r\n name,\r\n in: 'query',\r\n required: querySchema.required?.includes(name) || false,\r\n schema: propSchema as SchemaObject\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Add params schema override\r\n if (schema?.params) {\r\n const paramsSchema = zodToJsonSchema(schema.params as z.ZodType);\r\n if (paramsSchema.properties) {\r\n for (const [name, propSchema] of Object.entries(paramsSchema.properties)) {\r\n // Find and update existing param\r\n const existingIdx = operation.parameters!.findIndex(\r\n p => p.name === name && p.in === 'path'\r\n );\r\n if (existingIdx >= 0) {\r\n operation.parameters![existingIdx].schema = propSchema as SchemaObject;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Add request body for POST/PUT/PATCH\r\n if (['post', 'put', 'patch'].includes(method) && schema?.body) {\r\n operation.requestBody = {\r\n required: true,\r\n content: {\r\n 'application/json': {\r\n schema: zodToJsonSchema(schema.body as z.ZodType)\r\n }\r\n }\r\n };\r\n }\r\n\r\n // Add response schemas\r\n if (schema?.response) {\r\n for (const [status, responseSchema] of Object.entries(schema.response)) {\r\n operation.responses[status] = {\r\n description: this.getStatusDescription(parseInt(status)),\r\n content: {\r\n 'application/json': {\r\n schema: zodToJsonSchema(responseSchema as z.ZodType)\r\n }\r\n }\r\n };\r\n }\r\n }\r\n\r\n // Add auth requirement\r\n if (meta?.auth) {\r\n operation.security = [{ bearerAuth: [] }];\r\n }\r\n\r\n return operation;\r\n }\r\n\r\n /**\r\n * Generate operation ID from path and method\r\n */\r\n private generateOperationId(path: string, method: HttpMethod): string {\r\n const parts = path\r\n .split('/')\r\n .filter(Boolean)\r\n .map(part => {\r\n if (part.startsWith(':')) {\r\n return 'By' + this.capitalize(part.slice(1));\r\n }\r\n return this.capitalize(part);\r\n });\r\n\r\n return method + parts.join('');\r\n }\r\n\r\n /**\r\n * Extract tag from path (first segment)\r\n */\r\n private extractTag(path: string): string {\r\n const firstSegment = path.split('/').filter(Boolean)[0];\r\n return firstSegment ? this.capitalize(firstSegment) : 'Default';\r\n }\r\n\r\n /**\r\n * Get HTTP status description\r\n */\r\n private getStatusDescription(status: number): string {\r\n const descriptions: Record<number, string> = {\r\n 200: 'OK',\r\n 201: 'Created',\r\n 204: 'No Content',\r\n 400: 'Bad Request',\r\n 401: 'Unauthorized',\r\n 403: 'Forbidden',\r\n 404: 'Not Found',\r\n 500: 'Internal Server Error'\r\n };\r\n return descriptions[status] || 'Response';\r\n }\r\n\r\n private capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n}\r\n\r\n// ============================================\r\n// SWAGGER UI HTML\r\n// ============================================\r\n\r\nexport function generateSwaggerHtml(specUrl: string, title: string = 'API Documentation'): string {\r\n return `<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"utf-8\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\r\n <title>${title}</title>\r\n <link rel=\"stylesheet\" href=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css\" />\r\n <style>\r\n body { margin: 0; padding: 0; }\r\n .swagger-ui .topbar { display: none; }\r\n </style>\r\n</head>\r\n<body>\r\n <div id=\"swagger-ui\"></div>\r\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js\" crossorigin></script>\r\n <script>\r\n window.onload = () => {\r\n window.ui = SwaggerUIBundle({\r\n url: '${specUrl}',\r\n dom_id: '#swagger-ui',\r\n deepLinking: true,\r\n presets: [\r\n SwaggerUIBundle.presets.apis,\r\n SwaggerUIBundle.SwaggerUIStandalonePreset\r\n ],\r\n layout: \"BaseLayout\",\r\n persistAuthorization: true\r\n });\r\n };\r\n </script>\r\n</body>\r\n</html>`;\r\n}\r\n\r\n// ============================================\r\n// FACTORY FUNCTION\r\n// ============================================\r\n\r\nexport function createOpenAPIGenerator(config: OpenAPIConfig): OpenAPIGenerator {\r\n return new OpenAPIGenerator(config);\r\n}\r\n","import type { Context, Next } from 'hono';\r\n\r\nexport interface LoggerOptions {\r\n prefix?: string;\r\n colorize?: boolean;\r\n}\r\n\r\n/**\r\n * Request logger middleware\r\n */\r\nexport function logger(options: LoggerOptions = {}) {\r\n const { prefix = '🌐', colorize = true } = options;\r\n\r\n return async (c: Context, next: Next) => {\r\n const start = Date.now();\r\n const method = c.req.method;\r\n const path = new URL(c.req.url).pathname;\r\n\r\n await next();\r\n\r\n const duration = Date.now() - start;\r\n const status = c.res.status;\r\n\r\n const statusColor = status >= 500 ? '🔴' : status >= 400 ? '🟡' : '🟢';\r\n const log = `${prefix} ${method.padEnd(6)} ${path} ${statusColor} ${status} ${duration}ms`;\r\n \r\n console.log(log);\r\n };\r\n}\r\n","import { cors as honoCors } from 'hono/cors';\r\n\r\nexport interface CorsOptions {\r\n origin?: string | string[] | ((origin: string) => string | undefined | null);\r\n allowMethods?: string[];\r\n allowHeaders?: string[];\r\n exposeHeaders?: string[];\r\n maxAge?: number;\r\n credentials?: boolean;\r\n}\r\n\r\n/**\r\n * CORS middleware wrapper\r\n */\r\nexport function cors(options: CorsOptions = {}) {\r\n return honoCors({\r\n origin: options.origin || '*',\r\n allowMethods: options.allowMethods || ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],\r\n allowHeaders: options.allowHeaders || ['Content-Type', 'Authorization'],\r\n exposeHeaders: options.exposeHeaders || [],\r\n maxAge: options.maxAge || 86400,\r\n credentials: options.credentials || false\r\n });\r\n}\r\n","import type { Context, Next } from 'hono';\n\nexport interface RateLimitOptions {\n max: number;\n window: number; // in seconds\n keyGenerator?: (c: Context) => string;\n message?: string;\n}\n\n// In-memory store (use Redis in production)\nconst store = new Map<string, { count: number; resetAt: number }>();\n\n/**\n * Simple rate limiting middleware\n * For production, replace in-memory store with Redis\n */\nexport function rateLimit(options: RateLimitOptions) {\n const {\n max = 100,\n window = 60,\n keyGenerator = (c: Context) =>\n c.req.header('x-forwarded-for') ?? c.req.header('x-real-ip') ?? 'anonymous',\n message = 'Too many requests',\n } = options;\n\n return async (c: Context, next: Next) => {\n const key = keyGenerator(c);\n const now = Date.now();\n const windowMs = window * 1000;\n\n let record = store.get(key);\n\n if (!record || now > record.resetAt) {\n // Evict expired entries when the store grows too large to prevent unbounded memory growth\n if (store.size > 10_000) {\n for (const [k, v] of store) {\n if (now > v.resetAt) store.delete(k);\n }\n }\n record = { count: 0, resetAt: now + windowMs };\n }\n\n record.count++;\n store.set(key, record);\n\n // Set rate limit headers\n c.header('X-RateLimit-Limit', String(max));\n c.header('X-RateLimit-Remaining', String(Math.max(0, max - record.count)));\n c.header('X-RateLimit-Reset', String(Math.ceil(record.resetAt / 1000)));\n\n if (record.count > max) {\n return c.json({ error: message }, 429);\n }\n\n await next();\n };\n}\n\n/**\n * Clear rate limit store (for testing)\n */\nexport function clearRateLimitStore() {\n store.clear();\n}\n","import type { Context, Next } from 'hono';\r\n\r\nexport class HttpError extends Error {\r\n constructor(\r\n public statusCode: number,\r\n message: string,\r\n public details?: unknown\r\n ) {\r\n super(message);\r\n this.name = 'HttpError';\r\n }\r\n}\r\n\r\nexport class BadRequestError extends HttpError {\r\n constructor(message = 'Bad Request', details?: unknown) {\r\n super(400, message, details);\r\n }\r\n}\r\n\r\nexport class UnauthorizedError extends HttpError {\r\n constructor(message = 'Unauthorized') {\r\n super(401, message);\r\n }\r\n}\r\n\r\nexport class ForbiddenError extends HttpError {\r\n constructor(message = 'Forbidden') {\r\n super(403, message);\r\n }\r\n}\r\n\r\nexport class NotFoundError extends HttpError {\r\n constructor(message = 'Not Found') {\r\n super(404, message);\r\n }\r\n}\r\n\r\nexport class ConflictError extends HttpError {\r\n constructor(message = 'Conflict', details?: unknown) {\r\n super(409, message, details);\r\n }\r\n}\r\n\r\nexport class InternalServerError extends HttpError {\r\n constructor(message = 'Internal Server Error') {\r\n super(500, message);\r\n }\r\n}\r\n\r\n/**\r\n * Global error handler middleware\r\n */\r\nexport function errorHandler() {\r\n return async (c: Context, next: Next) => {\r\n try {\r\n await next();\r\n } catch (err) {\r\n if (err instanceof HttpError) {\r\n return c.json({\r\n error: err.message,\r\n status: err.statusCode,\r\n ...(err.details ? { details: err.details } : {})\r\n }, err.statusCode as any);\r\n }\r\n\r\n // Unknown error\r\n console.error('Unhandled error:', err);\r\n return c.json({\r\n error: 'Internal Server Error',\r\n status: 500\r\n }, 500);\r\n }\r\n };\r\n}\r\n","import { readFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { Hono } from 'hono';\n\n// ============================================\n// MANIFEST TYPES\n// ============================================\n\nexport type ManifestHttpMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';\n\n/**\n * A single route entry as written to routes-manifest.json\n */\nexport interface ManifestRoute {\n /** URL path, e.g. /users/:id */\n path: string;\n /** HTTP method (lowercase) */\n method: ManifestHttpMethod;\n /** Absolute or project-relative path to the handler file */\n handler: string;\n /** Named URL params extracted from the path, e.g. ['id'] */\n params: string[];\n /** Whether the handler module exports a body schema */\n hasBodySchema: boolean;\n /** Whether the handler module exports a query schema */\n hasQuerySchema: boolean;\n}\n\n/**\n * The shape of routes-manifest.json\n */\nexport interface RoutesManifest {\n version: number;\n generatedAt: string;\n routes: ManifestRoute[];\n}\n\n// ============================================\n// OPTIONS\n// ============================================\n\nexport interface FileSystemRoutingOptions {\n /**\n * Path to the routes-manifest.json file.\n * Defaults to `./routes-manifest.json` relative to cwd.\n */\n manifestPath?: string;\n\n /**\n * If true, log registered routes to stdout.\n * @default false\n */\n verbose?: boolean;\n\n /**\n * Called when the manifest is missing or unreadable.\n * Defaults to a silent no-op (backward-compatible behaviour).\n */\n onMissingManifest?: (reason: Error) => void;\n\n /**\n * Custom log function used when `verbose` is true.\n * Defaults to `console.log`.\n */\n logger?: (...args: unknown[]) => void;\n}\n\n// ============================================\n// INTERNAL HELPERS\n// ============================================\n\n/**\n * Read and parse routes-manifest.json.\n * Returns null when the file does not exist or is malformed.\n */\nasync function readManifest(\n manifestPath: string,\n onMissing: (err: Error) => void,\n): Promise<RoutesManifest | null> {\n try {\n const raw = await readFile(manifestPath, 'utf-8');\n return JSON.parse(raw) as RoutesManifest;\n } catch (err) {\n onMissing(err instanceof Error ? err : new Error(String(err)));\n return null;\n }\n}\n\n/**\n * Dynamically import a route handler module and return its default export.\n * Accepts both absolute paths and file:// URLs.\n */\nasync function importHandler(handlerPath: string): Promise<((...args: any[]) => any) | null> {\n try {\n const url = handlerPath.startsWith('file://')\n ? handlerPath\n : pathToFileURL(handlerPath).href;\n const mod = await import(url);\n if (typeof mod.default !== 'function') {\n console.warn(\n `[kozo:fsr] Skipping ${handlerPath}: no default export function`,\n );\n return null;\n }\n return mod.default as (...args: any[]) => any;\n } catch (err) {\n console.warn(\n `[kozo:fsr] Failed to import handler ${handlerPath}:`,\n (err as Error).message,\n );\n return null;\n }\n}\n\n// ============================================\n// MIDDLEWARE FACTORY\n// ============================================\n\n/**\n * Register all routes declared in `routes-manifest.json` onto a Hono app.\n *\n * This function is **not** a Hono middleware in the classical sense — it is an\n * *async initializer* that must be awaited before the server starts accepting\n * requests. Calling it early (before user-defined routes) guarantees that\n * manifest routes take precedence.\n *\n * @example\n * ```ts\n * import { Hono } from 'hono';\n * import { applyFileSystemRouting } from '@kozojs/core/middleware';\n *\n * const app = new Hono();\n * await applyFileSystemRouting(app, { manifestPath: './routes-manifest.json' });\n *\n * // User-defined routes registered AFTER are appended normally\n * app.get('/health', c => c.json({ ok: true }));\n * ```\n */\nexport async function applyFileSystemRouting(\n app: Hono<any>,\n options: FileSystemRoutingOptions = {},\n): Promise<void> {\n const {\n manifestPath = resolve(process.cwd(), 'routes-manifest.json'),\n verbose = false,\n onMissingManifest = () => {\n // Silent by default — backward-compatible\n },\n logger = console.log,\n } = options;\n\n const manifest = await readManifest(manifestPath, onMissingManifest);\n\n // Gracefully skip when no manifest exists\n if (!manifest) return;\n\n const log = logger;\n\n if (verbose) {\n log(\n `\\n📋 [kozo:fsr] Loading ${manifest.routes.length} route(s) from manifest\\n`,\n );\n }\n\n for (const route of manifest.routes) {\n const handler = await importHandler(route.handler);\n if (!handler) continue;\n\n // Register on the Hono app using the correct HTTP method\n (app as any)[route.method](route.path, handler);\n\n if (verbose) {\n log(\n ` ${route.method.toUpperCase().padEnd(6)} ${route.path} → ${route.handler}`,\n );\n }\n }\n\n if (verbose) {\n log('');\n }\n}\n\n// ============================================\n// CONVENIENCE: createFileSystemRouting\n// ============================================\n\n/**\n * Alternative factory that returns an async function you can call with a Hono\n * app. Useful when you want to pre-configure options and apply them later.\n *\n * @example\n * ```ts\n * const fsr = createFileSystemRouting({ verbose: true });\n * await fsr(app);\n * ```\n */\nexport function createFileSystemRouting(options: FileSystemRoutingOptions = {}) {\n return (app: Hono<any>) => applyFileSystemRouting(app, options);\n}\n"],"mappings":"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","names":["resolve","CT_JSON","CT_PROBLEM","BODY_404","BODY_500","resolve","UnauthorizedError","ForbiddenError","NotFoundError","pathToFileURL","logger"]}
|