@busy-hour/blaze
Version:
<h1 align='center'>🔥 Blaze</h1> <div align='center'> An event driven framework for 🔥 Hono.js </div>
111 lines (110 loc) • 3.41 kB
JavaScript
;
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);
var import_context = require("../internal/context/index");
const defaults = {
origin: "*",
allowMethods: ["HEAD", "POST", "PUT", "PATCH", "GET", "DELETE"],
allowHeaders: [],
exposeHeaders: []
};
function findAllowOrigin(optsOrigin) {
if (typeof optsOrigin === "string") {
return () => optsOrigin;
}
if (typeof optsOrigin === "function") {
return optsOrigin;
}
return (origin) => optsOrigin.includes(origin) ? origin : optsOrigin[0];
}
function set(honoCtx) {
return function set2(key, value) {
honoCtx.res.headers.set(key, value);
};
}
function cors(options = defaults) {
const opts = {
...defaults,
...options
};
return async function cors2(honoCtx, next) {
const setRes = set(honoCtx);
const ctx = new import_context.BlazeContext({
body: null,
honoCtx,
headers: null,
meta: null,
params: null,
query: null
});
const allowOrigin = findAllowOrigin(opts.origin)(
honoCtx.req.header("origin") || "",
ctx
);
if (allowOrigin) {
setRes("Access-Control-Allow-Origin", allowOrigin);
}
if (opts.origin !== "*") {
setRes("Vary", "Origin");
}
if (opts.credentials) {
setRes("Access-Control-Allow-Credentials", "true");
}
if (opts.exposeHeaders?.length) {
setRes("Access-Control-Expose-Headers", opts.exposeHeaders.join(","));
}
if (honoCtx.req.method === "OPTIONS") {
if (opts.maxAge != null) {
setRes("Access-Control-Max-Age", opts.maxAge.toString());
}
if (opts.allowMethods?.length) {
setRes("Access-Control-Allow-Methods", opts.allowMethods.join(","));
}
let headers = opts.allowHeaders;
if (!headers?.length) {
const requestHeaders = honoCtx.req.header(
"Access-Control-Request-Headers"
);
if (requestHeaders) {
headers = requestHeaders.split(/\s*,\s*/);
}
}
if (headers?.length) {
setRes("Access-Control-Allow-Headers", headers.join(","));
honoCtx.res.headers.append("Vary", "Access-Control-Request-Headers");
}
honoCtx.res.headers.delete("Content-Length");
honoCtx.res.headers.delete("Content-Type");
return new Response(null, {
headers: honoCtx.res.headers,
status: 204,
statusText: honoCtx.res.statusText
});
}
await next();
};
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
cors
});