{"version":3,"file":"zod-v4.mjs","names":[],"sources":["../../src/zod-v4.ts"],"sourcesContent":["import {findMatchingSchema} from \"@nahkies/typescript-common-runtime/validation\"\n\nimport type {z} from \"zod/v4\"\nimport {KoaRuntimeError, type RequestInputType} from \"./errors.ts\"\n\nexport function parseRequestInput<Schema extends z.ZodTypeAny>(\n  schema: Schema,\n  input: unknown,\n  type: RequestInputType,\n): z.infer<Schema>\nexport function parseRequestInput(\n  schema: undefined,\n  input: unknown,\n  type: RequestInputType,\n): undefined\nexport function parseRequestInput<Schema extends z.ZodTypeAny>(\n  schema: Schema | undefined,\n  input: unknown,\n  type: RequestInputType,\n): z.infer<Schema> | undefined {\n  try {\n    return schema?.parse(input)\n  } catch (err) {\n    throw KoaRuntimeError.RequestError(err, type)\n  }\n}\n\n// TODO: optional response validation\nexport function responseValidationFactory(\n  possibleResponses: [string, z.ZodTypeAny][],\n  defaultResponse?: z.ZodTypeAny,\n) {\n  // Exploit the natural ordering matching the desired specificity of eg: 404 vs 4xx\n  possibleResponses.sort((x, y) => (x[0] < y[0] ? -1 : 1))\n\n  return (status: number, value: unknown) => {\n    try {\n      const schema = findMatchingSchema(status, possibleResponses)\n\n      if (schema) {\n        return schema.parse(value)\n      }\n\n      if (defaultResponse) {\n        return defaultResponse.parse(value)\n      }\n\n      // TODO: throw on unmatched response\n      return value\n    } catch (err) {\n      throw KoaRuntimeError.ResponseError(err)\n    }\n  }\n}\n"],"mappings":";;;AAeA,SAAgB,kBACd,QACA,OACA,MAC6B;CAC7B,IAAI;EACF,OAAO,QAAQ,MAAM,KAAK;CAC5B,SAAS,KAAK;EACZ,MAAM,gBAAgB,aAAa,KAAK,IAAI;CAC9C;AACF;AAGA,SAAgB,0BACd,mBACA,iBACA;CAEA,kBAAkB,MAAM,GAAG,MAAO,EAAE,KAAK,EAAE,KAAK,KAAK,CAAE;CAEvD,QAAQ,QAAgB,UAAmB;EACzC,IAAI;GACF,MAAM,SAAS,mBAAmB,QAAQ,iBAAiB;GAE3D,IAAI,QACF,OAAO,OAAO,MAAM,KAAK;GAG3B,IAAI,iBACF,OAAO,gBAAgB,MAAM,KAAK;GAIpC,OAAO;EACT,SAAS,KAAK;GACZ,MAAM,gBAAgB,cAAc,GAAG;EACzC;CACF;AACF"}