alagarr
Version:
Alagarr is a request-response helper library that removes the boilerplate from your Node.js serverless functions and helps make your code portable.
55 lines (54 loc) • 3.19 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const apply_middleware_1 = __importDefault(require("../utils/apply-middleware"));
const make_response_object_1 = __importDefault(require("./make-response-object"));
const compress_1 = __importDefault(require("./middleware/compress"));
const content_length_1 = __importDefault(require("./middleware/content-length"));
const csp_1 = __importDefault(require("./middleware/csp"));
const enforced_headers_1 = __importDefault(require("./middleware/enforced-headers"));
const etag_1 = __importDefault(require("./middleware/etag"));
const log_1 = __importDefault(require("./middleware/log"));
const html_1 = __importDefault(require("./html"));
const json_1 = __importDefault(require("./json"));
const redirect_1 = __importDefault(require("./redirect"));
const respondTo_1 = __importDefault(require("./respondTo"));
const text_1 = __importDefault(require("./text"));
const setHeader_1 = __importDefault(require("./helpers/setHeader"));
const middlewareMap = {
enableCompression: compress_1.default,
enableContentLength: content_length_1.default,
enableCspHeaders: csp_1.default,
enableETagHeader: etag_1.default,
enableEnforcedHeaders: enforced_headers_1.default,
};
exports.default = (request, callback, options) => __awaiter(this, void 0, void 0, function* () {
const responseData = make_response_object_1.default();
const responseWithHelpers = [
text_1.default,
html_1.default,
json_1.default,
redirect_1.default,
respondTo_1.default,
].reduce((methods, method) => (Object.assign({}, methods, { [method.name]: (...args) => __awaiter(this, void 0, void 0, function* () {
return callback(null, yield apply_middleware_1.default([...Object.keys(middlewareMap)].reduce((middlewareList, middleware) => options[middleware]
? [...middlewareList, middlewareMap[middleware]]
: middlewareList, [
...(options.responseMiddleware || []),
...(options.enableLogger ? [log_1.default] : []),
]), method(responseData, request, ...args), request, options));
}) })), { raw: callback });
const response = [setHeader_1.default]
.reduce((responseMethods, method) => (Object.assign({}, responseMethods, { [method.name]: (...args) => method(response, responseData, ...args) })), responseWithHelpers);
return response;
});