1"use strict"; 2 3exports.__esModule = true; 4exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = undefined; 5 6var _getIterator2 = require("babel-runtime/core-js/get-iterator"); 7 8var _getIterator3 = _interopRequireDefault(_getIterator2); 9 10var _stringify = require("babel-runtime/core-js/json/stringify"); 11 12var _stringify2 = _interopRequireDefault(_stringify); 13 14var _typeof2 = require("babel-runtime/helpers/typeof"); 15 16var _typeof3 = _interopRequireDefault(_typeof2); 17 18exports.assertEach = assertEach; 19exports.assertOneOf = assertOneOf; 20exports.assertNodeType = assertNodeType; 21exports.assertNodeOrValueType = assertNodeOrValueType; 22exports.assertValueType = assertValueType; 23exports.chain = chain; 24exports.default = defineType; 25 26var _index = require("../index"); 27 28var t = _interopRequireWildcard(_index); 29 30function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } 31 32function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 33 34var VISITOR_KEYS = exports.VISITOR_KEYS = {}; 35var ALIAS_KEYS = exports.ALIAS_KEYS = {}; 36var NODE_FIELDS = exports.NODE_FIELDS = {}; 37var BUILDER_KEYS = exports.BUILDER_KEYS = {}; 38var DEPRECATED_KEYS = exports.DEPRECATED_KEYS = {}; 39 40function getType(val) { 41 if (Array.isArray(val)) { 42 return "array"; 43 } else if (val === null) { 44 return "null"; 45 } else if (val === undefined) { 46 return "undefined"; 47 } else { 48 return typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val); 49 } 50} 51 52function assertEach(callback) { 53 function validator(node, key, val) { 54 if (!Array.isArray(val)) return; 55 56 for (var i = 0; i < val.length; i++) { 57 callback(node, key + "[" + i + "]", val[i]); 58 } 59 } 60 validator.each = callback; 61 return validator; 62} 63 64function assertOneOf() { 65 for (var _len = arguments.length, vals = Array(_len), _key = 0; _key < _len; _key++) { 66 vals[_key] = arguments[_key]; 67 } 68 69 function validate(node, key, val) { 70 if (vals.indexOf(val) < 0) { 71 throw new TypeError("Property " + key + " expected value to be one of " + (0, _stringify2.default)(vals) + " but got " + (0, _stringify2.default)(val)); 72 } 73 } 74 75 validate.oneOf = vals; 76 77 return validate; 78} 79 80function assertNodeType() { 81 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 82 types[_key2] = arguments[_key2]; 83 } 84 85 function validate(node, key, val) { 86 var valid = false; 87 88 for (var _iterator = types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { 89 var _ref; 90 91 if (_isArray) { 92 if (_i >= _iterator.length) break; 93 _ref = _iterator[_i++]; 94 } else { 95 _i = _iterator.next(); 96 if (_i.done) break; 97 _ref = _i.value; 98 } 99 100 var type = _ref; 101 102 if (t.is(type, val)) { 103 valid = true; 104 break; 105 } 106 } 107 108 if (!valid) { 109 throw new TypeError("Property " + key + " of " + node.type + " expected node to be of a type " + (0, _stringify2.default)(types) + " " + ("but instead got " + (0, _stringify2.default)(val && val.type))); 110 } 111 } 112 113 validate.oneOfNodeTypes = types; 114 115 return validate; 116} 117 118function assertNodeOrValueType() { 119 for (var _len3 = arguments.length, types = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { 120 types[_key3] = arguments[_key3]; 121 } 122 123 function validate(node, key, val) { 124 var valid = false; 125 126 for (var _iterator2 = types, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { 127 var _ref2; 128 129 if (_isArray2) { 130 if (_i2 >= _iterator2.length) break; 131 _ref2 = _iterator2[_i2++]; 132 } else { 133 _i2 = _iterator2.next(); 134 if (_i2.done) break; 135 _ref2 = _i2.value; 136 } 137 138 var type = _ref2; 139 140 if (getType(val) === type || t.is(type, val)) { 141 valid = true; 142 break; 143 } 144 } 145 146 if (!valid) { 147 throw new TypeError("Property " + key + " of " + node.type + " expected node to be of a type " + (0, _stringify2.default)(types) + " " + ("but instead got " + (0, _stringify2.default)(val && val.type))); 148 } 149 } 150 151 validate.oneOfNodeOrValueTypes = types; 152 153 return validate; 154} 155 156function assertValueType(type) { 157 function validate(node, key, val) { 158 var valid = getType(val) === type; 159 160 if (!valid) { 161 throw new TypeError("Property " + key + " expected type of " + type + " but got " + getType(val)); 162 } 163 } 164 165 validate.type = type; 166 167 return validate; 168} 169 170function chain() { 171 for (var _len4 = arguments.length, fns = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { 172 fns[_key4] = arguments[_key4]; 173 } 174 175 function validate() { 176 for (var _iterator3 = fns, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { 177 var _ref3; 178 179 if (_isArray3) { 180 if (_i3 >= _iterator3.length) break; 181 _ref3 = _iterator3[_i3++]; 182 } else { 183 _i3 = _iterator3.next(); 184 if (_i3.done) break; 185 _ref3 = _i3.value; 186 } 187 188 var fn = _ref3; 189 190 fn.apply(undefined, arguments); 191 } 192 } 193 validate.chainOf = fns; 194 return validate; 195} 196 197function defineType(type) { 198 var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 199 200 var inherits = opts.inherits && store[opts.inherits] || {}; 201 202 opts.fields = opts.fields || inherits.fields || {}; 203 opts.visitor = opts.visitor || inherits.visitor || []; 204 opts.aliases = opts.aliases || inherits.aliases || []; 205 opts.builder = opts.builder || inherits.builder || opts.visitor || []; 206 207 if (opts.deprecatedAlias) { 208 DEPRECATED_KEYS[opts.deprecatedAlias] = type; 209 } 210 211 for (var _iterator4 = opts.visitor.concat(opts.builder), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { 212 var _ref4; 213 214 if (_isArray4) { 215 if (_i4 >= _iterator4.length) break; 216 _ref4 = _iterator4[_i4++]; 217 } else { 218 _i4 = _iterator4.next(); 219 if (_i4.done) break; 220 _ref4 = _i4.value; 221 } 222 223 var _key5 = _ref4; 224 225 opts.fields[_key5] = opts.fields[_key5] || {}; 226 } 227 228 for (var key in opts.fields) { 229 var field = opts.fields[key]; 230 231 if (opts.builder.indexOf(key) === -1) { 232 field.optional = true; 233 } 234 if (field.default === undefined) { 235 field.default = null; 236 } else if (!field.validate) { 237 field.validate = assertValueType(getType(field.default)); 238 } 239 } 240 241 VISITOR_KEYS[type] = opts.visitor; 242 BUILDER_KEYS[type] = opts.builder; 243 NODE_FIELDS[type] = opts.fields; 244 ALIAS_KEYS[type] = opts.aliases; 245 246 store[type] = opts; 247} 248 249var store = {};