@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
220 lines • 10.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDevelopmentPipeline = createDevelopmentPipeline;
exports.createStandardPipeline = createStandardPipeline;
exports.createProductionPipeline = createProductionPipeline;
exports.createHighThroughputPipeline = createHighThroughputPipeline;
exports.createCompliancePipeline = createCompliancePipeline;
exports.createResilientPipeline = createResilientPipeline;
exports.createObservablePipeline = createObservablePipeline;
const manager_1 = require("./manager");
const dispatcher_1 = require("./dispatcher");
const json_middleware_1 = require("./middlewares/json.middleware");
const logging_middleware_1 = require("./middlewares/logging.middleware");
const validation_middleware_1 = require("./middlewares/validation.middleware");
const retry_middleware_1 = require("./middlewares/retry.middleware");
const deduplication_middleware_1 = require("./middlewares/deduplication.middleware");
const dead_letter_middleware_1 = require("./middlewares/dead-letter.middleware");
const metrics_middleware_1 = require("./middlewares/metrics.middleware");
const tracing_middleware_1 = require("./middlewares/tracing.middleware");
const validators_1 = require("./validators");
function createValidatorFromOptions(options) {
if (options.validator) {
return new validation_middleware_1.ValidateInboundMiddleware(options.validator);
}
if (options.schema) {
const schema = options.schema;
if (schema._def && typeof schema.parseAsync === 'function') {
return (0, validators_1.createZodValidator)(schema);
}
if (schema.isJoi || (schema.$__ && schema.$__.joi)) {
return (0, validators_1.createJoiValidator)(schema);
}
if (schema.__isYupSchema__ || (schema.type && typeof schema.validate === 'function')) {
return (0, validators_1.createYupValidator)(schema);
}
if (typeof schema === 'object' && schema.type && !schema._def && !schema.isJoi) {
return (0, validators_1.createAjvValidator)(schema);
}
throw new Error('Unable to detect schema type. Supported: Zod, Joi, Yup, JSON Schema. ' +
'Or provide a validator function instead.');
}
return null;
}
function createDevelopmentPipeline(options = {}) {
const manager = new manager_1.MessageMiddlewareManager();
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
if (options.logging?.enabled !== false) {
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(logger));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
return manager;
}
function createStandardPipeline(options = {}) {
const manager = new manager_1.MessageMiddlewareManager();
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
if (options.logging?.enabled !== false) {
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(logger));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 3,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
return manager;
}
function createProductionPipeline(options = {}) {
const manager = new manager_1.MessageMiddlewareManager();
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
if (options.logging?.enabled !== false) {
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(logger));
}
if (options.deduplication?.enabled !== false && options.deduplication?.store) {
manager.addInboundMiddleware(new deduplication_middleware_1.DeduplicateInboundMiddleware(options.deduplication.store));
}
if (options.validation?.enabled !== false && options.validation) {
const validator = createValidatorFromOptions(options.validation);
if (validator) {
manager.addInboundMiddleware(validator);
}
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 3,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
return manager;
}
function createHighThroughputPipeline(options = {}) {
return createDevelopmentPipeline({
...options,
logging: options.logging ?? { enabled: false }
});
}
function createCompliancePipeline(options = {}) {
const manager = new manager_1.MessageMiddlewareManager();
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(logger));
if (options.validation?.enabled !== false && options.validation?.validator) {
manager.addInboundMiddleware(new validation_middleware_1.ValidateInboundMiddleware(options.validation.validator));
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 5,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
return manager;
}
function createResilientPipeline(options = {}) {
const manager = new manager_1.MessageMiddlewareManager();
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(logger));
if (options.deduplication?.enabled !== false && options.deduplication?.store) {
manager.addInboundMiddleware(new deduplication_middleware_1.DeduplicateInboundMiddleware(options.deduplication.store));
}
if (options.validation?.enabled !== false && options.validation) {
const validator = createValidatorFromOptions(options.validation);
if (validator) {
manager.addInboundMiddleware(validator);
}
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 5,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.deadLetter) {
manager.addInboundMiddleware(new dead_letter_middleware_1.DeadLetterInboundMiddleware(options.deadLetter));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
return manager;
}
function createObservablePipeline(options = {}) {
const manager = new manager_1.MessageMiddlewareManager();
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(logger));
if (options.metrics?.enabled !== false && options.metrics?.collector) {
manager.addInboundMiddleware(new metrics_middleware_1.MetricsInboundMiddleware(options.metrics.collector));
}
if (options.tracing?.enabled !== false && options.tracing?.tracer) {
manager.addInboundMiddleware(new tracing_middleware_1.TracingInboundMiddleware(options.tracing.tracer));
}
if (options.deduplication?.enabled !== false && options.deduplication?.store) {
manager.addInboundMiddleware(new deduplication_middleware_1.DeduplicateInboundMiddleware(options.deduplication.store));
}
if (options.validation?.enabled !== false && options.validation) {
const validator = createValidatorFromOptions(options.validation);
if (validator) {
manager.addInboundMiddleware(validator);
}
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 3,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
return manager;
}
//# sourceMappingURL=presets.js.map