UNPKG

hono

Version:

Web framework built on Web Standards

99 lines (98 loc) 3.18 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var cors_exports = {}; __export(cors_exports, { cors: () => cors }); module.exports = __toCommonJS(cors_exports); const cors = (options) => { const defaults = { origin: "*", allowMethods: ["GET", "HEAD", "PUT", "POST", "DELETE", "PATCH"], allowHeaders: [], exposeHeaders: [] }; const opts = { ...defaults, ...options }; const findAllowOrigin = ((optsOrigin) => { if (typeof optsOrigin === "string") { return () => optsOrigin; } else if (typeof optsOrigin === "function") { return optsOrigin; } else { return (origin) => optsOrigin.includes(origin) ? origin : optsOrigin[0]; } })(opts.origin); return async function cors2(c, next) { function set(key, value) { c.res.headers.set(key, value); } const allowOrigin = findAllowOrigin(c.req.header("origin") || "", c); if (allowOrigin) { set("Access-Control-Allow-Origin", allowOrigin); } if (opts.origin !== "*") { const existingVary = c.req.header("Vary"); if (existingVary) { set("Vary", existingVary); } else { set("Vary", "Origin"); } } if (opts.credentials) { set("Access-Control-Allow-Credentials", "true"); } if (opts.exposeHeaders?.length) { set("Access-Control-Expose-Headers", opts.exposeHeaders.join(",")); } if (c.req.method === "OPTIONS") { if (opts.maxAge != null) { set("Access-Control-Max-Age", opts.maxAge.toString()); } if (opts.allowMethods?.length) { set("Access-Control-Allow-Methods", opts.allowMethods.join(",")); } let headers = opts.allowHeaders; if (!headers?.length) { const requestHeaders = c.req.header("Access-Control-Request-Headers"); if (requestHeaders) { headers = requestHeaders.split(/\s*,\s*/); } } if (headers?.length) { set("Access-Control-Allow-Headers", headers.join(",")); c.res.headers.append("Vary", "Access-Control-Request-Headers"); } c.res.headers.delete("Content-Length"); c.res.headers.delete("Content-Type"); return new Response(null, { headers: c.res.headers, status: 204, statusText: c.res.statusText }); } await next(); }; }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { cors });