UNPKG

relay-runtime

Version:

A core runtime for building GraphQL-driven applications.

234 lines (233 loc) • 9.79 kB
'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper")); var ConnectionHandler = require('./ConnectionHandler'); var ConnectionInterface = require('./ConnectionInterface'); var invariant = require('invariant'); var warning = require("fbjs/lib/warning"); var DeleteRecordHandler = { update: function update(store, payload) { var record = store.get(payload.dataID); if (record != null) { var idOrIds = record.getValue(payload.fieldKey); if (typeof idOrIds === 'string') { store["delete"](idOrIds); } else if (Array.isArray(idOrIds)) { idOrIds.forEach(function (id) { if (typeof id === 'string') { store["delete"](id); } }); } } } }; var DeleteEdgeHandler = { update: function update(store, payload) { var record = store.get(payload.dataID); if (record == null) { return; } var connections = payload.handleArgs.connections; !(connections != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected connection IDs to be specified.') : invariant(false) : void 0; var idOrIds = record.getValue(payload.fieldKey); var idList = Array.isArray(idOrIds) ? idOrIds : [idOrIds]; idList.forEach(function (id) { if (typeof id === 'string') { var _iterator = (0, _createForOfIteratorHelper2["default"])(connections), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var connectionID = _step.value; var connection = store.get(connectionID); if (connection == null) { process.env.NODE_ENV !== "production" ? warning(false, "[Relay] The connection with id `%s` doesn't exist.", connectionID) : void 0; continue; } ConnectionHandler.deleteNode(connection, id); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }); } }; var AppendEdgeHandler = { update: edgeUpdater(ConnectionHandler.insertEdgeAfter) }; var PrependEdgeHandler = { update: edgeUpdater(ConnectionHandler.insertEdgeBefore) }; var AppendNodeHandler = { update: nodeUpdater(ConnectionHandler.insertEdgeAfter) }; var PrependNodeHandler = { update: nodeUpdater(ConnectionHandler.insertEdgeBefore) }; function edgeUpdater(insertFn) { return function (store, payload) { var _serverEdges; var record = store.get(payload.dataID); if (record == null) { return; } var connections = payload.handleArgs.connections; !(connections != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected connection IDs to be specified.') : invariant(false) : void 0; var singleServerEdge, serverEdges; try { singleServerEdge = record.getLinkedRecord(payload.fieldKey); } catch (_unused) {} if (!singleServerEdge) { try { serverEdges = record.getLinkedRecords(payload.fieldKey); } catch (_unused2) {} } if (singleServerEdge == null && serverEdges == null) { process.env.NODE_ENV !== "production" ? warning(false, 'MutationHandlers: Expected the server edge to be non-null.') : void 0; return; } var _ConnectionInterface$ = ConnectionInterface.get(), NODE = _ConnectionInterface$.NODE, EDGES = _ConnectionInterface$.EDGES; var serverEdgeList = (_serverEdges = serverEdges) !== null && _serverEdges !== void 0 ? _serverEdges : [singleServerEdge]; var _iterator2 = (0, _createForOfIteratorHelper2["default"])(serverEdgeList), _step2; try { var _loop = function _loop() { var serverEdge = _step2.value; if (serverEdge == null) { return "continue"; } var serverNode = serverEdge.getLinkedRecord('node'); if (!serverNode) { return "continue"; } var serverNodeId = serverNode.getDataID(); var _iterator3 = (0, _createForOfIteratorHelper2["default"])(connections), _step3; try { for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) { var connectionID = _step3.value; var connection = store.get(connectionID); if (connection == null) { process.env.NODE_ENV !== "production" ? warning(false, "[Relay] The connection with id `%s` doesn't exist.", connectionID) : void 0; continue; } var nodeAlreadyExistsInConnection = (_connection$getLinked = connection.getLinkedRecords(EDGES)) === null || _connection$getLinked === void 0 ? void 0 : _connection$getLinked.some(function (edge) { var _edge$getLinkedRecord; return (edge === null || edge === void 0 ? void 0 : (_edge$getLinkedRecord = edge.getLinkedRecord(NODE)) === null || _edge$getLinkedRecord === void 0 ? void 0 : _edge$getLinkedRecord.getDataID()) === serverNodeId; }); if (nodeAlreadyExistsInConnection) { continue; } var clientEdge = ConnectionHandler.buildConnectionEdge(store, connection, serverEdge); !(clientEdge != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Failed to build the edge.') : invariant(false) : void 0; insertFn(connection, clientEdge); } } catch (err) { _iterator3.e(err); } finally { _iterator3.f(); } }; for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { var _connection$getLinked; var _ret = _loop(); if (_ret === "continue") continue; } } catch (err) { _iterator2.e(err); } finally { _iterator2.f(); } }; } function nodeUpdater(insertFn) { return function (store, payload) { var _serverNodes; var record = store.get(payload.dataID); if (record == null) { return; } var _payload$handleArgs = payload.handleArgs, connections = _payload$handleArgs.connections, edgeTypeName = _payload$handleArgs.edgeTypeName; !(connections != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected connection IDs to be specified.') : invariant(false) : void 0; !(edgeTypeName != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected edge typename to be specified.') : invariant(false) : void 0; var singleServerNode; var serverNodes; try { singleServerNode = record.getLinkedRecord(payload.fieldKey); } catch (_unused3) {} if (!singleServerNode) { try { serverNodes = record.getLinkedRecords(payload.fieldKey); } catch (_unused4) {} } if (singleServerNode == null && serverNodes == null) { process.env.NODE_ENV !== "production" ? warning(false, 'MutationHandlers: Expected target node to exist.') : void 0; return; } var _ConnectionInterface$2 = ConnectionInterface.get(), NODE = _ConnectionInterface$2.NODE, EDGES = _ConnectionInterface$2.EDGES; var serverNodeList = (_serverNodes = serverNodes) !== null && _serverNodes !== void 0 ? _serverNodes : [singleServerNode]; var _iterator4 = (0, _createForOfIteratorHelper2["default"])(serverNodeList), _step4; try { var _loop2 = function _loop2() { var serverNode = _step4.value; if (serverNode == null) { return "continue"; } var serverNodeId = serverNode.getDataID(); var _iterator5 = (0, _createForOfIteratorHelper2["default"])(connections), _step5; try { for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) { var connectionID = _step5.value; var connection = store.get(connectionID); if (connection == null) { process.env.NODE_ENV !== "production" ? warning(false, "[Relay] The connection with id `%s` doesn't exist.", connectionID) : void 0; continue; } var nodeAlreadyExistsInConnection = (_connection$getLinked2 = connection.getLinkedRecords(EDGES)) === null || _connection$getLinked2 === void 0 ? void 0 : _connection$getLinked2.some(function (edge) { var _edge$getLinkedRecord2; return (edge === null || edge === void 0 ? void 0 : (_edge$getLinkedRecord2 = edge.getLinkedRecord(NODE)) === null || _edge$getLinkedRecord2 === void 0 ? void 0 : _edge$getLinkedRecord2.getDataID()) === serverNodeId; }); if (nodeAlreadyExistsInConnection) { continue; } var clientEdge = ConnectionHandler.createEdge(store, connection, serverNode, edgeTypeName); !(clientEdge != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Failed to build the edge.') : invariant(false) : void 0; insertFn(connection, clientEdge); } } catch (err) { _iterator5.e(err); } finally { _iterator5.f(); } }; for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) { var _connection$getLinked2; var _ret2 = _loop2(); if (_ret2 === "continue") continue; } } catch (err) { _iterator4.e(err); } finally { _iterator4.f(); } }; } module.exports = { AppendEdgeHandler: AppendEdgeHandler, DeleteRecordHandler: DeleteRecordHandler, PrependEdgeHandler: PrependEdgeHandler, AppendNodeHandler: AppendNodeHandler, PrependNodeHandler: PrependNodeHandler, DeleteEdgeHandler: DeleteEdgeHandler };