@apollo/client 3.5.10 → 3.6.0-beta.10

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 (61) hide show
  1. package/apollo-client.cjs +387 -286
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/core/ApolloClient.d.ts.map +1 -1
  5. package/core/ApolloClient.js +2 -2
  6. package/core/ApolloClient.js.map +1 -1
  7. package/core/ObservableQuery.d.ts +8 -2
  8. package/core/ObservableQuery.d.ts.map +1 -1
  9. package/core/ObservableQuery.js +75 -32
  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 +5 -2
  15. package/core/QueryManager.d.ts.map +1 -1
  16. package/core/QueryManager.js +18 -11
  17. package/core/QueryManager.js.map +1 -1
  18. package/core/core.cjs +98 -48
  19. package/core/core.cjs.map +1 -1
  20. package/core/index.d.ts +1 -1
  21. package/core/index.d.ts.map +1 -1
  22. package/core/index.js +1 -1
  23. package/core/index.js.map +1 -1
  24. package/core/watchQueryOptions.d.ts +8 -1
  25. package/core/watchQueryOptions.d.ts.map +1 -1
  26. package/core/watchQueryOptions.js.map +1 -1
  27. package/invariantErrorCodes.js +1 -1
  28. package/link/batch/batch.cjs +47 -37
  29. package/link/batch/batch.cjs.map +1 -1
  30. package/link/batch/batching.d.ts +2 -6
  31. package/link/batch/batching.d.ts.map +1 -1
  32. package/link/batch/batching.js +47 -37
  33. package/link/batch/batching.js.map +1 -1
  34. package/package.json +17 -16
  35. package/react/hooks/hooks.cjs +262 -209
  36. package/react/hooks/hooks.cjs.map +1 -1
  37. package/react/hooks/options.d.ts +3 -0
  38. package/react/hooks/options.d.ts.map +1 -0
  39. package/react/hooks/options.js +20 -0
  40. package/react/hooks/options.js.map +1 -0
  41. package/react/hooks/useLazyQuery.d.ts +2 -2
  42. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  43. package/react/hooks/useLazyQuery.js +3 -1
  44. package/react/hooks/useLazyQuery.js.map +1 -1
  45. package/react/hooks/useMutation.js.map +1 -1
  46. package/react/hooks/useQuery.d.ts +2 -2
  47. package/react/hooks/useQuery.d.ts.map +1 -1
  48. package/react/hooks/useQuery.js +237 -205
  49. package/react/hooks/useQuery.js.map +1 -1
  50. package/react/ssr/RenderPromises.d.ts +1 -1
  51. package/react/ssr/RenderPromises.d.ts.map +1 -1
  52. package/react/ssr/RenderPromises.js +2 -2
  53. package/react/ssr/RenderPromises.js.map +1 -1
  54. package/react/ssr/ssr.cjs +2 -2
  55. package/react/ssr/ssr.cjs.map +1 -1
  56. package/react/types/types.d.ts +3 -0
  57. package/react/types/types.d.ts.map +1 -1
  58. package/react/types/types.js.map +1 -1
  59. package/testing/core/mocking/mockFetch.js +1 -1
  60. package/testing/core/mocking/mockFetch.js.map +1 -1
  61. package/version.js +1 -1
package/core/core.cjs CHANGED
@@ -15,7 +15,7 @@ var utils = require('../link/utils');
15
15
  var tsInvariant = require('ts-invariant');
16
16
  var graphqlTag = require('graphql-tag');
17
17
 
18
- var version = '3.5.10';
18
+ var version = '3.6.0-beta.10';
19
19
 
20
20
  exports.NetworkStatus = void 0;
21
21
  (function (NetworkStatus) {
@@ -32,7 +32,6 @@ function isNetworkRequestInFlight(networkStatus) {
32
32
  }
33
33
 
34
34
  var assign = Object.assign, hasOwnProperty$1 = Object.hasOwnProperty;
35
- var warnedAboutUpdateQuery = false;
36
35
  var ObservableQuery = (function (_super) {
37
36
  tslib.__extends(ObservableQuery, _super);
38
37
  function ObservableQuery(_a) {
@@ -204,35 +203,49 @@ var ObservableQuery = (function (_super) {
204
203
  var _this = this;
205
204
  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" });
206
205
  var qid = this.queryManager.generateQueryId();
206
+ var queryInfo = this.queryInfo;
207
+ var originalNetworkStatus = queryInfo.networkStatus;
208
+ queryInfo.networkStatus = exports.NetworkStatus.fetchMore;
207
209
  if (combinedOptions.notifyOnNetworkStatusChange) {
208
- this.queryInfo.networkStatus = exports.NetworkStatus.fetchMore;
209
210
  this.observe();
210
211
  }
212
+ var updatedQuerySet = new Set();
211
213
  return this.queryManager.fetchQuery(qid, combinedOptions, exports.NetworkStatus.fetchMore).then(function (fetchMoreResult) {
212
- var data = fetchMoreResult.data;
213
- var updateQuery = fetchMoreOptions.updateQuery;
214
- if (updateQuery) {
215
- if (__DEV__ &&
216
- !warnedAboutUpdateQuery) {
217
- __DEV__ && globals.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.");
218
- warnedAboutUpdateQuery = true;
219
- }
220
- _this.updateQuery(function (previous) { return updateQuery(previous, {
221
- fetchMoreResult: data,
222
- variables: combinedOptions.variables,
223
- }); });
224
- }
225
- else {
226
- _this.queryManager.cache.writeQuery({
227
- query: combinedOptions.query,
228
- variables: combinedOptions.variables,
229
- data: data,
230
- });
214
+ _this.queryManager.removeQuery(qid);
215
+ if (queryInfo.networkStatus === exports.NetworkStatus.fetchMore) {
216
+ queryInfo.networkStatus = originalNetworkStatus;
231
217
  }
218
+ _this.queryManager.cache.batch({
219
+ update: function (cache) {
220
+ var updateQuery = fetchMoreOptions.updateQuery;
221
+ if (updateQuery) {
222
+ cache.updateQuery({
223
+ query: _this.options.query,
224
+ variables: _this.variables,
225
+ returnPartialData: true,
226
+ optimistic: false,
227
+ }, function (previous) { return updateQuery(previous, {
228
+ fetchMoreResult: fetchMoreResult.data,
229
+ variables: combinedOptions.variables,
230
+ }); });
231
+ }
232
+ else {
233
+ cache.writeQuery({
234
+ query: combinedOptions.query,
235
+ variables: combinedOptions.variables,
236
+ data: fetchMoreResult.data,
237
+ });
238
+ }
239
+ },
240
+ onWatchUpdated: function (watch) {
241
+ updatedQuerySet.add(watch.query);
242
+ },
243
+ });
232
244
  return fetchMoreResult;
233
245
  }).finally(function () {
234
- _this.queryManager.stopQuery(qid);
235
- _this.reobserve();
246
+ if (!updatedQuerySet.has(_this.options.query)) {
247
+ reobserveCacheFirst(_this);
248
+ }
236
249
  });
237
250
  };
238
251
  ObservableQuery.prototype.subscribeToMore = function (options) {
@@ -317,6 +330,27 @@ var ObservableQuery = (function (_super) {
317
330
  this.options.pollInterval = 0;
318
331
  this.updatePolling();
319
332
  };
333
+ ObservableQuery.prototype.applyNextFetchPolicy = function (reason, options) {
334
+ if (options === void 0) { options = this.options; }
335
+ if (options.nextFetchPolicy) {
336
+ var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? "cache-first" : _a;
337
+ if (typeof options.nextFetchPolicy === "function") {
338
+ options.fetchPolicy = options.nextFetchPolicy(fetchPolicy, {
339
+ reason: reason,
340
+ options: options,
341
+ observable: this,
342
+ initialPolicy: this.initialFetchPolicy,
343
+ });
344
+ }
345
+ else if (reason === "variables-changed") {
346
+ options.fetchPolicy = this.initialFetchPolicy;
347
+ }
348
+ else {
349
+ options.fetchPolicy = options.nextFetchPolicy;
350
+ }
351
+ }
352
+ return options.fetchPolicy;
353
+ };
320
354
  ObservableQuery.prototype.fetch = function (options, newNetworkStatus) {
321
355
  this.queryManager.setObservableQuery(this);
322
356
  return this.queryManager.fetchQueryObservable(this.queryId, options, newNetworkStatus);
@@ -388,7 +422,7 @@ var ObservableQuery = (function (_super) {
388
422
  newOptions.variables &&
389
423
  !newOptions.fetchPolicy &&
390
424
  !equality.equal(newOptions.variables, oldVariables)) {
391
- options.fetchPolicy = this.initialFetchPolicy;
425
+ this.applyNextFetchPolicy("variables-changed");
392
426
  if (newNetworkStatus === void 0) {
393
427
  newNetworkStatus = exports.NetworkStatus.setVariables;
394
428
  }
@@ -452,6 +486,23 @@ var ObservableQuery = (function (_super) {
452
486
  return ObservableQuery;
453
487
  }(utilities.Observable));
454
488
  utilities.fixObservableSubclass(ObservableQuery);
489
+ function reobserveCacheFirst(obsQuery) {
490
+ var _a = obsQuery.options, fetchPolicy = _a.fetchPolicy, nextFetchPolicy = _a.nextFetchPolicy;
491
+ if (fetchPolicy === "cache-and-network" ||
492
+ fetchPolicy === "network-only") {
493
+ return obsQuery.reobserve({
494
+ fetchPolicy: "cache-first",
495
+ nextFetchPolicy: function () {
496
+ this.nextFetchPolicy = nextFetchPolicy;
497
+ if (typeof nextFetchPolicy === "function") {
498
+ return nextFetchPolicy.apply(this, arguments);
499
+ }
500
+ return fetchPolicy;
501
+ },
502
+ });
503
+ }
504
+ return obsQuery.reobserve();
505
+ }
455
506
  function defaultSubscriptionObserverErrorCallback(error) {
456
507
  __DEV__ && globals.invariant.error('Unhandled error', error.message, error.stack);
457
508
  }
@@ -460,14 +511,6 @@ function logMissingFieldErrors(missing) {
460
511
  __DEV__ && globals.invariant.debug("Missing cache result fields: ".concat(JSON.stringify(missing)), missing);
461
512
  }
462
513
  }
463
- function applyNextFetchPolicy(options) {
464
- var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? "cache-first" : _a, nextFetchPolicy = options.nextFetchPolicy;
465
- if (nextFetchPolicy) {
466
- options.fetchPolicy = typeof nextFetchPolicy === "function"
467
- ? nextFetchPolicy.call(options, fetchPolicy)
468
- : nextFetchPolicy;
469
- }
470
- }
471
514
 
472
515
  var LocalState = (function () {
473
516
  function LocalState(_a) {
@@ -850,11 +893,12 @@ var QueryInfo = (function () {
850
893
  if (oq) {
851
894
  oq["queryInfo"] = this;
852
895
  this.listeners.add(this.oqListener = function () {
853
- if (_this.getDiff().fromOptimisticTransaction) {
896
+ var diff = _this.getDiff();
897
+ if (diff.fromOptimisticTransaction) {
854
898
  oq["observe"]();
855
899
  }
856
900
  else {
857
- oq.reobserve();
901
+ reobserveCacheFirst(oq);
858
902
  }
859
903
  });
860
904
  }
@@ -999,7 +1043,7 @@ function shouldWriteResult(result, errorPolicy) {
999
1043
  var hasOwnProperty = Object.prototype.hasOwnProperty;
1000
1044
  var QueryManager = (function () {
1001
1045
  function QueryManager(_a) {
1002
- var cache = _a.cache, link = _a.link, _b = _a.queryDeduplication, queryDeduplication = _b === void 0 ? false : _b, onBroadcast = _a.onBroadcast, _c = _a.ssrMode, ssrMode = _c === void 0 ? false : _c, _d = _a.clientAwareness, clientAwareness = _d === void 0 ? {} : _d, localState = _a.localState, assumeImmutableResults = _a.assumeImmutableResults;
1046
+ var cache = _a.cache, link = _a.link, defaultOptions = _a.defaultOptions, _b = _a.queryDeduplication, queryDeduplication = _b === void 0 ? false : _b, onBroadcast = _a.onBroadcast, _c = _a.ssrMode, ssrMode = _c === void 0 ? false : _c, _d = _a.clientAwareness, clientAwareness = _d === void 0 ? {} : _d, localState = _a.localState, assumeImmutableResults = _a.assumeImmutableResults;
1003
1047
  this.clientAwareness = {};
1004
1048
  this.queries = new Map();
1005
1049
  this.fetchCancelFns = new Map();
@@ -1010,6 +1054,7 @@ var QueryManager = (function () {
1010
1054
  this.inFlightLinkObservables = new Map();
1011
1055
  this.cache = cache;
1012
1056
  this.link = link;
1057
+ this.defaultOptions = defaultOptions || Object.create(null);
1013
1058
  this.queryDeduplication = queryDeduplication;
1014
1059
  this.clientAwareness = clientAwareness;
1015
1060
  this.localState = localState || new LocalState({ cache: cache });
@@ -1031,11 +1076,12 @@ var QueryManager = (function () {
1031
1076
  this.fetchCancelFns.clear();
1032
1077
  };
1033
1078
  QueryManager.prototype.mutate = function (_a) {
1034
- var mutation = _a.mutation, variables = _a.variables, optimisticResponse = _a.optimisticResponse, updateQueries = _a.updateQueries, _b = _a.refetchQueries, refetchQueries = _b === void 0 ? [] : _b, _c = _a.awaitRefetchQueries, awaitRefetchQueries = _c === void 0 ? false : _c, updateWithProxyFn = _a.update, onQueryUpdated = _a.onQueryUpdated, _d = _a.errorPolicy, errorPolicy = _d === void 0 ? 'none' : _d, _e = _a.fetchPolicy, fetchPolicy = _e === void 0 ? 'network-only' : _e, keepRootFields = _a.keepRootFields, context = _a.context;
1079
+ var _b, _c;
1080
+ var mutation = _a.mutation, variables = _a.variables, optimisticResponse = _a.optimisticResponse, updateQueries = _a.updateQueries, _d = _a.refetchQueries, refetchQueries = _d === void 0 ? [] : _d, _e = _a.awaitRefetchQueries, awaitRefetchQueries = _e === void 0 ? false : _e, updateWithProxyFn = _a.update, onQueryUpdated = _a.onQueryUpdated, _f = _a.fetchPolicy, fetchPolicy = _f === void 0 ? ((_b = this.defaultOptions.mutate) === null || _b === void 0 ? void 0 : _b.fetchPolicy) || "network-only" : _f, _g = _a.errorPolicy, errorPolicy = _g === void 0 ? ((_c = this.defaultOptions.mutate) === null || _c === void 0 ? void 0 : _c.errorPolicy) || "none" : _g, keepRootFields = _a.keepRootFields, context = _a.context;
1035
1081
  return tslib.__awaiter(this, void 0, void 0, function () {
1036
1082
  var mutationId, mutationStoreValue, self;
1037
- return tslib.__generator(this, function (_f) {
1038
- switch (_f.label) {
1083
+ return tslib.__generator(this, function (_h) {
1084
+ switch (_h.label) {
1039
1085
  case 0:
1040
1086
  __DEV__ ? globals.invariant(mutation, 'mutation option is required. You must specify your GraphQL document in the mutation option.') : globals.invariant(mutation, 12);
1041
1087
  __DEV__ ? globals.invariant(fetchPolicy === 'network-only' ||
@@ -1047,8 +1093,8 @@ var QueryManager = (function () {
1047
1093
  if (!this.transform(mutation).hasClientExports) return [3, 2];
1048
1094
  return [4, this.localState.addExportedVariables(mutation, variables, context)];
1049
1095
  case 1:
1050
- variables = (_f.sent());
1051
- _f.label = 2;
1096
+ variables = (_h.sent());
1097
+ _h.label = 2;
1052
1098
  case 2:
1053
1099
  mutationStoreValue = this.mutationStore &&
1054
1100
  (this.mutationStore[mutationId] = {
@@ -1501,8 +1547,10 @@ var QueryManager = (function () {
1501
1547
  };
1502
1548
  QueryManager.prototype.removeQuery = function (queryId) {
1503
1549
  this.fetchCancelFns.delete(queryId);
1504
- this.getQuery(queryId).stop();
1505
- this.queries.delete(queryId);
1550
+ if (this.queries.has(queryId)) {
1551
+ this.getQuery(queryId).stop();
1552
+ this.queries.delete(queryId);
1553
+ }
1506
1554
  };
1507
1555
  QueryManager.prototype.broadcastQueries = function () {
1508
1556
  if (this.onBroadcast)
@@ -1608,7 +1656,8 @@ var QueryManager = (function () {
1608
1656
  var query = this.transform(options.query).document;
1609
1657
  var variables = this.getVariables(query, options.variables);
1610
1658
  var queryInfo = this.getQuery(queryId);
1611
- var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? "cache-first" : _a, _b = options.errorPolicy, errorPolicy = _b === void 0 ? "none" : _b, _c = options.returnPartialData, returnPartialData = _c === void 0 ? false : _c, _d = options.notifyOnNetworkStatusChange, notifyOnNetworkStatusChange = _d === void 0 ? false : _d, _e = options.context, context = _e === void 0 ? {} : _e;
1659
+ var defaults = this.defaultOptions.watchQuery;
1660
+ var _a = options.fetchPolicy, fetchPolicy = _a === void 0 ? defaults && defaults.fetchPolicy || "cache-first" : _a, _b = options.errorPolicy, errorPolicy = _b === void 0 ? defaults && defaults.errorPolicy || "none" : _b, _c = options.returnPartialData, returnPartialData = _c === void 0 ? false : _c, _d = options.notifyOnNetworkStatusChange, notifyOnNetworkStatusChange = _d === void 0 ? false : _d, _e = options.context, context = _e === void 0 ? {} : _e;
1612
1661
  var normalized = Object.assign({}, options, {
1613
1662
  query: query,
1614
1663
  variables: variables,
@@ -1630,7 +1679,9 @@ var QueryManager = (function () {
1630
1679
  : fromVariables(normalized.variables));
1631
1680
  concast.cleanup(function () {
1632
1681
  _this.fetchCancelFns.delete(queryId);
1633
- applyNextFetchPolicy(options);
1682
+ if (queryInfo.observableQuery) {
1683
+ queryInfo.observableQuery["applyNextFetchPolicy"]("after-fetch", options);
1684
+ }
1634
1685
  });
1635
1686
  return concast;
1636
1687
  };
@@ -1826,7 +1877,6 @@ function mergeOptions(defaults, options) {
1826
1877
  var ApolloClient = (function () {
1827
1878
  function ApolloClient(options) {
1828
1879
  var _this = this;
1829
- this.defaultOptions = {};
1830
1880
  this.resetStoreCallbacks = [];
1831
1881
  this.clearStoreCallbacks = [];
1832
1882
  var uri = options.uri, credentials = options.credentials, headers = options.headers, cache = options.cache, _a = options.ssrMode, ssrMode = _a === void 0 ? false : _a, _b = options.ssrForceFetchDelay, ssrForceFetchDelay = _b === void 0 ? 0 : _b, _c = options.connectToDevTools, connectToDevTools = _c === void 0 ? typeof window === 'object' &&
@@ -1847,7 +1897,7 @@ var ApolloClient = (function () {
1847
1897
  this.cache = cache;
1848
1898
  this.disableNetworkFetches = ssrMode || ssrForceFetchDelay > 0;
1849
1899
  this.queryDeduplication = queryDeduplication;
1850
- this.defaultOptions = defaultOptions || {};
1900
+ this.defaultOptions = defaultOptions || Object.create(null);
1851
1901
  this.typeDefs = typeDefs;
1852
1902
  if (ssrForceFetchDelay) {
1853
1903
  setTimeout(function () { return (_this.disableNetworkFetches = false); }, ssrForceFetchDelay);
@@ -1894,6 +1944,7 @@ var ApolloClient = (function () {
1894
1944
  this.queryManager = new QueryManager({
1895
1945
  cache: this.cache,
1896
1946
  link: this.link,
1947
+ defaultOptions: this.defaultOptions,
1897
1948
  queryDeduplication: queryDeduplication,
1898
1949
  ssrMode: ssrMode,
1899
1950
  clientAwareness: {
@@ -2077,7 +2128,6 @@ exports.gql = graphqlTag.gql;
2077
2128
  exports.resetCaches = graphqlTag.resetCaches;
2078
2129
  exports.ApolloClient = ApolloClient;
2079
2130
  exports.ObservableQuery = ObservableQuery;
2080
- exports.applyNextFetchPolicy = applyNextFetchPolicy;
2081
2131
  exports.mergeOptions = mergeOptions;
2082
2132
  for (var k in core) {
2083
2133
  if (k !== 'default' && !exports.hasOwnProperty(k)) exports[k] = core[k];