redink
Version:
RethinkDB model layer
64 lines (49 loc) • 5.57 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint-disable no-param-reassign */
var _hasOwnProperty = require('./hasOwnProperty');
var _hasOwnProperty2 = _interopRequireDefault(_hasOwnProperty);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function (record, schema) {
var normalizedRecord = _extends({}, record, {
_meta: {
_archived: false
}
});
var normalize = function normalize(id) {
return {
id: id,
_archived: false,
_related: true
};
};
var normalizeMany = function normalizeMany(ids) {
return ids.map(function (id) {
return normalize(id);
});
};
Object.keys(schema.relationships).forEach(function (relationship) {
var relationshipObject = schema.relationships[relationship];
var field = relationshipObject.field;
var relation = relationshipObject.relation;
var inverse = relationshipObject.inverse;
var data = record[field];
if ((0, _hasOwnProperty2.default)(record, field)) {
switch (relation) {
case 'hasMany':
if (inverse.relation === 'hasMany') normalizedRecord[field] = normalizeMany(data);else delete normalizedRecord[field];
break;
case 'hasOne':
case 'belongsTo':
if (!data) normalizedRecord[field] = data;else normalizedRecord[field] = normalize(data);
break;
default:
throw new Error('Tried to normalize record with an invalid relationship of type \'' + relation + '\'');
}
}
});
return normalizedRecord;
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9ub3JtYWxpemVSZWNvcmQuanMiXSwibmFtZXMiOlsicmVjb3JkIiwic2NoZW1hIiwibm9ybWFsaXplZFJlY29yZCIsIl9tZXRhIiwiX2FyY2hpdmVkIiwibm9ybWFsaXplIiwiaWQiLCJfcmVsYXRlZCIsIm5vcm1hbGl6ZU1hbnkiLCJpZHMiLCJtYXAiLCJPYmplY3QiLCJrZXlzIiwicmVsYXRpb25zaGlwcyIsImZvckVhY2giLCJyZWxhdGlvbnNoaXBPYmplY3QiLCJyZWxhdGlvbnNoaXAiLCJmaWVsZCIsInJlbGF0aW9uIiwiaW52ZXJzZSIsImRhdGEiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O2tRQUFBOzs7QUFDQTs7Ozs7O2tCQUVlLFVBQUNBLE1BQUQsRUFBU0MsTUFBVCxFQUFvQjtBQUNqQyxNQUFNQyxnQ0FDREYsTUFEQztBQUVKRyxXQUFPO0FBQ0xDLGlCQUFXO0FBRE47QUFGSCxJQUFOOztBQU9BLE1BQU1DLFlBQVksU0FBWkEsU0FBWSxDQUFDQyxFQUFEO0FBQUEsV0FBUztBQUN6QkEsWUFEeUI7QUFFekJGLGlCQUFXLEtBRmM7QUFHekJHLGdCQUFVO0FBSGUsS0FBVDtBQUFBLEdBQWxCOztBQU1BLE1BQU1DLGdCQUFnQixTQUFoQkEsYUFBZ0IsQ0FBQ0MsR0FBRDtBQUFBLFdBQVNBLElBQUlDLEdBQUosQ0FBUTtBQUFBLGFBQU1MLFVBQVVDLEVBQVYsQ0FBTjtBQUFBLEtBQVIsQ0FBVDtBQUFBLEdBQXRCOztBQUVBSyxTQUFPQyxJQUFQLENBQVlYLE9BQU9ZLGFBQW5CLEVBQWtDQyxPQUFsQyxDQUEwQyx3QkFBZ0I7QUFDeEQsUUFBTUMscUJBQXFCZCxPQUFPWSxhQUFQLENBQXFCRyxZQUFyQixDQUEzQjtBQUR3RCxRQUVoREMsS0FGZ0QsR0FFbkJGLGtCQUZtQixDQUVoREUsS0FGZ0Q7QUFBQSxRQUV6Q0MsUUFGeUMsR0FFbkJILGtCQUZtQixDQUV6Q0csUUFGeUM7QUFBQSxRQUUvQkMsT0FGK0IsR0FFbkJKLGtCQUZtQixDQUUvQkksT0FGK0I7O0FBR3hELFFBQU1DLE9BQU9wQixPQUFPaUIsS0FBUCxDQUFiOztBQUVBLFFBQUksOEJBQWVqQixNQUFmLEVBQXVCaUIsS0FBdkIsQ0FBSixFQUFtQztBQUNqQyxjQUFRQyxRQUFSO0FBQ0UsYUFBSyxTQUFMO0FBQ0UsY0FBSUMsUUFBUUQsUUFBUixLQUFxQixTQUF6QixFQUFvQ2hCLGlCQUFpQmUsS0FBakIsSUFBMEJULGNBQWNZLElBQWQsQ0FBMUIsQ0FBcEMsS0FDSyxPQUFPbEIsaUJBQWlCZSxLQUFqQixDQUFQO0FBQ0w7O0FBRUYsYUFBSyxRQUFMO0FBQ0EsYUFBSyxXQUFMO0FBQ0UsY0FBSSxDQUFDRyxJQUFMLEVBQVdsQixpQkFBaUJlLEtBQWpCLElBQTBCRyxJQUExQixDQUFYLEtBQ0tsQixpQkFBaUJlLEtBQWpCLElBQTBCWixVQUFVZSxJQUFWLENBQTFCO0FBQ0w7O0FBRUY7QUFDRSxnQkFBTSxJQUFJQyxLQUFKLHVFQUMrREgsUUFEL0QsUUFBTjtBQWJKO0FBaUJEO0FBQ0YsR0F4QkQ7O0FBMEJBLFNBQU9oQixnQkFBUDtBQUNELEMiLCJmaWxlIjoibm9ybWFsaXplUmVjb3JkLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbmltcG9ydCBoYXNPd25Qcm9wZXJ0eSBmcm9tICcuL2hhc093blByb3BlcnR5JztcblxuZXhwb3J0IGRlZmF1bHQgKHJlY29yZCwgc2NoZW1hKSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZWNvcmQgPSB7XG4gICAgLi4ucmVjb3JkLFxuICAgIF9tZXRhOiB7XG4gICAgICBfYXJjaGl2ZWQ6IGZhbHNlLFxuICAgIH0sXG4gIH07XG5cbiAgY29uc3Qgbm9ybWFsaXplID0gKGlkKSA9PiAoe1xuICAgIGlkLFxuICAgIF9hcmNoaXZlZDogZmFsc2UsXG4gICAgX3JlbGF0ZWQ6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZU1hbnkgPSAoaWRzKSA9PiBpZHMubWFwKGlkID0+IG5vcm1hbGl6ZShpZCkpO1xuXG4gIE9iamVjdC5rZXlzKHNjaGVtYS5yZWxhdGlvbnNoaXBzKS5mb3JFYWNoKHJlbGF0aW9uc2hpcCA9PiB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwT2JqZWN0ID0gc2NoZW1hLnJlbGF0aW9uc2hpcHNbcmVsYXRpb25zaGlwXTtcbiAgICBjb25zdCB7IGZpZWxkLCByZWxhdGlvbiwgaW52ZXJzZSB9ID0gcmVsYXRpb25zaGlwT2JqZWN0O1xuICAgIGNvbnN0IGRhdGEgPSByZWNvcmRbZmllbGRdO1xuXG4gICAgaWYgKGhhc093blByb3BlcnR5KHJlY29yZCwgZmllbGQpKSB7XG4gICAgICBzd2l0Y2ggKHJlbGF0aW9uKSB7XG4gICAgICAgIGNhc2UgJ2hhc01hbnknOlxuICAgICAgICAgIGlmIChpbnZlcnNlLnJlbGF0aW9uID09PSAnaGFzTWFueScpIG5vcm1hbGl6ZWRSZWNvcmRbZmllbGRdID0gbm9ybWFsaXplTWFueShkYXRhKTtcbiAgICAgICAgICBlbHNlIGRlbGV0ZSBub3JtYWxpemVkUmVjb3JkW2ZpZWxkXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdoYXNPbmUnOlxuICAgICAgICBjYXNlICdiZWxvbmdzVG8nOlxuICAgICAgICAgIGlmICghZGF0YSkgbm9ybWFsaXplZFJlY29yZFtmaWVsZF0gPSBkYXRhO1xuICAgICAgICAgIGVsc2Ugbm9ybWFsaXplZFJlY29yZFtmaWVsZF0gPSBub3JtYWxpemUoZGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVHJpZWQgdG8gbm9ybWFsaXplIHJlY29yZCB3aXRoIGFuIGludmFsaWQgcmVsYXRpb25zaGlwIG9mIHR5cGUgJyR7cmVsYXRpb259J2BcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZWNvcmQ7XG59O1xuIl19