@vulcan-sql/core
Version:
Core package of VulcanSQL
54 lines • 2.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnumValidator = void 0;
const tslib_1 = require("tslib");
const models_1 = require("../../../models/index");
const Joi = require("joi");
const errors_1 = require("../../utils/errors");
const constraints_1 = require("../constraints");
let EnumValidator = class EnumValidator extends models_1.InputValidator {
constructor() {
super(...arguments);
this.argsValidator = Joi.object({
items: Joi.array().min(1).required(),
});
}
validateSchema(args) {
try {
// validate arguments schema
Joi.assert(args, this.argsValidator);
}
catch (e) {
if (e instanceof Joi.ValidationError)
throw new errors_1.ConfigurationError(`The arguments schema for "enum" type validator is invalid: ${e.message}`, { nestedError: e });
else
throw new errors_1.ConfigurationError('The arguments schema for "enum" type validator is invalid', { nestedError: e });
}
}
validateData(value, args) {
// It there is no value, ignore the check.
if (value === undefined || value === null)
return;
// Only allow the values in items property
const schema = Joi.valid(...args.items.map((item) => String(item)));
try {
Joi.assert(String(value), schema);
}
catch (e) {
if (e instanceof Joi.ValidationError)
throw new errors_1.UserError(`The input data for "enum" type validator is invalid: ${e.message}`, { nestedError: e });
else
throw new errors_1.UserError('The input data for "enum" type validator is invalid', { nestedError: e });
}
}
getConstraints(args) {
const constraints = [constraints_1.Constraint.Enum(args.items)];
return constraints;
}
};
EnumValidator = tslib_1.__decorate([
(0, models_1.VulcanInternalExtension)(),
(0, models_1.VulcanExtensionId)('enum')
], EnumValidator);
exports.EnumValidator = EnumValidator;
//# sourceMappingURL=enumValidator.js.map