@bitblit/epsilon
Version:
Tiny adapter to simplify building API gateway Lambda APIS
77 lines • 3.98 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EpsilonConfigParser = void 0;
const common_1 = require("@bitblit/ratchet/common");
const common_2 = require("@bitblit/ratchet/common");
const js_yaml_1 = __importDefault(require("js-yaml"));
const background_http_adapter_handler_1 = require("../background/background-http-adapter-handler");
const background_handler_1 = require("../background/background-handler");
const router_util_1 = require("../http/route/router-util");
const web_handler_1 = require("../http/web-handler");
const misconfigured_error_1 = require("../http/error/misconfigured-error");
const epsilon_global_handler_1 = require("../epsilon-global-handler");
const model_validator_1 = require("@bitblit/ratchet/model-validator");
class EpsilonConfigParser {
// Prevent instantiation
// eslint-disable-next-line @typescript-eslint/no-empty-function
constructor() { }
static epsilonConfigToEpsilonGlobalHandler(config, backgroundManager) {
return new epsilon_global_handler_1.EpsilonGlobalHandler(EpsilonConfigParser.epsilonConfigToEpsilonInstance(config, backgroundManager));
}
static epsilonConfigToEpsilonInstance(config, backgroundManager) {
this.validateGlobalConfig(config);
const label = (config === null || config === void 0 ? void 0 : config.label) || 'NO EPSILON CONFIG LABEL SET';
common_1.Logger.info('Creating epsilon : %s : BM : %j', label, backgroundManager);
const parsed = EpsilonConfigParser.parseOpenApiDocument(config.openApiYamlString);
const modelValidator = EpsilonConfigParser.openApiDocToValidator(parsed);
const backgroundHttpAdapter = new background_http_adapter_handler_1.BackgroundHttpAdapterHandler(config.backgroundConfig, modelValidator, backgroundManager);
const backgroundHandler = config.backgroundConfig
? new background_handler_1.BackgroundHandler(config.backgroundConfig, backgroundManager, modelValidator)
: null;
// TODO: refactor me
const epsilonRouter = config.httpConfig
? router_util_1.RouterUtil.openApiYamlToRouterConfig(config.httpConfig, parsed, modelValidator, backgroundHttpAdapter)
: null;
const webHandler = epsilonRouter ? new web_handler_1.WebHandler(epsilonRouter) : null;
const inst = {
config: config,
parsedOpenApiDoc: parsed,
modelValidator: modelValidator,
webHandler: webHandler,
backgroundHandler: backgroundHandler,
backgroundManager: backgroundManager,
};
return inst;
}
static parseOpenApiDocument(yamlString) {
if (!yamlString) {
throw new misconfigured_error_1.MisconfiguredError('Cannot configure, missing either yaml or cfg');
}
const doc = js_yaml_1.default.load(yamlString);
return doc;
}
static openApiDocToValidator(doc) {
var _a;
let rval = null;
if ((_a = doc === null || doc === void 0 ? void 0 : doc.components) === null || _a === void 0 ? void 0 : _a.schemas) {
rval = model_validator_1.ModelValidator.createFromParsedObject(doc.components.schemas);
}
return rval;
}
static validateGlobalConfig(config) {
if (!config) {
common_2.ErrorRatchet.throwFormattedErr('Config may not be null');
}
if (!config.openApiYamlString) {
common_2.ErrorRatchet.throwFormattedErr('Config must define an open api document');
}
if (!!config.cron && !config.cron.timezone) {
common_2.ErrorRatchet.throwFormattedErr('Cron is defined, but timezone is not set');
}
}
}
exports.EpsilonConfigParser = EpsilonConfigParser;
//# sourceMappingURL=epsilon-config-parser.js.map