serverless-offline-edge-lambda
Version:
A plugin for the Serverless Framework that simulates the behavior of AWS CloudFront Edge Lambdas while developing offline.
99 lines • 4.45 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
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) : adopt(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 });
exports.FunctionSet = void 0;
const glob_to_regexp_1 = __importDefault(require("glob-to-regexp"));
const services_1 = require("./services");
const utils_1 = require("./utils");
const identityRequestHandler = (event) => __awaiter(void 0, void 0, void 0, function* () { return event.Records[0].cf.request; });
const identityResponseHandler = (event) => __awaiter(void 0, void 0, void 0, function* () { return event.Records[0].cf.response; });
class FunctionSet {
constructor(pattern, distribution, log, origin = new services_1.Origin(), name = '') {
this.pattern = pattern;
this.distribution = distribution;
this.log = log;
this.origin = origin;
this.name = name;
this.moduleLoader = new utils_1.ModuleLoader();
this.viewerRequest = identityRequestHandler;
this.originRequest = identityRequestHandler;
this.originResponse = identityResponseHandler;
this.viewerResponse = identityResponseHandler;
this.regex = (0, glob_to_regexp_1.default)(pattern);
}
setHandler(event, path) {
return __awaiter(this, void 0, void 0, function* () {
switch (event) {
case 'viewer-request': {
this.viewerRequest = yield this.getRequestHandler(path);
return;
}
case 'viewer-response': {
this.viewerResponse = yield this.getResponseHandler(path);
return;
}
case 'origin-request': {
this.originRequest = yield this.getRequestHandler(path);
return;
}
case 'origin-response': {
this.originResponse = yield this.getResponseHandler(path);
return;
}
}
});
}
getRequestHandler(path) {
return __awaiter(this, void 0, void 0, function* () {
const fn = yield this.moduleLoader.loadModule(path);
const handler = (event, context) => __awaiter(this, void 0, void 0, function* () {
const promise = new utils_1.CallbackPromise();
if (typeof fn !== 'function') {
throw new Error(`Unable to find request handler under path: ${fn}. Please recheck your serverless.yml / exported handlers!`);
}
const result = fn(event, context, promise.callback);
if (result instanceof Promise) {
return result;
}
else {
return promise;
}
});
handler.path = path;
return handler;
});
}
getResponseHandler(path) {
return __awaiter(this, void 0, void 0, function* () {
const fn = yield this.moduleLoader.loadModule(path);
const handler = (event, context) => __awaiter(this, void 0, void 0, function* () {
const deferred = new utils_1.CallbackPromise();
const result = fn(event, context, deferred.callback);
if (result instanceof Promise) {
return result;
}
else {
return deferred;
}
});
handler.path = path;
return handler;
});
}
purgeLoadedFunctions() {
this.moduleLoader.purgeLoadedModules();
}
}
exports.FunctionSet = FunctionSet;
//# sourceMappingURL=function-set.js.map