ra-data-hasura
Version:
A data provider for connecting react-admin to a Hasura endpoint
162 lines (161 loc) • 5.17 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true,
});
var _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol'
? function (obj) {
return typeof obj;
}
: function (obj) {
return obj &&
typeof Symbol === 'function' &&
obj.constructor === Symbol &&
obj !== Symbol.prototype
? 'symbol'
: typeof obj;
};
exports.default = defineType;
exports.chain = chain;
exports.assertEach = assertEach;
exports.assertOneOf = assertOneOf;
exports.assertNodeType = assertNodeType;
exports.assertNodeOrValueType = assertNodeOrValueType;
exports.assertValueType = assertValueType;
exports.assertArrayOf = assertArrayOf;
var t = require('../index');
var BUILDER_KEYS = (exports.BUILDER_KEYS = {});
var NODE_FIELDS = (exports.NODE_FIELDS = {});
var ALIAS_KEYS = (exports.ALIAS_KEYS = {});
/**
* Used to define an AST node.
* @param {String} type The AST node name
* @param {Object} opts Type definition object
* @returns {void}
*/
function defineType(type) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref$fields = _ref.fields, fields = _ref$fields === undefined ? {} : _ref$fields, _ref$aliases = _ref.aliases, aliases = _ref$aliases === undefined ? [] : _ref$aliases, _ref$builder = _ref.builder, builder = _ref$builder === undefined ? [] : _ref$builder;
for (var key in fields) {
var field = fields[key];
// Sets field as optional if builder exist but validator does not.
if (builder.indexOf(key) === -1) {
field.optional = true;
}
}
BUILDER_KEYS[type] = builder;
NODE_FIELDS[type] = fields;
ALIAS_KEYS[type] = aliases;
}
function getType(val) {
if (Array.isArray(val)) {
return 'array';
}
else if (val === null) {
return 'null';
}
else if (val === undefined) {
return 'undefined';
}
else {
return typeof val === 'undefined' ? 'undefined' : _typeof(val);
}
}
// Validation helpers
function chain() {
for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {
fns[_key] = arguments[_key];
}
return function validate() {
for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args[_key2] = arguments[_key2];
}
fns.forEach(function (fn) {
return fn.apply(undefined, args);
});
};
}
function assertEach(callback) {
function validator(node, key, val) {
if (!Array.isArray(val)) {
return;
}
val.forEach(function (it, i) {
return callback(node, key + '[' + i + ']', it);
});
}
return validator;
}
function assertOneOf() {
for (var _len3 = arguments.length, vals = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
vals[_key3] = arguments[_key3];
}
function validate(node, key, val) {
if (vals.indexOf(val.kind) < 0) {
throw new TypeError('Property ' +
key +
' expected value to be one of ' +
JSON.stringify(vals) +
' but got ' +
JSON.stringify(val));
}
}
return validate;
}
function assertNodeType() {
for (var _len4 = arguments.length, types = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
types[_key4] = arguments[_key4];
}
function validate(node, key, val) {
var valid = types.every(function (type) {
return t.is(type, val);
});
if (!valid) {
throw new TypeError('Property ' +
key +
' of ' +
node.type +
' expected node to be of a type ' +
JSON.stringify(types) +
' ' +
('but instead got ' + JSON.stringify(val && val.type)));
}
}
return validate;
}
function assertNodeOrValueType() {
for (var _len5 = arguments.length, types = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
types[_key5] = arguments[_key5];
}
function validate(node, key, val) {
var valid = types.every(function (type) {
return getType(val) === type || t.is(type, val);
});
if (!valid) {
throw new TypeError('Property ' +
key +
' of ' +
node.type +
' expected node to be of a type ' +
JSON.stringify(types) +
' ' +
('but instead got ' + JSON.stringify(val && val.type)));
}
}
return validate;
}
function assertValueType(type) {
function validate(node, key, val) {
var valid = getType(val) === type;
if (!valid) {
throw new TypeError('Property ' +
key +
' expected type of ' +
type +
' but got ' +
getType(val));
}
}
return validate;
}
function assertArrayOf(cb) {
return chain(assertValueType('array'), assertEach(cb));
}