UNPKG

violations

Version:

get violated arguments for validation and assertion

171 lines (140 loc) 5.76 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); var _get = function get(_x2, _x3, _x4) { var _again = true; _function: while (_again) { var object = _x2, property = _x3, receiver = _x4; desc = parent = getter = undefined; _again = false; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x2 = parent; _x3 = property; _x4 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } function toS(v) { return Object.prototype.toString.call(v); } var util = { isString: function isString(v) { return typeof v === 'string'; }, isFunction: function isFunction(v) { return typeof v === 'function'; }, isBoolean: function isBoolean(v) { return typeof v === 'boolean'; }, isNumber: function isNumber(v) { return (typeof v === 'number' || v instanceof Number) && !isNaN(v); }, isInteger: function isInteger(v) { return typeof v === 'number' && Number.isInteger(v); }, isUndefined: function isUndefined(v) { return typeof v === 'undefined'; }, isArray: function isArray(v) { return Array.isArray(v); }, isNull: function isNull(v) { return v === null; }, isEmpty: function isEmpty(v) { return util.isUndefined(v) || util.isNull(v) || v === ''; }, isObject: function isObject(v) { return typeof v === 'object' && !util.isArray(v) && !util.isNull(v) && !util.isDate(v) && !util.isRegExp(v) && !util.isNumber(v); }, isDate: function isDate(v) { return toS(v) === '[object Date]'; }, isRegExp: function isRegExp(v) { return toS(v) === '[object RegExp]'; }, isError: function isError(v) { return v instanceof Error; }, // https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address isEmail: function isEmail(v) { return /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(v); } }; exports.util = util; var AssertionError = (function (_Error) { function AssertionError(message) { _classCallCheck(this, AssertionError); _get(Object.getPrototypeOf(AssertionError.prototype), 'constructor', this).call(this, message); this.name = 'AssertionError'; this.message = message; if (Error.captureStackTrace) { Error.captureStackTrace(this); } else { var err = new Error(); var stack = err.stack; if (!stack) { // IE10 try { throw err; } catch (e) { stack = e.stack; } } this.stack = stack; } } _inherits(AssertionError, _Error); return AssertionError; })(Error); exports.AssertionError = AssertionError; var Violate = (function () { function Violate() { var rules = arguments[0] === undefined ? {} : arguments[0]; _classCallCheck(this, Violate); this.rules = rules; } _createClass(Violate, [{ key: 'validate', value: function validate(values) { var _this = this; // validate arguments if (values === null || values === undefined) { return; } var violations = Object.keys(this.rules).map(function (key) { // execute rules with undefined if values not exists. var value = values[key]; var rule = _this.rules[key]; // apply rule if function if (util.isFunction(rule)) { return rule(value, key, util); } // create validator if rule is object var v = new Violate(rule); return v.validate(value); }).reduce(function (pre, curr) { // filter undefined if (curr === undefined) { return pre; } // filter empty array if (Array.isArray(curr) && curr.length === 0) { return pre; } // merge into array return pre.concat(curr); }, []); // return violations if exists if (violations.length > 0) { return violations; } // return undefined if no violations } }, { key: 'assert', value: function assert(values) { // delegate to this.validate var violations = this.validate(values); if (violations === undefined) { return; } throw new AssertionError(JSON.stringify(violations)); } }]); return Violate; })(); exports.Violate = Violate;