UNPKG

redink

Version:
62 lines (48 loc) 6.35 kB
'use strict'; 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=