5a5e254b10862d5dbf06cd7e720e8f0354a4dc4fd713308ffc419bba95799987f0c31dc8a6d6a9433a29fafa17c24db2e80765ff023d6cf8aa12d63bfbe3a7 6.8 KB

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