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.
62 lines (61 loc) • 2.94 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 error_handler_1 = __importDefault(require("./error-handler"));
const client_error_1 = __importDefault(require("./errors/client-error"));
exports.ClientError = client_error_1.default;
const server_error_1 = __importDefault(require("./errors/server-error"));
exports.ServerError = server_error_1.default;
const request_1 = __importDefault(require("./request"));
const response_1 = __importDefault(require("./response"));
const DEFAULT_OPTIONS = {
cspPolicies: [],
enableCompression: true,
enableContentLength: true,
enableCspHeaders: true,
enableETagHeader: true,
enableEnforcedHeaders: true,
enableLogger: true,
enableStrictTransportSecurity: true,
errorHandler: error_handler_1.default,
requestMiddleware: [],
responseMiddleware: [],
};
const noopHandler = (_, _1) => {
throw new server_error_1.default('Misconfiguration in Alagarr setup. No handler function was provided.');
};
function alagarr(handler = noopHandler, options = DEFAULT_OPTIONS) {
return function handlerWrapper(event, context, callback) {
return __awaiter(this, void 0, void 0, function* () {
const mergedOptions = Object.assign({}, DEFAULT_OPTIONS, options);
const request = yield request_1.default(event, context, mergedOptions);
const response = yield response_1.default(request, callback, mergedOptions);
try {
return yield handler(request, response, context);
}
catch (error) {
const errorHandler = typeof mergedOptions.errorHandler === 'function'
? mergedOptions.errorHandler
: error_handler_1.default;
try {
return yield errorHandler(request, response, error);
}
catch (error) {
console.error('There was an error in the error handler provided to Alagaar', error, errorHandler.toString());
return error_handler_1.default(request, response, error);
}
}
});
};
}
exports.default = alagarr;