@apizr-io/class-utils
Version:
Package containing all class-validator function with all custom apizr class validation functions
87 lines • 4.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IsLower = exports.IsGreater = void 0;
const class_validator_1 = require("class-validator");
const validateGreaterLower = (value, args, comparator, validationOptions) => {
const [relatedPropertyName] = args.constraints;
if (typeof value !== 'number') {
throw new Error(`Value ${value} is not a number`);
}
if (typeof relatedPropertyName === 'string') {
if (!(relatedPropertyName in args.object)) {
throw new Error(`Property ${relatedPropertyName} not found in object`);
}
const relatedValue = args.object[relatedPropertyName];
if (typeof relatedValue !== 'number') {
throw new Error(`Invalid property ${relatedPropertyName} type: ${typeof relatedValue}`);
}
if (comparator(value, relatedValue)) {
return true;
}
return (validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.allowEqual) ? value === relatedValue : false;
}
if (typeof relatedPropertyName === 'number') {
if (comparator(value, relatedPropertyName)) {
return true;
}
return (validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.allowEqual)
? value === relatedPropertyName
: false;
}
throw new Error(`Invalid related property type: ${typeof relatedPropertyName}`);
};
function IsGreater(valueOrProperty, validationOptions) {
return (object, propertyName) => {
(0, class_validator_1.registerDecorator)({
name: 'isGreater',
target: object.constructor,
propertyName,
constraints: [valueOrProperty],
options: {
message: (args) => {
const [relatedPropertyName] = args.constraints;
const targetValue = typeof relatedPropertyName === 'number'
? relatedPropertyName
: args.object[relatedPropertyName];
const example = `${args.value} >${(validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.allowEqual) ? '=' : ''} ${targetValue} is false`;
return `Number ${args.property} must be greater${(validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.allowEqual) ? ' or equal' : ''} than ${relatedPropertyName} (${example})`;
},
...validationOptions,
},
validator: {
validate(value, args) {
return validateGreaterLower(value, args, (value, relatedValue) => value > relatedValue, validationOptions);
},
},
});
};
}
exports.IsGreater = IsGreater;
function IsLower(valueOrProperty, validationOptions) {
return (object, propertyName) => {
(0, class_validator_1.registerDecorator)({
name: 'isLower',
target: object.constructor,
propertyName,
constraints: [valueOrProperty],
options: {
message: (args) => {
const [relatedPropertyName] = args.constraints;
const targetValue = typeof relatedPropertyName === 'number'
? relatedPropertyName
: args.object[relatedPropertyName];
const example = `${args.value} <${(validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.allowEqual) ? '=' : ''} ${targetValue} is false`;
return `Number ${args.property} must be lower${(validationOptions === null || validationOptions === void 0 ? void 0 : validationOptions.allowEqual) ? ' or equal' : ''} than ${relatedPropertyName} (${example})`;
},
...validationOptions,
},
validator: {
validate(value, args) {
return validateGreaterLower(value, args, (value, relatedValue) => value < relatedValue, validationOptions);
},
},
});
};
}
exports.IsLower = IsLower;
//# sourceMappingURL=number.decorator.js.map