js-data-schema
Advanced tools
Comparing version 1.2.4 to 1.2.5
@@ -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 @@ |
/*! | ||
* 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
173564
3624