Socket
Socket
Sign inDemoInstall

js-data-schema

Package Overview
Dependencies
1
Maintainers
1
Versions
12
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.2.4 to 1.2.5

6

CHANGELOG.md

@@ -0,1 +1,7 @@

##### 1.2.5 - 03 June 2015
###### Backwards compatible bug fixes
- #18 - IE8 support
- #19 - return when no schemaRules are set (ie8 compat) Thanks @willrstern
##### 1.2.4 - 08 April 2015

@@ -2,0 +8,0 @@

2511

dist/js-data-schema.js
/*!
* js-data-schema
* @version 1.2.4 - Homepage <https://github.com/js-data/js-data-schema/>
* @version 1.2.5 - Homepage <https://github.com/js-data/js-data-schema/>
* @author Jason Dobry <jason.dobry@gmail.com>

@@ -66,16 +66,28 @@ * @copyright (c) 2013-2015 Jason Dobry

var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
Object.defineProperty(exports, '__esModule', {
value: true
});
var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
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 _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var utils = _interopRequire(__webpack_require__(1));
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var defaultDataTypes = _interopRequire(__webpack_require__(2));
var _utils = __webpack_require__(1);
var defaultRules = _interopRequire(__webpack_require__(3));
var _utils2 = _interopRequireDefault(_utils);
var Schema = _interopRequire(__webpack_require__(4));
var _dataTypes = __webpack_require__(47);
var _dataTypes2 = _interopRequireDefault(_dataTypes);
var _rules = __webpack_require__(48);
var _rules2 = _interopRequireDefault(_rules);
var _schema = __webpack_require__(49);
var _schema2 = _interopRequireDefault(_schema);
var id = 1;

@@ -93,129 +105,128 @@

_createClass(Schemator, {
availableDataTypes: {
value: function availableDataTypes() {
return utils.unique(utils.keys(this.dataTypes).concat(utils.keys(defaultDataTypes)));
_createClass(Schemator, [{
key: 'availableDataTypes',
value: function availableDataTypes() {
return _utils2['default'].unique(_utils2['default'].keys(this.dataTypes).concat(_utils2['default'].keys(_dataTypes2['default'])));
}
}, {
key: 'availableRules',
value: function availableRules() {
return _utils2['default'].unique(_utils2['default'].keys(this.rules).concat(_utils2['default'].keys(_rules2['default'])));
}
}, {
key: 'availableSchemata',
value: function availableSchemata() {
return _utils2['default'].keys(this.schemata);
}
}, {
key: 'defineDataType',
value: function defineDataType(name, typeDefinition) {
if (!_utils2['default'].isString(name)) {
throw new Error('"name" must be a string!');
} else if (!_utils2['default'].isFunction(typeDefinition)) {
throw new Error('"typeDefinition" must be a function!');
} else if (this.dataTypes[name]) {
throw new Error('dataType already registered!');
}
},
availableRules: {
value: function availableRules() {
return utils.unique(utils.keys(this.rules).concat(utils.keys(defaultRules)));
this.dataTypes[name] = typeDefinition;
}
}, {
key: 'defineRule',
value: function defineRule(name, ruleFunc, async) {
if (!_utils2['default'].isString(name)) {
throw new Error('"name" must be a string!');
} else if (!_utils2['default'].isFunction(ruleFunc)) {
throw new Error('"ruleFunc" must be a function!');
} else if (this.rules[name]) {
throw new Error('rule already registered!');
}
},
availableSchemata: {
value: function availableSchemata() {
return utils.keys(this.schemata);
this.rules[name] = ruleFunc;
this.rules[name].async = !!async;
}
}, {
key: 'defineSchema',
value: function defineSchema(name, schema) {
if (this.schemata[name]) {
throw new Error('schema already registered!');
} else if (schema instanceof _schema2['default']) {
throw new Error('schema registered elsewhere!');
}
},
defineDataType: {
value: function defineDataType(name, typeDefinition) {
if (!utils.isString(name)) {
throw new Error("\"name\" must be a string!");
} else if (!utils.isFunction(typeDefinition)) {
throw new Error("\"typeDefinition\" must be a function!");
} else if (this.dataTypes[name]) {
throw new Error("dataType already registered!");
}
this.dataTypes[name] = typeDefinition;
this.schemata[name] = new _schema2['default'](name, schema, this);
this.schemata[name].parent = this;
return this.schemata[name];
}
}, {
key: 'getDataType',
value: function getDataType(name) {
return this.dataTypes[name] || _dataTypes2['default'][name];
}
}, {
key: 'getRule',
value: function getRule(name) {
return this.rules[name] || _rules2['default'][name];
}
}, {
key: 'getSchema',
value: function getSchema(name) {
return this.schemata[name];
}
}, {
key: 'removeDataType',
value: function removeDataType(name) {
delete this.dataTypes[name];
}
}, {
key: 'removeRule',
value: function removeRule(name) {
delete this.rules[name];
}
}, {
key: 'removeSchema',
value: function removeSchema(name) {
delete this.schemata[name];
}
}, {
key: 'schemaCheck',
value: function schemaCheck(name) {
if (!this.schemata[name]) {
throw new Error('schema is not registered!');
}
},
defineRule: {
value: function defineRule(name, ruleFunc, async) {
if (!utils.isString(name)) {
throw new Error("\"name\" must be a string!");
} else if (!utils.isFunction(ruleFunc)) {
throw new Error("\"ruleFunc\" must be a function!");
} else if (this.rules[name]) {
throw new Error("rule already registered!");
}
this.rules[name] = ruleFunc;
this.rules[name].async = !!async;
}
},
defineSchema: {
value: function defineSchema(name, schema) {
if (this.schemata[name]) {
throw new Error("schema already registered!");
} else if (schema instanceof Schema) {
throw new Error("schema registered elsewhere!");
}
this.schemata[name] = new Schema(name, schema, this);
this.schemata[name].parent = this;
return this.schemata[name];
}
},
getDataType: {
value: function getDataType(name) {
return this.dataTypes[name] || defaultDataTypes[name];
}
},
getRule: {
value: function getRule(name) {
return this.rules[name] || defaultRules[name];
}
},
getSchema: {
value: function getSchema(name) {
return this.schemata[name];
}
},
removeDataType: {
value: function removeDataType(name) {
delete this.dataTypes[name];
}
},
removeRule: {
value: function removeRule(name) {
delete this.rules[name];
}
},
removeSchema: {
value: function removeSchema(name) {
delete this.schemata[name];
}
},
schemaCheck: {
value: function schemaCheck(name) {
if (!this.schemata[name]) {
throw new Error("schema is not registered!");
}
}
},
validateSync: {
value: function validateSync(name, attrs, options) {
this.schemaCheck(name);
return this.schemata[name].validateSync(attrs, options);
}
},
validate: {
value: function validate(name, attrs, options, cb) {
this.schemaCheck(name);
return this.schemata[name].validate(attrs, options, cb);
}
},
addDefaultsToTarget: {
value: function addDefaultsToTarget(name, target, overwrite) {
this.schemaCheck(name);
return this.schemata[name].addDefaultsToTarget(target, overwrite);
}
},
setDefaults: {
value: function setDefaults(name, attrs) {
this.schemaCheck(name);
return this.schemata[name].setDefaults(attrs);
}
},
getDefaults: {
value: function getDefaults(name) {
this.schemaCheck(name);
return this.schemata[name].getDefaults();
}
},
stripNonSchemaAttrs: {
value: function stripNonSchemaAttrs(name, attrs) {
this.schemaCheck(name);
return this.schemata[name].stripNonSchemaAttrs(attrs);
}
}
});
}, {
key: 'validateSync',
value: function validateSync(name, attrs, options) {
this.schemaCheck(name);
return this.schemata[name].validateSync(attrs, options);
}
}, {
key: 'validate',
value: function validate(name, attrs, options, cb) {
this.schemaCheck(name);
return this.schemata[name].validate(attrs, options, cb);
}
}, {
key: 'addDefaultsToTarget',
value: function addDefaultsToTarget(name, target, overwrite) {
this.schemaCheck(name);
return this.schemata[name].addDefaultsToTarget(target, overwrite);
}
}, {
key: 'setDefaults',
value: function setDefaults(name, attrs) {
this.schemaCheck(name);
return this.schemata[name].setDefaults(attrs);
}
}, {
key: 'getDefaults',
value: function getDefaults(name) {
this.schemaCheck(name);
return this.schemata[name].getDefaults();
}
}, {
key: 'stripNonSchemaAttrs',
value: function stripNonSchemaAttrs(name, attrs) {
this.schemaCheck(name);
return this.schemata[name].stripNonSchemaAttrs(attrs);
}
}]);

@@ -225,3 +236,4 @@ return Schemator;

module.exports = Schemator;
exports['default'] = Schemator;
module.exports = exports['default'];

@@ -232,87 +244,143 @@ /***/ },

var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
Object.defineProperty(exports, '__esModule', {
value: true
});
var isString = _interopRequire(__webpack_require__(5));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var isBoolean = _interopRequire(__webpack_require__(6));
var _moutLangIsString = __webpack_require__(7);
var isNumber = _interopRequire(__webpack_require__(7));
var _moutLangIsString2 = _interopRequireDefault(_moutLangIsString);
var isObject = _interopRequire(__webpack_require__(8));
var _moutLangIsBoolean = __webpack_require__(10);
var isDate = _interopRequire(__webpack_require__(9));
var _moutLangIsBoolean2 = _interopRequireDefault(_moutLangIsBoolean);
var isFunction = _interopRequire(__webpack_require__(10));
var _moutLangIsNumber = __webpack_require__(11);
var isUndefined = _interopRequire(__webpack_require__(11));
var _moutLangIsNumber2 = _interopRequireDefault(_moutLangIsNumber);
var isArray = _interopRequire(__webpack_require__(12));
var _moutLangIsObject = __webpack_require__(12);
var isEmpty = _interopRequire(__webpack_require__(13));
var _moutLangIsObject2 = _interopRequireDefault(_moutLangIsObject);
var toString = _interopRequire(__webpack_require__(14));
var _moutLangIsDate = __webpack_require__(13);
var toNumber = _interopRequire(__webpack_require__(15));
var _moutLangIsDate2 = _interopRequireDefault(_moutLangIsDate);
var _get = _interopRequire(__webpack_require__(16));
var _moutLangIsFunction = __webpack_require__(14);
var deepMixIn = _interopRequire(__webpack_require__(17));
var _moutLangIsFunction2 = _interopRequireDefault(_moutLangIsFunction);
var deepFillIn = _interopRequire(__webpack_require__(18));
var _moutLangIsUndefined = __webpack_require__(15);
var forOwn = _interopRequire(__webpack_require__(19));
var _moutLangIsUndefined2 = _interopRequireDefault(_moutLangIsUndefined);
var keys = _interopRequire(__webpack_require__(20));
var _moutLangIsArray = __webpack_require__(16);
var pick = _interopRequire(__webpack_require__(21));
var _moutLangIsArray2 = _interopRequireDefault(_moutLangIsArray);
var filter = _interopRequire(__webpack_require__(22));
var _moutLangIsEmpty = __webpack_require__(17);
var map = _interopRequire(__webpack_require__(23));
var _moutLangIsEmpty2 = _interopRequireDefault(_moutLangIsEmpty);
var merge = _interopRequire(__webpack_require__(24));
var _moutLangToString = __webpack_require__(18);
var unset = _interopRequire(__webpack_require__(25));
var _moutLangToString2 = _interopRequireDefault(_moutLangToString);
var contains = _interopRequire(__webpack_require__(26));
var _moutLangToNumber = __webpack_require__(19);
var intersection = _interopRequire(__webpack_require__(27));
var _moutLangToNumber2 = _interopRequireDefault(_moutLangToNumber);
var difference = _interopRequire(__webpack_require__(28));
var _moutObjectGet = __webpack_require__(20);
var unique = _interopRequire(__webpack_require__(29));
var _moutObjectGet2 = _interopRequireDefault(_moutObjectGet);
var toInt = _interopRequire(__webpack_require__(30));
var _moutObjectDeepMixIn = __webpack_require__(22);
module.exports = {
isString: isString,
isBoolean: isBoolean,
isNumber: isNumber,
isObject: isObject,
isDate: isDate,
isFunction: isFunction,
isUndefined: isUndefined,
isArray: isArray,
isEmpty: isEmpty,
toString: toString,
toNumber: toNumber,
var _moutObjectDeepMixIn2 = _interopRequireDefault(_moutObjectDeepMixIn);
get: _get,
deepMixIn: deepMixIn,
deepFillIn: deepFillIn,
forOwn: forOwn,
keys: keys,
pick: pick,
filter: filter,
map: map,
merge: merge,
unset: unset,
var _moutObjectDeepFillIn = __webpack_require__(2);
contains: contains,
intersection: intersection,
difference: difference,
unique: unique,
var _moutObjectDeepFillIn2 = _interopRequireDefault(_moutObjectDeepFillIn);
toInt: toInt,
var _moutObjectForOwn = __webpack_require__(3);
var _moutObjectForOwn2 = _interopRequireDefault(_moutObjectForOwn);
var _moutObjectKeys = __webpack_require__(23);
var _moutObjectKeys2 = _interopRequireDefault(_moutObjectKeys);
var _moutObjectPick = __webpack_require__(24);
var _moutObjectPick2 = _interopRequireDefault(_moutObjectPick);
var _moutObjectFilter = __webpack_require__(26);
var _moutObjectFilter2 = _interopRequireDefault(_moutObjectFilter);
var _moutObjectMap = __webpack_require__(31);
var _moutObjectMap2 = _interopRequireDefault(_moutObjectMap);
var _moutObjectMerge = __webpack_require__(32);
var _moutObjectMerge2 = _interopRequireDefault(_moutObjectMerge);
var _moutObjectUnset = __webpack_require__(36);
var _moutObjectUnset2 = _interopRequireDefault(_moutObjectUnset);
var _moutArrayContains = __webpack_require__(38);
var _moutArrayContains2 = _interopRequireDefault(_moutArrayContains);
var _moutArrayIntersection = __webpack_require__(40);
var _moutArrayIntersection2 = _interopRequireDefault(_moutArrayIntersection);
var _moutArrayDifference = __webpack_require__(44);
var _moutArrayDifference2 = _interopRequireDefault(_moutArrayDifference);
var _moutArrayUnique = __webpack_require__(41);
var _moutArrayUnique2 = _interopRequireDefault(_moutArrayUnique);
var _moutNumberToInt = __webpack_require__(46);
var _moutNumberToInt2 = _interopRequireDefault(_moutNumberToInt);
exports['default'] = {
isString: _moutLangIsString2['default'],
isBoolean: _moutLangIsBoolean2['default'],
isNumber: _moutLangIsNumber2['default'],
isObject: _moutLangIsObject2['default'],
isDate: _moutLangIsDate2['default'],
isFunction: _moutLangIsFunction2['default'],
isUndefined: _moutLangIsUndefined2['default'],
isArray: _moutLangIsArray2['default'],
isEmpty: _moutLangIsEmpty2['default'],
toString: _moutLangToString2['default'],
toNumber: _moutLangToNumber2['default'],
'get': _moutObjectGet2['default'],
deepMixIn: _moutObjectDeepMixIn2['default'],
deepFillIn: _moutObjectDeepFillIn2['default'],
forOwn: _moutObjectForOwn2['default'],
keys: _moutObjectKeys2['default'],
pick: _moutObjectPick2['default'],
filter: _moutObjectFilter2['default'],
map: _moutObjectMap2['default'],
merge: _moutObjectMerge2['default'],
unset: _moutObjectUnset2['default'],
contains: _moutArrayContains2['default'],
intersection: _moutArrayIntersection2['default'],
difference: _moutArrayDifference2['default'],
unique: _moutArrayUnique2['default'],
toInt: _moutNumberToInt2['default'],
errMsg: function errMsg(rule, actual, expected) {

@@ -331,7 +399,7 @@ return {

forOwn(tasks, function () {
(0, _moutObjectForOwn2['default'])(tasks, function () {
length += 1;
});
forOwn(tasks, function (task, key) {
(0, _moutObjectForOwn2['default'])(tasks, function (task, key) {
task(function (err) {

@@ -355,2 +423,3 @@ var args = Array.prototype.slice.call(arguments, 1);

};
module.exports = exports['default'];

@@ -361,39 +430,37 @@ /***/ },

var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
var forOwn = __webpack_require__(3);
var isPlainObject = __webpack_require__(6);
var utils = _interopRequire(__webpack_require__(1));
/**
* Deeply copy missing properties in the target from the defaults.
*/
function deepFillIn(target, defaults){
var i = 0,
n = arguments.length,
obj;
module.exports = {
string: function string(x) {
return utils.isString(x) ? null : utils.errMsg("type", typeof x, "string");
},
number: function number(x) {
return utils.isNumber(x) ? null : utils.errMsg("type", typeof x, "number");
},
integer: function integer(x) {
if (!utils.isNumber(x)) {
return utils.errMsg("type", typeof x, "integer");
} else if (Math.abs(x) - Math.abs(utils.toInt(x)) !== 0) {
return utils.errMsg("type", "real", "integer");
} else {
return null;
while(++i < n) {
obj = arguments[i];
if (obj) {
// jshint loopfunc: true
forOwn(obj, function(newValue, key) {
var curValue = target[key];
if (curValue == null) {
target[key] = newValue;
} else if (isPlainObject(curValue) &&
isPlainObject(newValue)) {
deepFillIn(curValue, newValue);
}
});
}
}
return target;
}
},
float: function float(x) {
return utils.isNumber(x) ? null : utils.errMsg("type", typeof x, "float");
},
array: function array(x) {
return utils.isArray(x) ? null : utils.errMsg("type", typeof x, "array");
},
object: function object(x) {
return utils.isObject(x) ? null : utils.errMsg("type", typeof x, "object");
},
boolean: function boolean(x) {
return utils.isBoolean(x) ? null : utils.errMsg("type", typeof x, "boolean");
},
date: function date(x) {
return utils.isDate(x) ? null : utils.errMsg("type", typeof x, "date");
}
};
module.exports = deepFillIn;
/***/ },

@@ -403,461 +470,194 @@ /* 3 */

var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
var hasOwn = __webpack_require__(4);
var forIn = __webpack_require__(5);
var utils = _interopRequire(__webpack_require__(1));
/**
* Similar to Array/forEach but works over object properties and fixes Don't
* Enum bug on IE.
* based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
*/
function forOwn(obj, fn, thisObj){
forIn(obj, function(val, key){
if (hasOwn(obj, key)) {
return fn.call(thisObj, obj[key], key, obj);
}
});
}
var defaultDataTypes = _interopRequire(__webpack_require__(2));
module.exports = forOwn;
module.exports = {
nullable: (function (_nullable) {
var _nullableWrapper = function nullable(_x, _x2) {
return _nullable.apply(this, arguments);
};
_nullableWrapper.toString = function () {
return _nullable.toString();
};
return _nullableWrapper;
})(function (x, nullable) {
return (x === null || x === undefined) && !nullable ? utils.errMsg("nullable", "x === " + x, "x !== null && x !== undefined") : null;
}),
max: (function (_max) {
var _maxWrapper = function max(_x, _x2) {
return _max.apply(this, arguments);
};
_maxWrapper.toString = function () {
return _max.toString();
};
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
return _maxWrapper;
})(function (x, max) {
return utils.isNumber(x) && utils.isNumber(max) && x > max ? utils.errMsg("max", "" + x + " > " + max, "" + x + " <= " + max) : null;
}),
min: (function (_min) {
var _minWrapper = function min(_x, _x2) {
return _min.apply(this, arguments);
};
_minWrapper.toString = function () {
return _min.toString();
};
/**
* Safer Object.hasOwnProperty
*/
function hasOwn(obj, prop){
return Object.prototype.hasOwnProperty.call(obj, prop);
}
return _minWrapper;
})(function (x, min) {
return utils.isNumber(x) && utils.isNumber(min) && x < min ? utils.errMsg("min", "" + x + " < " + min, "" + x + " >= " + min) : null;
}),
maxLength: (function (_maxLength) {
var _maxLengthWrapper = function maxLength(_x, _x2) {
return _maxLength.apply(this, arguments);
};
module.exports = hasOwn;
_maxLengthWrapper.toString = function () {
return _maxLength.toString();
};
return _maxLengthWrapper;
})(function (x, maxLength) {
return (utils.isString(x) || utils.isArray(x)) && utils.isNumber(maxLength) && x.length > maxLength ? utils.errMsg("maxLength", "" + x.length + " > " + maxLength, "" + x.length + " <= " + maxLength) : null;
}),
minLength: (function (_minLength) {
var _minLengthWrapper = function minLength(_x, _x2) {
return _minLength.apply(this, arguments);
};
_minLengthWrapper.toString = function () {
return _minLength.toString();
};
return _minLengthWrapper;
})(function (x, minLength) {
return (utils.isString(x) || utils.isArray(x)) && utils.isNumber(minLength) && x.length < minLength ? utils.errMsg("minLength", "" + x.length + " < " + minLength, "" + x.length + " >= " + minLength) : null;
}),
type: (function (_type) {
var _typeWrapper = function type(_x, _x2, _x3, _x4) {
return _type.apply(this, arguments);
};
_typeWrapper.toString = function () {
return _type.toString();
};
return _typeWrapper;
})(function (x, type, customType, parent) {
return customType ? customType(x) : parent.dataTypes[type] ? parent.dataTypes[type](x) : defaultDataTypes[type] ? defaultDataTypes[type](x) : null;
})
};
/***/ },
/* 4 */
/* 5 */
/***/ function(module, exports, __webpack_require__) {
var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; };
var hasOwn = __webpack_require__(4);
var _createClass = (function () { function defineProperties(target, props) { for (var key in props) { var prop = props[key]; prop.configurable = true; if (prop.value) prop.writable = true; } Object.defineProperties(target, props); } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
var _hasDontEnumBug,
_dontEnums;
var _classCallCheck = function (instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } };
function checkDontEnum(){
_dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
];
/*jshint latedef:false*/
_hasDontEnumBug = true;
var utils = _interopRequire(__webpack_require__(1));
var defaultRules = _interopRequire(__webpack_require__(3));
var hasObject = function (v) {
var has = false;
utils.forOwn(v, function (_v) {
if (utils.isObject(_v)) {
has = true;
return false;
for (var key in {'toString': null}) {
_hasDontEnumBug = false;
}
}
});
return has;
};
function _executeRulesSync(targetKey, options, errors, value, key) {
var _this = this;
/**
* Similar to Array/forEach but works over object properties and fixes Don't
* Enum bug on IE.
* based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
*/
function forIn(obj, fn, thisObj){
var key, i = 0;
// no need to check if argument is a real object that way we can use
// it for arrays, functions, date, etc.
var nestedKey = targetKey + (targetKey.length ? "." : "") + key;
var schemaRules = utils.get(this.schema, nestedKey);
//post-pone check till needed
if (_hasDontEnumBug == null) checkDontEnum();
if (utils.isObject(value) || hasObject(schemaRules)) {
var err = _validateSync.apply(this, [nestedKey, value || {}, options]);
if (err) {
errors[key] = err;
}
} else {
if (!utils.isObject(schemaRules)) {
return;
} else if (schemaRules.nullable === true) {
var nullable = this.parent.rules.nullable || defaultRules.nullable;
var nErr = nullable.call(options.ctx, value, true, undefined, this.parent);
if (nErr === null) {
return;
}
}
utils.forOwn(schemaRules, function (ruleValue, ruleKey) {
var rule = _this.parent.rules[ruleKey] || defaultRules[ruleKey];
if (rule && !rule.async) {
var err = rule.call(options.ctx, value, ruleValue, undefined, _this.parent);
if (err) {
if (!errors[key]) {
errors[key] = {
errors: []
};
}
errors[key].errors.push(err);
for (key in obj) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
}
}
});
}
}
/**
* @see Schema#validateSync
*/
function _validateSync(targetKey, attrs, options) {
var _this = this;
var errors = {};
if (_hasDontEnumBug) {
var ctor = obj.constructor,
isProto = !!ctor && obj === ctor.prototype;
try {
// Validate present attributes
utils.forOwn(attrs, function (value, key) {
_executeRulesSync.call(_this, targetKey, options, errors, value, key);
});
// Validate missing attributes
if (!options.ignoreMissing) {
var schema = targetKey ? utils.get(this.schema, targetKey) || {} : this.schema;
var missing = utils.difference(utils.keys(schema), utils.keys(attrs));
missing = utils.pick(this.schema, missing);
missing = utils.map(missing, function () {
return undefined;
});
utils.forOwn(missing, function (value, key) {
_executeRulesSync.call(_this, targetKey, options, errors, value, key);
});
while (key = _dontEnums[i++]) {
// For constructor, if it is a prototype object the constructor
// is always non-enumerable unless defined otherwise (and
// enumerated above). For non-prototype objects, it will have
// to be defined on this object, since it cannot be defined on
// any prototype objects.
//
// For other [[DontEnum]] properties, check if the value is
// different than Object prototype value.
if (
(key !== 'constructor' ||
(!isProto && hasOwn(obj, key))) &&
obj[key] !== Object.prototype[key]
) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
}
}
}
}
if (!utils.isEmpty(errors)) {
return errors;
} else {
return null;
}
} catch (err) {
return err;
}
}
function _executeRules(options, value, key, prefix, errors, deepQueue, ruleQueue) {
var _this = this;
var nestedKey = prefix + key;
var schemaRules = utils.get(this.schema, nestedKey);
if (utils.isObject(value) || hasObject(schemaRules)) {
// Recurse down into nested attributes
deepQueue[key] = (function (nK, val) {
return function (next) {
_validate.apply(_this, [nK, val || {}, options, next]);
};
})(nestedKey, value);
} else {
if (!utils.isObject(schemaRules)) {
return;
} else if (schemaRules.nullable === true) {
var nullable = this.parent.rules.nullable || defaultRules.nullable;
var nErr = nullable.call(options.ctx, value, true, undefined, this.parent);
if (nErr === null) {
return;
}
function exec(fn, obj, key, thisObj){
return fn.call(thisObj, obj[key], key, obj);
}
utils.forOwn(schemaRules, function (ruleValue, ruleKey) {
var rule = _this.parent.rules[ruleKey] || defaultRules[ruleKey];
// Asynchronous rules get added to the queue
if (rule && rule.async) {
ruleQueue["" + ruleKey + "_" + ruleValue] = (function (r, key, val, rVal) {
return function (next) {
r.call(options.ctx, val, rVal, function (err) {
next(null, { err: err, key: key });
});
};
})(rule, key, value, ruleValue);
} else {
// Get results of synchronous rules immediately
var err = rule.call(options.ctx, value, ruleValue, undefined, _this.parent);
if (err) {
if (!errors[key]) {
errors[key] = {
errors: []
};
}
errors[key].errors.push(err);
}
}
});
}
}
/**
* @see Schema#validate
*/
function _validate(targetKey, attrs, options, cb) {
var _this = this;
module.exports = forIn;
var errors = {};
var prefix = targetKey + (targetKey.length ? "." : "");
var deepQueue = {};
var ruleQueue = {};
var first = options.first;
delete options.first;
utils.forOwn(attrs, function (value, key) {
_executeRules.call(_this, options, value, key, prefix, errors, deepQueue, ruleQueue);
});
// Validate missing attributes
if (!options.ignoreMissing) {
var schema = targetKey ? utils.get(this.schema, targetKey) || {} : this.schema;
var missing = utils.difference(utils.keys(schema), utils.keys(attrs));
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
missing = utils.pick(this.schema, missing);
missing = utils.map(missing, function () {
return undefined;
});
utils.forOwn(missing, function (value, key) {
_executeRules.call(_this, options, value, key, prefix, errors, deepQueue, ruleQueue);
});
}
/**
* Checks if the value is created by the `Object` constructor.
*/
function isPlainObject(value) {
return (!!value && typeof value === 'object' &&
value.constructor === Object);
}
var finalQueue = {};
module.exports = isPlainObject;
if (!utils.isEmpty(deepQueue)) {
finalQueue.deepQueue = function (next) {
utils.parallel(deepQueue, next);
};
}
if (!utils.isEmpty(ruleQueue)) {
finalQueue.ruleQueue = function (next) {
utils.parallel(ruleQueue, next);
};
}
if (!utils.isEmpty(finalQueue)) {
utils.parallel(finalQueue, function (err, results) {
// Merge results of recursion
if (results.deepQueue) {
results.deepQueue = utils.filter(results.deepQueue, function (x) {
return x !== undefined && x !== null;
});
utils.deepMixIn(errors, results.deepQueue);
}
// Merge results of asynchronous rules
if (results.ruleQueue) {
if (results.ruleQueue) {
results.ruleQueue = utils.filter(results.ruleQueue, function (x) {
return x.err !== undefined && x.err !== null;
});
}
utils.forOwn(results.ruleQueue, function (value) {
if (!errors[value.key]) {
errors[value.key] = {
errors: []
};
}
errors[value.key].errors.push(value.err);
});
}
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
if (!utils.isEmpty(errors)) {
first ? cb(errors) : cb(null, errors);
} else {
cb(null);
}
});
} else {
if (!utils.isEmpty(errors)) {
first ? cb(errors) : cb(null, errors);
} else {
cb(null);
var isKind = __webpack_require__(8);
/**
*/
function isString(val) {
return isKind(val, 'String');
}
}
}
module.exports = isString;
function _validateSchema(attrs, rules) {
rules = rules || [];
var keys = utils.keys(attrs);
var noRules = utils.intersection(keys, rules).length === 0;
utils.forOwn(attrs, function (value, key) {
if (noRules && utils.isString(value)) {
attrs[key] = {
type: value
};
} else if (utils.isObject(value)) {
_validateSchema(value, rules);
}
});
}
var errors = {
a: "Schema#validateSync(attrs[, options]): ",
b: "Schema#validate(attrs[, options], cb): "
};
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
var Schema = (function () {
function Schema(name, schema, parent) {
_classCallCheck(this, Schema);
if (!utils.isString(name)) {
throw new Error("\"name\" must be a string!");
} else if (!utils.isObject(schema)) {
throw new Error("\"schema\" must be an object!");
var kindOf = __webpack_require__(9);
/**
* Check if value is from a specific "kind".
*/
function isKind(val, kind){
return kindOf(val) === kind;
}
this.name = name;
_validateSchema(schema, parent ? parent.availableRules() : defaultRules);
this.schema = schema;
}
module.exports = isKind;
_createClass(Schema, {
validateSync: {
value: function validateSync(attrs, options) {
options = options ? options === true ? { ignoreMissing: true } : options : {};
if (!utils.isObject(attrs)) {
throw new Error("" + errors.a + "attrs: Must be an object!");
} else if (!utils.isObject(options)) {
throw new Error("" + errors.a + "options: Must be an object!");
}
options.ctx = attrs;
return _validateSync.call(this, "", attrs, options);
}
},
validate: {
value: function validate(attrs, options, cb) {
options = options ? options === true ? { ignoreMissing: true } : options : {};
if (utils.isFunction(options)) {
cb = options;
options = {};
}
if (!utils.isFunction(cb)) {
throw new Error("" + errors.b + "cb: Must be a function!");
} else if (!utils.isObject(attrs)) {
return cb(new Error("" + errors.b + "attrs: Must be an object!"));
} else if (!utils.isObject(options)) {
return cb(new Error("" + errors.b + "options: Must be an object!"));
}
options.first = true;
options.ctx = attrs;
_validate.call(this, "", attrs, options, cb);
}
},
addDefaultsToTarget: {
value: function addDefaultsToTarget(target, overwrite) {
if (!utils.isObject(target)) {
throw new Error("\"target\" must be an object!");
} else if (!this.defaults) {
throw new Error("No defaults have been set!");
} else if (overwrite) {
utils.deepMixIn(target, this.defaults);
} else {
utils.deepFillIn(target, this.defaults);
}
}
},
setDefaults: {
value: function setDefaults(attrs) {
if (!utils.isObject(attrs)) {
throw new Error("Schema#defaults(attrs): attrs: Must be an object!");
} else {
this.defaults = utils.merge({}, attrs);
}
return this;
}
},
getDefaults: {
value: function getDefaults() {
return utils.merge({}, this.defaults);
}
},
stripNonSchemaAttrs: {
value: function stripNonSchemaAttrs(attrs) {
_stripNonSchemaAttrs(attrs, this.schema);
return attrs;
}
}
});
return Schema;
})();
function _stripNonSchemaAttrs(attrs, schemaLevel) {
utils.forOwn(attrs, function (value, key) {
if (schemaLevel[key]) {
if (utils.isObject(value) && utils.isObject(schemaLevel[key])) {
_stripNonSchemaAttrs(value, schemaLevel[key]);
}
} else {
utils.unset(attrs, key);
}
});
}
module.exports = Schema;
/***/ },
/* 5 */
/* 9 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var _rKind = /^\[object (.*)\]$/,
_toString = Object.prototype.toString,
UNDEF;
/**
* Gets the "kind" of value. (e.g. "String", "Number", etc)
*/
function isString(val) {
return isKind(val, 'String');
function kindOf(val) {
if (val === null) {
return 'Null';
} else if (val === UNDEF) {
return 'Undefined';
} else {
return _rKind.exec( _toString.call(val) )[1];
}
}
module.exports = isString;
module.exports = kindOf;

@@ -867,6 +667,6 @@

/***/ },
/* 6 */
/* 10 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var isKind = __webpack_require__(8);
/**

@@ -882,6 +682,6 @@ */

/***/ },
/* 7 */
/* 11 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var isKind = __webpack_require__(8);
/**

@@ -897,6 +697,6 @@ */

/***/ },
/* 8 */
/* 12 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var isKind = __webpack_require__(8);
/**

@@ -912,6 +712,6 @@ */

/***/ },
/* 9 */
/* 13 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var isKind = __webpack_require__(8);
/**

@@ -927,6 +727,6 @@ */

/***/ },
/* 10 */
/* 14 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var isKind = __webpack_require__(8);
/**

@@ -942,3 +742,3 @@ */

/***/ },
/* 11 */
/* 15 */
/***/ function(module, exports, __webpack_require__) {

@@ -959,6 +759,6 @@

/***/ },
/* 12 */
/* 16 */
/***/ function(module, exports, __webpack_require__) {
var isKind = __webpack_require__(31);
var isKind = __webpack_require__(8);
/**

@@ -974,7 +774,7 @@ */

/***/ },
/* 13 */
/* 17 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var isArray = __webpack_require__(12);
var forOwn = __webpack_require__(3);
var isArray = __webpack_require__(16);

@@ -1005,3 +805,3 @@ function isEmpty(val){

/***/ },
/* 14 */
/* 18 */
/***/ function(module, exports, __webpack_require__) {

@@ -1025,6 +825,6 @@

/***/ },
/* 15 */
/* 19 */
/***/ function(module, exports, __webpack_require__) {
var isArray = __webpack_require__(12);
var isArray = __webpack_require__(16);

@@ -1052,6 +852,6 @@ /**

/***/ },
/* 16 */
/* 20 */
/***/ function(module, exports, __webpack_require__) {
var isPrimitive = __webpack_require__(32);
var isPrimitive = __webpack_require__(21);

@@ -1079,52 +879,40 @@ /**

/***/ },
/* 17 */
/* 21 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var isPlainObject = __webpack_require__(33);
/**
* Mixes objects into the target object, recursively mixing existing child
* objects.
* Checks if the object is a primitive
*/
function deepMixIn(target, objects) {
var i = 0,
n = arguments.length,
obj;
while(++i < n){
obj = arguments[i];
if (obj) {
forOwn(obj, copyProp, target);
}
function isPrimitive(value) {
// Using switch fallthrough because it's simple to read and is
// generally fast: http://jsperf.com/testing-value-is-primitive/5
switch (typeof value) {
case "string":
case "number":
case "boolean":
return true;
}
return target;
return value == null;
}
function copyProp(val, key) {
var existing = this[key];
if (isPlainObject(val) && isPlainObject(existing)) {
deepMixIn(existing, val);
} else {
this[key] = val;
}
}
module.exports = isPrimitive;
module.exports = deepMixIn;
/***/ },
/* 18 */
/* 22 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var isPlainObject = __webpack_require__(33);
var forOwn = __webpack_require__(3);
var isPlainObject = __webpack_require__(6);
/**
* Deeply copy missing properties in the target from the defaults.
* Mixes objects into the target object, recursively mixing existing child
* objects.
*/
function deepFillIn(target, defaults){
function deepMixIn(target, objects) {
var i = 0,

@@ -1134,15 +922,6 @@ n = arguments.length,

while(++i < n) {
while(++i < n){
obj = arguments[i];
if (obj) {
// jshint loopfunc: true
forOwn(obj, function(newValue, key) {
var curValue = target[key];
if (curValue == null) {
target[key] = newValue;
} else if (isPlainObject(curValue) &&
isPlainObject(newValue)) {
deepFillIn(curValue, newValue);
}
});
forOwn(obj, copyProp, target);
}

@@ -1154,28 +933,12 @@ }

module.exports = deepFillIn;
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
var hasOwn = __webpack_require__(34);
var forIn = __webpack_require__(35);
/**
* Similar to Array/forEach but works over object properties and fixes Don't
* Enum bug on IE.
* based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
*/
function forOwn(obj, fn, thisObj){
forIn(obj, function(val, key){
if (hasOwn(obj, key)) {
return fn.call(thisObj, obj[key], key, obj);
}
});
function copyProp(val, key) {
var existing = this[key];
if (isPlainObject(val) && isPlainObject(existing)) {
deepMixIn(existing, val);
} else {
this[key] = val;
}
}
module.exports = forOwn;
module.exports = deepMixIn;

@@ -1186,6 +949,6 @@

/***/ },
/* 20 */
/* 23 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var forOwn = __webpack_require__(3);

@@ -1209,6 +972,6 @@ /**

/***/ },
/* 21 */
/* 24 */
/***/ function(module, exports, __webpack_require__) {
var slice = __webpack_require__(36);
var slice = __webpack_require__(25);

@@ -1234,43 +997,60 @@ /**

/***/ },
/* 22 */
/* 25 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var makeIterator = __webpack_require__(37);
/**
* Creates a new object with all the properties where the callback returns
* true.
* Create slice of source array or array-like object
*/
function filterValues(obj, callback, thisObj) {
callback = makeIterator(callback, thisObj);
var output = {};
forOwn(obj, function(value, key, obj) {
if (callback(value, key, obj)) {
output[key] = value;
}
});
function slice(arr, start, end){
var len = arr.length;
return output;
if (start == null) {
start = 0;
} else if (start < 0) {
start = Math.max(len + start, 0);
} else {
start = Math.min(start, len);
}
if (end == null) {
end = len;
} else if (end < 0) {
end = Math.max(len + end, 0);
} else {
end = Math.min(end, len);
}
var result = [];
while (start < end) {
result.push(arr[start++]);
}
return result;
}
module.exports = filterValues;
module.exports = slice;
/***/ },
/* 23 */
/* 26 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var makeIterator = __webpack_require__(37);
var forOwn = __webpack_require__(3);
var makeIterator = __webpack_require__(27);
/**
* Creates a new object where all the values are the result of calling
* `callback`.
* Creates a new object with all the properties where the callback returns
* true.
*/
function mapValues(obj, callback, thisObj) {
function filterValues(obj, callback, thisObj) {
callback = makeIterator(callback, thisObj);
var output = {};
forOwn(obj, function(val, key, obj) {
output[key] = callback(val, key, obj);
forOwn(obj, function(value, key, obj) {
if (callback(value, key, obj)) {
output[key] = value;
}
});

@@ -1280,3 +1060,3 @@

}
module.exports = mapValues;
module.exports = filterValues;

@@ -1286,43 +1066,37 @@

/***/ },
/* 24 */
/* 27 */
/***/ function(module, exports, __webpack_require__) {
var hasOwn = __webpack_require__(34);
var deepClone = __webpack_require__(38);
var isObject = __webpack_require__(8);
var identity = __webpack_require__(28);
var prop = __webpack_require__(29);
var deepMatches = __webpack_require__(30);
/**
* Deep merge objects.
* Converts argument into a valid iterator.
* Used internally on most array/object/collection methods that receives a
* callback/iterator providing a shortcut syntax.
*/
function merge() {
var i = 1,
key, val, obj, target;
// make sure we don't modify source element and it's properties
// objects are passed by reference
target = deepClone( arguments[0] );
while (obj = arguments[i++]) {
for (key in obj) {
if ( ! hasOwn(obj, key) ) {
continue;
}
val = obj[key];
if ( isObject(val) && isObject(target[key]) ){
// inception, deep merge objects
target[key] = merge(target[key], val);
} else {
// make sure arrays, regexp, date, objects are cloned
target[key] = deepClone(val);
}
}
function makeIterator(src, thisObj){
if (src == null) {
return identity;
}
return target;
switch(typeof src) {
case 'function':
// function is the first to improve perf (most common case)
// also avoid using `Function#call` if not needed, which boosts
// perf a lot in some cases
return (typeof thisObj !== 'undefined')? function(val, i, arr){
return src.call(thisObj, val, i, arr);
} : src;
case 'object':
return function(val){
return deepMatches(val, src);
};
case 'string':
case 'number':
return prop(src);
}
}
module.exports = merge;
module.exports = makeIterator;

@@ -1333,26 +1107,15 @@

/***/ },
/* 25 */
/* 28 */
/***/ function(module, exports, __webpack_require__) {
var has = __webpack_require__(39);
/**
* Unset object property.
* Returns the first argument provided to it.
*/
function unset(obj, prop){
if (has(obj, prop)) {
var parts = prop.split('.'),
last = parts.pop();
while (prop = parts.shift()) {
obj = obj[prop];
}
return (delete obj[last]);
} else {
// if property doesn't exist treat as deleted
return true;
}
function identity(val){
return val;
}
module.exports = unset;
module.exports = identity;

@@ -1363,126 +1126,78 @@

/***/ },
/* 26 */
/* 29 */
/***/ function(module, exports, __webpack_require__) {
var indexOf = __webpack_require__(40);
/**
* If array contains values.
* Returns a function that gets a property of the passed object
*/
function contains(arr, val) {
return indexOf(arr, val) !== -1;
function prop(name){
return function(obj){
return obj[name];
};
}
module.exports = contains;
module.exports = prop;
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
var unique = __webpack_require__(29);
var filter = __webpack_require__(41);
var every = __webpack_require__(42);
var contains = __webpack_require__(26);
var slice = __webpack_require__(36);
/**
* Return a new Array with elements common to all Arrays.
* - based on underscore.js implementation
*/
function intersection(arr) {
var arrs = slice(arguments, 1),
result = filter(unique(arr), function(needle){
return every(arrs, function(haystack){
return contains(haystack, needle);
});
});
return result;
}
module.exports = intersection;
/***/ },
/* 28 */
/* 30 */
/***/ function(module, exports, __webpack_require__) {
var unique = __webpack_require__(29);
var filter = __webpack_require__(41);
var some = __webpack_require__(43);
var contains = __webpack_require__(26);
var slice = __webpack_require__(36);
var forOwn = __webpack_require__(3);
var isArray = __webpack_require__(16);
function containsMatch(array, pattern) {
var i = -1, length = array.length;
while (++i < length) {
if (deepMatches(array[i], pattern)) {
return true;
}
}
/**
* Return a new Array with elements that aren't present in the other Arrays.
*/
function difference(arr) {
var arrs = slice(arguments, 1),
result = filter(unique(arr), function(needle){
return !some(arrs, function(haystack){
return contains(haystack, needle);
});
});
return result;
return false;
}
module.exports = difference;
function matchArray(target, pattern) {
var i = -1, patternLength = pattern.length;
while (++i < patternLength) {
if (!containsMatch(target, pattern[i])) {
return false;
}
}
return true;
}
/***/ },
/* 29 */
/***/ function(module, exports, __webpack_require__) {
var filter = __webpack_require__(41);
/**
* @return {array} Array of unique items
*/
function unique(arr, compare){
compare = compare || isEqual;
return filter(arr, function(item, i, arr){
var n = arr.length;
while (++i < n) {
if ( compare(item, arr[i]) ) {
return false;
}
function matchObject(target, pattern) {
var result = true;
forOwn(pattern, function(val, key) {
if (!deepMatches(target[key], val)) {
// Return false to break out of forOwn early
return (result = false);
}
return true;
});
}
function isEqual(a, b){
return a === b;
return result;
}
module.exports = unique;
/***/ },
/* 30 */
/***/ function(module, exports, __webpack_require__) {
/**
* "Convert" value into an 32-bit integer.
* Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0.
* IMPORTANT: val will wrap at 2^31 and -2^31.
* Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7
* Recursively check if the objects match.
*/
function toInt(val){
// we do not use lang/toNumber because of perf and also because it
// doesn't break the functionality
return ~~val;
function deepMatches(target, pattern){
if (target && typeof target === 'object') {
if (isArray(target) && isArray(pattern)) {
return matchArray(target, pattern);
} else {
return matchObject(target, pattern);
}
} else {
return target === pattern;
}
}
module.exports = toInt;
module.exports = deepMatches;

@@ -1496,10 +1211,19 @@

var kindOf = __webpack_require__(44);
var forOwn = __webpack_require__(3);
var makeIterator = __webpack_require__(27);
/**
* Check if value is from a specific "kind".
* Creates a new object where all the values are the result of calling
* `callback`.
*/
function isKind(val, kind){
return kindOf(val) === kind;
function mapValues(obj, callback, thisObj) {
callback = makeIterator(callback, thisObj);
var output = {};
forOwn(obj, function(val, key, obj) {
output[key] = callback(val, key, obj);
});
return output;
}
module.exports = isKind;
module.exports = mapValues;

@@ -1512,40 +1236,40 @@

var hasOwn = __webpack_require__(4);
var deepClone = __webpack_require__(33);
var isObject = __webpack_require__(12);
/**
* Checks if the object is a primitive
* Deep merge objects.
*/
function isPrimitive(value) {
// Using switch fallthrough because it's simple to read and is
// generally fast: http://jsperf.com/testing-value-is-primitive/5
switch (typeof value) {
case "string":
case "number":
case "boolean":
return true;
}
function merge() {
var i = 1,
key, val, obj, target;
return value == null;
}
// make sure we don't modify source element and it's properties
// objects are passed by reference
target = deepClone( arguments[0] );
module.exports = isPrimitive;
while (obj = arguments[i++]) {
for (key in obj) {
if ( ! hasOwn(obj, key) ) {
continue;
}
val = obj[key];
if ( isObject(val) && isObject(target[key]) ){
// inception, deep merge objects
target[key] = merge(target[key], val);
} else {
// make sure arrays, regexp, date, objects are cloned
target[key] = deepClone(val);
}
}
}
/***/ },
/* 33 */
/***/ function(module, exports, __webpack_require__) {
/**
* Checks if the value is created by the `Object` constructor.
*/
function isPlainObject(value) {
return (!!value && typeof value === 'object' &&
value.constructor === Object);
return target;
}
module.exports = isPlainObject;
module.exports = merge;

@@ -1556,97 +1280,51 @@

/***/ },
/* 34 */
/* 33 */
/***/ function(module, exports, __webpack_require__) {
var clone = __webpack_require__(34);
var forOwn = __webpack_require__(3);
var kindOf = __webpack_require__(9);
var isPlainObject = __webpack_require__(6);
/**
* Safer Object.hasOwnProperty
* Recursively clone native types.
*/
function hasOwn(obj, prop){
return Object.prototype.hasOwnProperty.call(obj, prop);
}
module.exports = hasOwn;
/***/ },
/* 35 */
/***/ function(module, exports, __webpack_require__) {
var hasOwn = __webpack_require__(34);
var _hasDontEnumBug,
_dontEnums;
function checkDontEnum(){
_dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
];
_hasDontEnumBug = true;
for (var key in {'toString': null}) {
_hasDontEnumBug = false;
function deepClone(val, instanceClone) {
switch ( kindOf(val) ) {
case 'Object':
return cloneObject(val, instanceClone);
case 'Array':
return cloneArray(val, instanceClone);
default:
return clone(val);
}
}
/**
* Similar to Array/forEach but works over object properties and fixes Don't
* Enum bug on IE.
* based on: http://whattheheadsaid.com/2010/10/a-safer-object-keys-compatibility-implementation
*/
function forIn(obj, fn, thisObj){
var key, i = 0;
// no need to check if argument is a real object that way we can use
// it for arrays, functions, date, etc.
//post-pone check till needed
if (_hasDontEnumBug == null) checkDontEnum();
for (key in obj) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
function cloneObject(source, instanceClone) {
if (isPlainObject(source)) {
var out = {};
forOwn(source, function(val, key) {
this[key] = deepClone(val, instanceClone);
}, out);
return out;
} else if (instanceClone) {
return instanceClone(source);
} else {
return source;
}
}
if (_hasDontEnumBug) {
var ctor = obj.constructor,
isProto = !!ctor && obj === ctor.prototype;
while (key = _dontEnums[i++]) {
// For constructor, if it is a prototype object the constructor
// is always non-enumerable unless defined otherwise (and
// enumerated above). For non-prototype objects, it will have
// to be defined on this object, since it cannot be defined on
// any prototype objects.
//
// For other [[DontEnum]] properties, check if the value is
// different than Object prototype value.
if (
(key !== 'constructor' ||
(!isProto && hasOwn(obj, key))) &&
obj[key] !== Object.prototype[key]
) {
if (exec(fn, obj, key, thisObj) === false) {
break;
}
}
}
function cloneArray(arr, instanceClone) {
var out = [],
i = -1,
n = arr.length,
val;
while (++i < n) {
out[i] = deepClone(arr[i], instanceClone);
}
return out;
}
function exec(fn, obj, key, thisObj){
return fn.call(thisObj, obj[key], key, obj);
}
module.exports = deepClone;
module.exports = forIn;

@@ -1657,79 +1335,87 @@

/***/ },
/* 36 */
/* 34 */
/***/ function(module, exports, __webpack_require__) {
var kindOf = __webpack_require__(9);
var isPlainObject = __webpack_require__(6);
var mixIn = __webpack_require__(35);
/**
* Create slice of source array or array-like object
* Clone native types.
*/
function slice(arr, start, end){
var len = arr.length;
if (start == null) {
start = 0;
} else if (start < 0) {
start = Math.max(len + start, 0);
} else {
start = Math.min(start, len);
function clone(val){
switch (kindOf(val)) {
case 'Object':
return cloneObject(val);
case 'Array':
return cloneArray(val);
case 'RegExp':
return cloneRegExp(val);
case 'Date':
return cloneDate(val);
default:
return val;
}
}
if (end == null) {
end = len;
} else if (end < 0) {
end = Math.max(len + end, 0);
function cloneObject(source) {
if (isPlainObject(source)) {
return mixIn({}, source);
} else {
end = Math.min(end, len);
return source;
}
}
var result = [];
while (start < end) {
result.push(arr[start++]);
}
function cloneRegExp(r) {
var flags = '';
flags += r.multiline ? 'm' : '';
flags += r.global ? 'g' : '';
flags += r.ignoreCase ? 'i' : '';
return new RegExp(r.source, flags);
}
return result;
function cloneDate(date) {
return new Date(+date);
}
module.exports = slice;
function cloneArray(arr) {
return arr.slice();
}
module.exports = clone;
/***/ },
/* 37 */
/* 35 */
/***/ function(module, exports, __webpack_require__) {
var identity = __webpack_require__(45);
var prop = __webpack_require__(46);
var deepMatches = __webpack_require__(47);
var forOwn = __webpack_require__(3);
/**
* Converts argument into a valid iterator.
* Used internally on most array/object/collection methods that receives a
* callback/iterator providing a shortcut syntax.
*/
function makeIterator(src, thisObj){
if (src == null) {
return identity;
* Combine properties from all the objects into first one.
* - This method affects target object in place, if you want to create a new Object pass an empty object as first param.
* @param {object} target Target Object
* @param {...object} objects Objects to be combined (0...n objects).
* @return {object} Target Object.
*/
function mixIn(target, objects){
var i = 0,
n = arguments.length,
obj;
while(++i < n){
obj = arguments[i];
if (obj != null) {
forOwn(obj, copyProp, target);
}
}
switch(typeof src) {
case 'function':
// function is the first to improve perf (most common case)
// also avoid using `Function#call` if not needed, which boosts
// perf a lot in some cases
return (typeof thisObj !== 'undefined')? function(val, i, arr){
return src.call(thisObj, val, i, arr);
} : src;
case 'object':
return function(val){
return deepMatches(val, src);
};
case 'string':
case 'number':
return prop(src);
}
return target;
}
module.exports = makeIterator;
function copyProp(val, key){
this[key] = val;
}
module.exports = mixIn;

@@ -1739,60 +1425,35 @@

/***/ },
/* 38 */
/* 36 */
/***/ function(module, exports, __webpack_require__) {
var clone = __webpack_require__(48);
var forOwn = __webpack_require__(19);
var kindOf = __webpack_require__(44);
var isPlainObject = __webpack_require__(33);
var has = __webpack_require__(37);
/**
* Recursively clone native types.
* Unset object property.
*/
function deepClone(val, instanceClone) {
switch ( kindOf(val) ) {
case 'Object':
return cloneObject(val, instanceClone);
case 'Array':
return cloneArray(val, instanceClone);
default:
return clone(val);
}
}
function unset(obj, prop){
if (has(obj, prop)) {
var parts = prop.split('.'),
last = parts.pop();
while (prop = parts.shift()) {
obj = obj[prop];
}
return (delete obj[last]);
function cloneObject(source, instanceClone) {
if (isPlainObject(source)) {
var out = {};
forOwn(source, function(val, key) {
this[key] = deepClone(val, instanceClone);
}, out);
return out;
} else if (instanceClone) {
return instanceClone(source);
} else {
return source;
// if property doesn't exist treat as deleted
return true;
}
}
function cloneArray(arr, instanceClone) {
var out = [],
i = -1,
n = arr.length,
val;
while (++i < n) {
out[i] = deepClone(arr[i], instanceClone);
}
return out;
}
module.exports = unset;
module.exports = deepClone;
/***/ },
/* 39 */
/* 37 */
/***/ function(module, exports, __webpack_require__) {
var get = __webpack_require__(16);
var get = __webpack_require__(20);

@@ -1815,5 +1476,21 @@ var UNDEF;

/***/ },
/* 40 */
/* 38 */
/***/ function(module, exports, __webpack_require__) {
var indexOf = __webpack_require__(39);
/**
* If array contains values.
*/
function contains(arr, val) {
return indexOf(arr, val) !== -1;
}
module.exports = contains;
/***/ },
/* 39 */
/***/ function(module, exports, __webpack_require__) {

@@ -1850,8 +1527,69 @@

/***/ },
/* 40 */
/***/ function(module, exports, __webpack_require__) {
var unique = __webpack_require__(41);
var filter = __webpack_require__(42);
var every = __webpack_require__(43);
var contains = __webpack_require__(38);
var slice = __webpack_require__(25);
/**
* Return a new Array with elements common to all Arrays.
* - based on underscore.js implementation
*/
function intersection(arr) {
var arrs = slice(arguments, 1),
result = filter(unique(arr), function(needle){
return every(arrs, function(haystack){
return contains(haystack, needle);
});
});
return result;
}
module.exports = intersection;
/***/ },
/* 41 */
/***/ function(module, exports, __webpack_require__) {
var makeIterator = __webpack_require__(37);
var filter = __webpack_require__(42);
/**
* @return {array} Array of unique items
*/
function unique(arr, compare){
compare = compare || isEqual;
return filter(arr, function(item, i, arr){
var n = arr.length;
while (++i < n) {
if ( compare(item, arr[i]) ) {
return false;
}
}
return true;
});
}
function isEqual(a, b){
return a === b;
}
module.exports = unique;
/***/ },
/* 42 */
/***/ function(module, exports, __webpack_require__) {
var makeIterator = __webpack_require__(27);
/**
* Array filter

@@ -1883,6 +1621,6 @@ */

/***/ },
/* 42 */
/* 43 */
/***/ function(module, exports, __webpack_require__) {
var makeIterator = __webpack_require__(37);
var makeIterator = __webpack_require__(27);

@@ -1917,8 +1655,37 @@ /**

/***/ },
/* 43 */
/* 44 */
/***/ function(module, exports, __webpack_require__) {
var makeIterator = __webpack_require__(37);
var unique = __webpack_require__(41);
var filter = __webpack_require__(42);
var some = __webpack_require__(45);
var contains = __webpack_require__(38);
var slice = __webpack_require__(25);
/**
* Return a new Array with elements that aren't present in the other Arrays.
*/
function difference(arr) {
var arrs = slice(arguments, 1),
result = filter(unique(arr), function(needle){
return !some(arrs, function(haystack){
return contains(haystack, needle);
});
});
return result;
}
module.exports = difference;
/***/ },
/* 45 */
/***/ function(module, exports, __webpack_require__) {
var makeIterator = __webpack_require__(27);
/**
* Array some

@@ -1951,3 +1718,3 @@ */

/***/ },
/* 44 */
/* 46 */
/***/ function(module, exports, __webpack_require__) {

@@ -1957,210 +1724,480 @@

var _rKind = /^\[object (.*)\]$/,
_toString = Object.prototype.toString,
UNDEF;
/**
* Gets the "kind" of value. (e.g. "String", "Number", etc)
* "Convert" value into an 32-bit integer.
* Works like `Math.floor` if val > 0 and `Math.ceil` if val < 0.
* IMPORTANT: val will wrap at 2^31 and -2^31.
* Perf tests: http://jsperf.com/vs-vs-parseint-bitwise-operators/7
*/
function kindOf(val) {
if (val === null) {
return 'Null';
} else if (val === UNDEF) {
return 'Undefined';
} else {
return _rKind.exec( _toString.call(val) )[1];
}
function toInt(val){
// we do not use lang/toNumber because of perf and also because it
// doesn't break the functionality
return ~~val;
}
module.exports = kindOf;
module.exports = toInt;
/***/ },
/* 45 */
/* 47 */
/***/ function(module, exports, __webpack_require__) {
Object.defineProperty(exports, '__esModule', {
value: true
});
/**
* Returns the first argument provided to it.
*/
function identity(val){
return val;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
module.exports = identity;
var _utils = __webpack_require__(1);
var _utils2 = _interopRequireDefault(_utils);
exports['default'] = {
string: function string(x) {
return _utils2['default'].isString(x) ? null : _utils2['default'].errMsg('type', typeof x, 'string');
},
number: function number(x) {
return _utils2['default'].isNumber(x) ? null : _utils2['default'].errMsg('type', typeof x, 'number');
},
integer: function integer(x) {
if (!_utils2['default'].isNumber(x)) {
return _utils2['default'].errMsg('type', typeof x, 'integer');
} else if (Math.abs(x) - Math.abs(_utils2['default'].toInt(x)) !== 0) {
return _utils2['default'].errMsg('type', 'real', 'integer');
} else {
return null;
}
},
float: function float(x) {
return _utils2['default'].isNumber(x) ? null : _utils2['default'].errMsg('type', typeof x, 'float');
},
array: function array(x) {
return _utils2['default'].isArray(x) ? null : _utils2['default'].errMsg('type', typeof x, 'array');
},
object: function object(x) {
return _utils2['default'].isObject(x) ? null : _utils2['default'].errMsg('type', typeof x, 'object');
},
boolean: function boolean(x) {
return _utils2['default'].isBoolean(x) ? null : _utils2['default'].errMsg('type', typeof x, 'boolean');
},
date: function date(x) {
return _utils2['default'].isDate(x) ? null : _utils2['default'].errMsg('type', typeof x, 'date');
}
};
module.exports = exports['default'];
/***/ },
/* 46 */
/* 48 */
/***/ function(module, exports, __webpack_require__) {
Object.defineProperty(exports, '__esModule', {
value: true
});
/**
* Returns a function that gets a property of the passed object
*/
function prop(name){
return function(obj){
return obj[name];
};
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
module.exports = prop;
var _utils = __webpack_require__(1);
var _utils2 = _interopRequireDefault(_utils);
var _dataTypes = __webpack_require__(47);
var _dataTypes2 = _interopRequireDefault(_dataTypes);
exports['default'] = {
nullable: function nullable(x, _nullable) {
return (x === null || x === undefined) && !_nullable ? _utils2['default'].errMsg('nullable', 'x === ' + x, 'x !== null && x !== undefined') : null;
},
max: function max(x, _max) {
return _utils2['default'].isNumber(x) && _utils2['default'].isNumber(_max) && x > _max ? _utils2['default'].errMsg('max', '' + x + ' > ' + _max, '' + x + ' <= ' + _max) : null;
},
min: function min(x, _min) {
return _utils2['default'].isNumber(x) && _utils2['default'].isNumber(_min) && x < _min ? _utils2['default'].errMsg('min', '' + x + ' < ' + _min, '' + x + ' >= ' + _min) : null;
},
maxLength: function maxLength(x, _maxLength) {
return (_utils2['default'].isString(x) || _utils2['default'].isArray(x)) && _utils2['default'].isNumber(_maxLength) && x.length > _maxLength ? _utils2['default'].errMsg('maxLength', '' + x.length + ' > ' + _maxLength, '' + x.length + ' <= ' + _maxLength) : null;
},
minLength: function minLength(x, _minLength) {
return (_utils2['default'].isString(x) || _utils2['default'].isArray(x)) && _utils2['default'].isNumber(_minLength) && x.length < _minLength ? _utils2['default'].errMsg('minLength', '' + x.length + ' < ' + _minLength, '' + x.length + ' >= ' + _minLength) : null;
},
type: function type(x, _type, customType, parent) {
return customType ? customType(x) : parent.dataTypes[_type] ? parent.dataTypes[_type](x) : _dataTypes2['default'][_type] ? _dataTypes2['default'][_type](x) : null;
}
};
module.exports = exports['default'];
/***/ },
/* 47 */
/* 49 */
/***/ function(module, exports, __webpack_require__) {
var forOwn = __webpack_require__(19);
var isArray = __webpack_require__(12);
Object.defineProperty(exports, '__esModule', {
value: true
});
function containsMatch(array, pattern) {
var i = -1, length = array.length;
while (++i < length) {
if (deepMatches(array[i], pattern)) {
return 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; }; })();
return false;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function matchArray(target, pattern) {
var i = -1, patternLength = pattern.length;
while (++i < patternLength) {
if (!containsMatch(target, pattern[i])) {
return false;
}
}
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
return true;
/*jshint latedef:false*/
var _utils = __webpack_require__(1);
var _utils2 = _interopRequireDefault(_utils);
var _rules = __webpack_require__(48);
var _rules2 = _interopRequireDefault(_rules);
var hasObject = function hasObject(v) {
var has = false;
_utils2['default'].forOwn(v, function (_v) {
if (_utils2['default'].isObject(_v)) {
has = true;
return false;
}
});
return has;
};
function matchObject(target, pattern) {
var result = true;
forOwn(pattern, function(val, key) {
if (!deepMatches(target[key], val)) {
// Return false to break out of forOwn early
return (result = false);
}
});
function _executeRulesSync(targetKey, options, errors, value, key) {
var _this = this;
return result;
var nestedKey = targetKey + (targetKey.length ? '.' : '') + key;
var schemaRules = _utils2['default'].get(this.schema, nestedKey);
if (!schemaRules) {
return;
} else if (_utils2['default'].isObject(value) || hasObject(schemaRules)) {
var err = _validateSync.apply(this, [nestedKey, value || {}, options]);
if (err) {
errors[key] = err;
}
} else {
if (!_utils2['default'].isObject(schemaRules)) {
return;
} else if (schemaRules.nullable === true) {
var nullable = this.parent.rules.nullable || _rules2['default'].nullable;
var nErr = nullable.call(options.ctx, value, true, undefined, this.parent);
/**
* Recursively check if the objects match.
*/
function deepMatches(target, pattern){
if (target && typeof target === 'object') {
if (isArray(target) && isArray(pattern)) {
return matchArray(target, pattern);
} else {
return matchObject(target, pattern);
}
} else {
return target === pattern;
if (nErr === null) {
return;
}
}
_utils2['default'].forOwn(schemaRules, function (ruleValue, ruleKey) {
var rule = _this.parent.rules[ruleKey] || _rules2['default'][ruleKey];
if (rule && !rule.async) {
var err = rule.call(options.ctx, value, ruleValue, undefined, _this.parent);
if (err) {
if (!errors[key]) {
errors[key] = {
errors: []
};
}
errors[key].errors.push(err);
}
}
}
});
}
}
module.exports = deepMatches;
/**
* @see Schema#validateSync
*/
function _validateSync(targetKey, attrs, options) {
var _this2 = this;
var errors = {};
try {
// Validate present attributes
_utils2['default'].forOwn(attrs, function (value, key) {
_executeRulesSync.call(_this2, targetKey, options, errors, value, key);
});
// Validate missing attributes
if (!options.ignoreMissing) {
var schema = targetKey ? _utils2['default'].get(this.schema, targetKey) || {} : this.schema;
var missing = _utils2['default'].difference(_utils2['default'].keys(schema), _utils2['default'].keys(attrs));
missing = _utils2['default'].pick(this.schema, missing);
missing = _utils2['default'].map(missing, function () {
return undefined;
});
_utils2['default'].forOwn(missing, function (value, key) {
_executeRulesSync.call(_this2, targetKey, options, errors, value, key);
});
}
if (!_utils2['default'].isEmpty(errors)) {
return errors;
} else {
return null;
}
} catch (err) {
return err;
}
}
function _executeRules(options, value, key, prefix, errors, deepQueue, ruleQueue) {
var _this3 = this;
/***/ },
/* 48 */
/***/ function(module, exports, __webpack_require__) {
var nestedKey = prefix + key;
var schemaRules = _utils2['default'].get(this.schema, nestedKey);
var kindOf = __webpack_require__(44);
var isPlainObject = __webpack_require__(33);
var mixIn = __webpack_require__(49);
if (!schemaRules) {
return;
} else if (_utils2['default'].isObject(value) || hasObject(schemaRules)) {
// Recurse down into nested attributes
deepQueue[key] = (function (nK, val) {
return function (next) {
_validate.apply(_this3, [nK, val || {}, options, next]);
};
})(nestedKey, value);
} else {
if (!_utils2['default'].isObject(schemaRules)) {
return;
} else if (schemaRules.nullable === true) {
var nullable = this.parent.rules.nullable || _rules2['default'].nullable;
var nErr = nullable.call(options.ctx, value, true, undefined, this.parent);
/**
* Clone native types.
*/
function clone(val){
switch (kindOf(val)) {
case 'Object':
return cloneObject(val);
case 'Array':
return cloneArray(val);
case 'RegExp':
return cloneRegExp(val);
case 'Date':
return cloneDate(val);
default:
return val;
}
if (nErr === null) {
return;
}
}
function cloneObject(source) {
if (isPlainObject(source)) {
return mixIn({}, source);
} else {
return source;
_utils2['default'].forOwn(schemaRules, function (ruleValue, ruleKey) {
var rule = _this3.parent.rules[ruleKey] || _rules2['default'][ruleKey];
// Asynchronous rules get added to the queue
if (rule && rule.async) {
ruleQueue['' + ruleKey + '_' + ruleValue] = (function (r, key, val, rVal) {
return function (next) {
r.call(options.ctx, val, rVal, function (err) {
next(null, { err: err, key: key });
});
};
})(rule, key, value, ruleValue);
} else {
// Get results of synchronous rules immediately
var err = rule.call(options.ctx, value, ruleValue, undefined, _this3.parent);
if (err) {
if (!errors[key]) {
errors[key] = {
errors: []
};
}
errors[key].errors.push(err);
}
}
}
});
}
}
function cloneRegExp(r) {
var flags = '';
flags += r.multiline ? 'm' : '';
flags += r.global ? 'g' : '';
flags += r.ignoreCase ? 'i' : '';
return new RegExp(r.source, flags);
}
/**
* @see Schema#validate
*/
function _validate(targetKey, attrs, options, cb) {
var _this4 = this;
function cloneDate(date) {
return new Date(+date);
}
var errors = {};
var prefix = targetKey + (targetKey.length ? '.' : '');
var deepQueue = {};
var ruleQueue = {};
var first = options.first;
function cloneArray(arr) {
return arr.slice();
}
delete options.first;
module.exports = clone;
_utils2['default'].forOwn(attrs, function (value, key) {
_executeRules.call(_this4, options, value, key, prefix, errors, deepQueue, ruleQueue);
});
// Validate missing attributes
if (!options.ignoreMissing) {
var schema = targetKey ? _utils2['default'].get(this.schema, targetKey) || {} : this.schema;
var missing = _utils2['default'].difference(_utils2['default'].keys(schema), _utils2['default'].keys(attrs));
missing = _utils2['default'].pick(this.schema, missing);
missing = _utils2['default'].map(missing, function () {
return undefined;
});
_utils2['default'].forOwn(missing, function (value, key) {
_executeRules.call(_this4, options, value, key, prefix, errors, deepQueue, ruleQueue);
});
}
/***/ },
/* 49 */
/***/ function(module, exports, __webpack_require__) {
var finalQueue = {};
var forOwn = __webpack_require__(19);
if (!_utils2['default'].isEmpty(deepQueue)) {
finalQueue.deepQueue = function (next) {
_utils2['default'].parallel(deepQueue, next);
};
}
if (!_utils2['default'].isEmpty(ruleQueue)) {
finalQueue.ruleQueue = function (next) {
_utils2['default'].parallel(ruleQueue, next);
};
}
/**
* Combine properties from all the objects into first one.
* - This method affects target object in place, if you want to create a new Object pass an empty object as first param.
* @param {object} target Target Object
* @param {...object} objects Objects to be combined (0...n objects).
* @return {object} Target Object.
*/
function mixIn(target, objects){
var i = 0,
n = arguments.length,
obj;
while(++i < n){
obj = arguments[i];
if (obj != null) {
forOwn(obj, copyProp, target);
}
if (!_utils2['default'].isEmpty(finalQueue)) {
_utils2['default'].parallel(finalQueue, function (err, results) {
// Merge results of recursion
if (results.deepQueue) {
results.deepQueue = _utils2['default'].filter(results.deepQueue, function (x) {
return x !== undefined && x !== null;
});
_utils2['default'].deepMixIn(errors, results.deepQueue);
}
// Merge results of asynchronous rules
if (results.ruleQueue) {
if (results.ruleQueue) {
results.ruleQueue = _utils2['default'].filter(results.ruleQueue, function (x) {
return x.err !== undefined && x.err !== null;
});
}
return target;
_utils2['default'].forOwn(results.ruleQueue, function (value) {
if (!errors[value.key]) {
errors[value.key] = {
errors: []
};
}
errors[value.key].errors.push(value.err);
});
}
if (!_utils2['default'].isEmpty(errors)) {
first ? cb(errors) : cb(null, errors);
} else {
cb(null);
}
});
} else {
if (!_utils2['default'].isEmpty(errors)) {
first ? cb(errors) : cb(null, errors);
} else {
cb(null);
}
}
}
function copyProp(val, key){
this[key] = val;
function _validateSchema(attrs, rules) {
rules = rules || [];
var keys = _utils2['default'].keys(attrs);
var noRules = _utils2['default'].intersection(keys, rules).length === 0;
_utils2['default'].forOwn(attrs, function (value, key) {
if (noRules && _utils2['default'].isString(value)) {
attrs[key] = {
type: value
};
} else if (_utils2['default'].isObject(value)) {
_validateSchema(value, rules);
}
});
}
module.exports = mixIn;
var errors = {
a: 'Schema#validateSync(attrs[, options]): ',
b: 'Schema#validate(attrs[, options], cb): '
};
var Schema = (function () {
function Schema(name, schema, parent) {
_classCallCheck(this, Schema);
if (!_utils2['default'].isString(name)) {
throw new Error('"name" must be a string!');
} else if (!_utils2['default'].isObject(schema)) {
throw new Error('"schema" must be an object!');
}
this.name = name;
_validateSchema(schema, parent ? parent.availableRules() : _rules2['default']);
this.schema = schema;
}
_createClass(Schema, [{
key: 'validateSync',
value: function validateSync(attrs, options) {
options = options ? options === true ? { ignoreMissing: true } : options : {};
if (!_utils2['default'].isObject(attrs)) {
throw new Error('' + errors.a + 'attrs: Must be an object!');
} else if (!_utils2['default'].isObject(options)) {
throw new Error('' + errors.a + 'options: Must be an object!');
}
options.ctx = attrs;
return _validateSync.call(this, '', attrs, options);
}
}, {
key: 'validate',
value: function validate(attrs, options, cb) {
options = options ? options === true ? { ignoreMissing: true } : options : {};
if (_utils2['default'].isFunction(options)) {
cb = options;
options = {};
}
if (!_utils2['default'].isFunction(cb)) {
throw new Error('' + errors.b + 'cb: Must be a function!');
} else if (!_utils2['default'].isObject(attrs)) {
return cb(new Error('' + errors.b + 'attrs: Must be an object!'));
} else if (!_utils2['default'].isObject(options)) {
return cb(new Error('' + errors.b + 'options: Must be an object!'));
}
options.first = true;
options.ctx = attrs;
_validate.call(this, '', attrs, options, cb);
}
}, {
key: 'addDefaultsToTarget',
value: function addDefaultsToTarget(target, overwrite) {
if (!_utils2['default'].isObject(target)) {
throw new Error('"target" must be an object!');
} else if (!this.defaults) {
throw new Error('No defaults have been set!');
} else if (overwrite) {
_utils2['default'].deepMixIn(target, this.defaults);
} else {
_utils2['default'].deepFillIn(target, this.defaults);
}
}
}, {
key: 'setDefaults',
value: function setDefaults(attrs) {
if (!_utils2['default'].isObject(attrs)) {
throw new Error('Schema#defaults(attrs): attrs: Must be an object!');
} else {
this.defaults = _utils2['default'].merge({}, attrs);
}
return this;
}
}, {
key: 'getDefaults',
value: function getDefaults() {
return _utils2['default'].merge({}, this.defaults);
}
}, {
key: 'stripNonSchemaAttrs',
value: function stripNonSchemaAttrs(attrs) {
_stripNonSchemaAttrs(attrs, this.schema);
return attrs;
}
}]);
return Schema;
})();
function _stripNonSchemaAttrs(attrs, schemaLevel) {
_utils2['default'].forOwn(attrs, function (value, key) {
if (schemaLevel[key]) {
if (_utils2['default'].isObject(value) && _utils2['default'].isObject(schemaLevel[key])) {
_stripNonSchemaAttrs(value, schemaLevel[key]);
}
} else {
_utils2['default'].unset(attrs, key);
}
});
}
exports['default'] = Schema;
module.exports = exports['default'];
/***/ }

@@ -2167,0 +2204,0 @@ /******/ ])

/*!
* js-data-schema
* @version 1.2.4 - Homepage <https://github.com/js-data/js-data-schema/>
* @version 1.2.5 - Homepage <https://github.com/js-data/js-data-schema/>
* @author Jason Dobry <jason.dobry@gmail.com>

@@ -11,3 +11,3 @@ * @copyright (c) 2013-2014 Jason Dobry <https://github.io/js-data/js-data-schema>

!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):"object"==typeof exports?exports.Schemator=b():a.Schemator=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),f=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},g=d(c(1)),h=d(c(2)),i=d(c(3)),j=d(c(4)),k=1,l=function(){function a(){f(this,a),this.dataTypes={},this.rules={},this.schemata={},this.id=k++}return e(a,{availableDataTypes:{value:function(){return g.unique(g.keys(this.dataTypes).concat(g.keys(h)))}},availableRules:{value:function(){return g.unique(g.keys(this.rules).concat(g.keys(i)))}},availableSchemata:{value:function(){return g.keys(this.schemata)}},defineDataType:{value:function(a,b){if(!g.isString(a))throw new Error('"name" must be a string!');if(!g.isFunction(b))throw new Error('"typeDefinition" must be a function!');if(this.dataTypes[a])throw new Error("dataType already registered!");this.dataTypes[a]=b}},defineRule:{value:function(a,b,c){if(!g.isString(a))throw new Error('"name" must be a string!');if(!g.isFunction(b))throw new Error('"ruleFunc" must be a function!');if(this.rules[a])throw new Error("rule already registered!");this.rules[a]=b,this.rules[a].async=!!c}},defineSchema:{value:function(a,b){if(this.schemata[a])throw new Error("schema already registered!");if(b instanceof j)throw new Error("schema registered elsewhere!");return this.schemata[a]=new j(a,b,this),this.schemata[a].parent=this,this.schemata[a]}},getDataType:{value:function(a){return this.dataTypes[a]||h[a]}},getRule:{value:function(a){return this.rules[a]||i[a]}},getSchema:{value:function(a){return this.schemata[a]}},removeDataType:{value:function(a){delete this.dataTypes[a]}},removeRule:{value:function(a){delete this.rules[a]}},removeSchema:{value:function(a){delete this.schemata[a]}},schemaCheck:{value:function(a){if(!this.schemata[a])throw new Error("schema is not registered!")}},validateSync:{value:function(a,b,c){return this.schemaCheck(a),this.schemata[a].validateSync(b,c)}},validate:{value:function(a,b,c,d){return this.schemaCheck(a),this.schemata[a].validate(b,c,d)}},addDefaultsToTarget:{value:function(a,b,c){return this.schemaCheck(a),this.schemata[a].addDefaultsToTarget(b,c)}},setDefaults:{value:function(a,b){return this.schemaCheck(a),this.schemata[a].setDefaults(b)}},getDefaults:{value:function(a){return this.schemaCheck(a),this.schemata[a].getDefaults()}},stripNonSchemaAttrs:{value:function(a,b){return this.schemaCheck(a),this.schemata[a].stripNonSchemaAttrs(b)}}}),a}();a.exports=l},function(a,b,c){var d=function(a){return a&&a.__esModule?a["default"]:a},e=d(c(5)),f=d(c(6)),g=d(c(7)),h=d(c(8)),i=d(c(9)),j=d(c(10)),k=d(c(11)),l=d(c(12)),m=d(c(13)),n=d(c(14)),o=d(c(15)),p=d(c(16)),q=d(c(17)),r=d(c(18)),s=d(c(19)),t=d(c(20)),u=d(c(21)),v=d(c(22)),w=d(c(23)),x=d(c(24)),y=d(c(25)),z=d(c(26)),A=d(c(27)),B=d(c(28)),C=d(c(29)),D=d(c(30));a.exports={isString:e,isBoolean:f,isNumber:g,isObject:h,isDate:i,isFunction:j,isUndefined:k,isArray:l,isEmpty:m,toString:n,toNumber:o,get:p,deepMixIn:q,deepFillIn:r,forOwn:s,keys:t,pick:u,filter:v,map:w,merge:x,unset:y,contains:z,intersection:A,difference:B,unique:C,toInt:D,errMsg:function(a,b,c){return{rule:a,actual:b,expected:c}},parallel:function(a,b){function c(a){e+=1,(a||e>=f)&&b(a,d)}var d={},e=0,f=0;s(a,function(){f+=1}),s(a,function(a,b){a(function(a){var e=Array.prototype.slice.call(arguments,1);e.length<=1&&(e=e[0]),d[b]=e,c(a)})})}}},function(a,b,c){var d=function(a){return a&&a.__esModule?a["default"]:a},e=d(c(1));a.exports={string:function(a){return e.isString(a)?null:e.errMsg("type",typeof a,"string")},number:function(a){return e.isNumber(a)?null:e.errMsg("type",typeof a,"number")},integer:function(a){return e.isNumber(a)?Math.abs(a)-Math.abs(e.toInt(a))!==0?e.errMsg("type","real","integer"):null:e.errMsg("type",typeof a,"integer")},"float":function(a){return e.isNumber(a)?null:e.errMsg("type",typeof a,"float")},array:function(a){return e.isArray(a)?null:e.errMsg("type",typeof a,"array")},object:function(a){return e.isObject(a)?null:e.errMsg("type",typeof a,"object")},"boolean":function(a){return e.isBoolean(a)?null:e.errMsg("type",typeof a,"boolean")},date:function(a){return e.isDate(a)?null:e.errMsg("type",typeof a,"date")}}},function(a,b,c){var d=function(a){return a&&a.__esModule?a["default"]:a},e=d(c(1)),f=d(c(2));a.exports={nullable:function(a){var b=function(){return a.apply(this,arguments)};return b.toString=function(){return a.toString()},b}(function(a,b){return null!==a&&void 0!==a||b?null:e.errMsg("nullable","x === "+a,"x !== null && x !== undefined")}),max:function(a){var b=function(){return a.apply(this,arguments)};return b.toString=function(){return a.toString()},b}(function(a,b){return e.isNumber(a)&&e.isNumber(b)&&a>b?e.errMsg("max",""+a+" > "+b,""+a+" <= "+b):null}),min:function(a){var b=function(){return a.apply(this,arguments)};return b.toString=function(){return a.toString()},b}(function(a,b){return e.isNumber(a)&&e.isNumber(b)&&b>a?e.errMsg("min",""+a+" < "+b,""+a+" >= "+b):null}),maxLength:function(a){var b=function(){return a.apply(this,arguments)};return b.toString=function(){return a.toString()},b}(function(a,b){return(e.isString(a)||e.isArray(a))&&e.isNumber(b)&&a.length>b?e.errMsg("maxLength",""+a.length+" > "+b,""+a.length+" <= "+b):null}),minLength:function(a){var b=function(){return a.apply(this,arguments)};return b.toString=function(){return a.toString()},b}(function(a,b){return(e.isString(a)||e.isArray(a))&&e.isNumber(b)&&a.length<b?e.errMsg("minLength",""+a.length+" < "+b,""+a.length+" >= "+b):null}),type:function(a){var b=function(){return a.apply(this,arguments)};return b.toString=function(){return a.toString()},b}(function(a,b,c,d){return c?c(a):d.dataTypes[b]?d.dataTypes[b](a):f[b]?f[b](a):null})}},function(a,b,c){function d(a,b,c,d,f){var g=this,h=a+(a.length?".":"")+f,i=m.get(this.schema,h);if(m.isObject(d)||o(i)){var j=e.apply(this,[h,d||{},b]);j&&(c[f]=j)}else{if(!m.isObject(i))return;if(i.nullable===!0){var k=this.parent.rules.nullable||n.nullable,l=k.call(b.ctx,d,!0,void 0,this.parent);if(null===l)return}m.forOwn(i,function(a,e){var h=g.parent.rules[e]||n[e];if(h&&!h.async){var i=h.call(b.ctx,d,a,void 0,g.parent);i&&(c[f]||(c[f]={errors:[]}),c[f].errors.push(i))}})}}function e(a,b,c){var e=this,f={};try{if(m.forOwn(b,function(b,g){d.call(e,a,c,f,b,g)}),!c.ignoreMissing){var g=a?m.get(this.schema,a)||{}:this.schema,h=m.difference(m.keys(g),m.keys(b));h=m.pick(this.schema,h),h=m.map(h,function(){return void 0}),m.forOwn(h,function(b,g){d.call(e,a,c,f,b,g)})}return m.isEmpty(f)?null:f}catch(i){return i}}function f(a,b,c,d,e,f,h){var i=this,j=d+c,k=m.get(this.schema,j);if(m.isObject(b)||o(k))f[c]=function(b,c){return function(d){g.apply(i,[b,c||{},a,d])}}(j,b);else{if(!m.isObject(k))return;if(k.nullable===!0){var l=this.parent.rules.nullable||n.nullable,p=l.call(a.ctx,b,!0,void 0,this.parent);if(null===p)return}m.forOwn(k,function(d,f){var g=i.parent.rules[f]||n[f];if(g&&g.async)h[""+f+"_"+d]=function(b,c,d,e){return function(f){b.call(a.ctx,d,e,function(a){f(null,{err:a,key:c})})}}(g,c,b,d);else{var j=g.call(a.ctx,b,d,void 0,i.parent);j&&(e[c]||(e[c]={errors:[]}),e[c].errors.push(j))}})}}function g(a,b,c,d){var e=this,g={},h=a+(a.length?".":""),i={},j={},k=c.first;if(delete c.first,m.forOwn(b,function(a,b){f.call(e,c,a,b,h,g,i,j)}),!c.ignoreMissing){var l=a?m.get(this.schema,a)||{}:this.schema,n=m.difference(m.keys(l),m.keys(b));n=m.pick(this.schema,n),n=m.map(n,function(){return void 0}),m.forOwn(n,function(a,b){f.call(e,c,a,b,h,g,i,j)})}var o={};m.isEmpty(i)||(o.deepQueue=function(a){m.parallel(i,a)}),m.isEmpty(j)||(o.ruleQueue=function(a){m.parallel(j,a)}),m.isEmpty(o)?m.isEmpty(g)?d(null):k?d(g):d(null,g):m.parallel(o,function(a,b){b.deepQueue&&(b.deepQueue=m.filter(b.deepQueue,function(a){return void 0!==a&&null!==a}),m.deepMixIn(g,b.deepQueue)),b.ruleQueue&&(b.ruleQueue&&(b.ruleQueue=m.filter(b.ruleQueue,function(a){return void 0!==a.err&&null!==a.err})),m.forOwn(b.ruleQueue,function(a){g[a.key]||(g[a.key]={errors:[]}),g[a.key].errors.push(a.err)})),m.isEmpty(g)?d(null):k?d(g):d(null,g)})}function h(a,b){b=b||[];var c=m.keys(a),d=0===m.intersection(c,b).length;m.forOwn(a,function(c,e){d&&m.isString(c)?a[e]={type:c}:m.isObject(c)&&h(c,b)})}function i(a,b){m.forOwn(a,function(c,d){b[d]?m.isObject(c)&&m.isObject(b[d])&&i(c,b[d]):m.unset(a,d)})}var j=function(a){return a&&a.__esModule?a["default"]:a},k=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),l=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},m=j(c(1)),n=j(c(3)),o=function(a){var b=!1;return m.forOwn(a,function(a){return m.isObject(a)?(b=!0,!1):void 0}),b},p={a:"Schema#validateSync(attrs[, options]): ",b:"Schema#validate(attrs[, options], cb): "},q=function(){function a(b,c,d){if(l(this,a),!m.isString(b))throw new Error('"name" must be a string!');if(!m.isObject(c))throw new Error('"schema" must be an object!');this.name=b,h(c,d?d.availableRules():n),this.schema=c}return k(a,{validateSync:{value:function(a,b){if(b=b?b===!0?{ignoreMissing:!0}:b:{},!m.isObject(a))throw new Error(""+p.a+"attrs: Must be an object!");if(!m.isObject(b))throw new Error(""+p.a+"options: Must be an object!");return b.ctx=a,e.call(this,"",a,b)}},validate:{value:function(a,b,c){if(b=b?b===!0?{ignoreMissing:!0}:b:{},m.isFunction(b)&&(c=b,b={}),!m.isFunction(c))throw new Error(""+p.b+"cb: Must be a function!");return m.isObject(a)?m.isObject(b)?(b.first=!0,b.ctx=a,void g.call(this,"",a,b,c)):c(new Error(""+p.b+"options: Must be an object!")):c(new Error(""+p.b+"attrs: Must be an object!"))}},addDefaultsToTarget:{value:function(a,b){if(!m.isObject(a))throw new Error('"target" must be an object!');if(!this.defaults)throw new Error("No defaults have been set!");b?m.deepMixIn(a,this.defaults):m.deepFillIn(a,this.defaults)}},setDefaults:{value:function(a){if(!m.isObject(a))throw new Error("Schema#defaults(attrs): attrs: Must be an object!");return this.defaults=m.merge({},a),this}},getDefaults:{value:function(){return m.merge({},this.defaults)}},stripNonSchemaAttrs:{value:function(a){return i(a,this.schema),a}}}),a}();a.exports=q},function(a,b,c){function d(a){return e(a,"String")}var e=c(31);a.exports=d},function(a,b,c){function d(a){return e(a,"Boolean")}var e=c(31);a.exports=d},function(a,b,c){function d(a){return e(a,"Number")}var e=c(31);a.exports=d},function(a,b,c){function d(a){return e(a,"Object")}var e=c(31);a.exports=d},function(a,b,c){function d(a){return e(a,"Date")}var e=c(31);a.exports=d},function(a,b,c){function d(a){return e(a,"Function")}var e=c(31);a.exports=d},function(a){function b(a){return a===c}var c;a.exports=b},function(a,b,c){var d=c(31),e=Array.isArray||function(a){return d(a,"Array")};a.exports=e},function(a,b,c){function d(a){if(null==a)return!0;if("string"==typeof a||f(a))return!a.length;if("object"==typeof a){var b=!0;return e(a,function(){return b=!1,!1}),b}return!0}var e=c(19),f=c(12);a.exports=d},function(a){function b(a){return null==a?"":a.toString()}a.exports=b},function(a,b,c){function d(a){return"number"==typeof a?a:a?"string"==typeof a?parseFloat(a):e(a)?0/0:Number(a):0}var e=c(12);a.exports=d},function(a,b,c){function d(a,b){for(var c=b.split("."),d=c.pop();b=c.shift();)if(a=a[b],null==a)return;return a[d]}c(32);a.exports=d},function(a,b,c){function d(a){for(var b,c=0,d=arguments.length;++c<d;)b=arguments[c],b&&f(b,e,a);return a}function e(a,b){var c=this[b];g(a)&&g(c)?d(c,a):this[b]=a}var f=c(19),g=c(33);a.exports=d},function(a,b,c){function d(a){for(var b,c=0,g=arguments.length;++c<g;)b=arguments[c],b&&e(b,function(b,c){var e=a[c];null==e?a[c]=b:f(e)&&f(b)&&d(e,b)});return a}var e=c(19),f=c(33);a.exports=d},function(a,b,c){function d(a,b,c){f(a,function(d,f){return e(a,f)?b.call(c,a[f],f,a):void 0})}var e=c(34),f=c(35);a.exports=d},function(a,b,c){var d=c(19),e=Object.keys||function(a){var b=[];return d(a,function(a,c){b.push(c)}),b};a.exports=e},function(a,b,c){function d(a){for(var b,c="string"!=typeof arguments[1]?arguments[1]:e(arguments,1),d={},f=0;b=c[f++];)d[b]=a[b];return d}var e=c(36);a.exports=d},function(a,b,c){function d(a,b,c){b=f(b,c);var d={};return e(a,function(a,c,e){b(a,c,e)&&(d[c]=a)}),d}var e=c(19),f=c(37);a.exports=d},function(a,b,c){function d(a,b,c){b=f(b,c);var d={};return e(a,function(a,c,e){d[c]=b(a,c,e)}),d}var e=c(19),f=c(37);a.exports=d},function(a,b,c){function d(){var a,b,c,h,i=1;for(h=f(arguments[0]);c=arguments[i++];)for(a in c)e(c,a)&&(b=c[a],h[a]=g(b)&&g(h[a])?d(h[a],b):f(b));return h}var e=c(34),f=c(38),g=c(8);a.exports=d},function(a,b,c){function d(a,b){if(e(a,b)){for(var c=b.split("."),d=c.pop();b=c.shift();)a=a[b];return delete a[d]}return!0}var e=c(39);a.exports=d},function(a,b,c){function d(a,b){return-1!==e(a,b)}var e=c(40);a.exports=d},function(a,b,c){function d(a){var b=i(arguments,1),c=f(e(a),function(a){return g(b,function(b){return h(b,a)})});return c}var e=c(29),f=c(41),g=c(42),h=c(26),i=c(36);a.exports=d},function(a,b,c){function d(a){var b=i(arguments,1),c=f(e(a),function(a){return!g(b,function(b){return h(b,a)})});return c}var e=c(29),f=c(41),g=c(43),h=c(26),i=c(36);a.exports=d},function(a,b,c){function d(a,b){return b=b||e,f(a,function(a,c,d){for(var e=d.length;++c<e;)if(b(a,d[c]))return!1;return!0})}function e(a,b){return a===b}var f=c(41);a.exports=d},function(a){function b(a){return~~a}a.exports=b},function(a,b,c){function d(a,b){return e(a)===b}var e=c(44);a.exports=d},function(a){function b(a){switch(typeof a){case"string":case"number":case"boolean":return!0}return null==a}a.exports=b},function(a){function b(a){return!!a&&"object"==typeof a&&a.constructor===Object}a.exports=b},function(a){function b(a,b){return Object.prototype.hasOwnProperty.call(a,b)}a.exports=b},function(a,b,c){function d(){h=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],g=!0;for(var a in{toString:null})g=!1}function e(a,b,c){var e,j=0;null==g&&d();for(e in a)if(f(b,a,e,c)===!1)break;if(g)for(var k=a.constructor,l=!!k&&a===k.prototype;(e=h[j++])&&("constructor"===e&&(l||!i(a,e))||a[e]===Object.prototype[e]||f(b,a,e,c)!==!1););}function f(a,b,c,d){return a.call(d,b[c],c,b)}var g,h,i=c(34);a.exports=e},function(a){function b(a,b,c){var d=a.length;b=null==b?0:0>b?Math.max(d+b,0):Math.min(b,d),c=null==c?d:0>c?Math.max(d+c,0):Math.min(c,d);for(var e=[];c>b;)e.push(a[b++]);return e}a.exports=b},function(a,b,c){function d(a,b){if(null==a)return e;switch(typeof a){case"function":return"undefined"!=typeof b?function(c,d,e){return a.call(b,c,d,e)}:a;case"object":return function(b){return g(b,a)};case"string":case"number":return f(a)}}var e=c(45),f=c(46),g=c(47);a.exports=d},function(a,b,c){function d(a,b){switch(i(a)){case"Object":return e(a,b);case"Array":return f(a,b);default:return g(a)}}function e(a,b){if(j(a)){var c={};return h(a,function(a,c){this[c]=d(a,b)},c),c}return b?b(a):a}function f(a,b){for(var c=[],e=-1,f=a.length;++e<f;)c[e]=d(a[e],b);return c}var g=c(48),h=c(19),i=c(44),j=c(33);a.exports=d},function(a,b,c){function d(a,b){return f(a,b)!==e}var e,f=c(16);a.exports=d},function(a){function b(a,b,c){if(c=c||0,null==a)return-1;for(var d=a.length,e=0>c?d+c:c;d>e;){if(a[e]===b)return e;e++}return-1}a.exports=b},function(a,b,c){function d(a,b,c){b=e(b,c);var d=[];if(null==a)return d;for(var f,g=-1,h=a.length;++g<h;)f=a[g],b(f,g,a)&&d.push(f);return d}var e=c(37);a.exports=d},function(a,b,c){function d(a,b,c){b=e(b,c);var d=!0;if(null==a)return d;for(var f=-1,g=a.length;++f<g;)if(!b(a[f],f,a)){d=!1;break}return d}var e=c(37);a.exports=d},function(a,b,c){function d(a,b,c){b=e(b,c);var d=!1;if(null==a)return d;for(var f=-1,g=a.length;++f<g;)if(b(a[f],f,a)){d=!0;break}return d}var e=c(37);a.exports=d},function(a){function b(a){return null===a?"Null":a===c?"Undefined":d.exec(e.call(a))[1]}var c,d=/^\[object (.*)\]$/,e=Object.prototype.toString;a.exports=b},function(a){function b(a){return a}a.exports=b},function(a){function b(a){return function(b){return b[a]}}a.exports=b},function(a,b,c){function d(a,b){for(var c=-1,d=a.length;++c<d;)if(g(a[c],b))return!0;return!1}function e(a,b){for(var c=-1,e=b.length;++c<e;)if(!d(a,b[c]))return!1;return!0}function f(a,b){var c=!0;return h(b,function(b,d){return g(a[d],b)?void 0:c=!1}),c}function g(a,b){return a&&"object"==typeof a?i(a)&&i(b)?e(a,b):f(a,b):a===b}var h=c(19),i=c(12);a.exports=g},function(a,b,c){function d(a){switch(i(a)){case"Object":return e(a);case"Array":return h(a);case"RegExp":return f(a);case"Date":return g(a);default:return a}}function e(a){return j(a)?k({},a):a}function f(a){var b="";return b+=a.multiline?"m":"",b+=a.global?"g":"",b+=a.ignoreCase?"i":"",new RegExp(a.source,b)}function g(a){return new Date(+a)}function h(a){return a.slice()}var i=c(44),j=c(33),k=c(49);a.exports=d},function(a,b,c){function d(a){for(var b,c=0,d=arguments.length;++c<d;)b=arguments[c],null!=b&&f(b,e,a);return a}function e(a,b){this[b]=a}var f=c(19);a.exports=d}])});
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):"object"==typeof exports?exports.Schemator=b():a.Schemator=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(b,"__esModule",{value:!0});var f=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),g=c(1),h=d(g),i=c(47),j=d(i),k=c(48),l=d(k),m=c(49),n=d(m),o=1,p=function(){function a(){e(this,a),this.dataTypes={},this.rules={},this.schemata={},this.id=o++}return f(a,[{key:"availableDataTypes",value:function(){return h["default"].unique(h["default"].keys(this.dataTypes).concat(h["default"].keys(j["default"])))}},{key:"availableRules",value:function(){return h["default"].unique(h["default"].keys(this.rules).concat(h["default"].keys(l["default"])))}},{key:"availableSchemata",value:function(){return h["default"].keys(this.schemata)}},{key:"defineDataType",value:function(a,b){if(!h["default"].isString(a))throw new Error('"name" must be a string!');if(!h["default"].isFunction(b))throw new Error('"typeDefinition" must be a function!');if(this.dataTypes[a])throw new Error("dataType already registered!");this.dataTypes[a]=b}},{key:"defineRule",value:function(a,b,c){if(!h["default"].isString(a))throw new Error('"name" must be a string!');if(!h["default"].isFunction(b))throw new Error('"ruleFunc" must be a function!');if(this.rules[a])throw new Error("rule already registered!");this.rules[a]=b,this.rules[a].async=!!c}},{key:"defineSchema",value:function(a,b){if(this.schemata[a])throw new Error("schema already registered!");if(b instanceof n["default"])throw new Error("schema registered elsewhere!");return this.schemata[a]=new n["default"](a,b,this),this.schemata[a].parent=this,this.schemata[a]}},{key:"getDataType",value:function(a){return this.dataTypes[a]||j["default"][a]}},{key:"getRule",value:function(a){return this.rules[a]||l["default"][a]}},{key:"getSchema",value:function(a){return this.schemata[a]}},{key:"removeDataType",value:function(a){delete this.dataTypes[a]}},{key:"removeRule",value:function(a){delete this.rules[a]}},{key:"removeSchema",value:function(a){delete this.schemata[a]}},{key:"schemaCheck",value:function(a){if(!this.schemata[a])throw new Error("schema is not registered!")}},{key:"validateSync",value:function(a,b,c){return this.schemaCheck(a),this.schemata[a].validateSync(b,c)}},{key:"validate",value:function(a,b,c,d){return this.schemaCheck(a),this.schemata[a].validate(b,c,d)}},{key:"addDefaultsToTarget",value:function(a,b,c){return this.schemaCheck(a),this.schemata[a].addDefaultsToTarget(b,c)}},{key:"setDefaults",value:function(a,b){return this.schemaCheck(a),this.schemata[a].setDefaults(b)}},{key:"getDefaults",value:function(a){return this.schemaCheck(a),this.schemata[a].getDefaults()}},{key:"stripNonSchemaAttrs",value:function(a,b){return this.schemaCheck(a),this.schemata[a].stripNonSchemaAttrs(b)}}]),a}();b["default"]=p,a.exports=b["default"]},function(a,b,c){function d(a){return a&&a.__esModule?a:{"default":a}}Object.defineProperty(b,"__esModule",{value:!0});var e=c(7),f=d(e),g=c(10),h=d(g),i=c(11),j=d(i),k=c(12),l=d(k),m=c(13),n=d(m),o=c(14),p=d(o),q=c(15),r=d(q),s=c(16),t=d(s),u=c(17),v=d(u),w=c(18),x=d(w),y=c(19),z=d(y),A=c(20),B=d(A),C=c(22),D=d(C),E=c(2),F=d(E),G=c(3),H=d(G),I=c(23),J=d(I),K=c(24),L=d(K),M=c(26),N=d(M),O=c(31),P=d(O),Q=c(32),R=d(Q),S=c(36),T=d(S),U=c(38),V=d(U),W=c(40),X=d(W),Y=c(44),Z=d(Y),$=c(41),_=d($),aa=c(46),ba=d(aa);b["default"]={isString:f["default"],isBoolean:h["default"],isNumber:j["default"],isObject:l["default"],isDate:n["default"],isFunction:p["default"],isUndefined:r["default"],isArray:t["default"],isEmpty:v["default"],toString:x["default"],toNumber:z["default"],get:B["default"],deepMixIn:D["default"],deepFillIn:F["default"],forOwn:H["default"],keys:J["default"],pick:L["default"],filter:N["default"],map:P["default"],merge:R["default"],unset:T["default"],contains:V["default"],intersection:X["default"],difference:Z["default"],unique:_["default"],toInt:ba["default"],errMsg:function(a,b,c){return{rule:a,actual:b,expected:c}},parallel:function(a,b){function c(a){e+=1,(a||e>=f)&&b(a,d)}var d={},e=0,f=0;H["default"](a,function(){f+=1}),H["default"](a,function(a,b){a(function(a){var e=Array.prototype.slice.call(arguments,1);e.length<=1&&(e=e[0]),d[b]=e,c(a)})})}},a.exports=b["default"]},function(a,b,c){function d(a,b){for(var c,g=0,h=arguments.length;++g<h;)c=arguments[g],c&&e(c,function(b,c){var e=a[c];null==e?a[c]=b:f(e)&&f(b)&&d(e,b)});return a}var e=c(3),f=c(6);a.exports=d},function(a,b,c){function d(a,b,c){f(a,function(d,f){return e(a,f)?b.call(c,a[f],f,a):void 0})}var e=c(4),f=c(5);a.exports=d},function(a,b,c){function d(a,b){return Object.prototype.hasOwnProperty.call(a,b)}a.exports=d},function(a,b,c){function d(){h=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],g=!0;for(var a in{toString:null})g=!1}function e(a,b,c){var e,j=0;null==g&&d();for(e in a)if(f(b,a,e,c)===!1)break;if(g)for(var k=a.constructor,l=!!k&&a===k.prototype;(e=h[j++])&&("constructor"===e&&(l||!i(a,e))||a[e]===Object.prototype[e]||f(b,a,e,c)!==!1););}function f(a,b,c,d){return a.call(d,b[c],c,b)}var g,h,i=c(4);a.exports=e},function(a,b,c){function d(a){return!!a&&"object"==typeof a&&a.constructor===Object}a.exports=d},function(a,b,c){function d(a){return e(a,"String")}var e=c(8);a.exports=d},function(a,b,c){function d(a,b){return e(a)===b}var e=c(9);a.exports=d},function(a,b,c){function d(a){return null===a?"Null":a===e?"Undefined":f.exec(g.call(a))[1]}var e,f=/^\[object (.*)\]$/,g=Object.prototype.toString;a.exports=d},function(a,b,c){function d(a){return e(a,"Boolean")}var e=c(8);a.exports=d},function(a,b,c){function d(a){return e(a,"Number")}var e=c(8);a.exports=d},function(a,b,c){function d(a){return e(a,"Object")}var e=c(8);a.exports=d},function(a,b,c){function d(a){return e(a,"Date")}var e=c(8);a.exports=d},function(a,b,c){function d(a){return e(a,"Function")}var e=c(8);a.exports=d},function(a,b,c){function d(a){return a===e}var e;a.exports=d},function(a,b,c){var d=c(8),e=Array.isArray||function(a){return d(a,"Array")};a.exports=e},function(a,b,c){function d(a){if(null==a)return!0;if("string"==typeof a||f(a))return!a.length;if("object"==typeof a){var b=!0;return e(a,function(){return b=!1,!1}),b}return!0}var e=c(3),f=c(16);a.exports=d},function(a,b,c){function d(a){return null==a?"":a.toString()}a.exports=d},function(a,b,c){function d(a){return"number"==typeof a?a:a?"string"==typeof a?parseFloat(a):e(a)?NaN:Number(a):0}var e=c(16);a.exports=d},function(a,b,c){function d(a,b){for(var c=b.split("."),d=c.pop();b=c.shift();)if(a=a[b],null==a)return;return a[d]}c(21);a.exports=d},function(a,b,c){function d(a){switch(typeof a){case"string":case"number":case"boolean":return!0}return null==a}a.exports=d},function(a,b,c){function d(a,b){for(var c,d=0,g=arguments.length;++d<g;)c=arguments[d],c&&f(c,e,a);return a}function e(a,b){var c=this[b];g(a)&&g(c)?d(c,a):this[b]=a}var f=c(3),g=c(6);a.exports=d},function(a,b,c){var d=c(3),e=Object.keys||function(a){var b=[];return d(a,function(a,c){b.push(c)}),b};a.exports=e},function(a,b,c){function d(a,b){for(var c,d="string"!=typeof arguments[1]?arguments[1]:e(arguments,1),f={},g=0;c=d[g++];)f[c]=a[c];return f}var e=c(25);a.exports=d},function(a,b,c){function d(a,b,c){var d=a.length;b=null==b?0:0>b?Math.max(d+b,0):Math.min(b,d),c=null==c?d:0>c?Math.max(d+c,0):Math.min(c,d);for(var e=[];c>b;)e.push(a[b++]);return e}a.exports=d},function(a,b,c){function d(a,b,c){b=f(b,c);var d={};return e(a,function(a,c,e){b(a,c,e)&&(d[c]=a)}),d}var e=c(3),f=c(27);a.exports=d},function(a,b,c){function d(a,b){if(null==a)return e;switch(typeof a){case"function":return"undefined"!=typeof b?function(c,d,e){return a.call(b,c,d,e)}:a;case"object":return function(b){return g(b,a)};case"string":case"number":return f(a)}}var e=c(28),f=c(29),g=c(30);a.exports=d},function(a,b,c){function d(a){return a}a.exports=d},function(a,b,c){function d(a){return function(b){return b[a]}}a.exports=d},function(a,b,c){function d(a,b){for(var c=-1,d=a.length;++c<d;)if(g(a[c],b))return!0;return!1}function e(a,b){for(var c=-1,e=b.length;++c<e;)if(!d(a,b[c]))return!1;return!0}function f(a,b){var c=!0;return h(b,function(b,d){return g(a[d],b)?void 0:c=!1}),c}function g(a,b){return a&&"object"==typeof a?i(a)&&i(b)?e(a,b):f(a,b):a===b}var h=c(3),i=c(16);a.exports=g},function(a,b,c){function d(a,b,c){b=f(b,c);var d={};return e(a,function(a,c,e){d[c]=b(a,c,e)}),d}var e=c(3),f=c(27);a.exports=d},function(a,b,c){function d(){var a,b,c,h,i=1;for(h=f(arguments[0]);c=arguments[i++];)for(a in c)e(c,a)&&(b=c[a],g(b)&&g(h[a])?h[a]=d(h[a],b):h[a]=f(b));return h}var e=c(4),f=c(33),g=c(12);a.exports=d},function(a,b,c){function d(a,b){switch(i(a)){case"Object":return e(a,b);case"Array":return f(a,b);default:return g(a)}}function e(a,b){if(j(a)){var c={};return h(a,function(a,c){this[c]=d(a,b)},c),c}return b?b(a):a}function f(a,b){for(var c=[],e=-1,f=a.length;++e<f;)c[e]=d(a[e],b);return c}var g=c(34),h=c(3),i=c(9),j=c(6);a.exports=d},function(a,b,c){function d(a){switch(i(a)){case"Object":return e(a);case"Array":return h(a);case"RegExp":return f(a);case"Date":return g(a);default:return a}}function e(a){return j(a)?k({},a):a}function f(a){var b="";return b+=a.multiline?"m":"",b+=a.global?"g":"",b+=a.ignoreCase?"i":"",new RegExp(a.source,b)}function g(a){return new Date(+a)}function h(a){return a.slice()}var i=c(9),j=c(6),k=c(35);a.exports=d},function(a,b,c){function d(a,b){for(var c,d=0,g=arguments.length;++d<g;)c=arguments[d],null!=c&&f(c,e,a);return a}function e(a,b){this[b]=a}var f=c(3);a.exports=d},function(a,b,c){function d(a,b){if(e(a,b)){for(var c=b.split("."),d=c.pop();b=c.shift();)a=a[b];return delete a[d]}return!0}var e=c(37);a.exports=d},function(a,b,c){function d(a,b){return f(a,b)!==e}var e,f=c(20);a.exports=d},function(a,b,c){function d(a,b){return-1!==e(a,b)}var e=c(39);a.exports=d},function(a,b,c){function d(a,b,c){if(c=c||0,null==a)return-1;for(var d=a.length,e=0>c?d+c:c;d>e;){if(a[e]===b)return e;e++}return-1}a.exports=d},function(a,b,c){function d(a){var b=i(arguments,1),c=f(e(a),function(a){return g(b,function(b){return h(b,a)})});return c}var e=c(41),f=c(42),g=c(43),h=c(38),i=c(25);a.exports=d},function(a,b,c){function d(a,b){return b=b||e,f(a,function(a,c,d){for(var e=d.length;++c<e;)if(b(a,d[c]))return!1;return!0})}function e(a,b){return a===b}var f=c(42);a.exports=d},function(a,b,c){function d(a,b,c){b=e(b,c);var d=[];if(null==a)return d;for(var f,g=-1,h=a.length;++g<h;)f=a[g],b(f,g,a)&&d.push(f);return d}var e=c(27);a.exports=d},function(a,b,c){function d(a,b,c){b=e(b,c);var d=!0;if(null==a)return d;for(var f=-1,g=a.length;++f<g;)if(!b(a[f],f,a)){d=!1;break}return d}var e=c(27);a.exports=d},function(a,b,c){function d(a){var b=i(arguments,1),c=f(e(a),function(a){return!g(b,function(b){return h(b,a)})});return c}var e=c(41),f=c(42),g=c(45),h=c(38),i=c(25);a.exports=d},function(a,b,c){function d(a,b,c){b=e(b,c);var d=!1;if(null==a)return d;for(var f=-1,g=a.length;++f<g;)if(b(a[f],f,a)){d=!0;break}return d}var e=c(27);a.exports=d},function(a,b,c){function d(a){return~~a}a.exports=d},function(a,b,c){function d(a){return a&&a.__esModule?a:{"default":a}}Object.defineProperty(b,"__esModule",{value:!0});var e=c(1),f=d(e);b["default"]={string:function(a){return f["default"].isString(a)?null:f["default"].errMsg("type",typeof a,"string")},number:function(a){return f["default"].isNumber(a)?null:f["default"].errMsg("type",typeof a,"number")},integer:function(a){return f["default"].isNumber(a)?Math.abs(a)-Math.abs(f["default"].toInt(a))!==0?f["default"].errMsg("type","real","integer"):null:f["default"].errMsg("type",typeof a,"integer")},"float":function(a){return f["default"].isNumber(a)?null:f["default"].errMsg("type",typeof a,"float")},array:function(a){return f["default"].isArray(a)?null:f["default"].errMsg("type",typeof a,"array")},object:function(a){return f["default"].isObject(a)?null:f["default"].errMsg("type",typeof a,"object")},"boolean":function(a){return f["default"].isBoolean(a)?null:f["default"].errMsg("type",typeof a,"boolean")},date:function(a){return f["default"].isDate(a)?null:f["default"].errMsg("type",typeof a,"date")}},a.exports=b["default"]},function(a,b,c){function d(a){return a&&a.__esModule?a:{"default":a}}Object.defineProperty(b,"__esModule",{value:!0});var e=c(1),f=d(e),g=c(47),h=d(g);b["default"]={nullable:function(a,b){return null!==a&&void 0!==a||b?null:f["default"].errMsg("nullable","x === "+a,"x !== null && x !== undefined")},max:function(a,b){return f["default"].isNumber(a)&&f["default"].isNumber(b)&&a>b?f["default"].errMsg("max",""+a+" > "+b,""+a+" <= "+b):null},min:function(a,b){return f["default"].isNumber(a)&&f["default"].isNumber(b)&&b>a?f["default"].errMsg("min",""+a+" < "+b,""+a+" >= "+b):null},maxLength:function(a,b){return(f["default"].isString(a)||f["default"].isArray(a))&&f["default"].isNumber(b)&&a.length>b?f["default"].errMsg("maxLength",""+a.length+" > "+b,""+a.length+" <= "+b):null},minLength:function(a,b){return(f["default"].isString(a)||f["default"].isArray(a))&&f["default"].isNumber(b)&&a.length<b?f["default"].errMsg("minLength",""+a.length+" < "+b,""+a.length+" >= "+b):null},type:function(a,b,c,d){return c?c(a):d.dataTypes[b]?d.dataTypes[b](a):h["default"][b]?h["default"][b](a):null}},a.exports=b["default"]},function(a,b,c){function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b,c,d,e){var f=this,h=a+(a.length?".":"")+e,i=n["default"].get(this.schema,h);if(i)if(n["default"].isObject(d)||q(i)){var j=g.apply(this,[h,d||{},b]);j&&(c[e]=j)}else{if(!n["default"].isObject(i))return;if(i.nullable===!0){var k=this.parent.rules.nullable||p["default"].nullable,l=k.call(b.ctx,d,!0,void 0,this.parent);if(null===l)return}n["default"].forOwn(i,function(a,g){var h=f.parent.rules[g]||p["default"][g];if(h&&!h.async){var i=h.call(b.ctx,d,a,void 0,f.parent);i&&(c[e]||(c[e]={errors:[]}),c[e].errors.push(i))}})}}function g(a,b,c){var d=this,e={};try{if(n["default"].forOwn(b,function(b,g){f.call(d,a,c,e,b,g)}),!c.ignoreMissing){var g=a?n["default"].get(this.schema,a)||{}:this.schema,h=n["default"].difference(n["default"].keys(g),n["default"].keys(b));h=n["default"].pick(this.schema,h),h=n["default"].map(h,function(){return void 0}),n["default"].forOwn(h,function(b,g){f.call(d,a,c,e,b,g)})}return n["default"].isEmpty(e)?null:e}catch(i){return i}}function h(a,b,c,d,e,f,g){var h=this,j=d+c,k=n["default"].get(this.schema,j);if(k)if(n["default"].isObject(b)||q(k))f[c]=function(b,c){return function(d){i.apply(h,[b,c||{},a,d])}}(j,b);else{if(!n["default"].isObject(k))return;if(k.nullable===!0){var l=this.parent.rules.nullable||p["default"].nullable,m=l.call(a.ctx,b,!0,void 0,this.parent);if(null===m)return}n["default"].forOwn(k,function(d,f){var i=h.parent.rules[f]||p["default"][f];if(i&&i.async)g[""+f+"_"+d]=function(b,c,d,e){return function(f){b.call(a.ctx,d,e,function(a){f(null,{err:a,key:c})})}}(i,c,b,d);else{var j=i.call(a.ctx,b,d,void 0,h.parent);j&&(e[c]||(e[c]={errors:[]}),e[c].errors.push(j))}})}}function i(a,b,c,d){var e=this,f={},g=a+(a.length?".":""),i={},j={},k=c.first;if(delete c.first,n["default"].forOwn(b,function(a,b){h.call(e,c,a,b,g,f,i,j)}),!c.ignoreMissing){var l=a?n["default"].get(this.schema,a)||{}:this.schema,m=n["default"].difference(n["default"].keys(l),n["default"].keys(b));m=n["default"].pick(this.schema,m),m=n["default"].map(m,function(){return void 0}),n["default"].forOwn(m,function(a,b){h.call(e,c,a,b,g,f,i,j)})}var o={};n["default"].isEmpty(i)||(o.deepQueue=function(a){n["default"].parallel(i,a)}),n["default"].isEmpty(j)||(o.ruleQueue=function(a){n["default"].parallel(j,a)}),n["default"].isEmpty(o)?n["default"].isEmpty(f)?d(null):k?d(f):d(null,f):n["default"].parallel(o,function(a,b){b.deepQueue&&(b.deepQueue=n["default"].filter(b.deepQueue,function(a){return void 0!==a&&null!==a}),n["default"].deepMixIn(f,b.deepQueue)),b.ruleQueue&&(b.ruleQueue&&(b.ruleQueue=n["default"].filter(b.ruleQueue,function(a){return void 0!==a.err&&null!==a.err})),n["default"].forOwn(b.ruleQueue,function(a){f[a.key]||(f[a.key]={errors:[]}),f[a.key].errors.push(a.err)})),n["default"].isEmpty(f)?d(null):k?d(f):d(null,f)})}function j(a,b){b=b||[];var c=n["default"].keys(a),d=0===n["default"].intersection(c,b).length;n["default"].forOwn(a,function(c,e){d&&n["default"].isString(c)?a[e]={type:c}:n["default"].isObject(c)&&j(c,b)})}function k(a,b){n["default"].forOwn(a,function(c,d){b[d]?n["default"].isObject(c)&&n["default"].isObject(b[d])&&k(c,b[d]):n["default"].unset(a,d)})}Object.defineProperty(b,"__esModule",{value:!0});var l=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,"value"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),m=c(1),n=d(m),o=c(48),p=d(o),q=function(a){var b=!1;return n["default"].forOwn(a,function(a){return n["default"].isObject(a)?(b=!0,!1):void 0}),b},r={a:"Schema#validateSync(attrs[, options]): ",b:"Schema#validate(attrs[, options], cb): "},s=function(){function a(b,c,d){if(e(this,a),!n["default"].isString(b))throw new Error('"name" must be a string!');if(!n["default"].isObject(c))throw new Error('"schema" must be an object!');this.name=b,j(c,d?d.availableRules():p["default"]),this.schema=c}return l(a,[{key:"validateSync",value:function(a,b){if(b=b?b===!0?{ignoreMissing:!0}:b:{},!n["default"].isObject(a))throw new Error(""+r.a+"attrs: Must be an object!");if(!n["default"].isObject(b))throw new Error(""+r.a+"options: Must be an object!");return b.ctx=a,g.call(this,"",a,b)}},{key:"validate",value:function(a,b,c){if(b=b?b===!0?{ignoreMissing:!0}:b:{},n["default"].isFunction(b)&&(c=b,b={}),!n["default"].isFunction(c))throw new Error(""+r.b+"cb: Must be a function!");return n["default"].isObject(a)?n["default"].isObject(b)?(b.first=!0,b.ctx=a,void i.call(this,"",a,b,c)):c(new Error(""+r.b+"options: Must be an object!")):c(new Error(""+r.b+"attrs: Must be an object!"))}},{key:"addDefaultsToTarget",value:function(a,b){if(!n["default"].isObject(a))throw new Error('"target" must be an object!');if(!this.defaults)throw new Error("No defaults have been set!");b?n["default"].deepMixIn(a,this.defaults):n["default"].deepFillIn(a,this.defaults)}},{key:"setDefaults",value:function(a){if(!n["default"].isObject(a))throw new Error("Schema#defaults(attrs): attrs: Must be an object!");return this.defaults=n["default"].merge({},a),this}},{key:"getDefaults",value:function(){return n["default"].merge({},this.defaults)}},{key:"stripNonSchemaAttrs",value:function(a){return k(a,this.schema),a}}]),a}();b["default"]=s,a.exports=b["default"]}])});
//# sourceMappingURL=js-data-schema.min.map

@@ -20,3 +20,5 @@ /*jshint latedef:false*/

if (utils.isObject(value) || hasObject(schemaRules)) {
if (!schemaRules) {
return;
} else if (utils.isObject(value) || hasObject(schemaRules)) {
let err = _validateSync.apply(this, [nestedKey, value || {}, options]);

@@ -89,3 +91,5 @@ if (err) {

if (utils.isObject(value) || hasObject(schemaRules)) {
if (!schemaRules) {
return;
} else if (utils.isObject(value) || hasObject(schemaRules)) {
// Recurse down into nested attributes

@@ -92,0 +96,0 @@ deepQueue[key] = ((nK, val) => {

{
"name": "js-data-schema",
"description": "Define and validate rules, datatypes and schemata in Node and in the browser.",
"version": "1.2.4",
"version": "1.2.5",
"homepage": "http://www.js-data.io/docs/js-data-schema",

@@ -41,10 +41,10 @@ "repository": {

"devDependencies": {
"babel-core": "4.7.16",
"babel-loader": "4.2.0",
"chai": "2.2.0",
"babel-core": "5.4.7",
"babel-loader": "5.1.3",
"chai": "2.3.0",
"grunt": "0.4.5",
"grunt-contrib-clean": "0.6.0",
"grunt-contrib-uglify": "0.8.0",
"grunt-contrib-uglify": "0.9.1",
"grunt-contrib-watch": "0.6.1",
"grunt-karma": "0.10.1",
"grunt-karma": "0.11.0",
"grunt-karma-coveralls": "2.5.3",

@@ -54,19 +54,19 @@ "grunt-mocha-test": "0.12.7",

"jit-grunt": "0.9.1",
"jshint": "2.6.3",
"jshint": "2.8.0",
"jshint-loader": "0.8.3",
"karma": "0.12.31",
"karma": "0.12.35",
"karma-chai": "0.1.0",
"karma-chrome-launcher": "0.1.7",
"karma-coverage": "0.2.7",
"karma-firefox-launcher": "0.1.4",
"karma-chrome-launcher": "0.1.12",
"karma-coverage": "0.3.1",
"karma-firefox-launcher": "0.1.6",
"karma-mocha": "0.1.10",
"karma-phantomjs-launcher": "0.1.4",
"karma-phantomjs-launcher": "0.2.0",
"karma-script-launcher": "0.1.0",
"karma-sinon": "1.0.4",
"karma-spec-reporter": "0.0.18",
"mocha": "2.2.1",
"karma-spec-reporter": "0.0.19",
"mocha": "2.2.5",
"sinon": "1.14.1",
"time-grunt": "1.1.0",
"webpack": "1.7.3",
"webpack-dev-server": "1.7.0"
"time-grunt": "1.2.1",
"webpack": "1.9.10",
"webpack-dev-server": "1.9.0"
},

@@ -76,3 +76,6 @@ "bugs": {

"email": "jason.dobry@gmail.com"
},
"scripts": {
"test": "grunt test"
}
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc