shapely
Version:
Runtime type checker with tagged unions
1,332 lines (1,015 loc) • 37.9 kB
JavaScript
module.exports =
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "/lib/";
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var union = exports.union = __webpack_require__(2).default;
var any = exports.any = __webpack_require__(12).default;
var nil = exports.nil = __webpack_require__(14).default;
var mapOf = exports.mapOf = __webpack_require__(16).default;
var arrayOf = exports.arrayOf = __webpack_require__(18).default;
var record = exports.record = __webpack_require__(20).default;
var optional = exports.optional = __webpack_require__(23).default;
var validate = exports.validate = __webpack_require__(25).default;
var deferred = exports.deferred = __webpack_require__(26).default;
var createValidator = exports.createValidator = __webpack_require__(4).default;
var isValid = exports.isValid = __webpack_require__(28).default;
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = union;
var _UnionValidator = __webpack_require__(3);
var _UnionValidator2 = _interopRequireDefault(_UnionValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function union() {
for (var _len = arguments.length, variants = Array(_len), _key = 0; _key < _len; _key++) {
variants[_key] = arguments[_key];
}
return new _UnionValidator2.default(variants);
}
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _Validator = __webpack_require__(5);
var _ValidationResult = __webpack_require__(6);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var UnionValidator = (function () {
function UnionValidator(variants) {
_classCallCheck(this, UnionValidator);
this.validators = [];
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = variants[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var variant = _step.value;
this.validators.push((0, _createValidator2.default)(variant));
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
_createClass(UnionValidator, [{
key: 'isValid',
value: function isValid(val) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = this.validators[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var validator = _step2.value;
if (validator.isValid(val)) return true;
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return false;
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
if (this.isValid(val)) {
return {
isValid: 'true'
};
} else {
var details = this._getValidationDetails(val);
return {
isValid: 'false',
message: 'Value doesn\'t match any of the expected variants.\nValue: ' + JSON.stringify(val) + '\nDetails: \n' + details.message,
score: details.score
};
}
}
}, {
key: '_getValidationDetails',
value: function _getValidationDetails(val) {
var validationResults = [];
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = this.validators[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var validator = _step3.value;
validationResults.push(validator.getValidationResult(val));
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
validationResults.sort(function (a, b) {
if (a.score < b.score) {
return 1;
} else if (a.score > b.score) {
return -1;
} else {
return 0;
}
});
if (validationResults.length > 3) validationResults.length = 3;
var message = validationResults.map(function (v) {
return v.message;
}).join('\n');
return {
message: message,
score: validationResults[0].score
};
}
}]);
return UnionValidator;
})();
exports.default = UnionValidator;
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createValidator;
var _Validator = __webpack_require__(5);
var _stringValidator = __webpack_require__(7);
var _stringValidator2 = _interopRequireDefault(_stringValidator);
var _numberValidator = __webpack_require__(9);
var _numberValidator2 = _interopRequireDefault(_numberValidator);
var _booleanValidator = __webpack_require__(10);
var _booleanValidator2 = _interopRequireDefault(_booleanValidator);
var _UnionValidator = __webpack_require__(3);
var _UnionValidator2 = _interopRequireDefault(_UnionValidator);
var _ExactValueValidator = __webpack_require__(11);
var _ExactValueValidator2 = _interopRequireDefault(_ExactValueValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
/**
* Takes the descriptor of a Validator and returns the Validator.
* Examples:
* createValidator(String) // returns stringValidator
* createValidator('hello') // returns ExactValueValidator<'hello'>
* createValidator(createValidator(String)) // returns the same stringValidator
*
* @throws {Error} If the descriptor is unrecognized.
*/
function createValidator(desc) {
if (desc == null) throw Error('Null cannot be a valid validation descriptor');
if (desc === String) {
return _stringValidator2.default;
} else if (desc === Number) {
return _numberValidator2.default;
} else if (desc === Boolean) {
return _booleanValidator2.default;
} else if ((typeof desc === 'undefined' ? 'undefined' : _typeof(desc)) === 'object' && desc && typeof desc.isValid === 'function' && typeof desc.getValidationResult === 'function') {
return desc;
} else if (typeof desc === 'string' || typeof desc === 'number' || typeof desc === 'boolean') {
return new _ExactValueValidator2.default(desc);
} else {
throw new Error('Can\'t recognize this descriptor: ' + desc);
}
}
/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var _ValidationResult = __webpack_require__(6);
/***/ },
/* 6 */
/***/ function(module, exports) {
'use strict';
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var stringValidator = {
isValid: function isValid(val) {
if (typeof val === 'string') {
return true;
} else {
return false;
}
},
getValidationResult: function getValidationResult(val) {
if (stringValidator.isValid(val)) {
return {
isValid: 'true'
};
} else {
return {
isValid: 'false',
message: "String expected, " + (0, _type2.default)(val) + " given.",
score: 0
};
}
}
};
exports.default = stringValidator;
/***/ },
/* 8 */
/***/ function(module, exports) {
module.exports = require("ramda/src/type");
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var numberValidator = {
isValid: function isValid(val) {
if (typeof val === 'number') {
return true;
} else {
return false;
}
},
getValidationResult: function getValidationResult(val) {
if (numberValidator.isValid(val)) {
return {
isValid: 'true'
};
} else {
return {
isValid: 'false',
message: "Number expected. '" + (0, _type2.default)(val) + "' given.",
score: 0
};
}
}
};
exports.default = numberValidator;
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var booleanValidator = {
isValid: function isValid(val) {
if (typeof val === 'boolean') {
return true;
} else {
return false;
}
},
getValidationResult: function getValidationResult(val) {
if (booleanValidator.isValid(val)) {
return {
isValid: 'true'
};
} else {
return {
isValid: 'false',
message: "Boolean expected. " + (0, _type2.default)(val) + " given.",
score: 0
};
}
}
};
exports.default = booleanValidator;
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _Validator = __webpack_require__(5);
var _ValidationResult = __webpack_require__(6);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var ExactValueValidator = (function () {
function ExactValueValidator(desc) {
_classCallCheck(this, ExactValueValidator);
this.expectedValue = desc;
}
_createClass(ExactValueValidator, [{
key: 'isValid',
value: function isValid(val) {
return val === this.expectedValue;
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
if (this.isValid(val)) {
return {
isValid: 'true'
};
} else {
return {
isValid: 'false',
message: 'Expected: ' + JSON.stringify(this.expectedValue) + '. Given: ' + val,
score: 0
};
}
}
}]);
return ExactValueValidator;
})();
exports.default = ExactValueValidator;
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _anyValidator = __webpack_require__(13);
var _anyValidator2 = _interopRequireDefault(_anyValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _anyValidator2.default;
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var anyValidator = {
isValid: function isValid(val) {
return true;
},
getValidationResult: function getValidationResult(val) {
return {
isValid: 'true'
};
}
};
exports.default = anyValidator;
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _nilValidator = __webpack_require__(15);
var _nilValidator2 = _interopRequireDefault(_nilValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _nilValidator2.default;
/***/ },
/* 15 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var nilValidator = {
isValid: function isValid(val) {
return val === null || val === undefined;
},
getValidationResult: function getValidationResult(val) {
if (nilValidator.isValid(val)) {
return {
isValid: 'true'
};
} else {
return {
isValid: 'false',
message: "Null expected. " + (0, _type2.default)(val) + " given.",
score: 0
};
}
}
};
exports.default = nilValidator;
/***/ },
/* 16 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = mapOf;
var _MapOfValidator = __webpack_require__(17);
var _MapOfValidator2 = _interopRequireDefault(_MapOfValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function mapOf(desc) {
return new _MapOfValidator2.default(desc);
}
/***/ },
/* 17 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
var MapOfValidator = (function () {
function MapOfValidator(desc) {
_classCallCheck(this, MapOfValidator);
this.validator = (0, _createValidator2.default)(desc);
}
_createClass(MapOfValidator, [{
key: 'isValid',
value: function isValid(val) {
if (!((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && val)) return false;
var keys = Object.keys(val);
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = keys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var key = _step.value;
var keyVal = val[key];
if (this.validator.isValid(keyVal) === false) return false;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return true;
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
if (!((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && val)) return {
isValid: 'false',
message: 'Object expected. ' + (0, _type2.default)(val) + ' given.',
score: 0
};
var keys = Object.keys(val);
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = keys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var key = _step2.value;
var keyVal = val[key];
var result = this.validator.getValidationResult(keyVal);
if (result.isValid === 'false') {
return {
isValid: 'false',
message: 'Validation failed for key \'' + key + '\': ' + result.message,
score: 1
};
}
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return { isValid: 'true' };
}
}]);
return MapOfValidator;
})();
exports.default = MapOfValidator;
/***/ },
/* 18 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = arrayOf;
var _ArrayOfValidator = __webpack_require__(19);
var _ArrayOfValidator2 = _interopRequireDefault(_ArrayOfValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function arrayOf(desc) {
return new _ArrayOfValidator2.default(desc);
}
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var ArrayOfValidator = (function () {
function ArrayOfValidator(desc) {
_classCallCheck(this, ArrayOfValidator);
this.validator = (0, _createValidator2.default)(desc);
}
_createClass(ArrayOfValidator, [{
key: 'isValid',
value: function isValid(val) {
if (!Array.isArray(val)) return false;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = val[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var keyVal = _step.value;
if (this.validator.isValid(keyVal) === false) return false;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
return true;
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
if (!Array.isArray(val)) return {
isValid: 'false',
message: 'Array expected. ' + (0, _type2.default)(val) + ' given.',
score: 0
};
for (var i = 0; i < val.length; i++) {
var keyVal = val[i];
var result = this.validator.getValidationResult(keyVal);
if (result.isValid === 'false') {
return {
isValid: 'false',
message: 'Validation failed on item #' + i + ': ' + result.message,
score: 1
};
}
}
return { isValid: 'true' };
}
}]);
return ArrayOfValidator;
})();
exports.default = ArrayOfValidator;
/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = record;
var _RecordValidator = __webpack_require__(21);
var _RecordValidator2 = _interopRequireDefault(_RecordValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function record(desc) {
return new _RecordValidator2.default(desc);
}
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _isPlainObject = __webpack_require__(22);
var _isPlainObject2 = _interopRequireDefault(_isPlainObject);
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _Validator = __webpack_require__(5);
var _ValidationResult = __webpack_require__(6);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _typeof(obj) { return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj; }
var RecordValidator = (function () {
function RecordValidator(desc) {
_classCallCheck(this, RecordValidator);
if (!((typeof desc === 'undefined' ? 'undefined' : _typeof(desc)) === 'object' && desc && (0, _isPlainObject2.default)(desc))) throw Error('A record must be defined by an object.');
this.shape = {};
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = Object.getOwnPropertyNames(desc)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var propName = _step.value;
try {
this.shape[propName] = (0, _createValidator2.default)(desc[propName]);
} catch (e) {
var propertyName = propName;
var stack = e.stack;
if (e.originalStack) {
stack = e.originalStack;
propertyName += '.' + e.propertyName;
e.propertyName = propertyName;
} else {
e.originalStack = e.stack;
}
e.stack = 'Error defining prop \'' + propertyName + '\': ' + e.originalStack;
throw e;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
_createClass(RecordValidator, [{
key: 'isValid',
value: function isValid(val) {
if (!((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && val)) return false;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = Object.keys(this.shape)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var _key = _step2.value;
var validator = this.shape[_key];
if (validator.isValid(val[_key]) === false) return false;
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
return true;
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
if (!((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && val)) return {
isValid: 'false',
message: 'Object expected, ' + (0, _type2.default)(val) + ' given.',
score: 0
};
var numberOfPropsCounted = 0;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = Object.keys(this.shape)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _key2 = _step3.value;
var validator = this.shape[_key2];
var result = validator.getValidationResult(val[_key2]);
if (result.isValid === 'false') {
return {
isValid: 'false',
message: 'Error validating prop ' + _key2 + ':\n ' + result.message,
score: 1 + numberOfPropsCounted
};
}
numberOfPropsCounted++;
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
return {
isValid: 'true'
};
}
}]);
return RecordValidator;
})();
exports.default = RecordValidator;
/***/ },
/* 22 */
/***/ function(module, exports) {
module.exports = require("lodash/lang/isPlainObject");
/***/ },
/* 23 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = optional;
var _OptionalValidator = __webpack_require__(24);
var _OptionalValidator2 = _interopRequireDefault(_OptionalValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function optional(desc) {
return new _OptionalValidator2.default(desc);
}
/***/ },
/* 24 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var OptionalValidator = (function () {
function OptionalValidator(desc) {
_classCallCheck(this, OptionalValidator);
this.validator = (0, _createValidator2.default)(desc);
}
_createClass(OptionalValidator, [{
key: 'isValid',
value: function isValid(val) {
if (!val) return true;
return this.validator.isValid(val);
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
if (!val) return {
isValid: 'true'
};
return this.validator.getValidationResult(val);
}
}]);
return OptionalValidator;
})();
exports.default = OptionalValidator;
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = validate;
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function validate(validationDescriptor, val) {
var validator = (0, _createValidator2.default)(validationDescriptor);
var result = validator.getValidationResult(val);
if (result.isValid === 'false') {
throw Error(result.message);
}
return val;
}
/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = deferred;
var _DeferredValidator = __webpack_require__(27);
var _DeferredValidator2 = _interopRequireDefault(_DeferredValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function deferred(desc) {
return new _DeferredValidator2.default(desc);
}
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
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; }; })();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _type = __webpack_require__(8);
var _type2 = _interopRequireDefault(_type);
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
var _ValidationResult = __webpack_require__(6);
var _Validator = __webpack_require__(5);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var DeferredValidator = (function () {
/**
* DeferredValidator is useful for defining recursive types. It also
* works in cases where you want to define a dependency on a type
* that's not yet defined.
*
* Example:
* import {union, record, deferred, nil} from 'shapely';
* const Tree = union(
* nil,
* record({
* kind: 'leaf', value: Number
* }),
* record({
* kind: 'node', left: deferred(=> Tree), right: deferred(=> Tree)
* })
* );
*/
function DeferredValidator(desc) {
_classCallCheck(this, DeferredValidator);
if (typeof desc !== 'function') {
throw Error('Deferred validator only accepts a function. ' + (0, _type2.default)(desc) + ' given');
}
this.deferredValidator = desc;
}
_createClass(DeferredValidator, [{
key: 'isValid',
value: function isValid(val) {
return this._getValidator().isValid(val);
}
}, {
key: 'getValidationResult',
value: function getValidationResult(val) {
return this._getValidator().getValidationResult(val);
}
}, {
key: '_getValidator',
value: function _getValidator() {
if (!this.validator) this.validator = this.deferredValidator();
return this.validator;
}
}]);
return DeferredValidator;
})();
exports.default = DeferredValidator;
/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = validate;
var _createValidator = __webpack_require__(4);
var _createValidator2 = _interopRequireDefault(_createValidator);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function validate(validationDescriptor, val) {
var validator = (0, _createValidator2.default)(validationDescriptor);
return validator.isValid(val);
}
/***/ }
/******/ ]);
//# sourceMappingURL=shapely.js.map