@hiki9/rich-domain
Version:
Rich Domain is a library that provides a set of tools to help you build complex business logic in NodeJS using Domain Driven Design principles.
147 lines • 7.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Validator = void 0;
const ids_1 = require("../core/domain/ids");
class Validator {
constructor() { }
static create() {
if (!Validator.instance) {
Validator.instance = new Validator();
}
return Validator.instance;
}
static isSpecialChar(char, index) {
const asciiCode = char.charCodeAt(index);
return (asciiCode >= 33 && asciiCode <= 47 ||
asciiCode >= 58 && asciiCode <= 64 ||
asciiCode >= 91 && asciiCode <= 96 ||
asciiCode >= 123 && asciiCode <= 126);
}
isArray(props) {
return Array.isArray(props);
}
isString(props) {
return typeof props === 'string';
}
isNumber(props) {
return typeof props === 'number';
}
isDate(props) {
return props instanceof Date;
}
isObject(props) {
const isObj = typeof props === 'object';
if (!isObj || props === null)
return false;
if (JSON.stringify(props) === JSON.stringify({}))
return true;
const hasKeys = Object.keys(props).length > 0;
const isNotArray = !Validator.instance.isArray(props);
const isNotEntity = !Validator.instance.isEntity(props);
const isNotAggregate = !Validator.instance.isAggregate(props);
const isNotValueObject = !Validator.instance.isValueObject(props);
const isNotId = !Validator.instance.isID(props);
return hasKeys && isNotAggregate && isNotArray && isNotEntity && isNotValueObject && isNotId;
}
isNull(props) {
return props === null;
}
isUndefined(props) {
return typeof props === 'undefined';
}
isBoolean(props) {
return typeof props === 'boolean';
}
isFunction(props) {
return typeof props === 'function';
}
isEntity(props) {
const isEntity = props?.isEntity;
return isEntity;
}
isAggregate(props) {
return props?.isAggregate || props?.isEntity;
}
isValueObject(props) {
return props?.isValueObject;
}
isSymbol(props) {
return typeof props === 'symbol';
}
isID(props) {
return props instanceof ids_1.Id;
}
number(target) {
return {
isEqualTo: (value) => Validator.instance.isNumber(target) && Validator.instance.isNumber(value) && target === value,
isGreaterThan: (value) => Validator.instance.isNumber(target) && Validator.instance.isNumber(value) && target > value,
isLessThan: (value) => Validator.instance.isNumber(target) && Validator.instance.isNumber(value) && target < value,
isLessOrEqualTo: (value) => Validator.instance.isNumber(target) &&
Validator.instance.isNumber(value) && target <= value,
isGreaterOrEqualTo: (value) => Validator.instance.isNumber(target) &&
Validator.instance.isNumber(value) && target >= value,
isSafeInteger: () => Validator.instance.isNumber(target) &&
target <= Number.MAX_SAFE_INTEGER && target >= Number.MIN_SAFE_INTEGER,
isPositive: () => Validator.instance.isNumber(target) && target >= 0,
isNegative: () => Validator.instance.isNumber(target) && target < 0,
isEven: () => Validator.instance.isNumber(target) && target % 2 === 0,
isInteger: () => Validator.instance.isNumber(target) && target - Math.trunc(target) === 0,
isBetween: (min, max) => Validator.instance.isNumber(target) && target < max && target > min,
isBetweenOrEqual: (min, max) => Validator.instance.isNumber(target) && target <= max && target >= min
};
}
string(target) {
return {
isSpecialChar: (index = 0) => Validator.instance.isString(target[index]) && Validator.isSpecialChar(target, index),
hasSpecialChar: () => Validator.instance.isString(target) && target.split('').map((char) => Validator.isSpecialChar(char, 0)).includes(true),
hasLengthGreaterThan: (length) => Validator.instance.isString(target) && target.length > length,
hasLengthGreaterOrEqualTo: (length) => Validator.instance.isString(target) && target.length >= length,
hasLengthLessThan: (length) => Validator.instance.isString(target) && target.length < length,
hasLengthLessOrEqualTo: (length) => Validator.instance.isString(target) && target.length <= length,
hasLengthEqualTo: (length) => Validator.instance.isString(target) && target.length === length,
hasLengthBetween: (min, max) => Validator.instance.isString(target) &&
target.length > min && target.length < max,
hasLengthBetweenOrEqual: (min, max) => Validator.instance.isString(target) &&
target.length >= min && target.length <= max,
includes: (value) => Validator.instance.isString(target) && target.includes(value) || value.split('').map((char) => target.includes(char)).includes(true),
isEmpty: () => (Validator.instance.isUndefined(target) ||
Validator.instance.isNull(target)) ||
(Validator.instance.isString(target) &&
target.trim() === ''),
match: (regex) => regex.test(target),
hasOnlyNumbers: () => Validator.instance.isString(target) &&
target.split('')
.map((n) => n.charCodeAt(0) >= 48 && n.charCodeAt(0) <= 57)
.every((v) => v === true),
hasOnlyLetters: () => Validator.instance.isString(target) &&
target.toUpperCase()
.split('')
.map((n) => n.charCodeAt(0) >= 65 && n.charCodeAt(0) <= 90)
.every((v) => v === true),
isEqual: (value) => Validator.instance.isString(target) && Validator.instance.isString(value) && target === value
};
}
date(target) {
return {
isBeforeThan: (value) => (Validator.instance.isDate(target) &&
Validator.instance.isDate(value)) && target.getTime() < value.getTime(),
isBeforeOrEqualTo: (value) => (Validator.instance.isDate(target) &&
Validator.instance.isDate(value)) && target.getTime() <= value.getTime(),
isAfterNow: () => Validator.instance.isDate(target) && target.getTime() > Date.now(),
isBeforeNow: () => Validator.instance.isDate(target) && target.getTime() < Date.now(),
isBetween: (start, end) => Validator.instance.isDate(target) &&
target.getTime() > start.getTime() &&
target.getTime() < end.getTime(),
isWeekend: () => Validator.instance.isDate(target) && target.getDay() === 0 ||
Validator.instance.isDate(target) && target.getDay() === 6,
isAfterThan: (value) => (Validator.instance.isDate(target) &&
Validator.instance.isDate(value)) && target.getTime() > value.getTime(),
isAfterOrEqualTo: (value) => (Validator.instance.isDate(target) &&
Validator.instance.isDate(value)) && target.getTime() >= value.getTime(),
};
}
}
exports.Validator = Validator;
Validator.instance = null;
exports.default = Validator.create();
//# sourceMappingURL=validator.js.map