UNPKG

relay-runtime

Version:

A core runtime for building GraphQL-driven applications.

104 lines (103 loc) 4.79 kB
'use strict'; var RelayModernRecord = require('../store/RelayModernRecord'); var _require = require('../store/RelayRecordState'), EXISTENT = _require.EXISTENT, NONEXISTENT = _require.NONEXISTENT; var _require2 = require('../store/RelayStoreUtils'), ROOT_ID = _require2.ROOT_ID, ROOT_TYPE = _require2.ROOT_TYPE; var _require3 = require('./readUpdatableFragment'), _readUpdatableFragment = _require3.readUpdatableFragment; var _require4 = require('./readUpdatableQuery'), _readUpdatableQuery = _require4.readUpdatableQuery; var RelayRecordProxy = require('./RelayRecordProxy'); var invariant = require('invariant'); var RelayRecordSourceProxy = /*#__PURE__*/function () { function RelayRecordSourceProxy(mutator, getDataID, handlerProvider, missingFieldHandlers, log) { this.__mutator = mutator; this._handlerProvider = handlerProvider || null; this._proxies = {}; this._getDataID = getDataID; this._invalidatedStore = false; this._idsMarkedForInvalidation = new Set(); this._missingFieldHandlers = missingFieldHandlers; this._log = log !== null && log !== void 0 ? log : function (LogEvent) {}; } var _proto = RelayRecordSourceProxy.prototype; _proto.publishSource = function publishSource(source, fieldPayloads) { var _this = this; var dataIDs = source.getRecordIDs(); dataIDs.forEach(function (dataID) { var status = source.getStatus(dataID); if (status === EXISTENT) { var sourceRecord = source.get(dataID); if (sourceRecord) { if (_this.__mutator.getStatus(dataID) !== EXISTENT) { _this.create(dataID, RelayModernRecord.getType(sourceRecord)); } _this.__mutator.copyFieldsFromRecord(sourceRecord, dataID); } } else if (status === NONEXISTENT) { _this["delete"](dataID); } }); if (fieldPayloads && fieldPayloads.length) { fieldPayloads.forEach(function (fieldPayload) { var handler = _this._handlerProvider && _this._handlerProvider(fieldPayload.handle); !handler ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected a handler to be provided for handle `%s`.', fieldPayload.handle) : invariant(false) : void 0; handler.update(_this, fieldPayload); }); } }; _proto.create = function create(dataID, typeName) { this.__mutator.create(dataID, typeName); delete this._proxies[dataID]; var record = this.get(dataID); !record ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#create(): Expected the created record to exist.') : invariant(false) : void 0; return record; }; _proto["delete"] = function _delete(dataID) { !(dataID !== ROOT_ID) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#delete(): Cannot delete the root record.') : invariant(false) : void 0; delete this._proxies[dataID]; this.__mutator["delete"](dataID); }; _proto.get = function get(dataID) { if (!this._proxies.hasOwnProperty(dataID)) { var status = this.__mutator.getStatus(dataID); if (status === EXISTENT) { this._proxies[dataID] = new RelayRecordProxy(this, this.__mutator, dataID); } else { this._proxies[dataID] = status === NONEXISTENT ? null : undefined; } } return this._proxies[dataID]; }; _proto.getRoot = function getRoot() { var root = this.get(ROOT_ID); if (!root) { root = this.create(ROOT_ID, ROOT_TYPE); } !(root && root.getType() === ROOT_TYPE) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#getRoot(): Expected the source to contain a ' + 'root record, %s.', root == null ? 'no root record found' : "found a root record of type `".concat(root.getType(), "`")) : invariant(false) : void 0; return root; }; _proto.invalidateStore = function invalidateStore() { this._invalidatedStore = true; }; _proto.isStoreMarkedForInvalidation = function isStoreMarkedForInvalidation() { return this._invalidatedStore; }; _proto.markIDForInvalidation = function markIDForInvalidation(dataID) { this._idsMarkedForInvalidation.add(dataID); }; _proto.getIDsMarkedForInvalidation = function getIDsMarkedForInvalidation() { return this._idsMarkedForInvalidation; }; _proto.readUpdatableQuery = function readUpdatableQuery(query, variables) { return _readUpdatableQuery(query, variables, this, this._missingFieldHandlers); }; _proto.readUpdatableFragment = function readUpdatableFragment(fragment, fragmentReference) { return _readUpdatableFragment(fragment, fragmentReference, this, this._missingFieldHandlers); }; return RelayRecordSourceProxy; }(); module.exports = RelayRecordSourceProxy;