@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
47 lines • 1.79 kB
JavaScript
import { ValidateInboundMiddleware } from '../middlewares/validation.middleware';
export function createAjvValidator(schema, options = {}) {
let ajv;
let validate;
const validator = async (data) => {
if (!validate) {
if (options.ajvInstance) {
ajv = options.ajvInstance;
}
else {
try {
const AjvModule = require('ajv');
const AjvClass = AjvModule.default || AjvModule;
const ajvOptions = {
allErrors: true,
...options.ajvOptions,
};
ajv = new AjvClass(ajvOptions);
try {
const addFormats = require('ajv-formats');
addFormats.default ? addFormats.default(ajv) : addFormats(ajv);
}
catch {
}
}
catch (error) {
throw new Error('AJV is not installed. Please install it: npm install ajv ajv-formats');
}
}
validate = ajv.compile(schema);
}
const valid = validate(data);
if (!valid) {
const errors = validate.errors || [];
if (options.errorFormatter) {
throw options.errorFormatter(errors);
}
const messages = errors.map((err) => `${err.instancePath || '/'}: ${err.message}`);
throw new Error(`JSON Schema validation failed: ${messages.join(', ')}`);
}
return data;
};
return new ValidateInboundMiddleware(validator, {
throwOnError: !options.passthrough,
});
}
//# sourceMappingURL=ajv.validator.js.map