redink
Version:
RethinkDB model layer
64 lines (49 loc) • 7.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _utils = require('../../utils');
var _utils2 = require('./utils');
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
exports.default = function (record, schema, conn) {
var isTrue = function isTrue(check) {
return check === true;
};
var checkPass = function checkPass(response) {
return response.every(isTrue);
};
var checkManyToMany = function checkManyToMany(data, field) {
if (!Array.isArray(data)) {
throw new Error('Expected record to include \'' + field + '\' with either an empty array or array of ids.');
}
};
var checkBelongsTo = function checkBelongsTo(data, field) {
if (!data) {
throw new Error('Expected record to include \'' + field + '\' set with an id.');
}
};
return Promise.all(Object.keys(schema.relationships).reduce(function (prev, next) {
var relationship = schema.relationships[next];
var relation = relationship.relation;
var inverse = relationship.inverse;
var field = relationship.field;
var data = record[field];
if (relation === 'hasMany' && inverse.relation === 'hasMany') checkManyToMany(data, field);
if (relation === 'belongsTo') checkBelongsTo(data, field);
if (!(0, _utils.hasOwnProperty)(record, field)) return [].concat(_toConsumableArray(prev), [true]);
switch (relation) {
case 'hasMany':
// check relationship with original relation `hasMany`
return [].concat(_toConsumableArray(prev), [(0, _utils2.isHasManyCompliant)(relationship, data, conn)]);
case 'hasOne':
// check relationship with original relation `hasOne`
return [].concat(_toConsumableArray(prev), [(0, _utils2.isHasOneCompliant)(relationship, data, conn)]);
case 'belongsTo':
// check relationship with original relation `belongsTo`
return [].concat(_toConsumableArray(prev), [(0, _utils2.isBelongsToCompliant)(relationship, data, conn)]);
default:
throw new Error('Invalid relationship of type \'' + relation + '\'');
}
}, [])).then(checkPass);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25zdHJhaW50cy9jcmVhdGUvaW5kZXguanMiXSwibmFtZXMiOlsicmVjb3JkIiwic2NoZW1hIiwiY29ubiIsImlzVHJ1ZSIsImNoZWNrIiwiY2hlY2tQYXNzIiwicmVzcG9uc2UiLCJldmVyeSIsImNoZWNrTWFueVRvTWFueSIsImRhdGEiLCJmaWVsZCIsIkFycmF5IiwiaXNBcnJheSIsIkVycm9yIiwiY2hlY2tCZWxvbmdzVG8iLCJQcm9taXNlIiwiYWxsIiwiT2JqZWN0Iiwia2V5cyIsInJlbGF0aW9uc2hpcHMiLCJyZWR1Y2UiLCJwcmV2IiwibmV4dCIsInJlbGF0aW9uc2hpcCIsInJlbGF0aW9uIiwiaW52ZXJzZSIsInRoZW4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUVBOzs7O2tCQU1lLFVBQUNBLE1BQUQsRUFBU0MsTUFBVCxFQUFpQkMsSUFBakIsRUFBMEI7QUFDdkMsTUFBTUMsU0FBUyxTQUFUQSxNQUFTO0FBQUEsV0FBVUMsVUFBVSxJQUFwQjtBQUFBLEdBQWY7QUFDQSxNQUFNQyxZQUFZLFNBQVpBLFNBQVk7QUFBQSxXQUFZQyxTQUFTQyxLQUFULENBQWVKLE1BQWYsQ0FBWjtBQUFBLEdBQWxCOztBQUVBLE1BQU1LLGtCQUFrQixTQUFsQkEsZUFBa0IsQ0FBQ0MsSUFBRCxFQUFPQyxLQUFQLEVBQWlCO0FBQ3ZDLFFBQUksQ0FBQ0MsTUFBTUMsT0FBTixDQUFjSCxJQUFkLENBQUwsRUFBMEI7QUFDeEIsWUFBTSxJQUFJSSxLQUFKLG1DQUMyQkgsS0FEM0Isb0RBQU47QUFHRDtBQUNGLEdBTkQ7O0FBUUEsTUFBTUksaUJBQWlCLFNBQWpCQSxjQUFpQixDQUFDTCxJQUFELEVBQU9DLEtBQVAsRUFBaUI7QUFDdEMsUUFBSSxDQUFDRCxJQUFMLEVBQVc7QUFDVCxZQUFNLElBQUlJLEtBQUosbUNBQzJCSCxLQUQzQix3QkFBTjtBQUdEO0FBQ0YsR0FORDs7QUFRQSxTQUFPSyxRQUNKQyxHQURJLENBQ0FDLE9BQU9DLElBQVAsQ0FBWWpCLE9BQU9rQixhQUFuQixFQUFrQ0MsTUFBbEMsQ0FBeUMsVUFBQ0MsSUFBRCxFQUFPQyxJQUFQLEVBQWdCO0FBQzVELFFBQU1DLGVBQWV0QixPQUFPa0IsYUFBUCxDQUFxQkcsSUFBckIsQ0FBckI7QUFENEQsUUFFcERFLFFBRm9ELEdBRXZCRCxZQUZ1QixDQUVwREMsUUFGb0Q7QUFBQSxRQUUxQ0MsT0FGMEMsR0FFdkJGLFlBRnVCLENBRTFDRSxPQUYwQztBQUFBLFFBRWpDZixLQUZpQyxHQUV2QmEsWUFGdUIsQ0FFakNiLEtBRmlDOztBQUc1RCxRQUFNRCxPQUFPVCxPQUFPVSxLQUFQLENBQWI7O0FBRUEsUUFBSWMsYUFBYSxTQUFiLElBQTBCQyxRQUFRRCxRQUFSLEtBQXFCLFNBQW5ELEVBQThEaEIsZ0JBQWdCQyxJQUFoQixFQUFzQkMsS0FBdEI7QUFDOUQsUUFBSWMsYUFBYSxXQUFqQixFQUE4QlYsZUFBZUwsSUFBZixFQUFxQkMsS0FBckI7O0FBRTlCLFFBQUksQ0FBQywyQkFBZVYsTUFBZixFQUF1QlUsS0FBdkIsQ0FBTCxFQUFvQyxvQ0FBV1csSUFBWCxJQUFpQixJQUFqQjs7QUFFcEMsWUFBUUcsUUFBUjtBQUNFLFdBQUssU0FBTDtBQUNFO0FBQ0EsNENBQVdILElBQVgsSUFBaUIsZ0NBQW1CRSxZQUFuQixFQUFpQ2QsSUFBakMsRUFBdUNQLElBQXZDLENBQWpCOztBQUVGLFdBQUssUUFBTDtBQUNFO0FBQ0EsNENBQVdtQixJQUFYLElBQWlCLCtCQUFrQkUsWUFBbEIsRUFBZ0NkLElBQWhDLEVBQXNDUCxJQUF0QyxDQUFqQjs7QUFFRixXQUFLLFdBQUw7QUFDRTtBQUNBLDRDQUFXbUIsSUFBWCxJQUFpQixrQ0FBcUJFLFlBQXJCLEVBQW1DZCxJQUFuQyxFQUF5Q1AsSUFBekMsQ0FBakI7O0FBRUY7QUFDRSxjQUFNLElBQUlXLEtBQUoscUNBQTJDVyxRQUEzQyxRQUFOO0FBZEo7QUFnQkQsR0ExQkksRUEwQkYsRUExQkUsQ0FEQSxFQTRCSkUsSUE1QkksQ0E0QkNyQixTQTVCRCxDQUFQO0FBNkJELEMiLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYXNPd25Qcm9wZXJ0eSB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuaW1wb3J0IHtcbiAgaXNIYXNNYW55Q29tcGxpYW50LFxuICBpc0hhc09uZUNvbXBsaWFudCxcbiAgaXNCZWxvbmdzVG9Db21wbGlhbnQsXG59IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCAocmVjb3JkLCBzY2hlbWEsIGNvbm4pID0+IHtcbiAgY29uc3QgaXNUcnVlID0gY2hlY2sgPT4gKGNoZWNrID09PSB0cnVlKTtcbiAgY29uc3QgY2hlY2tQYXNzID0gcmVzcG9uc2UgPT4gcmVzcG9uc2UuZXZlcnkoaXNUcnVlKTtcblxuICBjb25zdCBjaGVja01hbnlUb01hbnkgPSAoZGF0YSwgZmllbGQpID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIHJlY29yZCB0byBpbmNsdWRlICcke2ZpZWxkfScgd2l0aCBlaXRoZXIgYW4gZW1wdHkgYXJyYXkgb3IgYXJyYXkgb2YgaWRzLmBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrQmVsb25nc1RvID0gKGRhdGEsIGZpZWxkKSA9PiB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFeHBlY3RlZCByZWNvcmQgdG8gaW5jbHVkZSAnJHtmaWVsZH0nIHNldCB3aXRoIGFuIGlkLmBcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQcm9taXNlXG4gICAgLmFsbChPYmplY3Qua2V5cyhzY2hlbWEucmVsYXRpb25zaGlwcykucmVkdWNlKChwcmV2LCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBzY2hlbWEucmVsYXRpb25zaGlwc1tuZXh0XTtcbiAgICAgIGNvbnN0IHsgcmVsYXRpb24sIGludmVyc2UsIGZpZWxkIH0gPSByZWxhdGlvbnNoaXA7XG4gICAgICBjb25zdCBkYXRhID0gcmVjb3JkW2ZpZWxkXTtcblxuICAgICAgaWYgKHJlbGF0aW9uID09PSAnaGFzTWFueScgJiYgaW52ZXJzZS5yZWxhdGlvbiA9PT0gJ2hhc01hbnknKSBjaGVja01hbnlUb01hbnkoZGF0YSwgZmllbGQpO1xuICAgICAgaWYgKHJlbGF0aW9uID09PSAnYmVsb25nc1RvJykgY2hlY2tCZWxvbmdzVG8oZGF0YSwgZmllbGQpO1xuXG4gICAgICBpZiAoIWhhc093blByb3BlcnR5KHJlY29yZCwgZmllbGQpKSByZXR1cm4gWy4uLnByZXYsIHRydWVdO1xuXG4gICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2hhc01hbnknOlxuICAgICAgICAgIC8vIGNoZWNrIHJlbGF0aW9uc2hpcCB3aXRoIG9yaWdpbmFsIHJlbGF0aW9uIGBoYXNNYW55YFxuICAgICAgICAgIHJldHVybiBbLi4ucHJldiwgaXNIYXNNYW55Q29tcGxpYW50KHJlbGF0aW9uc2hpcCwgZGF0YSwgY29ubildO1xuXG4gICAgICAgIGNhc2UgJ2hhc09uZSc6XG4gICAgICAgICAgLy8gY2hlY2sgcmVsYXRpb25zaGlwIHdpdGggb3JpZ2luYWwgcmVsYXRpb24gYGhhc09uZWBcbiAgICAgICAgICByZXR1cm4gWy4uLnByZXYsIGlzSGFzT25lQ29tcGxpYW50KHJlbGF0aW9uc2hpcCwgZGF0YSwgY29ubildO1xuXG4gICAgICAgIGNhc2UgJ2JlbG9uZ3NUbyc6XG4gICAgICAgICAgLy8gY2hlY2sgcmVsYXRpb25zaGlwIHdpdGggb3JpZ2luYWwgcmVsYXRpb24gYGJlbG9uZ3NUb2BcbiAgICAgICAgICByZXR1cm4gWy4uLnByZXYsIGlzQmVsb25nc1RvQ29tcGxpYW50KHJlbGF0aW9uc2hpcCwgZGF0YSwgY29ubildO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJlbGF0aW9uc2hpcCBvZiB0eXBlICcke3JlbGF0aW9ufSdgKTtcbiAgICAgIH1cbiAgICB9LCBbXSkpXG4gICAgLnRoZW4oY2hlY2tQYXNzKTtcbn07XG4iXX0=