UNPKG

@message-in-the-middle/core

Version:

Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.

211 lines 9.32 kB
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