UNPKG

@bitblit/epsilon

Version:

Tiny adapter to simplify building API gateway Lambda APIS

77 lines 3.98 kB
"use strict"; 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