UNPKG

validator.js-asserts

Version:
57 lines (40 loc) 1.12 kB
'use strict'; /** * Module dependencies. */ const { Violation } = require('validator.js'); const { difference, intersection, isArray, isPlainObject } = require('lodash'); /** * Export `EqualKeysAssert`. */ module.exports = function equalKeysAssert(...keys) { /** * Class name. */ this.__class__ = 'EqualKeys'; if (keys.length === 1 && isArray(keys[0])) { keys = keys[0]; } /** * Keys. */ this.keys = keys; /** * Validation algorithm. */ this.validate = value => { if (!isPlainObject(value)) { throw new Violation(this, value, { value: 'must_be_a_plain_object' }); } const keys = Object.keys(value); if ((keys.length === 0 && this.keys.length > 0) || this.keys.length > keys.length) { throw new Violation(this, value, { difference: difference(this.keys, keys) }); } const intersects = intersection(this.keys, keys); if (keys.length > this.keys.length || intersects.length !== keys.length) { throw new Violation(this, value, { difference: difference(keys, this.keys) }); } return true; }; return this; };