UNPKG

@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
"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); 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 });