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