UNPKG

workery

Version:

Modern web framework for building APIs on Cloudflare Workers.

2 lines (1 loc) 3.08 kB
"use strict";var e=require("zod"),o=require("@asteasolutions/zod-to-openapi"),s=require("./helpers.cjs");void 0===e.z.string().openapi&&o.extendZodWithOpenApi(e.z),exports.Body=function(o=String,s){return{location:"body",schema:o instanceof e.z.ZodType?o:e.z.any(),schemaOr:o instanceof e.z.ZodType?void 0:o,options:{mediaType:"application/json",...s}}},exports.Cookie=function(o=e.z.string(),r){return{location:"cookie",schema:o,options:{preprocessor:s.isJsonCoercible(o)?s.jsonCoerce:void 0,...r}}},exports.Depends=function(e){return{location:"$depends",dependency:e,options:{includeInSchema:!0}}},exports.Header=function(o=e.z.string(),r){return{location:"header",schema:o,options:{preprocessor:s.isJsonCoercible(o)?s.jsonCoerce:void 0,...r}}},exports.Path=function(o=e.z.string(),r){return{location:"path",schema:o,options:{preprocessor:s.isJsonCoercible(o)?s.jsonCoerce:void 0,...r}}},exports.Query=function(o=e.z.string(),r){return{location:"query",schema:o,options:{preprocessor:s.isJsonCoercible(o)?s.jsonCoerce:void 0,...r}}},exports.Responds=function(o=String,s){return o instanceof e.z.ZodType?{description:s?.description??o._def.openapi?.metadata?.description??"",headers:e.z.object(s?.headers??{}),content:{[s?.mediaType??"application/json"]:{schema:o}}}:{description:s?.description??"",headers:e.z.object(s?.headers??{}),content:{[s?.mediaType??"application/json"]:{schema:o===String?{type:"string"}:{type:"string",format:"binary"}}}}},exports.parseArgs=async function o(s,r,t){const{req:n}=r.baseArgs,{params:a,queries:i,cookies:c}=r.rawParameters??{};t=t??new WeakMap;let p=!0;const d={},u=[],l={path:(e,o)=>{const s=o;let r=(a??{})[s.options.altName??e];return s.schema.safeParse(void 0!==r&&s.options.preprocessor?s.options.preprocessor(r):r)},query:(o,s)=>{const r=s;let t=(i??{})[r.options.altName??o]??[];return r.schema instanceof e.z.ZodArray||(t=t[0]),r.schema.safeParse(r.options.preprocessor?r.options.preprocessor(t):t)},header:(e,o)=>{const s=o;let r=n.headers.get(s.options.altName??e.replace(/_/g,"-"))??void 0;return s.schema.safeParse(void 0!==r&&s.options.preprocessor?s.options.preprocessor(r):r)},cookie:(e,o)=>{const s=o;let r=(c??{})[s.options.altName??e];return s.schema.safeParse(void 0!==r&&s.options.preprocessor?s.options.preprocessor(r):r)},body:async(o,s)=>{const r=s;if(r.schemaOr){let e;return e=r.schemaOr===String?await n.text():r.schemaOr===Blob?await n.blob():n.body,{success:!0,data:e}}{let o;try{o=await n.json()}catch(o){return{success:!1,error:new e.z.ZodError([{message:"Invalid JSON.",path:[],code:e.z.ZodIssueCode.custom}])}}return r.schema.safeParse(o)}}};for(const[e,n]of Object.entries(s)){let s;if("$depends"==n.location){const s=n.dependency;if(s.useCache&&void 0!==t.get(s)){d[e]=t.get(s);continue}const a=await o(s.parameters,r,t);p&&=a.success,a.success?(d[e]=await s.handle({...r.baseArgs,...a.args},r.later),s.useCache&&t.set(s,d[e])):u.push(...a.errors)}else s=await l[n.location](e,n),p&&=s.success,s.success?d[e]=s.data:u.push({location:n.location,name:e,issues:s.error.issues})}return{success:p,errors:u,args:d}};