@bitblit/ratchet-epsilon-common
Version:
Tiny adapter to simplify building API gateway Lambda APIS
67 lines • 3.22 kB
JavaScript
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