relay-runtime
Version:
A core runtime for building GraphQL-driven applications.
49 lines (48 loc) • 2.37 kB
JavaScript
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;
;