UNPKG

workery

Version:

Modern web framework for building APIs on Cloudflare Workers.

2 lines (1 loc) 1.68 kB
class e{name;handle;constructor(e){this.name=e.name,this.handle=e.handle}}const s=s=>{const n={origin:"*",allowMethods:["GET","HEAD","PUT","POST","DELETE","PATCH"],allowHeaders:[],exposeHeaders:[],...s},t="string"==typeof(o=n.origin)?()=>o:"function"==typeof o?o:e=>o.includes(e)?e:o[0];var o;return new e({name:"CORSMiddleware",handle:async({req:e},s)=>{const o=new Headers,r=t(e.headers.get("origin")??"");r&&o.set("Access-Control-Allow-Origin",r),"*"!==n.origin&&o.set("Vary","Origin"),n.credentials&&o.set("Access-Control-Allow-Credentials","true"),n.exposeHeaders?.length&&o.set("Access-Control-Expose-Headers",n.exposeHeaders.join(", "));let l=!1;"OPTIONS"===e.method&&e.headers.has("Access-Control-Request-Method")&&(l=!0,null!=n.maxAge&&o.set("Access-Control-Max-Age",n.maxAge.toString()));const a=await s();if(l){const e=(a.headers.get("Allow")?.split(/\s*,\s*/)||[]).filter((e=>n.allowMethods?.includes(e)));return n.allowMethods?.length&&o.set("Access-Control-Allow-Methods",e.join(", ")),n.allowHeaders?.length&&(o.set("Access-Control-Allow-Headers",n.allowHeaders.join(", ")),o.append("Vary","Access-Control-Request-Headers")),o.delete("Content-Length"),o.delete("Content-Type"),new Response(null,{headers:o,status:204})}for(const[e,s]of o.entries())a.headers.set(e,s);return a}})},n=s=>new e({name:"CompressMiddleware",handle:async({req:e},n)=>{let t=await n();const o=e.headers.get("Accept-Encoding");if(!o?.includes(s)||!t.body)return t;const r=new CompressionStream(s);return t=new Response(t.body.pipeThrough(r),t),t.headers.delete("Content-Length"),t.headers.set("Content-Encoding",s),t}});export{s as CORSMiddleware,n as CompressMiddleware,e as Middleware};