@message-in-the-middle/core
Version:
Framework-agnostic middleware pattern for message queue processing. Core package with all middlewares.
50 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAjvValidator = createAjvValidator;
const validation_middleware_1 = require("../middlewares/validation.middleware");
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 validation_middleware_1.ValidateInboundMiddleware(validator, {
throwOnError: !options.passthrough,
});
}
//# sourceMappingURL=ajv.validator.js.map