@marblejs/middleware-cors
Version:
A CORS middleware for Marble.js
33 lines (32 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cors$ = void 0;
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
const utils_1 = require("@marblejs/core/dist/+internal/utils");
const http_responseHandler_1 = require("@marblejs/http/dist/response/http.responseHandler");
const http_1 = require("@marblejs/http");
const function_1 = require("fp-ts/lib/function");
const configurePreflightResponse_1 = require("./configurePreflightResponse");
const configureResponse_1 = require("./configureResponse");
const DEFAULT_OPTIONS = {
origin: '*',
methods: ['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
withCredentials: false,
optionsSuccessStatus: http_1.HttpStatus.NO_CONTENT,
};
const isCORSRequest = (req) => !(0, utils_1.isString)(req.headers.origin);
const cors$ = (options = {}) => req$ => {
options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);
return req$.pipe((0, operators_1.mergeMap)(req => {
if (isCORSRequest(req))
return (0, rxjs_1.of)(req);
if (req.method === 'OPTIONS') {
(0, configurePreflightResponse_1.configurePreflightResponse)(req, req.response, options);
return (0, function_1.pipe)((0, rxjs_1.defer)((0, http_responseHandler_1.endRequest)(req.response)), (0, operators_1.mergeMap)(() => rxjs_1.EMPTY));
}
(0, configureResponse_1.configureResponse)(req, req.response, options);
return (0, rxjs_1.of)(req);
}));
};
exports.cors$ = cors$;