@dvsa/appdev-api-common
Version:
Utils library for common API functionality
29 lines (28 loc) • 1.19 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateJsonSchema = validateJsonSchema;
const ajv_1 = __importDefault(require("ajv"));
const ajv_formats_1 = __importDefault(require("ajv-formats"));
const http_status_codes_1 = require("../api/http-status-codes");
const validation_error_1 = require("./validation-error");
const ajv = new ajv_1.default({ removeAdditional: true, allErrors: true });
(0, ajv_formats_1.default)(ajv);
ajv.addKeyword("tsEnumNames");
const validatorCache = new WeakMap();
function getValidator(schema) {
let validator = validatorCache.get(schema);
if (!validator) {
validator = ajv.compile(schema);
validatorCache.set(schema, validator);
}
return validator;
}
function validateJsonSchema(schema, data) {
const validateFunction = getValidator(schema);
if (!validateFunction(data)) {
throw new validation_error_1.ValidationError(http_status_codes_1.HttpStatus.BAD_REQUEST, "Validation failed", [...(validateFunction.errors ?? [])]);
}
}