UNPKG

workery

Version:

Modern web framework for building APIs on Cloudflare Workers.

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