@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
211 lines • 9.32 kB
JavaScript
import { MessageMiddlewareManager } from './manager';
import { DispatcherMiddleware } from './dispatcher';
import { ParseJsonInboundMiddleware } from './middlewares/json.middleware';
import { LogInboundMiddleware } from './middlewares/logging.middleware';
import { ValidateInboundMiddleware } from './middlewares/validation.middleware';
import { RetryInboundMiddleware } from './middlewares/retry.middleware';
import { DeduplicateInboundMiddleware } from './middlewares/deduplication.middleware';
import { DeadLetterInboundMiddleware } from './middlewares/dead-letter.middleware';
import { MetricsInboundMiddleware } from './middlewares/metrics.middleware';
import { TracingInboundMiddleware } from './middlewares/tracing.middleware';
import { createZodValidator, createJoiValidator, createYupValidator, createAjvValidator } from './validators';
function createValidatorFromOptions(options) {
if (options.validator) {
return new ValidateInboundMiddleware(options.validator);
}
if (options.schema) {
const schema = options.schema;
if (schema._def && typeof schema.parseAsync === 'function') {
return createZodValidator(schema);
}
if (schema.isJoi || (schema.$__ && schema.$__.joi)) {
return createJoiValidator(schema);
}
if (schema.__isYupSchema__ || (schema.type && typeof schema.validate === 'function')) {
return createYupValidator(schema);
}
if (typeof schema === 'object' && schema.type && !schema._def && !schema.isJoi) {
return createAjvValidator(schema);
}
throw new Error('Unable to detect schema type. Supported: Zod, Joi, Yup, JSON Schema. ' +
'Or provide a validator function instead.');
}
return null;
}
export function createDevelopmentPipeline(options = {}) {
const manager = new MessageMiddlewareManager();
manager.addInboundMiddleware(new ParseJsonInboundMiddleware());
if (options.logging?.enabled !== false) {
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new LogInboundMiddleware(logger));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new DispatcherMiddleware(options.dispatcher));
}
return manager;
}
export function createStandardPipeline(options = {}) {
const manager = new MessageMiddlewareManager();
manager.addInboundMiddleware(new ParseJsonInboundMiddleware());
if (options.logging?.enabled !== false) {
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new LogInboundMiddleware(logger));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 3,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.dispatcher) {
manager.addInboundMiddleware(new DispatcherMiddleware(options.dispatcher));
}
return manager;
}
export function createProductionPipeline(options = {}) {
const manager = new MessageMiddlewareManager();
manager.addInboundMiddleware(new ParseJsonInboundMiddleware());
if (options.logging?.enabled !== false) {
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new LogInboundMiddleware(logger));
}
if (options.deduplication?.enabled !== false && options.deduplication?.store) {
manager.addInboundMiddleware(new 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 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 DispatcherMiddleware(options.dispatcher));
}
return manager;
}
export function createHighThroughputPipeline(options = {}) {
return createDevelopmentPipeline({
...options,
logging: options.logging ?? { enabled: false }
});
}
export function createCompliancePipeline(options = {}) {
const manager = new MessageMiddlewareManager();
manager.addInboundMiddleware(new ParseJsonInboundMiddleware());
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new LogInboundMiddleware(logger));
if (options.validation?.enabled !== false && options.validation?.validator) {
manager.addInboundMiddleware(new ValidateInboundMiddleware(options.validation.validator));
}
if (options.retry?.enabled !== false) {
manager.addInboundMiddleware(new 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 DispatcherMiddleware(options.dispatcher));
}
return manager;
}
export function createResilientPipeline(options = {}) {
const manager = new MessageMiddlewareManager();
manager.addInboundMiddleware(new ParseJsonInboundMiddleware());
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new LogInboundMiddleware(logger));
if (options.deduplication?.enabled !== false && options.deduplication?.store) {
manager.addInboundMiddleware(new 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 RetryInboundMiddleware({
maxRetries: options.retry?.maxRetries ?? 5,
delayMs: options.retry?.delayMs ?? 1000,
backoffMultiplier: options.retry?.backoffMultiplier ?? 2
}));
}
if (options.deadLetter) {
manager.addInboundMiddleware(new DeadLetterInboundMiddleware(options.deadLetter));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach(middleware => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new DispatcherMiddleware(options.dispatcher));
}
return manager;
}
export function createObservablePipeline(options = {}) {
const manager = new MessageMiddlewareManager();
manager.addInboundMiddleware(new ParseJsonInboundMiddleware());
const logger = options.logging?.logger || console;
manager.addInboundMiddleware(new LogInboundMiddleware(logger));
if (options.metrics?.enabled !== false && options.metrics?.collector) {
manager.addInboundMiddleware(new MetricsInboundMiddleware(options.metrics.collector));
}
if (options.tracing?.enabled !== false && options.tracing?.tracer) {
manager.addInboundMiddleware(new TracingInboundMiddleware(options.tracing.tracer));
}
if (options.deduplication?.enabled !== false && options.deduplication?.store) {
manager.addInboundMiddleware(new 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 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 DispatcherMiddleware(options.dispatcher));
}
return manager;
}
//# sourceMappingURL=presets.js.map