itty-router
Version:
A tiny, zero-dependency router, designed to make beautiful APIs in any environment.
2 lines (1 loc) • 954 B
JavaScript
const e=(e={})=>{const{origin:o="*",credentials:s=!1,allowMethods:c="*",allowHeaders:r,exposeHeaders:n,maxAge:t}=e,a=e=>{const c=e?.headers.get("origin");return!0===o?c:o instanceof RegExp?o.test(c)?c:void 0:Array.isArray(o)?o.includes(c)?c:void 0:o instanceof Function?o(c):"*"==o&&s?c:o},l=(e,o)=>{for(const[s,c]of Object.entries(o))c&&e.headers.append(s,c);return e};return{corsify:(e,o)=>e?.headers?.get("access-control-allow-origin")||101==e.status?e:l(e.clone(),{"access-control-allow-origin":a(o),"access-control-allow-credentials":s}),preflight:e=>{if("OPTIONS"==e.method){const o=new Response(null,{status:204});return l(o,{"access-control-allow-origin":a(e),"access-control-allow-methods":c?.join?.(",")??c,"access-control-expose-headers":n?.join?.(",")??n,"access-control-allow-headers":r?.join?.(",")??r??e.headers.get("access-control-request-headers"),"access-control-max-age":t,"access-control-allow-credentials":s})}}}};export{e as cors};