@apollo/client 3.6.0-beta.7 → 3.6.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/apollo-client.cjs +294 -199
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/core/ApolloClient.d.ts +1 -1
  5. package/core/ApolloClient.d.ts.map +1 -1
  6. package/core/ApolloClient.js.map +1 -1
  7. package/core/ObservableQuery.d.ts +8 -3
  8. package/core/ObservableQuery.d.ts.map +1 -1
  9. package/core/ObservableQuery.js +84 -40
  10. package/core/ObservableQuery.js.map +1 -1
  11. package/core/QueryInfo.d.ts.map +1 -1
  12. package/core/QueryInfo.js +4 -2
  13. package/core/QueryInfo.js.map +1 -1
  14. package/core/QueryManager.d.ts.map +1 -1
  15. package/core/QueryManager.js +27 -8
  16. package/core/QueryManager.js.map +1 -1
  17. package/core/core.cjs +112 -50
  18. package/core/core.cjs.map +1 -1
  19. package/core/index.d.ts +1 -1
  20. package/core/index.d.ts.map +1 -1
  21. package/core/index.js +1 -1
  22. package/core/index.js.map +1 -1
  23. package/core/watchQueryOptions.d.ts +10 -1
  24. package/core/watchQueryOptions.d.ts.map +1 -1
  25. package/core/watchQueryOptions.js.map +1 -1
  26. package/invariantErrorCodes.js +1 -1
  27. package/package.json +15 -13
  28. package/react/hooks/hooks.cjs +181 -148
  29. package/react/hooks/hooks.cjs.map +1 -1
  30. package/react/hooks/index.d.ts +1 -1
  31. package/react/hooks/index.d.ts.map +1 -1
  32. package/react/hooks/index.js +1 -1
  33. package/react/hooks/index.js.map +1 -1
  34. package/react/hooks/useLazyQuery.d.ts +2 -2
  35. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  36. package/react/hooks/useLazyQuery.js +37 -21
  37. package/react/hooks/useLazyQuery.js.map +1 -1
  38. package/react/hooks/useMutation.js.map +1 -1
  39. package/react/hooks/useQuery.d.ts +32 -1
  40. package/react/hooks/useQuery.d.ts.map +1 -1
  41. package/react/hooks/useQuery.js +152 -132
  42. package/react/hooks/useQuery.js.map +1 -1
  43. package/react/ssr/RenderPromises.d.ts +2 -1
  44. package/react/ssr/RenderPromises.d.ts.map +1 -1
  45. package/react/ssr/RenderPromises.js +23 -1
  46. package/react/ssr/RenderPromises.js.map +1 -1
  47. package/react/ssr/ssr.cjs +23 -1
  48. package/react/ssr/ssr.cjs.map +1 -1
  49. package/react/types/types.d.ts +9 -11
  50. package/react/types/types.d.ts.map +1 -1
  51. package/react/types/types.js.map +1 -1
  52. package/testing/core/mocking/mockFetch.js +1 -1
  53. package/testing/core/mocking/mockFetch.js.map +1 -1
  54. package/utilities/graphql/transform.d.ts +2 -2
  55. package/utilities/graphql/transform.d.ts.map +1 -1
  56. package/utilities/graphql/transform.js +1 -1
  57. package/utilities/graphql/transform.js.map +1 -1
  58. package/utilities/utilities.cjs +1 -1
  59. package/utilities/utilities.cjs.map +1 -1
  60. package/version.js +1 -1
package/apollo-client.cjs CHANGED
@@ -13,6 +13,7 @@ var context = require('@wry/context');
13
13
  var trie = require('@wry/trie');
14
14
  var graphqlTag = require('graphql-tag');
15
15
  var React = require('react');
16
+ var index_js = require('use-sync-external-store/shim/index.js');
16
17
 
17
18
  function _interopNamespace(e) {
18
19
  if (e && e.__esModule) return e;
@@ -539,7 +540,7 @@ function removeDirectivesFromDocument(directives, doc) {
539
540
  return modifiedDoc;
540
541
  }
541
542
  var addTypenameToDocument = Object.assign(function (doc) {
542
- return graphql.visit(checkDocument(doc), {
543
+ return graphql.visit(doc, {
543
544
  SelectionSet: {
544
545
  enter: function (node, _key, parent) {
545
546
  if (parent &&
@@ -1291,7 +1292,7 @@ var concat = ApolloLink.concat;
1291
1292
 
1292
1293
  var execute = ApolloLink.execute;
1293
1294
 
1294
- var version = '3.6.0-beta.7';
1295
+ var version = '3.6.0-rc.0';
1295
1296
 
1296
1297
  var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
1297
1298
  function parseAndCheckHttpResponse(operations) {
@@ -3906,7 +3907,6 @@ function isNetworkRequestInFlight(networkStatus) {
3906
3907
  }
3907
3908
 
3908
3909
  var assign = Object.assign, hasOwnProperty$2 = Object.hasOwnProperty;
3909
- var warnedAboutUpdateQuery = false;
3910
3910
  var ObservableQuery = (function (_super) {
3911
3911
  tslib.__extends(ObservableQuery, _super);
3912
3912
  function ObservableQuery(_a) {
@@ -3940,11 +3940,10 @@ var ObservableQuery = (function (_super) {
3940
3940
  _this.observers = new Set();
3941
3941
  _this.subscriptions = new Set();
3942
3942
  _this.isTornDown = false;
3943
- _this.options = options;
3943
+ _this.options = tslib.__assign({ initialFetchPolicy: options.fetchPolicy || "cache-first" }, options);
3944
3944
  _this.queryId = queryInfo.queryId || queryManager.generateQueryId();
3945
3945
  var opDef = getOperationDefinition(options.query);
3946
3946
  _this.queryName = opDef && opDef.name && opDef.name.value;
3947
- _this.initialFetchPolicy = options.fetchPolicy || "cache-first";
3948
3947
  _this.queryManager = queryManager;
3949
3948
  _this.queryInfo = queryInfo;
3950
3949
  return _this;
@@ -4078,35 +4077,49 @@ var ObservableQuery = (function (_super) {
4078
4077
  var _this = this;
4079
4078
  var combinedOptions = tslib.__assign(tslib.__assign({}, (fetchMoreOptions.query ? fetchMoreOptions : tslib.__assign(tslib.__assign(tslib.__assign({}, this.options), fetchMoreOptions), { variables: tslib.__assign(tslib.__assign({}, this.options.variables), fetchMoreOptions.variables) }))), { fetchPolicy: "no-cache" });
4080
4079
  var qid = this.queryManager.generateQueryId();
4080
+ var queryInfo = this.queryInfo;
4081
+ var originalNetworkStatus = queryInfo.networkStatus;
4082
+ queryInfo.networkStatus = exports.NetworkStatus.fetchMore;
4081
4083
  if (combinedOptions.notifyOnNetworkStatusChange) {
4082
- this.queryInfo.networkStatus = exports.NetworkStatus.fetchMore;
4083
4084
  this.observe();
4084
4085
  }
4086
+ var updatedQuerySet = new Set();
4085
4087
  return this.queryManager.fetchQuery(qid, combinedOptions, exports.NetworkStatus.fetchMore).then(function (fetchMoreResult) {
4086
- var data = fetchMoreResult.data;
4087
- var updateQuery = fetchMoreOptions.updateQuery;
4088
- if (updateQuery) {
4089
- if (__DEV__ &&
4090
- !warnedAboutUpdateQuery) {
4091
- __DEV__ && tsInvariant.invariant.warn("The updateQuery callback for fetchMore is deprecated, and will be removed\nin the next major version of Apollo Client.\n\nPlease convert updateQuery functions to field policies with appropriate\nread and merge functions, or use/adapt a helper function (such as\nconcatPagination, offsetLimitPagination, or relayStylePagination) from\n@apollo/client/utilities.\n\nThe field policy system handles pagination more effectively than a\nhand-written updateQuery function, and you only need to define the policy\nonce, rather than every time you call fetchMore.");
4092
- warnedAboutUpdateQuery = true;
4093
- }
4094
- _this.updateQuery(function (previous) { return updateQuery(previous, {
4095
- fetchMoreResult: data,
4096
- variables: combinedOptions.variables,
4097
- }); });
4098
- }
4099
- else {
4100
- _this.queryManager.cache.writeQuery({
4101
- query: combinedOptions.query,
4102
- variables: combinedOptions.variables,
4103
- data: data,
4104
- });
4105
- }
4088
+ _this.queryManager.removeQuery(qid);
4089
+ if (queryInfo.networkStatus === exports.NetworkStatus.fetchMore) {
4090
+ queryInfo.networkStatus = originalNetworkStatus;
4091
+ }
4092
+ _this.queryManager.cache.batch({
4093
+ update: function (cache) {
4094
+ var updateQuery = fetchMoreOptions.updateQuery;
4095
+ if (updateQuery) {
4096
+ cache.updateQuery({
4097
+ query: _this.options.query,
4098
+ variables: _this.variables,
4099
+ returnPartialData: true,
4100
+ optimistic: false,
4101
+ }, function (previous) { return updateQuery(previous, {
4102
+ fetchMoreResult: fetchMoreResult.data,
4103
+ variables: combinedOptions.variables,
4104
+ }); });
4105
+ }
4106
+ else {
4107
+ cache.writeQuery({
4108
+ query: combinedOptions.query,
4109
+ variables: combinedOptions.variables,
4110
+ data: fetchMoreResult.data,
4111
+ });
4112
+ }
4113
+ },
4114
+ onWatchUpdated: function (watch) {
4115
+ updatedQuerySet.add(watch.query);
4116
+ },
4117
+ });
4106
4118
  return fetchMoreResult;
4107
4119
  }).finally(function () {
4108
- _this.queryManager.stopQuery(qid);
4109
- _this.reobserve();
4120
+ if (!updatedQuerySet.has(_this.options.query)) {
4121
+ reobserveCacheFirst(_this);
4122
+ }
4110
4123
  });
4111
4124
  };
4112
4125
  ObservableQuery.prototype.subscribeToMore = function (options) {
@@ -4159,7 +4172,7 @@ var ObservableQuery = (function (_super) {
4159
4172
  return Promise.resolve();
4160
4173
  }
4161
4174
  return this.reobserve({
4162
- fetchPolicy: this.initialFetchPolicy,
4175
+ fetchPolicy: this.options.initialFetchPolicy,
4163
4176
  variables: variables,
4164
4177
  }, exports.NetworkStatus.setVariables);
4165
4178
  };
@@ -4191,6 +4204,26 @@ var ObservableQuery = (function (_super) {
4191
4204
  this.options.pollInterval = 0;
4192
4205
  this.updatePolling();
4193
4206
  };
4207
+ ObservableQuery.prototype.applyNextFetchPolicy = function (reason, options) {
4208
+ if (options.nextFetchPolicy) {
4209
+ var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? "cache-first" : _a, _b = options.initialFetchPolicy, initialFetchPolicy = _b === void 0 ? fetchPolicy : _b;
4210
+ if (typeof options.nextFetchPolicy === "function") {
4211
+ options.fetchPolicy = options.nextFetchPolicy(fetchPolicy, {
4212
+ reason: reason,
4213
+ options: options,
4214
+ observable: this,
4215
+ initialFetchPolicy: initialFetchPolicy,
4216
+ });
4217
+ }
4218
+ else if (reason === "variables-changed") {
4219
+ options.fetchPolicy = initialFetchPolicy;
4220
+ }
4221
+ else {
4222
+ options.fetchPolicy = options.nextFetchPolicy;
4223
+ }
4224
+ }
4225
+ return options.fetchPolicy;
4226
+ };
4194
4227
  ObservableQuery.prototype.fetch = function (options, newNetworkStatus) {
4195
4228
  this.queryManager.setObservableQuery(this);
4196
4229
  return this.queryManager.fetchQueryObservable(this.queryId, options, newNetworkStatus);
@@ -4253,16 +4286,18 @@ var ObservableQuery = (function (_super) {
4253
4286
  newNetworkStatus === exports.NetworkStatus.fetchMore ||
4254
4287
  newNetworkStatus === exports.NetworkStatus.poll;
4255
4288
  var oldVariables = this.options.variables;
4289
+ var oldFetchPolicy = this.options.fetchPolicy;
4290
+ var mergedOptions = mergeOptions(this.options, newOptions || {});
4256
4291
  var options = useDisposableConcast
4257
- ? compact(this.options, newOptions)
4258
- : assign(this.options, compact(newOptions));
4292
+ ? mergedOptions
4293
+ : assign(this.options, mergedOptions);
4259
4294
  if (!useDisposableConcast) {
4260
4295
  this.updatePolling();
4261
4296
  if (newOptions &&
4262
4297
  newOptions.variables &&
4263
- !newOptions.fetchPolicy &&
4264
- !equality.equal(newOptions.variables, oldVariables)) {
4265
- options.fetchPolicy = this.initialFetchPolicy;
4298
+ !equality.equal(newOptions.variables, oldVariables) &&
4299
+ (!newOptions.fetchPolicy || newOptions.fetchPolicy === oldFetchPolicy)) {
4300
+ this.applyNextFetchPolicy("variables-changed", options);
4266
4301
  if (newNetworkStatus === void 0) {
4267
4302
  newNetworkStatus = exports.NetworkStatus.setVariables;
4268
4303
  }
@@ -4326,6 +4361,23 @@ var ObservableQuery = (function (_super) {
4326
4361
  return ObservableQuery;
4327
4362
  }(zenObservableTs.Observable));
4328
4363
  fixObservableSubclass(ObservableQuery);
4364
+ function reobserveCacheFirst(obsQuery) {
4365
+ var _a = obsQuery.options, fetchPolicy = _a.fetchPolicy, nextFetchPolicy = _a.nextFetchPolicy;
4366
+ if (fetchPolicy === "cache-and-network" ||
4367
+ fetchPolicy === "network-only") {
4368
+ return obsQuery.reobserve({
4369
+ fetchPolicy: "cache-first",
4370
+ nextFetchPolicy: function () {
4371
+ this.nextFetchPolicy = nextFetchPolicy;
4372
+ if (typeof nextFetchPolicy === "function") {
4373
+ return nextFetchPolicy.apply(this, arguments);
4374
+ }
4375
+ return fetchPolicy;
4376
+ },
4377
+ });
4378
+ }
4379
+ return obsQuery.reobserve();
4380
+ }
4329
4381
  function defaultSubscriptionObserverErrorCallback(error) {
4330
4382
  __DEV__ && tsInvariant.invariant.error('Unhandled error', error.message, error.stack);
4331
4383
  }
@@ -4334,14 +4386,6 @@ function logMissingFieldErrors(missing) {
4334
4386
  __DEV__ && tsInvariant.invariant.debug("Missing cache result fields: ".concat(JSON.stringify(missing)), missing);
4335
4387
  }
4336
4388
  }
4337
- function applyNextFetchPolicy(options) {
4338
- var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? "cache-first" : _a, nextFetchPolicy = options.nextFetchPolicy;
4339
- if (nextFetchPolicy) {
4340
- options.fetchPolicy = typeof nextFetchPolicy === "function"
4341
- ? nextFetchPolicy.call(options, fetchPolicy)
4342
- : nextFetchPolicy;
4343
- }
4344
- }
4345
4389
 
4346
4390
  var LocalState = (function () {
4347
4391
  function LocalState(_a) {
@@ -4724,11 +4768,12 @@ var QueryInfo = (function () {
4724
4768
  if (oq) {
4725
4769
  oq["queryInfo"] = this;
4726
4770
  this.listeners.add(this.oqListener = function () {
4727
- if (_this.getDiff().fromOptimisticTransaction) {
4771
+ var diff = _this.getDiff();
4772
+ if (diff.fromOptimisticTransaction) {
4728
4773
  oq["observe"]();
4729
4774
  }
4730
4775
  else {
4731
- oq.reobserve();
4776
+ reobserveCacheFirst(oq);
4732
4777
  }
4733
4778
  });
4734
4779
  }
@@ -5377,8 +5422,10 @@ var QueryManager = (function () {
5377
5422
  };
5378
5423
  QueryManager.prototype.removeQuery = function (queryId) {
5379
5424
  this.fetchCancelFns.delete(queryId);
5380
- this.getQuery(queryId).stop();
5381
- this.queries.delete(queryId);
5425
+ if (this.queries.has(queryId)) {
5426
+ this.getQuery(queryId).stop();
5427
+ this.queries.delete(queryId);
5428
+ }
5382
5429
  };
5383
5430
  QueryManager.prototype.broadcastQueries = function () {
5384
5431
  if (this.onBroadcast)
@@ -5462,10 +5509,11 @@ var QueryManager = (function () {
5462
5509
  var aqr = {
5463
5510
  data: result.data,
5464
5511
  loading: false,
5465
- networkStatus: queryInfo.networkStatus || exports.NetworkStatus.ready,
5512
+ networkStatus: exports.NetworkStatus.ready,
5466
5513
  };
5467
5514
  if (hasErrors && options.errorPolicy !== "ignore") {
5468
5515
  aqr.errors = result.errors;
5516
+ aqr.networkStatus = exports.NetworkStatus.error;
5469
5517
  }
5470
5518
  return aqr;
5471
5519
  }, function (networkError) {
@@ -5507,7 +5555,9 @@ var QueryManager = (function () {
5507
5555
  : fromVariables(normalized.variables));
5508
5556
  concast.cleanup(function () {
5509
5557
  _this.fetchCancelFns.delete(queryId);
5510
- applyNextFetchPolicy(options);
5558
+ if (queryInfo.observableQuery) {
5559
+ queryInfo.observableQuery["applyNextFetchPolicy"]("after-fetch", options);
5560
+ }
5511
5561
  });
5512
5562
  return concast;
5513
5563
  };
@@ -5581,7 +5631,7 @@ var QueryManager = (function () {
5581
5631
  };
5582
5632
  QueryManager.prototype.fetchQueryByPolicy = function (queryInfo, _a, networkStatus) {
5583
5633
  var _this = this;
5584
- var query = _a.query, variables = _a.variables, fetchPolicy = _a.fetchPolicy, refetchWritePolicy = _a.refetchWritePolicy, errorPolicy = _a.errorPolicy, returnPartialData = _a.returnPartialData, context = _a.context, notifyOnNetworkStatusChange = _a.notifyOnNetworkStatusChange;
5634
+ var query = _a.query, variables = _a.variables, fetchPolicy = _a.fetchPolicy, refetchWritePolicy = _a.refetchWritePolicy, errorPolicy = _a.errorPolicy, returnPartialData = _a.returnPartialData, context = _a.context, notifyOnNetworkStatusChange = _a.notifyOnNetworkStatusChange, fetchBlockingPromise = _a.fetchBlockingPromise;
5585
5635
  var oldNetworkStatus = queryInfo.networkStatus;
5586
5636
  queryInfo.init({
5587
5637
  document: query,
@@ -5614,12 +5664,26 @@ var QueryManager = (function () {
5614
5664
  refetchWritePolicy !== "merge") ? 1
5615
5665
  : 2;
5616
5666
  var resultsFromLink = function () {
5617
- return _this.getResultsFromLink(queryInfo, cacheWriteBehavior, {
5667
+ var get = function () { return _this.getResultsFromLink(queryInfo, cacheWriteBehavior, {
5618
5668
  variables: variables,
5619
5669
  context: context,
5620
5670
  fetchPolicy: fetchPolicy,
5621
5671
  errorPolicy: errorPolicy,
5622
- });
5672
+ }); };
5673
+ return fetchBlockingPromise ? fetchBlockingPromise.then(function (ok) { return ok ? get() : zenObservableTs.Observable.of(); }, function (error) {
5674
+ var apolloError = isApolloError(error)
5675
+ ? error
5676
+ : new ApolloError({ clientErrors: [error] });
5677
+ if (errorPolicy !== "ignore") {
5678
+ queryInfo.markError(apolloError);
5679
+ }
5680
+ return zenObservableTs.Observable.of({
5681
+ loading: false,
5682
+ networkStatus: exports.NetworkStatus.error,
5683
+ error: apolloError,
5684
+ data: readCache().result,
5685
+ });
5686
+ }) : get();
5623
5687
  };
5624
5688
  var shouldNotify = notifyOnNetworkStatusChange &&
5625
5689
  typeof oldNetworkStatus === "number" &&
@@ -6059,7 +6123,8 @@ function verifyDocumentType(document, type) {
6059
6123
 
6060
6124
  var hasOwnProperty = Object.prototype.hasOwnProperty;
6061
6125
  function useQuery(query, options) {
6062
- return useInternalState(useApolloClient(options && options.client), query).useQuery(options);
6126
+ if (options === void 0) { options = Object.create(null); }
6127
+ return useInternalState(useApolloClient(options.client), query).useQuery(options);
6063
6128
  }
6064
6129
  function useInternalState(client, query) {
6065
6130
  var stateRef = React.useRef();
@@ -6079,118 +6144,31 @@ var InternalState = (function () {
6079
6144
  function InternalState(client, query) {
6080
6145
  this.client = client;
6081
6146
  this.query = query;
6147
+ this.ssrDisabledResult = maybeDeepFreeze({
6148
+ loading: true,
6149
+ data: void 0,
6150
+ error: void 0,
6151
+ networkStatus: exports.NetworkStatus.loading,
6152
+ });
6153
+ this.skipStandbyResult = maybeDeepFreeze({
6154
+ loading: false,
6155
+ data: void 0,
6156
+ error: void 0,
6157
+ networkStatus: exports.NetworkStatus.ready,
6158
+ });
6082
6159
  this.toQueryResultCache = new (canUseWeakMap ? WeakMap : Map)();
6083
6160
  verifyDocumentType(query, exports.DocumentType.Query);
6084
6161
  }
6085
6162
  InternalState.prototype.forceUpdate = function () {
6086
6163
  };
6087
6164
  InternalState.prototype.useQuery = function (options) {
6165
+ var _this = this;
6166
+ this.renderPromises = React.useContext(getApolloContext()).renderPromises;
6088
6167
  this.useOptions(options);
6089
6168
  var obsQuery = this.useObservableQuery();
6090
- this.useSubscriptionEffect(obsQuery);
6091
- var result = this.getCurrentResult();
6092
- this.unsafeHandlePartialRefetch(result);
6093
- return this.toQueryResult(result);
6094
- };
6095
- InternalState.prototype.useOptions = function (options) {
6096
- this.renderPromises = React.useContext(getApolloContext()).renderPromises;
6097
- var watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options || {});
6098
- if (!equality.equal(watchQueryOptions, this.watchQueryOptions)) {
6099
- this.watchQueryOptions = watchQueryOptions;
6100
- }
6101
- this.ssrDisabled = !!(options && (options.ssr === false ||
6102
- options.skip));
6103
- this.onCompleted = options
6104
- && options.onCompleted
6105
- || InternalState.prototype.onCompleted;
6106
- this.onError = options
6107
- && options.onError
6108
- || InternalState.prototype.onError;
6109
- };
6110
- InternalState.prototype.createWatchQueryOptions = function (_a) {
6111
- var _b;
6112
- if (_a === void 0) { _a = {}; }
6113
- var skip = _a.skip; _a.ssr; _a.onCompleted; _a.onError; _a.displayName; var otherOptions = tslib.__rest(_a, ["skip", "ssr", "onCompleted", "onError", "displayName"]);
6114
- var watchQueryOptions = Object.assign(otherOptions, { query: this.query });
6115
- if (skip) {
6116
- watchQueryOptions.fetchPolicy = 'standby';
6117
- }
6118
- else if (((_b = watchQueryOptions.context) === null || _b === void 0 ? void 0 : _b.renderPromises) &&
6119
- (watchQueryOptions.fetchPolicy === 'network-only' ||
6120
- watchQueryOptions.fetchPolicy === 'cache-and-network')) {
6121
- watchQueryOptions.fetchPolicy = 'cache-first';
6122
- }
6123
- else if (!watchQueryOptions.fetchPolicy) {
6124
- var defaultOptions = this.client.defaultOptions.watchQuery;
6125
- watchQueryOptions.fetchPolicy =
6126
- defaultOptions && defaultOptions.fetchPolicy || 'cache-first';
6127
- }
6128
- if (!watchQueryOptions.variables) {
6129
- watchQueryOptions.variables = {};
6130
- }
6131
- return watchQueryOptions;
6132
- };
6133
- InternalState.prototype.onCompleted = function (data) { };
6134
- InternalState.prototype.onError = function (error) { };
6135
- InternalState.prototype.useObservableQuery = function () {
6136
- var _this = this;
6137
- var obsQuery = this.observable =
6138
- this.renderPromises
6139
- && this.renderPromises.getSSRObservable(this.watchQueryOptions)
6140
- || this.observable
6141
- || this.client.watchQuery(this.watchQueryOptions);
6142
- this.obsQueryFields = React.useMemo(function () { return ({
6143
- refetch: obsQuery.refetch.bind(obsQuery),
6144
- fetchMore: obsQuery.fetchMore.bind(obsQuery),
6145
- updateQuery: obsQuery.updateQuery.bind(obsQuery),
6146
- startPolling: obsQuery.startPolling.bind(obsQuery),
6147
- stopPolling: obsQuery.stopPolling.bind(obsQuery),
6148
- subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
6149
- }); }, [obsQuery]);
6150
- if (this.renderPromises) {
6151
- this.renderPromises.registerSSRObservable(obsQuery);
6152
- if (!this.ssrDisabled && obsQuery.getCurrentResult().loading) {
6153
- this.renderPromises.addQueryPromise({
6154
- getOptions: function () { return obsQuery.options; },
6155
- fetchData: function () { return new Promise(function (resolve) {
6156
- var sub = obsQuery.subscribe({
6157
- next: function (result) {
6158
- if (!result.loading) {
6159
- resolve();
6160
- sub.unsubscribe();
6161
- }
6162
- },
6163
- error: function () {
6164
- resolve();
6165
- sub.unsubscribe();
6166
- },
6167
- complete: function () {
6168
- resolve();
6169
- },
6170
- });
6171
- }); },
6172
- }, function () { return null; });
6173
- obsQuery.setOptions(this.watchQueryOptions).catch(function () { });
6174
- }
6175
- }
6176
- var prevOptionsRef = React.useRef({
6177
- watchQueryOptions: this.watchQueryOptions,
6178
- });
6179
- React.useEffect(function () {
6180
- if (_this.renderPromises) ;
6181
- else if (_this.watchQueryOptions !== prevOptionsRef.current.watchQueryOptions) {
6182
- obsQuery.setOptions(_this.watchQueryOptions).catch(function () { });
6183
- prevOptionsRef.current.watchQueryOptions = _this.watchQueryOptions;
6184
- _this.setResult(obsQuery.getCurrentResult());
6185
- }
6186
- }, [obsQuery, this.watchQueryOptions]);
6187
- return obsQuery;
6188
- };
6189
- InternalState.prototype.useSubscriptionEffect = function (obsQuery) {
6190
- var _this = this;
6191
- React.useEffect(function () {
6169
+ var result = index_js.useSyncExternalStore(React.useCallback(function () {
6192
6170
  if (_this.renderPromises) {
6193
- return;
6171
+ return function () { };
6194
6172
  }
6195
6173
  var onNext = function () {
6196
6174
  var previousResult = _this.result;
@@ -6234,7 +6212,117 @@ var InternalState = (function () {
6234
6212
  obsQuery,
6235
6213
  this.renderPromises,
6236
6214
  this.client.disableNetworkFetches,
6237
- ]);
6215
+ ]), function () { return _this.getCurrentResult(); });
6216
+ this.unsafeHandlePartialRefetch(result);
6217
+ return this.toQueryResult(result);
6218
+ };
6219
+ InternalState.prototype.useOptions = function (options) {
6220
+ var _a;
6221
+ var watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options);
6222
+ var currentWatchQueryOptions = this.watchQueryOptions;
6223
+ var resolveFetchBlockingPromise;
6224
+ if (!equality.equal(watchQueryOptions, currentWatchQueryOptions)) {
6225
+ this.watchQueryOptions = watchQueryOptions;
6226
+ if (currentWatchQueryOptions && this.observable) {
6227
+ this.observable.reobserve(tslib.__assign({ fetchBlockingPromise: new Promise(function (resolve) {
6228
+ resolveFetchBlockingPromise = resolve;
6229
+ }) }, watchQueryOptions));
6230
+ this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
6231
+ this.result = void 0;
6232
+ }
6233
+ }
6234
+ useUnblockFetchEffect(this.renderPromises, resolveFetchBlockingPromise);
6235
+ this.ssrDisabled = !!(options.ssr === false ||
6236
+ options.skip);
6237
+ this.onCompleted = options.onCompleted || InternalState.prototype.onCompleted;
6238
+ this.onError = options.onError || InternalState.prototype.onError;
6239
+ if ((this.renderPromises || this.client.disableNetworkFetches) &&
6240
+ this.queryHookOptions.ssr === false) {
6241
+ this.result = this.ssrDisabledResult;
6242
+ }
6243
+ else if (this.queryHookOptions.skip ||
6244
+ this.watchQueryOptions.fetchPolicy === 'standby') {
6245
+ this.result = this.skipStandbyResult;
6246
+ }
6247
+ else if (this.result === this.ssrDisabledResult ||
6248
+ this.result === this.skipStandbyResult) {
6249
+ this.result = void 0;
6250
+ }
6251
+ };
6252
+ InternalState.prototype.createWatchQueryOptions = function (_a) {
6253
+ if (_a === void 0) { _a = {}; }
6254
+ var skip = _a.skip; _a.ssr; _a.onCompleted; _a.onError; _a.displayName; var defaultOptions = _a.defaultOptions, otherOptions = tslib.__rest(_a, ["skip", "ssr", "onCompleted", "onError", "displayName", "defaultOptions"]);
6255
+ var toMerge = [];
6256
+ var globalDefaults = this.client.defaultOptions.watchQuery;
6257
+ if (globalDefaults)
6258
+ toMerge.push(globalDefaults);
6259
+ if (defaultOptions)
6260
+ toMerge.push(defaultOptions);
6261
+ var latestOptions = this.observable && this.observable.options;
6262
+ if (latestOptions && toMerge.length) {
6263
+ var defaults_1 = toMerge.reduce(mergeOptions, Object.create(null));
6264
+ toMerge.length = 1;
6265
+ toMerge[0] = defaults_1;
6266
+ Object.keys(defaults_1).forEach(function (defaultOptionName) {
6267
+ var currentOptionValue = latestOptions[defaultOptionName];
6268
+ if (hasOwnProperty.call(latestOptions, defaultOptionName) &&
6269
+ !equality.equal(defaults_1[defaultOptionName], currentOptionValue)) {
6270
+ defaults_1[defaultOptionName] = defaultOptionName === "variables"
6271
+ ? tslib.__assign(tslib.__assign({}, defaults_1.variables), currentOptionValue) : currentOptionValue;
6272
+ }
6273
+ });
6274
+ }
6275
+ toMerge.push(otherOptions);
6276
+ var merged = toMerge.reduce(mergeOptions, Object.create(null));
6277
+ var watchQueryOptions = Object.assign(merged, { query: this.query });
6278
+ if (this.renderPromises &&
6279
+ (watchQueryOptions.fetchPolicy === 'network-only' ||
6280
+ watchQueryOptions.fetchPolicy === 'cache-and-network')) {
6281
+ watchQueryOptions.fetchPolicy = 'cache-first';
6282
+ }
6283
+ else if (!watchQueryOptions.fetchPolicy) {
6284
+ watchQueryOptions.fetchPolicy = 'cache-first';
6285
+ }
6286
+ if (skip) {
6287
+ var _b = watchQueryOptions.initialFetchPolicy, initialFetchPolicy = _b === void 0 ? watchQueryOptions.fetchPolicy : _b;
6288
+ Object.assign(watchQueryOptions, {
6289
+ initialFetchPolicy: initialFetchPolicy,
6290
+ fetchPolicy: 'standby',
6291
+ });
6292
+ }
6293
+ if (!watchQueryOptions.variables) {
6294
+ watchQueryOptions.variables = {};
6295
+ }
6296
+ return watchQueryOptions;
6297
+ };
6298
+ InternalState.prototype.onCompleted = function (data) { };
6299
+ InternalState.prototype.onError = function (error) { };
6300
+ InternalState.prototype.useObservableQuery = function () {
6301
+ var resolveFetchBlockingPromise;
6302
+ var obsQuery = this.observable =
6303
+ this.renderPromises
6304
+ && this.renderPromises.getSSRObservable(this.watchQueryOptions)
6305
+ || this.observable
6306
+ || this.client.watchQuery(tslib.__assign({ fetchBlockingPromise: new Promise(function (resolve) {
6307
+ resolveFetchBlockingPromise = resolve;
6308
+ }) }, this.watchQueryOptions));
6309
+ useUnblockFetchEffect(this.renderPromises, resolveFetchBlockingPromise);
6310
+ this.obsQueryFields = React.useMemo(function () { return ({
6311
+ refetch: obsQuery.refetch.bind(obsQuery),
6312
+ reobserve: obsQuery.reobserve.bind(obsQuery),
6313
+ fetchMore: obsQuery.fetchMore.bind(obsQuery),
6314
+ updateQuery: obsQuery.updateQuery.bind(obsQuery),
6315
+ startPolling: obsQuery.startPolling.bind(obsQuery),
6316
+ stopPolling: obsQuery.stopPolling.bind(obsQuery),
6317
+ subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
6318
+ }); }, [obsQuery]);
6319
+ if (this.renderPromises) {
6320
+ this.renderPromises.registerSSRObservable(obsQuery);
6321
+ if (!this.ssrDisabled && obsQuery.getCurrentResult().loading) {
6322
+ this.renderPromises.addObservableQueryPromise(obsQuery);
6323
+ }
6324
+ }
6325
+ return obsQuery;
6238
6326
  };
6239
6327
  InternalState.prototype.setResult = function (nextResult) {
6240
6328
  var previousResult = this.result;
@@ -6256,30 +6344,10 @@ var InternalState = (function () {
6256
6344
  }
6257
6345
  };
6258
6346
  InternalState.prototype.getCurrentResult = function () {
6259
- var result = this.result;
6260
- if (!result) {
6261
- result = this.result = this.observable.getCurrentResult();
6262
- this.handleErrorOrCompleted(result);
6347
+ if (!this.result) {
6348
+ this.handleErrorOrCompleted(this.result = this.observable.getCurrentResult());
6263
6349
  }
6264
- if ((this.renderPromises || this.client.disableNetworkFetches) &&
6265
- this.queryHookOptions.ssr === false) {
6266
- result = {
6267
- loading: true,
6268
- data: void 0,
6269
- error: void 0,
6270
- networkStatus: exports.NetworkStatus.loading,
6271
- };
6272
- }
6273
- else if (this.queryHookOptions.skip ||
6274
- this.queryHookOptions.fetchPolicy === 'standby') {
6275
- result = {
6276
- loading: false,
6277
- data: void 0,
6278
- error: void 0,
6279
- networkStatus: exports.NetworkStatus.ready,
6280
- };
6281
- }
6282
- return result;
6350
+ return this.result;
6283
6351
  };
6284
6352
  InternalState.prototype.toQueryResult = function (result) {
6285
6353
  var queryResult = this.toQueryResultCache.get(result);
@@ -6307,33 +6375,52 @@ var InternalState = (function () {
6307
6375
  };
6308
6376
  return InternalState;
6309
6377
  }());
6378
+ function useUnblockFetchEffect(renderPromises, resolveFetchBlockingPromise) {
6379
+ if (resolveFetchBlockingPromise) {
6380
+ if (renderPromises) {
6381
+ resolveFetchBlockingPromise(true);
6382
+ }
6383
+ else {
6384
+ setTimeout(function () { return resolveFetchBlockingPromise(false); }, 5000);
6385
+ }
6386
+ }
6387
+ React.useEffect(function () {
6388
+ if (resolveFetchBlockingPromise) {
6389
+ resolveFetchBlockingPromise(true);
6390
+ }
6391
+ }, [resolveFetchBlockingPromise]);
6392
+ }
6310
6393
 
6311
6394
  var EAGER_METHODS = [
6312
6395
  'refetch',
6396
+ 'reobserve',
6313
6397
  'fetchMore',
6314
6398
  'updateQuery',
6315
6399
  'startPolling',
6316
6400
  'subscribeToMore',
6317
6401
  ];
6318
6402
  function useLazyQuery(query, options) {
6319
- var _a = React.useState({
6320
- called: false,
6321
- }), execution = _a[0], setExecution = _a[1];
6322
- var result = useQuery(query, tslib.__assign(tslib.__assign(tslib.__assign({}, options), execution.options), { fetchPolicy: execution.called ? options === null || options === void 0 ? void 0 : options.fetchPolicy : 'standby', skip: undefined }));
6323
- if (!execution.called) {
6324
- result = tslib.__assign(tslib.__assign({}, result), { loading: false, data: void 0, error: void 0, called: false });
6325
- }
6403
+ var internalState = useInternalState(useApolloClient(options && options.client), query);
6404
+ var execOptionsRef = React.useRef();
6405
+ var defaultOptions = internalState.client.defaultOptions.watchQuery;
6406
+ var initialFetchPolicy = (options && options.fetchPolicy) ||
6407
+ (execOptionsRef.current && execOptionsRef.current.fetchPolicy) ||
6408
+ (defaultOptions && defaultOptions.fetchPolicy) ||
6409
+ "cache-first";
6410
+ var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign(tslib.__assign({}, options), execOptionsRef.current), { skip: !execOptionsRef.current }));
6411
+ var result = Object.assign(useQueryResult, {
6412
+ called: !!execOptionsRef.current,
6413
+ });
6326
6414
  var eagerMethods = React.useMemo(function () {
6327
6415
  var eagerMethods = {};
6328
6416
  var _loop_1 = function (key) {
6329
6417
  var method = result[key];
6330
6418
  eagerMethods[key] = function () {
6331
- var args = [];
6332
- for (var _i = 0; _i < arguments.length; _i++) {
6333
- args[_i] = arguments[_i];
6419
+ if (!execOptionsRef.current) {
6420
+ execOptionsRef.current = Object.create(null);
6421
+ internalState.forceUpdate();
6334
6422
  }
6335
- setExecution(function (execution) { return (tslib.__assign(tslib.__assign({}, execution), { called: true })); });
6336
- return method.apply(void 0, args);
6423
+ return method.apply(this, arguments);
6337
6424
  };
6338
6425
  };
6339
6426
  for (var _i = 0, EAGER_METHODS_1 = EAGER_METHODS; _i < EAGER_METHODS_1.length; _i++) {
@@ -6342,15 +6429,24 @@ function useLazyQuery(query, options) {
6342
6429
  }
6343
6430
  return eagerMethods;
6344
6431
  }, []);
6345
- result.error = result.error || void 0;
6346
6432
  Object.assign(result, eagerMethods);
6347
6433
  var execute = React.useCallback(function (executeOptions) {
6348
- setExecution({ called: true, options: executeOptions });
6349
- var promise = result.refetch(executeOptions === null || executeOptions === void 0 ? void 0 : executeOptions.variables).then(function (result1) {
6350
- var result2 = tslib.__assign(tslib.__assign({}, result), { data: result1.data, error: result1.error, called: true, loading: false });
6351
- Object.assign(result2, eagerMethods);
6352
- return result2;
6353
- });
6434
+ var promise = result.reobserve(execOptionsRef.current = executeOptions ? tslib.__assign(tslib.__assign({}, executeOptions), { fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy }) : {
6435
+ fetchPolicy: initialFetchPolicy,
6436
+ }).then(function (apolloQueryResult) {
6437
+ apolloQueryResult = apolloQueryResult || internalState["getCurrentResult"]();
6438
+ if (apolloQueryResult.error ||
6439
+ isNonEmptyArray(apolloQueryResult.errors)) {
6440
+ var _a = result.observable.options.errorPolicy, errorPolicy = _a === void 0 ? "none" : _a;
6441
+ if (errorPolicy === "none") {
6442
+ throw apolloQueryResult.error || new ApolloError({
6443
+ graphQLErrors: apolloQueryResult.errors,
6444
+ });
6445
+ }
6446
+ }
6447
+ return internalState.toQueryResult(apolloQueryResult);
6448
+ }).then(function (queryResult) { return Object.assign(queryResult, eagerMethods); });
6449
+ internalState.forceUpdate();
6354
6450
  promise.catch(function () { });
6355
6451
  return promise;
6356
6452
  }, []);
@@ -6574,7 +6670,6 @@ exports.HttpLink = HttpLink;
6574
6670
  exports.InMemoryCache = InMemoryCache;
6575
6671
  exports.MissingFieldError = MissingFieldError;
6576
6672
  exports.ObservableQuery = ObservableQuery;
6577
- exports.applyNextFetchPolicy = applyNextFetchPolicy;
6578
6673
  exports.checkFetcher = checkFetcher;
6579
6674
  exports.concat = concat;
6580
6675
  exports.createHttpLink = createHttpLink;