@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
101 lines • 4.52 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createQueuePipeline = createQueuePipeline;
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 retry_middleware_1 = require("./middlewares/retry.middleware");
const deduplication_middleware_1 = require("./middlewares/deduplication.middleware");
const metrics_middleware_1 = require("./middlewares/metrics.middleware");
const validators_1 = require("./validators");
function createValidatorFromValidation(validation) {
if (typeof validation === 'function') {
const { ValidateInboundMiddleware } = require('./middlewares/validation.middleware');
return new ValidateInboundMiddleware(validation);
}
if (typeof validation === 'object' && validation !== null) {
const schema = validation;
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 (schema.type && !schema._def && !schema.isJoi && !schema.__isYupSchema__) {
return (0, validators_1.createAjvValidator)(schema);
}
throw new Error('Unable to detect validation schema type. Supported: Zod, Joi, Yup, JSON Schema, or function.');
}
return null;
}
function createQueuePipeline(options) {
const manager = new manager_1.MessageMiddlewareManager();
const maxRetries = options.maxRetries ?? 3;
const retryDelay = options.retryDelay ?? 1000;
const retryBackoff = options.retryBackoff ?? 2;
manager.addInboundMiddleware(new json_middleware_1.ParseJsonInboundMiddleware());
if (options.logger) {
manager.addInboundMiddleware(new logging_middleware_1.LogInboundMiddleware(options.logger));
}
if (options.metrics) {
manager.addInboundMiddleware(new metrics_middleware_1.MetricsInboundMiddleware(options.metrics.collector, {
prefix: options.metrics.prefix || options.queueName,
}));
}
if (options.persistence) {
try {
const { PersistenceInboundMiddleware } = require('@message-in-the-middle/persistence-core');
const storeOn = options.persistence.storeOn || ['error'];
manager.addInboundMiddleware(new PersistenceInboundMiddleware(options.persistence.store, {
storeOn: storeOn,
sourceExtractor: options.persistence.sourceExtractor ||
((ctx) => ({ queueName: options.queueName })),
}));
}
catch (error) {
throw new Error('Persistence requires @message-in-the-middle/persistence-core package. ' +
'Install it with: npm install @message-in-the-middle/persistence-core');
}
}
if (options.deduplication) {
manager.addInboundMiddleware(new deduplication_middleware_1.DeduplicateInboundMiddleware(options.deduplication.store, {
keyExtractor: options.deduplication.keyExtractor,
ttlSeconds: options.deduplication.ttlSeconds,
}));
}
if (options.validation) {
const validator = createValidatorFromValidation(options.validation);
if (validator) {
manager.addInboundMiddleware(validator);
}
}
if (maxRetries > 0) {
manager.addInboundMiddleware(new retry_middleware_1.RetryInboundMiddleware({
maxRetries,
delayMs: retryDelay,
backoffMultiplier: retryBackoff,
}));
}
if (options.customMiddlewares) {
options.customMiddlewares.forEach((middleware) => {
manager.addInboundMiddleware(middleware);
});
}
if (options.dispatcher) {
manager.addInboundMiddleware(new dispatcher_1.DispatcherMiddleware(options.dispatcher));
}
else if (options.handler) {
manager.addInboundMiddleware({
async process(ctx, next) {
await options.handler(ctx);
await next();
},
});
}
return manager;
}
//# sourceMappingURL=queue-presets.js.map