objecture
Version:
❂ Objecture ⏣ Object Watcher, Property Manager ⊚ Capture property changes for object, array mutator methods. ⊚ Schematize and validate object, array properties. ⊚ Browser, NodeJS compatible. ⁘ Uses Core-Plex - Event Listener Manage
35 lines • 1.36 kB
JavaScript
import { assign, typedObjectLiteral } from 'recourse'
import Schema from '../../index.js'
import Validator from '../../validator/index.js'
export default class RequiredValidator extends Validator {
constructor($definition, $schema) {
super(Object.assign({}, $definition, {
type: 'required',
validate: ($key, $value, $source, $target) => {
const { requiredProperties, requiredPropertiesSize, type } = $schema
const corequiredProperties = Object.assign({}, requiredProperties)
let corequiredPropertiesSize = requiredPropertiesSize
const properties = Object.assign(typedObjectLiteral(type), $source, $target)
const definition = this.definition
let pass
if(!requiredPropertiesSize) { pass = true }
else {
if(Object.hasOwn(corequiredProperties, $key)) {
delete corequiredProperties[$key]
corequiredPropertiesSize--
}
if(corequiredPropertiesSize) {
const coschema = new Schema(corequiredProperties, {
path: $schema.path,
parent: $schema.parent,
})
const comodel = Object.assign({}, $target, $source)
const covalidation = coschema.validate(comodel)
pass = covalidation.valid
}
}
return pass
}
}), $schema)
}
}