UNPKG

@nahkies/typescript-koa-runtime

Version:

Runtime package for code generated by @nahkies/openapi-code-generator using the typescript-koa template

55 lines (47 loc) 1.45 kB
import {findMatchingSchema} from "@nahkies/typescript-common-runtime/validation" import type {z} from "zod/v4" import {KoaRuntimeError, type RequestInputType} from "./errors.ts" export function parseRequestInput<Schema extends z.ZodTypeAny>( schema: Schema, input: unknown, type: RequestInputType, ): z.infer<Schema> export function parseRequestInput( schema: undefined, input: unknown, type: RequestInputType, ): undefined export function parseRequestInput<Schema extends z.ZodTypeAny>( schema: Schema | undefined, input: unknown, type: RequestInputType, ): z.infer<Schema> | undefined { try { return schema?.parse(input) } catch (err) { throw KoaRuntimeError.RequestError(err, type) } } // TODO: optional response validation export function responseValidationFactory( possibleResponses: [string, z.ZodTypeAny][], defaultResponse?: z.ZodTypeAny, ) { // Exploit the natural ordering matching the desired specificity of eg: 404 vs 4xx possibleResponses.sort((x, y) => (x[0] < y[0] ? -1 : 1)) return (status: number, value: unknown) => { try { const schema = findMatchingSchema(status, possibleResponses) if (schema) { return schema.parse(value) } if (defaultResponse) { return defaultResponse.parse(value) } // TODO: throw on unmatched response return value } catch (err) { throw KoaRuntimeError.ResponseError(err) } } }