redink
Version:
RethinkDB model layer
62 lines (48 loc) • 6.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
/**
* Hydrates the schema with type `type` with the appropriate inverse relationships by looking up
* related schemas.
*
* @private
* @param {Object} schemas - Redink schemas.
* @param {String} type - The type of the schema whose inverse is to be hydrated.
*/
exports.default = function (schemas, type) {
var invalidSchemaError = function invalidSchemaError(schemaType) {
return new Error('Tried hydrating the \'' + schemaType + '\' schema\'s relationships\' inverses, but there was no ' + ('schema with type \'' + schemaType + '\'.'));
};
if (!schemas[type]) {
throw invalidSchemaError(type);
}
var relationships = schemas[type].relationships;
Object.keys(relationships).forEach(function (field) {
var _relationships$field = relationships[field];
var inverse = _relationships$field.inverse;
var relatedType = _relationships$field.type;
var relatedSchema = schemas[relatedType];
if (!inverse) {
throw new Error('Tried to hydrate the inverses on the \'' + type + '\' schema, but the inverse was not defined ' + ('for the \'' + field + '\' relationship.'));
}
if (!inverse.field) return;
if (!relatedSchema) {
throw invalidSchemaError(relatedType);
}
if (!relatedSchema.relationships[inverse.field]) {
throw new Error('Encountered a malformed relationship when trying to register the schemas. Could not ' + ('find the \'' + inverse.field + '\' relationship on the \'' + relatedType + '\' schema.'));
}
var _relatedSchema$relati = relatedSchema.relationships[inverse.field];
var inverseField = _relatedSchema$relati.field;
var inverseRelation = _relatedSchema$relati.relation;
var inverseType = _relatedSchema$relati.type;
// eslint-disable-next-line
schemas[type].relationships[field].inverse = {
type: inverseType,
field: inverseField,
relation: inverseRelation
};
});
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9oeWRyYXRlSW52ZXJzZS5qcyJdLCJuYW1lcyI6WyJzY2hlbWFzIiwidHlwZSIsImludmFsaWRTY2hlbWFFcnJvciIsInNjaGVtYVR5cGUiLCJFcnJvciIsInJlbGF0aW9uc2hpcHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImZpZWxkIiwiaW52ZXJzZSIsInJlbGF0ZWRUeXBlIiwicmVsYXRlZFNjaGVtYSIsImludmVyc2VGaWVsZCIsImludmVyc2VSZWxhdGlvbiIsInJlbGF0aW9uIiwiaW52ZXJzZVR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7OztrQkFRZSxVQUFDQSxPQUFELEVBQVVDLElBQVYsRUFBbUI7QUFDaEMsTUFBTUMscUJBQXFCLFNBQXJCQSxrQkFBcUIsQ0FBQ0MsVUFBRDtBQUFBLFdBQWdCLElBQUlDLEtBQUosQ0FDekMsMkJBQXdCRCxVQUF4Qix5RkFDcUJBLFVBRHJCLFNBRHlDLENBQWhCO0FBQUEsR0FBM0I7O0FBS0EsTUFBSSxDQUFDSCxRQUFRQyxJQUFSLENBQUwsRUFBb0I7QUFDbEIsVUFBTUMsbUJBQW1CRCxJQUFuQixDQUFOO0FBQ0Q7O0FBUitCLE1BVXhCSSxhQVZ3QixHQVVOTCxRQUFRQyxJQUFSLENBVk0sQ0FVeEJJLGFBVndCOzs7QUFZaENDLFNBQU9DLElBQVAsQ0FBWUYsYUFBWixFQUEyQkcsT0FBM0IsQ0FBbUMsaUJBQVM7QUFBQSwrQkFDSEgsY0FBY0ksS0FBZCxDQURHO0FBQUEsUUFDbENDLE9BRGtDLHdCQUNsQ0EsT0FEa0M7QUFBQSxRQUNuQkMsV0FEbUIsd0JBQ3pCVixJQUR5Qjs7QUFFMUMsUUFBTVcsZ0JBQWdCWixRQUFRVyxXQUFSLENBQXRCOztBQUVBLFFBQUksQ0FBQ0QsT0FBTCxFQUFjO0FBQ1osWUFBTSxJQUFJTixLQUFKLENBQ0osNENBQXlDSCxJQUF6QyxtRUFDWVEsS0FEWixzQkFESSxDQUFOO0FBSUQ7O0FBRUQsUUFBSSxDQUFDQyxRQUFRRCxLQUFiLEVBQW9COztBQUVwQixRQUFJLENBQUNHLGFBQUwsRUFBb0I7QUFDbEIsWUFBTVYsbUJBQW1CUyxXQUFuQixDQUFOO0FBQ0Q7O0FBRUQsUUFBSSxDQUFDQyxjQUFjUCxhQUFkLENBQTRCSyxRQUFRRCxLQUFwQyxDQUFMLEVBQWlEO0FBQy9DLFlBQU0sSUFBSUwsS0FBSixDQUNKLDBHQUNhTSxRQUFRRCxLQURyQixpQ0FDb0RFLFdBRHBELGdCQURJLENBQU47QUFJRDs7QUF0QnlDLGdDQTRCdENDLGNBQWNQLGFBQWQsQ0FBNEJLLFFBQVFELEtBQXBDLENBNUJzQztBQUFBLFFBeUJqQ0ksWUF6QmlDLHlCQXlCeENKLEtBekJ3QztBQUFBLFFBMEI5QkssZUExQjhCLHlCQTBCeENDLFFBMUJ3QztBQUFBLFFBMkJsQ0MsV0EzQmtDLHlCQTJCeENmLElBM0J3Qzs7QUE4QjFDOztBQUNBRCxZQUFRQyxJQUFSLEVBQWNJLGFBQWQsQ0FBNEJJLEtBQTVCLEVBQW1DQyxPQUFuQyxHQUE2QztBQUMzQ1QsWUFBTWUsV0FEcUM7QUFFM0NQLGFBQU9JLFlBRm9DO0FBRzNDRSxnQkFBVUQ7QUFIaUMsS0FBN0M7QUFLRCxHQXBDRDtBQXFDRCxDIiwiZmlsZSI6Imh5ZHJhdGVJbnZlcnNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIeWRyYXRlcyB0aGUgc2NoZW1hIHdpdGggdHlwZSBgdHlwZWAgd2l0aCB0aGUgYXBwcm9wcmlhdGUgaW52ZXJzZSByZWxhdGlvbnNoaXBzIGJ5IGxvb2tpbmcgdXBcbiAqIHJlbGF0ZWQgc2NoZW1hcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYXMgLSBSZWRpbmsgc2NoZW1hcy5cbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHNjaGVtYSB3aG9zZSBpbnZlcnNlIGlzIHRvIGJlIGh5ZHJhdGVkLlxuICovXG5leHBvcnQgZGVmYXVsdCAoc2NoZW1hcywgdHlwZSkgPT4ge1xuICBjb25zdCBpbnZhbGlkU2NoZW1hRXJyb3IgPSAoc2NoZW1hVHlwZSkgPT4gbmV3IEVycm9yKFxuICAgIGBUcmllZCBoeWRyYXRpbmcgdGhlICcke3NjaGVtYVR5cGV9JyBzY2hlbWEncyByZWxhdGlvbnNoaXBzJyBpbnZlcnNlcywgYnV0IHRoZXJlIHdhcyBubyBgICtcbiAgICBgc2NoZW1hIHdpdGggdHlwZSAnJHtzY2hlbWFUeXBlfScuYFxuICApO1xuXG4gIGlmICghc2NoZW1hc1t0eXBlXSkge1xuICAgIHRocm93IGludmFsaWRTY2hlbWFFcnJvcih0eXBlKTtcbiAgfVxuXG4gIGNvbnN0IHsgcmVsYXRpb25zaGlwcyB9ID0gc2NoZW1hc1t0eXBlXTtcblxuICBPYmplY3Qua2V5cyhyZWxhdGlvbnNoaXBzKS5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCB7IGludmVyc2UsIHR5cGU6IHJlbGF0ZWRUeXBlIH0gPSByZWxhdGlvbnNoaXBzW2ZpZWxkXTtcbiAgICBjb25zdCByZWxhdGVkU2NoZW1hID0gc2NoZW1hc1tyZWxhdGVkVHlwZV07XG5cbiAgICBpZiAoIWludmVyc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRyaWVkIHRvIGh5ZHJhdGUgdGhlIGludmVyc2VzIG9uIHRoZSAnJHt0eXBlfScgc2NoZW1hLCBidXQgdGhlIGludmVyc2Ugd2FzIG5vdCBkZWZpbmVkIGAgK1xuICAgICAgICBgZm9yIHRoZSAnJHtmaWVsZH0nIHJlbGF0aW9uc2hpcC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghaW52ZXJzZS5maWVsZCkgcmV0dXJuO1xuXG4gICAgaWYgKCFyZWxhdGVkU2NoZW1hKSB7XG4gICAgICB0aHJvdyBpbnZhbGlkU2NoZW1hRXJyb3IocmVsYXRlZFR5cGUpO1xuICAgIH1cblxuICAgIGlmICghcmVsYXRlZFNjaGVtYS5yZWxhdGlvbnNoaXBzW2ludmVyc2UuZmllbGRdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdFbmNvdW50ZXJlZCBhIG1hbGZvcm1lZCByZWxhdGlvbnNoaXAgd2hlbiB0cnlpbmcgdG8gcmVnaXN0ZXIgdGhlIHNjaGVtYXMuIENvdWxkIG5vdCAnICtcbiAgICAgICAgYGZpbmQgdGhlICcke2ludmVyc2UuZmllbGR9JyByZWxhdGlvbnNoaXAgb24gdGhlICcke3JlbGF0ZWRUeXBlfScgc2NoZW1hLmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgZmllbGQ6IGludmVyc2VGaWVsZCxcbiAgICAgIHJlbGF0aW9uOiBpbnZlcnNlUmVsYXRpb24sXG4gICAgICB0eXBlOiBpbnZlcnNlVHlwZSxcbiAgICB9ID0gcmVsYXRlZFNjaGVtYS5yZWxhdGlvbnNoaXBzW2ludmVyc2UuZmllbGRdO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgc2NoZW1hc1t0eXBlXS5yZWxhdGlvbnNoaXBzW2ZpZWxkXS5pbnZlcnNlID0ge1xuICAgICAgdHlwZTogaW52ZXJzZVR5cGUsXG4gICAgICBmaWVsZDogaW52ZXJzZUZpZWxkLFxuICAgICAgcmVsYXRpb246IGludmVyc2VSZWxhdGlvbixcbiAgICB9O1xuICB9KTtcbn07XG4iXX0=