UNPKG

relay-runtime

Version:

A core runtime for building GraphQL-driven applications.

49 lines (48 loc) 2.37 kB
'use strict'; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var RelayObservable = require('../network/RelayObservable'); var _require = require('../store/RelayModernOperationDescriptor'), createOperationDescriptor = _require.createOperationDescriptor; var _require2 = require('../util/handlePotentialSnapshotErrors'), handlePotentialSnapshotErrors = _require2.handlePotentialSnapshotErrors; var fetchQueryInternal = require('./fetchQueryInternal'); var _require3 = require('./GraphQLTag'), getRequest = _require3.getRequest; var invariant = require('invariant'); function fetchQuery(environment, query, variables, options) { var _options$fetchPolicy; var queryNode = getRequest(query); !(queryNode.params.operationKind === 'query') ? process.env.NODE_ENV !== "production" ? invariant(false, 'fetchQuery: Expected query operation') : invariant(false) : void 0; var networkCacheConfig = (0, _objectSpread2["default"])({ force: true }, options === null || options === void 0 ? void 0 : options.networkCacheConfig); var operation = createOperationDescriptor(queryNode, variables, networkCacheConfig); var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'network-only'; function readData(snapshot) { handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields); return snapshot.data; } switch (fetchPolicy) { case 'network-only': { return getNetworkObservable(environment, operation).map(readData); } case 'store-or-network': { if (environment.check(operation).status === 'available') { return RelayObservable.from(environment.lookup(operation.fragment)).map(readData); } return getNetworkObservable(environment, operation).map(readData); } default: fetchPolicy; throw new Error('fetchQuery: Invalid fetchPolicy ' + fetchPolicy); } } function getNetworkObservable(environment, operation) { return fetchQueryInternal.fetchQuery(environment, operation).map(function () { return environment.lookup(operation.fragment); }); } module.exports = fetchQuery;