UNPKG

@bitblit/ratchet-epsilon-common

Version:

Tiny adapter to simplify building API gateway Lambda APIS

67 lines 3.22 kB
import { Logger } from '@bitblit/ratchet-common/logger/logger'; import { ErrorRatchet } from '@bitblit/ratchet-common/lang/error-ratchet'; import yaml from 'js-yaml'; import { ModelValidator } from '@bitblit/ratchet-misc/model-validator/model-validator'; import { BackgroundHttpAdapterHandler } from '../background/background-http-adapter-handler.js'; import { BackgroundHandler } from '../background/background-handler.js'; import { RouterUtil } from '../http/route/router-util.js'; import { WebHandler } from '../http/web-handler.js'; import { MisconfiguredError } from '../http/error/misconfigured-error.js'; import { EpsilonGlobalHandler } from '../epsilon-global-handler.js'; export class EpsilonConfigParser { constructor() { } static epsilonConfigToEpsilonGlobalHandler(config, backgroundManager) { return new EpsilonGlobalHandler(EpsilonConfigParser.epsilonConfigToEpsilonInstance(config, backgroundManager)); } static epsilonConfigToEpsilonInstance(config, backgroundManager) { this.validateGlobalConfig(config); const label = config?.label || 'NO EPSILON CONFIG LABEL SET'; Logger.info('Creating epsilon : %s : BM : %j', label, backgroundManager); const parsed = EpsilonConfigParser.parseOpenApiDocument(config.openApiYamlString); const modelValidator = EpsilonConfigParser.openApiDocToValidator(parsed); const backgroundHttpAdapter = new BackgroundHttpAdapterHandler(config.backgroundConfig, modelValidator, backgroundManager); const backgroundHandler = config.backgroundConfig ? new BackgroundHandler(config.backgroundConfig, backgroundManager, modelValidator) : null; const epsilonRouter = config.httpConfig ? RouterUtil.openApiYamlToRouterConfig(config.httpConfig, parsed, modelValidator, backgroundHttpAdapter) : null; const webHandler = epsilonRouter ? new 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 MisconfiguredError('Cannot configure, missing either yaml or cfg'); } const doc = yaml.load(yamlString); return doc; } static openApiDocToValidator(doc) { let rval = null; if (doc?.components?.schemas) { rval = ModelValidator.createFromParsedObject(doc.components.schemas); } return rval; } static validateGlobalConfig(config) { if (!config) { ErrorRatchet.throwFormattedErr('Config may not be null'); } if (!config.openApiYamlString) { ErrorRatchet.throwFormattedErr('Config must define an open api document'); } if (!!config.cron && !config.cron.timezone) { ErrorRatchet.throwFormattedErr('Cron is defined, but timezone is not set'); } } } //# sourceMappingURL=epsilon-config-parser.js.map