UNPKG

@kerthin/domain

Version:
46 lines 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DomainValueObject = void 0; const ramda_1 = require("ramda"); const utils_1 = require("../utils"); const validate_1 = require("./validate"); const utils_2 = require("@kerthin/utils"); class DomainValueObject { constructor(value) { this.value = value; this.validator = new validate_1.ValidatorExecutor(new validate_1.ValueObjectValidator()); } toValue() { return this.value; } validate(action) { const target = this['constructor']; const meta = utils_1.Metadata.getTargetMetadata(target); const validators = meta.validators; const getValidations = (0, ramda_1.compose)((0, ramda_1.filter)(utils_2.isNotEmptyOrNil), (0, ramda_1.map)((validator) => validator(this.toValue()))); const addValidations = (0, ramda_1.forEach)((validation) => this.validator.add(validation)); addValidations(getValidations((validators === null || validators === void 0 ? void 0 : validators[utils_1.Actions.DEFAULT_TO]) || [])); switch (action) { case utils_1.Actions.ON_CREATE: addValidations(getValidations((validators === null || validators === void 0 ? void 0 : validators[utils_1.Actions.ON_CREATE]) || [])); break; case utils_1.Actions.ON_UPDATE: addValidations(getValidations((validators === null || validators === void 0 ? void 0 : validators[utils_1.Actions.ON_UPDATE]) || [])); break; default: break; } return this.validator.throwException(); } equals(vo) { if (vo === null || vo === undefined) { return false; } if (vo.value === undefined) { return false; } return JSON.stringify(this.value) === JSON.stringify(vo.value); } } exports.DomainValueObject = DomainValueObject; //# sourceMappingURL=domain-value-object.js.map