@apollo/client 3.8.0-alpha.11 → 3.8.0-alpha.13

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 (205) hide show
  1. package/apollo-client.cjs +594 -397
  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.map +1 -1
  6. package/core/ObservableQuery.d.ts +2 -1
  7. package/core/ObservableQuery.d.ts.map +1 -1
  8. package/core/ObservableQuery.js +30 -19
  9. package/core/ObservableQuery.js.map +1 -1
  10. package/core/QueryManager.d.ts +2 -0
  11. package/core/QueryManager.d.ts.map +1 -1
  12. package/core/QueryManager.js +60 -48
  13. package/core/QueryManager.js.map +1 -1
  14. package/core/core.cjs +175 -82
  15. package/core/core.cjs.map +1 -1
  16. package/core/core.cjs.native.js +175 -82
  17. package/core/equalByQuery.d.ts +4 -0
  18. package/core/equalByQuery.d.ts.map +1 -0
  19. package/{react/hooks/compareResults.js → core/equalByQuery.js} +14 -10
  20. package/core/equalByQuery.js.map +1 -0
  21. package/core/index.d.ts +1 -1
  22. package/core/index.d.ts.map +1 -1
  23. package/core/index.js +1 -1
  24. package/core/index.js.map +1 -1
  25. package/errors/errors.cjs +17 -17
  26. package/errors/errors.cjs.map +1 -1
  27. package/errors/errors.cjs.native.js +17 -17
  28. package/errors/index.d.ts +24 -8
  29. package/errors/index.d.ts.map +1 -1
  30. package/errors/index.js +17 -19
  31. package/errors/index.js.map +1 -1
  32. package/invariantErrorCodes.js +29 -34
  33. package/link/batch-http/batch-http.cjs +23 -2
  34. package/link/batch-http/batch-http.cjs.map +1 -1
  35. package/link/batch-http/batch-http.cjs.native.js +23 -2
  36. package/link/batch-http/batchHttpLink.d.ts.map +1 -1
  37. package/link/batch-http/batchHttpLink.js +7 -2
  38. package/link/batch-http/batchHttpLink.js.map +1 -1
  39. package/link/core/types.d.ts +4 -0
  40. package/link/core/types.d.ts.map +1 -1
  41. package/link/core/types.js.map +1 -1
  42. package/link/http/createHttpLink.d.ts.map +1 -1
  43. package/link/http/createHttpLink.js +21 -20
  44. package/link/http/createHttpLink.js.map +1 -1
  45. package/link/http/http.cjs +59 -30
  46. package/link/http/http.cjs.map +1 -1
  47. package/link/http/http.cjs.native.js +59 -30
  48. package/link/http/parseAndCheckHttpResponse.d.ts.map +1 -1
  49. package/link/http/parseAndCheckHttpResponse.js +34 -14
  50. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  51. package/link/http/selectHttpOptionsAndBody.d.ts.map +1 -1
  52. package/link/http/selectHttpOptionsAndBody.js +2 -1
  53. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  54. package/link/persisted-queries/index.d.ts.map +1 -1
  55. package/link/persisted-queries/index.js +12 -13
  56. package/link/persisted-queries/index.js.map +1 -1
  57. package/link/persisted-queries/persisted-queries.cjs +12 -13
  58. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  59. package/link/persisted-queries/persisted-queries.cjs.native.js +12 -13
  60. package/link/subscriptions/index.d.ts.map +1 -1
  61. package/link/subscriptions/index.js +10 -5
  62. package/link/subscriptions/index.js.map +1 -1
  63. package/link/subscriptions/subscriptions.cjs +9 -4
  64. package/link/subscriptions/subscriptions.cjs.map +1 -1
  65. package/link/subscriptions/subscriptions.cjs.native.js +9 -4
  66. package/link/utils/filterOperationVariables.d.ts +5 -0
  67. package/link/utils/filterOperationVariables.d.ts.map +1 -0
  68. package/link/utils/filterOperationVariables.js +18 -0
  69. package/link/utils/filterOperationVariables.js.map +1 -0
  70. package/link/utils/index.d.ts +1 -0
  71. package/link/utils/index.d.ts.map +1 -1
  72. package/link/utils/index.js +1 -0
  73. package/link/utils/index.js.map +1 -1
  74. package/link/utils/throwServerError.d.ts +1 -1
  75. package/link/utils/throwServerError.d.ts.map +1 -1
  76. package/link/utils/throwServerError.js.map +1 -1
  77. package/link/utils/utils.cjs +18 -0
  78. package/link/utils/utils.cjs.map +1 -1
  79. package/link/utils/utils.cjs.native.js +18 -0
  80. package/package.json +24 -23
  81. package/react/cache/QuerySubscription.d.ts +11 -4
  82. package/react/cache/QuerySubscription.d.ts.map +1 -1
  83. package/react/cache/QuerySubscription.js +53 -35
  84. package/react/cache/QuerySubscription.js.map +1 -1
  85. package/react/cache/SuspenseCache.d.ts +3 -2
  86. package/react/cache/SuspenseCache.d.ts.map +1 -1
  87. package/react/cache/SuspenseCache.js +6 -7
  88. package/react/cache/SuspenseCache.js.map +1 -1
  89. package/react/context/ApolloConsumer.js +1 -1
  90. package/react/context/ApolloProvider.js +1 -1
  91. package/react/context/context.cjs +2 -2
  92. package/react/context/context.cjs.map +1 -1
  93. package/react/context/context.cjs.native.js +2 -2
  94. package/react/hoc/hoc-utils.js +1 -1
  95. package/react/hoc/hoc.cjs +2 -2
  96. package/react/hoc/hoc.cjs.map +1 -1
  97. package/react/hoc/hoc.cjs.native.js +2 -2
  98. package/react/hoc/withApollo.js +1 -1
  99. package/react/hooks/hooks.cjs +118 -146
  100. package/react/hooks/hooks.cjs.map +1 -1
  101. package/react/hooks/hooks.cjs.native.js +118 -146
  102. package/react/hooks/internal/__use.d.ts +3 -1
  103. package/react/hooks/internal/__use.d.ts.map +1 -1
  104. package/react/hooks/internal/__use.js +16 -12
  105. package/react/hooks/internal/__use.js.map +1 -1
  106. package/react/hooks/useApolloClient.js +1 -1
  107. package/react/hooks/useFragment.d.ts +2 -1
  108. package/react/hooks/useFragment.d.ts.map +1 -1
  109. package/react/hooks/useFragment.js.map +1 -1
  110. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  111. package/react/hooks/useLazyQuery.js +13 -22
  112. package/react/hooks/useLazyQuery.js.map +1 -1
  113. package/react/hooks/useQuery.d.ts +3 -3
  114. package/react/hooks/useQuery.d.ts.map +1 -1
  115. package/react/hooks/useQuery.js +26 -25
  116. package/react/hooks/useQuery.js.map +1 -1
  117. package/react/hooks/useSubscription.d.ts.map +1 -1
  118. package/react/hooks/useSubscription.js +25 -13
  119. package/react/hooks/useSubscription.js.map +1 -1
  120. package/react/hooks/useSuspenseCache.js +1 -1
  121. package/react/hooks/useSuspenseQuery.d.ts +15 -3
  122. package/react/hooks/useSuspenseQuery.d.ts.map +1 -1
  123. package/react/hooks/useSuspenseQuery.js +39 -53
  124. package/react/hooks/useSuspenseQuery.js.map +1 -1
  125. package/react/index.d.ts +1 -1
  126. package/react/index.d.ts.map +1 -1
  127. package/react/index.js +1 -1
  128. package/react/index.js.map +1 -1
  129. package/react/parser/index.js +5 -5
  130. package/react/parser/parser.cjs +5 -5
  131. package/react/parser/parser.cjs.map +1 -1
  132. package/react/parser/parser.cjs.native.js +5 -5
  133. package/react/react.cjs +58 -54
  134. package/react/react.cjs.map +1 -1
  135. package/react/react.cjs.native.js +58 -54
  136. package/react/types/types.d.ts +2 -3
  137. package/react/types/types.d.ts.map +1 -1
  138. package/react/types/types.js.map +1 -1
  139. package/testing/core/core.cjs +1 -1
  140. package/testing/core/core.cjs.map +1 -1
  141. package/testing/core/core.cjs.native.js +1 -1
  142. package/testing/core/mocking/mockLink.js +1 -1
  143. package/testing/core/mocking/mockSubscriptionLink.d.ts +1 -1
  144. package/testing/react/MockedProvider.d.ts +1 -1
  145. package/testing/react/MockedProvider.d.ts.map +1 -1
  146. package/testing/react/MockedProvider.js +7 -6
  147. package/testing/react/MockedProvider.js.map +1 -1
  148. package/testing/testing.cjs +8 -124
  149. package/testing/testing.cjs.map +1 -1
  150. package/testing/testing.cjs.native.js +8 -124
  151. package/utilities/common/incrementalResult.d.ts +2 -1
  152. package/utilities/common/incrementalResult.d.ts.map +1 -1
  153. package/utilities/common/incrementalResult.js +4 -0
  154. package/utilities/common/incrementalResult.js.map +1 -1
  155. package/utilities/common/mergeOptions.d.ts +1 -1
  156. package/utilities/common/mergeOptions.d.ts.map +1 -1
  157. package/utilities/common/mergeOptions.js.map +1 -1
  158. package/utilities/common/objects.d.ts +1 -0
  159. package/utilities/common/objects.d.ts.map +1 -1
  160. package/utilities/common/objects.js +6 -0
  161. package/utilities/common/objects.js.map +1 -1
  162. package/utilities/common/omitDeep.d.ts +3 -0
  163. package/utilities/common/omitDeep.d.ts.map +1 -0
  164. package/utilities/common/omitDeep.js +42 -0
  165. package/utilities/common/omitDeep.js.map +1 -0
  166. package/utilities/common/stripTypename.d.ts +2 -0
  167. package/utilities/common/stripTypename.d.ts.map +1 -0
  168. package/utilities/common/stripTypename.js +5 -0
  169. package/utilities/common/stripTypename.js.map +1 -0
  170. package/utilities/graphql/directives.js +4 -4
  171. package/utilities/graphql/fragments.js +3 -3
  172. package/utilities/graphql/getFromAST.js +8 -8
  173. package/utilities/graphql/storeUtils.d.ts.map +1 -1
  174. package/utilities/graphql/storeUtils.js +2 -1
  175. package/utilities/graphql/storeUtils.js.map +1 -1
  176. package/utilities/graphql/transform.d.ts.map +1 -1
  177. package/utilities/graphql/transform.js +26 -16
  178. package/utilities/graphql/transform.js.map +1 -1
  179. package/utilities/index.d.ts +5 -0
  180. package/utilities/index.d.ts.map +1 -1
  181. package/utilities/index.js +3 -0
  182. package/utilities/index.js.map +1 -1
  183. package/utilities/promises/decoration.d.ts +2 -0
  184. package/utilities/promises/decoration.d.ts.map +1 -1
  185. package/utilities/promises/decoration.js +12 -0
  186. package/utilities/promises/decoration.js.map +1 -1
  187. package/utilities/types/DeepOmit.d.ts +10 -0
  188. package/utilities/types/DeepOmit.d.ts.map +1 -0
  189. package/utilities/types/DeepOmit.js +2 -0
  190. package/utilities/types/DeepOmit.js.map +1 -0
  191. package/utilities/types/DeepPartial.d.ts +12 -0
  192. package/utilities/types/DeepPartial.d.ts.map +1 -0
  193. package/utilities/types/DeepPartial.js +2 -0
  194. package/utilities/types/DeepPartial.js.map +1 -0
  195. package/utilities/types/Primitive.d.ts +2 -0
  196. package/utilities/types/Primitive.d.ts.map +1 -0
  197. package/utilities/types/Primitive.js +2 -0
  198. package/utilities/types/Primitive.js.map +1 -0
  199. package/utilities/utilities.cjs +141 -31
  200. package/utilities/utilities.cjs.map +1 -1
  201. package/utilities/utilities.cjs.native.js +141 -31
  202. package/version.js +1 -1
  203. package/react/hooks/compareResults.d.ts +0 -3
  204. package/react/hooks/compareResults.d.ts.map +0 -1
  205. package/react/hooks/compareResults.js.map +0 -1
@@ -11,6 +11,9 @@ var equality = require('@wry/equality');
11
11
  var core = require('../../core');
12
12
  var errors = require('../../errors');
13
13
  var parser = require('../parser');
14
+ var cache = require('../../cache');
15
+
16
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
14
17
 
15
18
  function _interopNamespace(e) {
16
19
  if (e && e.__esModule) return e;
@@ -25,20 +28,21 @@ function _interopNamespace(e) {
25
28
  }
26
29
 
27
30
  var React__namespace = /*#__PURE__*/_interopNamespace(React);
31
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
28
32
 
29
33
  function useApolloClient(override) {
30
34
  var context$1 = React.useContext(context.getApolloContext());
31
35
  var client = override || context$1.client;
32
36
  globals.__DEV__ ? globals.invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
33
37
  'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
34
- 'instance in via options.') : globals.invariant(!!client, 33);
38
+ 'instance in via options.') : globals.invariant(!!client, 32);
35
39
  return client;
36
40
  }
37
41
 
38
42
  var didWarnUncachedGetSnapshot = false;
39
43
  var uSESKey = "useSyncExternalStore";
40
- var realHook = React__namespace[uSESKey];
41
- var useSyncExternalStore = realHook || (function (subscribe, getSnapshot, getServerSnapshot) {
44
+ var realHook$1 = React__namespace[uSESKey];
45
+ var useSyncExternalStore = realHook$1 || (function (subscribe, getSnapshot, getServerSnapshot) {
42
46
  var value = getSnapshot();
43
47
  if (globals.__DEV__ &&
44
48
  !didWarnUncachedGetSnapshot &&
@@ -103,8 +107,6 @@ var InternalState = (function () {
103
107
  function InternalState(client, query, previous) {
104
108
  this.client = client;
105
109
  this.query = query;
106
- this.asyncResolveFns = new Set();
107
- this.optionsToIgnoreOnce = new (utilities.canUseWeakSet ? WeakSet : Set)();
108
110
  this.ssrDisabledResult = utilities.maybeDeepFreeze({
109
111
  loading: true,
110
112
  data: void 0,
@@ -128,20 +130,30 @@ var InternalState = (function () {
128
130
  InternalState.prototype.forceUpdate = function () {
129
131
  globals.__DEV__ && globals.invariant.warn("Calling default no-op implementation of InternalState#forceUpdate");
130
132
  };
131
- InternalState.prototype.asyncUpdate = function (signal) {
133
+ InternalState.prototype.executeQuery = function (options) {
132
134
  var _this = this;
133
- return new Promise(function (resolve, reject) {
134
- var watchQueryOptions = _this.watchQueryOptions;
135
- var handleAborted = function () {
136
- _this.asyncResolveFns.delete(resolve);
137
- _this.optionsToIgnoreOnce.delete(watchQueryOptions);
138
- signal.removeEventListener('abort', handleAborted);
139
- reject(signal.reason);
140
- };
141
- _this.asyncResolveFns.add(resolve);
142
- _this.optionsToIgnoreOnce.add(watchQueryOptions);
143
- signal.addEventListener('abort', handleAborted);
144
- _this.forceUpdate();
135
+ var _a;
136
+ if (options.query) {
137
+ Object.assign(this, { query: options.query });
138
+ }
139
+ this.watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options);
140
+ var concast = this.observable.reobserveAsConcast(this.getObsQueryOptions());
141
+ this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
142
+ this.result = void 0;
143
+ this.forceUpdate();
144
+ return new Promise(function (resolve) {
145
+ var result;
146
+ concast.subscribe({
147
+ next: function (value) {
148
+ result = value;
149
+ },
150
+ error: function () {
151
+ resolve(_this.toQueryResult(_this.observable.getCurrentResult()));
152
+ },
153
+ complete: function () {
154
+ resolve(_this.toQueryResult(result));
155
+ }
156
+ });
145
157
  });
146
158
  };
147
159
  InternalState.prototype.useQuery = function (options) {
@@ -197,22 +209,15 @@ var InternalState = (function () {
197
209
  this.client.disableNetworkFetches,
198
210
  ]), function () { return _this.getCurrentResult(); }, function () { return _this.getCurrentResult(); });
199
211
  this.unsafeHandlePartialRefetch(result);
200
- var queryResult = this.toQueryResult(result);
201
- if (!queryResult.loading && this.asyncResolveFns.size) {
202
- this.asyncResolveFns.forEach(function (resolve) { return resolve(queryResult); });
203
- this.asyncResolveFns.clear();
204
- }
205
- return queryResult;
212
+ return this.toQueryResult(result);
206
213
  };
207
214
  InternalState.prototype.useOptions = function (options) {
208
215
  var _a;
209
216
  var watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options);
210
217
  var currentWatchQueryOptions = this.watchQueryOptions;
211
- if (this.optionsToIgnoreOnce.has(currentWatchQueryOptions) ||
212
- !equality.equal(watchQueryOptions, currentWatchQueryOptions)) {
218
+ if (!equality.equal(watchQueryOptions, currentWatchQueryOptions)) {
213
219
  this.watchQueryOptions = watchQueryOptions;
214
220
  if (currentWatchQueryOptions && this.observable) {
215
- this.optionsToIgnoreOnce.delete(currentWatchQueryOptions);
216
221
  this.observable.reobserve(this.getObsQueryOptions());
217
222
  this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
218
223
  this.result = void 0;
@@ -379,11 +384,15 @@ var EAGER_METHODS = [
379
384
  'subscribeToMore',
380
385
  ];
381
386
  function useLazyQuery(query, options) {
382
- var _a, _b;
383
- var abortControllersRef = React.useRef(new Set());
387
+ var _a;
384
388
  var execOptionsRef = React.useRef();
385
- var merged = execOptionsRef.current ? utilities.mergeOptions(options, execOptionsRef.current) : options;
386
- var internalState = useInternalState(useApolloClient(options && options.client), (_b = (_a = execOptionsRef.current) === null || _a === void 0 ? void 0 : _a.query) !== null && _b !== void 0 ? _b : query);
389
+ var optionsRef = React.useRef();
390
+ var queryRef = React.useRef();
391
+ var merged = utilities.mergeOptions(options, execOptionsRef.current || {});
392
+ var document = (_a = merged === null || merged === void 0 ? void 0 : merged.query) !== null && _a !== void 0 ? _a : query;
393
+ optionsRef.current = merged;
394
+ queryRef.current = document;
395
+ var internalState = useInternalState(useApolloClient(options && options.client), document);
387
396
  var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign({}, merged), { skip: !execOptionsRef.current }));
388
397
  var initialFetchPolicy = useQueryResult.observable.options.initialFetchPolicy ||
389
398
  internalState.getDefaultFetchPolicy();
@@ -409,28 +418,15 @@ function useLazyQuery(query, options) {
409
418
  return eagerMethods;
410
419
  }, []);
411
420
  Object.assign(result, eagerMethods);
412
- React.useEffect(function () {
413
- return function () {
414
- abortControllersRef.current.forEach(function (controller) {
415
- controller.abort();
416
- });
417
- };
418
- }, []);
419
421
  var execute = React.useCallback(function (executeOptions) {
420
- var controller = new AbortController();
421
- abortControllersRef.current.add(controller);
422
422
  execOptionsRef.current = executeOptions ? tslib.__assign(tslib.__assign({}, executeOptions), { fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy }) : {
423
423
  fetchPolicy: initialFetchPolicy,
424
424
  };
425
+ var options = utilities.mergeOptions(optionsRef.current, tslib.__assign({ query: queryRef.current }, execOptionsRef.current));
425
426
  var promise = internalState
426
- .asyncUpdate(controller.signal)
427
- .then(function (queryResult) {
428
- abortControllersRef.current.delete(controller);
429
- return Object.assign(queryResult, eagerMethods);
430
- });
431
- promise.catch(function () {
432
- abortControllersRef.current.delete(controller);
433
- });
427
+ .executeQuery(tslib.__assign(tslib.__assign({}, options), { skip: false }))
428
+ .then(function (queryResult) { return Object.assign(queryResult, eagerMethods); });
429
+ promise.catch(function () { });
434
430
  return promise;
435
431
  }, []);
436
432
  return [execute, result];
@@ -616,9 +612,13 @@ function useSubscription(subscription, options) {
616
612
  if (!observable) {
617
613
  return;
618
614
  }
615
+ var subscriptionStopped = false;
619
616
  var subscription = observable.subscribe({
620
617
  next: function (fetchResult) {
621
618
  var _a, _b;
619
+ if (subscriptionStopped) {
620
+ return;
621
+ }
622
622
  var result = {
623
623
  loading: false,
624
624
  data: fetchResult.data,
@@ -641,26 +641,33 @@ function useSubscription(subscription, options) {
641
641
  },
642
642
  error: function (error) {
643
643
  var _a, _b;
644
- setResult({
645
- loading: false,
646
- data: void 0,
647
- error: error,
648
- variables: options === null || options === void 0 ? void 0 : options.variables,
649
- });
650
- (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
644
+ if (!subscriptionStopped) {
645
+ setResult({
646
+ loading: false,
647
+ data: void 0,
648
+ error: error,
649
+ variables: options === null || options === void 0 ? void 0 : options.variables,
650
+ });
651
+ (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
652
+ }
651
653
  },
652
654
  complete: function () {
653
655
  var _a, _b;
654
- if ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onComplete) {
655
- ref.current.options.onComplete();
656
- }
657
- else if ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onSubscriptionComplete) {
658
- ref.current.options.onSubscriptionComplete();
656
+ if (!subscriptionStopped) {
657
+ if ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onComplete) {
658
+ ref.current.options.onComplete();
659
+ }
660
+ else if ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onSubscriptionComplete) {
661
+ ref.current.options.onSubscriptionComplete();
662
+ }
659
663
  }
660
664
  },
661
665
  });
662
666
  return function () {
663
- subscription.unsubscribe();
667
+ subscriptionStopped = true;
668
+ setTimeout(function () {
669
+ subscription.unsubscribe();
670
+ });
664
671
  };
665
672
  }, [observable]);
666
673
  return result;
@@ -732,85 +739,60 @@ function useStrictModeSafeCleanupEffect(cleanup) {
732
739
  }, []);
733
740
  }
734
741
 
735
- function isStatefulPromise(promise) {
736
- return 'status' in promise;
737
- }
738
- function wrapPromiseWithState(promise) {
739
- if (isStatefulPromise(promise)) {
740
- return promise;
741
- }
742
- var pendingPromise = promise;
743
- pendingPromise.status = 'pending';
744
- pendingPromise.then(function (value) {
745
- if (pendingPromise.status === 'pending') {
746
- var fulfilledPromise = pendingPromise;
747
- fulfilledPromise.status = 'fulfilled';
748
- fulfilledPromise.value = value;
749
- }
750
- }, function (reason) {
751
- if (pendingPromise.status === 'pending') {
752
- var rejectedPromise = pendingPromise;
753
- rejectedPromise.status = 'rejected';
754
- rejectedPromise.reason = reason;
742
+ var useKey = 'use';
743
+ var realHook = React__default[useKey];
744
+ var __use = realHook ||
745
+ function __use(promise) {
746
+ var statefulPromise = utilities.wrapPromiseWithState(promise);
747
+ switch (statefulPromise.status) {
748
+ case 'pending':
749
+ throw statefulPromise;
750
+ case 'rejected':
751
+ throw statefulPromise.reason;
752
+ case 'fulfilled':
753
+ return statefulPromise.value;
755
754
  }
756
- });
757
- return promise;
758
- }
759
-
760
- function __use(promise) {
761
- var statefulPromise = wrapPromiseWithState(promise);
762
- switch (statefulPromise.status) {
763
- case 'pending':
764
- throw statefulPromise;
765
- case 'rejected':
766
- throw statefulPromise.reason;
767
- case 'fulfilled':
768
- return statefulPromise.value;
769
- }
770
- }
755
+ };
771
756
 
772
757
  function useSuspenseCache(override) {
773
758
  var context$1 = React.useContext(context.getApolloContext());
774
759
  var suspenseCache = override || context$1.suspenseCache;
775
760
  globals.__DEV__ ? globals.invariant(suspenseCache, 'Could not find a "suspenseCache" in the context or passed in as an option. ' +
776
761
  'Wrap the root component in an <ApolloProvider> and provide a suspenseCache, ' +
777
- 'or pass a SuspenseCache instance in via options.') : globals.invariant(suspenseCache, 34);
762
+ 'or pass a SuspenseCache instance in via options.') : globals.invariant(suspenseCache, 33);
778
763
  return suspenseCache;
779
764
  }
780
765
 
781
766
  function useSuspenseQuery_experimental(query, options) {
782
767
  if (options === void 0) { options = Object.create(null); }
783
- var didPreviouslySuspend = React.useRef(false);
784
768
  var client = useApolloClient(options.client);
785
769
  var suspenseCache = useSuspenseCache(options.suspenseCache);
786
770
  var watchQueryOptions = useWatchQueryOptions({ query: query, options: options });
787
- var _a = watchQueryOptions.returnPartialData, returnPartialData = _a === void 0 ? false : _a, variables = watchQueryOptions.variables;
788
- var _b = options.suspensePolicy, suspensePolicy = _b === void 0 ? 'always' : _b;
789
- var shouldSuspend = suspensePolicy === 'always' || !didPreviouslySuspend.current;
790
- var subscription = suspenseCache.getSubscription(client, query, variables, function () { return client.watchQuery(watchQueryOptions); });
791
- var dispose = useTrackedSubscriptions(subscription);
792
- useStrictModeSafeCleanupEffect(dispose);
793
- var result = useSyncExternalStore(subscription.listen, function () { return subscription.result; }, function () { return subscription.result; });
794
- var previousVariables = React.useRef(variables);
795
- var previousData = React.useRef(result.data);
796
- if (!equality.equal(variables, previousVariables.current)) {
797
- if (result.networkStatus !== core.NetworkStatus.ready) {
798
- result = tslib.__assign(tslib.__assign({}, result), { data: previousData.current, networkStatus: core.NetworkStatus.setVariables });
799
- }
800
- previousVariables.current = variables;
801
- previousData.current = result.data;
802
- }
803
- if (result.networkStatus === core.NetworkStatus.error ||
804
- (shouldSuspend &&
805
- !shouldUseCachedResult(subscription.result, {
806
- returnPartialData: returnPartialData,
807
- fetchPolicy: options.fetchPolicy,
808
- }))) {
809
- __use(subscription.promise);
810
- }
811
- didPreviouslySuspend.current = true;
812
- var fetchMore = React.useCallback(function (options) { return subscription.fetchMore(options); }, [subscription]);
813
- var refetch = React.useCallback(function (variables) { return subscription.refetch(variables); }, [subscription]);
771
+ var variables = watchQueryOptions.variables;
772
+ var _a = options.queryKey, queryKey = _a === void 0 ? [] : _a;
773
+ var _b = usePromiseVersion(), version = _b[0], setVersion = _b[1];
774
+ var cacheKey = [client, query, cache.canonicalStringify(variables)].concat(queryKey);
775
+ var subscription = suspenseCache.getSubscription(cacheKey, function () {
776
+ return client.watchQuery(watchQueryOptions);
777
+ });
778
+ useTrackedSubscriptions(subscription);
779
+ React.useEffect(function () {
780
+ return subscription.listen(function () {
781
+ setVersion('main');
782
+ });
783
+ }, [subscription]);
784
+ var promise = subscription.promises[version] || subscription.promises.main;
785
+ var result = __use(promise);
786
+ var fetchMore = React.useCallback(function (options) {
787
+ var promise = subscription.fetchMore(options);
788
+ setVersion('network');
789
+ return promise;
790
+ }, [subscription]);
791
+ var refetch = React.useCallback(function (variables) {
792
+ var promise = subscription.refetch(variables);
793
+ setVersion('network');
794
+ return promise;
795
+ }, [subscription]);
814
796
  var subscribeToMore = React.useCallback(function (options) { return subscription.observable.subscribeToMore(options); }, [subscription]);
815
797
  return React.useMemo(function () {
816
798
  return {
@@ -838,7 +820,7 @@ function validateFetchPolicy(fetchPolicy) {
838
820
  'no-cache',
839
821
  'cache-and-network',
840
822
  ];
841
- globals.__DEV__ ? globals.invariant(supportedFetchPolicies.includes(fetchPolicy), "The fetch policy `".concat(fetchPolicy, "` is not supported with suspense.")) : globals.invariant(supportedFetchPolicies.includes(fetchPolicy), 35);
823
+ globals.__DEV__ ? globals.invariant(supportedFetchPolicies.includes(fetchPolicy), "The fetch policy `".concat(fetchPolicy, "` is not supported with suspense.")) : globals.invariant(supportedFetchPolicies.includes(fetchPolicy), 34);
842
824
  }
843
825
  function validatePartialDataReturn(fetchPolicy, returnPartialData) {
844
826
  if (fetchPolicy === 'no-cache' && returnPartialData) {
@@ -853,35 +835,25 @@ function toApolloError(result) {
853
835
  function useTrackedSubscriptions(subscription) {
854
836
  var trackedSubscriptions = React.useRef(new Set());
855
837
  trackedSubscriptions.current.add(subscription);
856
- return function dispose() {
838
+ useStrictModeSafeCleanupEffect(function () {
857
839
  trackedSubscriptions.current.forEach(function (sub) { return sub.dispose(); });
858
- };
840
+ });
841
+ }
842
+ function usePromiseVersion() {
843
+ var _a = React.useState({
844
+ version: 'main',
845
+ }), version = _a[0].version, setState = _a[1];
846
+ var setVersion = React.useCallback(function (version) { return setState({ version: version }); }, []);
847
+ return [version, setVersion];
859
848
  }
860
849
  function useWatchQueryOptions(_a) {
861
850
  var query = _a.query, options = _a.options;
862
- var watchQueryOptions = useDeepMemo(function () { return (tslib.__assign(tslib.__assign({}, options), { query: query, notifyOnNetworkStatusChange: true, nextFetchPolicy: void 0 })); }, [options, query]);
851
+ var watchQueryOptions = useDeepMemo(function () { return (tslib.__assign(tslib.__assign({}, options), { query: query, notifyOnNetworkStatusChange: false, nextFetchPolicy: void 0 })); }, [options, query]);
863
852
  if (globals.__DEV__) {
864
853
  validateOptions(watchQueryOptions);
865
854
  }
866
855
  return watchQueryOptions;
867
856
  }
868
- function shouldUseCachedResult(result, _a) {
869
- var returnPartialData = _a.returnPartialData, fetchPolicy = _a.fetchPolicy;
870
- if (result.networkStatus === core.NetworkStatus.refetch ||
871
- result.networkStatus === core.NetworkStatus.fetchMore ||
872
- result.networkStatus === core.NetworkStatus.error) {
873
- return false;
874
- }
875
- switch (fetchPolicy) {
876
- case void 0:
877
- case 'cache-first':
878
- case 'cache-and-network': {
879
- return Boolean(result.data && (!result.partial || returnPartialData));
880
- }
881
- default:
882
- return false;
883
- }
884
- }
885
857
 
886
858
  exports.useApolloClient = useApolloClient;
887
859
  exports.useFragment_experimental = useFragment_experimental;
@@ -1,2 +1,4 @@
1
- export declare function __use<TValue>(promise: Promise<TValue>): TValue;
1
+ type Use = <T>(promise: Promise<T>) => T;
2
+ export declare const __use: Use;
3
+ export {};
2
4
  //# sourceMappingURL=__use.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"__use.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/internal/__use.ts"],"names":[],"mappings":"AAOA,wBAAgB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAWrD"}
1
+ {"version":3,"file":"__use.d.ts","sourceRoot":"","sources":["../../../../src/react/hooks/internal/__use.ts"],"names":[],"mappings":"AAGA,KAAK,GAAG,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AASzC,eAAO,MAAM,KAAK,KAaf,CAAC"}
@@ -1,13 +1,17 @@
1
- import { wrapPromiseWithState } from "../../../utilities/promises/decoration.js";
2
- export function __use(promise) {
3
- var statefulPromise = wrapPromiseWithState(promise);
4
- switch (statefulPromise.status) {
5
- case 'pending':
6
- throw statefulPromise;
7
- case 'rejected':
8
- throw statefulPromise.reason;
9
- case 'fulfilled':
10
- return statefulPromise.value;
11
- }
12
- }
1
+ import { wrapPromiseWithState } from "../../../utilities/index.js";
2
+ import React from 'react';
3
+ var useKey = 'use';
4
+ var realHook = React[useKey];
5
+ export var __use = realHook ||
6
+ function __use(promise) {
7
+ var statefulPromise = wrapPromiseWithState(promise);
8
+ switch (statefulPromise.status) {
9
+ case 'pending':
10
+ throw statefulPromise;
11
+ case 'rejected':
12
+ throw statefulPromise.reason;
13
+ case 'fulfilled':
14
+ return statefulPromise.value;
15
+ }
16
+ };
13
17
  //# sourceMappingURL=__use.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"__use.js","sourceRoot":"","sources":["../../../../src/react/hooks/internal/__use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAO9E,MAAM,UAAU,KAAK,CAAS,OAAwB;IACpD,IAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAEtD,QAAQ,eAAe,CAAC,MAAM,EAAE;QAC9B,KAAK,SAAS;YACZ,MAAM,eAAe,CAAC;QACxB,KAAK,UAAU;YACb,MAAM,eAAe,CAAC,MAAM,CAAC;QAC/B,KAAK,WAAW;YACd,OAAO,eAAe,CAAC,KAAK,CAAC;KAChC;AACH,CAAC","sourcesContent":["import { wrapPromiseWithState } from '../../../utilities/promises/decoration';\n\n// TODO: Replace the use of this with React's use once its available. For now,\n// this mimics its functionality for promises by adding\n// properties to the promise instance and reading them synchronously. This is\n// named with two underscores to allow this hook to evade typical rules of\n// hooks (i.e. it can be used conditionally)\nexport function __use<TValue>(promise: Promise<TValue>) {\n const statefulPromise = wrapPromiseWithState(promise);\n\n switch (statefulPromise.status) {\n case 'pending':\n throw statefulPromise;\n case 'rejected':\n throw statefulPromise.reason;\n case 'fulfilled':\n return statefulPromise.value;\n }\n}\n"]}
1
+ {"version":3,"file":"__use.js","sourceRoot":"","sources":["../../../../src/react/hooks/internal/__use.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,IAAM,MAAM,GAAG,KAA2B,CAAC;AAC3C,IAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAoB,CAAC;AAIlD,MAAM,CAAC,IAAM,KAAK,GAChB,QAAQ;IACR,SAAS,KAAK,CAAS,OAAwB;QAC7C,IAAM,eAAe,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEtD,QAAQ,eAAe,CAAC,MAAM,EAAE;YAC9B,KAAK,SAAS;gBACZ,MAAM,eAAe,CAAC;YACxB,KAAK,UAAU;gBACb,MAAM,eAAe,CAAC,MAAM,CAAC;YAC/B,KAAK,WAAW;gBACd,OAAO,eAAe,CAAC,KAAK,CAAC;SAChC;IACH,CAAC,CAAC","sourcesContent":["import { wrapPromiseWithState } from '../../../utilities';\nimport React from 'react';\n\ntype Use = <T>(promise: Promise<T>) => T;\n// Prevent webpack from complaining about our feature detection of the\n// use property of the React namespace, which is expected not\n// to exist when using current stable versions, and that's fine.\nconst useKey = 'use' as keyof typeof React;\nconst realHook = React[useKey] as Use | undefined;\n\n// This is named with two underscores to allow this hook to evade typical rules of\n// hooks (i.e. it can be used conditionally)\nexport const __use =\n realHook ||\n function __use<TValue>(promise: Promise<TValue>) {\n const statefulPromise = wrapPromiseWithState(promise);\n\n switch (statefulPromise.status) {\n case 'pending':\n throw statefulPromise;\n case 'rejected':\n throw statefulPromise.reason;\n case 'fulfilled':\n return statefulPromise.value;\n }\n };\n"]}
@@ -6,7 +6,7 @@ export function useApolloClient(override) {
6
6
  var client = override || context.client;
7
7
  __DEV__ ? invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
8
8
  'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
9
- 'instance in via options.') : invariant(!!client, 33);
9
+ 'instance in via options.') : invariant(!!client, 32);
10
10
  return client;
11
11
  }
12
12
  //# sourceMappingURL=useApolloClient.js.map
@@ -1,9 +1,10 @@
1
1
  import { Cache, Reference, StoreObject, MissingTree } from "../../cache";
2
2
  import { OperationVariables } from "../../core";
3
3
  import { NoInfer } from "../types/types";
4
- export interface UseFragmentOptions<TData, TVars> extends Omit<Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>, "id" | "query" | "optimistic" | "previousResult">, Omit<Cache.ReadFragmentOptions<TData, TVars>, "id" | "variables"> {
4
+ export interface UseFragmentOptions<TData, TVars> extends Omit<Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>, "id" | "query" | "optimistic" | "previousResult" | "returnPartialData">, Omit<Cache.ReadFragmentOptions<TData, TVars>, "id" | "variables" | "returnPartialData"> {
5
5
  from: StoreObject | Reference | string;
6
6
  optimistic?: boolean;
7
+ returnPartialData?: boolean;
7
8
  }
8
9
  export interface UseFragmentResult<TData> {
9
10
  data: TData | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"useFragment.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAChD,SAAQ,IAAI,CACV,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAC/C,IAAI,GACJ,OAAO,GACP,YAAY,GACZ,gBAAgB,CACnB,EAAE,IAAI,CACL,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EACrC,IAAI,GACJ,WAAW,CACd;IACC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAgBD,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,GAAG,GAAG,EACX,KAAK,GAAG,kBAAkB,EAE1B,OAAO,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GACxC,iBAAiB,CAAC,KAAK,CAAC,CA8C1B"}
1
+ {"version":3,"file":"useFragment.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAChD,SAAQ,IAAI,CACV,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAC/C,IAAI,GACJ,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,CACtB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAC3C,IAAI,GACJ,WAAW,GACX,mBAAmB,CACtB;IACC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvC,UAAU,CAAC,EAAE,OAAO,CAAC;IAQrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAgBD,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,GAAG,GAAG,EACX,KAAK,GAAG,kBAAkB,EAE1B,OAAO,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GACxC,iBAAiB,CAAC,KAAK,CAAC,CA8C1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAyC9D,MAAM,UAAU,wBAAwB,CAItC,OAAyC;IAEjC,IAAA,KAAK,GAAK,eAAe,EAAE,MAAtB,CAAuB;IAGlC,IAAA,QAAQ,GAKN,OAAO,SALD,EACR,YAAY,GAIV,OAAO,aAJG,EACZ,IAAI,GAGF,OAAO,KAHL,EACJ,KAEE,OAAO,WAFQ,EAAjB,UAAU,mBAAG,IAAI,KAAA,EACd,IAAI,UACL,OAAO,EANL,kDAML,CADQ,CACG;IAEZ,IAAM,WAAW,yBACZ,IAAI,KACP,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1D,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtD,UAAU,YAAA,GACX,CAAC;IAEF,IAAM,SAAS,GAAG,MAAM,EAA4B,CAAC;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAQ,WAAW,CAAC,CAAC;IAGhD,IAAM,WAAW,GAAG;QAClB,IAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,OAAO;YACtB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,oBAAoB,CACzB,UAAC,WAAW;QACV,OAAO,KAAK,CAAC,KAAK,uBACb,WAAW,KACd,SAAS,EAAE,IAAI,EACf,QAAQ,YAAC,IAAI;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5B,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtD,WAAW,EAAE,CAAC;iBACf;YACH,CAAC,IACD,CAAC;IACL,CAAC,EACD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAA6B;IAE7B,IAAM,MAAM,GAA6B;QACvC,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;KAC1B,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,OAAO,GAAG,cAAc,CAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,OAAO,EAAb,CAAa,CAAC,CACzC,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { useRef } from \"react\";\nimport { equal } from \"@wry/equality\";\n\nimport { mergeDeepArray } from \"../../utilities\";\nimport {\n Cache,\n Reference,\n StoreObject,\n MissingTree,\n} from \"../../cache\";\n\nimport { useApolloClient } from \"./useApolloClient\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore\";\nimport { OperationVariables } from \"../../core\";\nimport { NoInfer } from \"../types/types\";\n\nexport interface UseFragmentOptions<TData, TVars>\nextends Omit<\n Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>,\n | \"id\"\n | \"query\"\n | \"optimistic\"\n | \"previousResult\"\n>, Omit<\n Cache.ReadFragmentOptions<TData, TVars>,\n | \"id\"\n | \"variables\"\n> {\n from: StoreObject | Reference | string;\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\n}\n\n// Since the above definition of UseFragmentOptions can be hard to parse without\n// help from TypeScript/VSCode, here are the intended fields and their types.\n// Uncomment this code to check that it's consistent with the definition above.\n//\n// export interface UseFragmentOptions<TData, TVars> {\n// from: string | StoreObject | Reference;\n// fragment: DocumentNode | TypedDocumentNode<TData, TVars>;\n// fragmentName?: string;\n// optimistic?: boolean;\n// variables?: TVars;\n// returnPartialData?: boolean;\n// canonizeResults?: boolean;\n// }\n\nexport interface UseFragmentResult<TData> {\n data: TData | undefined;\n complete: boolean;\n missing?: MissingTree;\n}\n\nexport function useFragment_experimental<\n TData = any,\n TVars = OperationVariables\n>(\n options: UseFragmentOptions<TData, TVars>,\n): UseFragmentResult<TData> {\n const { cache } = useApolloClient();\n\n const {\n fragment,\n fragmentName,\n from,\n optimistic = true,\n ...rest\n } = options;\n\n const diffOptions: Cache.DiffOptions<TData, TVars> = {\n ...rest,\n id: typeof from === \"string\" ? from : cache.identify(from),\n query: cache[\"getFragmentDoc\"](fragment, fragmentName),\n optimistic,\n };\n\n const resultRef = useRef<UseFragmentResult<TData>>();\n let latestDiff = cache.diff<TData>(diffOptions);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = () => {\n const latestDiffToResult = diffToResult(latestDiff);\n return resultRef.current &&\n equal(resultRef.current.data, latestDiffToResult.data)\n ? resultRef.current\n : (resultRef.current = latestDiffToResult);\n };\n\n return useSyncExternalStore(\n (forceUpdate) => {\n return cache.watch({\n ...diffOptions,\n immediate: true,\n callback(diff) {\n if (!equal(diff, latestDiff)) {\n resultRef.current = diffToResult((latestDiff = diff));\n forceUpdate();\n }\n },\n });\n },\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult<TData>(\n diff: Cache.DiffResult<TData>,\n): UseFragmentResult<TData> {\n const result: UseFragmentResult<TData> = {\n data: diff.result,\n complete: !!diff.complete,\n };\n\n if (diff.missing) {\n result.missing = mergeDeepArray(\n diff.missing.map(error => error.missing),\n );\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"useFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAkD9D,MAAM,UAAU,wBAAwB,CAItC,OAAyC;IAEjC,IAAA,KAAK,GAAK,eAAe,EAAE,MAAtB,CAAuB;IAGlC,IAAA,QAAQ,GAKN,OAAO,SALD,EACR,YAAY,GAIV,OAAO,aAJG,EACZ,IAAI,GAGF,OAAO,KAHL,EACJ,KAEE,OAAO,WAFQ,EAAjB,UAAU,mBAAG,IAAI,KAAA,EACd,IAAI,UACL,OAAO,EANL,kDAML,CADQ,CACG;IAEZ,IAAM,WAAW,yBACZ,IAAI,KACP,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1D,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtD,UAAU,YAAA,GACX,CAAC;IAEF,IAAM,SAAS,GAAG,MAAM,EAA4B,CAAC;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAQ,WAAW,CAAC,CAAC;IAGhD,IAAM,WAAW,GAAG;QAClB,IAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,OAAO;YACtB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,oBAAoB,CACzB,UAAC,WAAW;QACV,OAAO,KAAK,CAAC,KAAK,uBACb,WAAW,KACd,SAAS,EAAE,IAAI,EACf,QAAQ,YAAC,IAAI;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5B,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtD,WAAW,EAAE,CAAC;iBACf;YACH,CAAC,IACD,CAAC;IACL,CAAC,EACD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAA6B;IAE7B,IAAM,MAAM,GAA6B;QACvC,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;KAC1B,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,OAAO,GAAG,cAAc,CAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,OAAO,EAAb,CAAa,CAAC,CACzC,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { useRef } from \"react\";\nimport { equal } from \"@wry/equality\";\n\nimport { mergeDeepArray } from \"../../utilities\";\nimport {\n Cache,\n Reference,\n StoreObject,\n MissingTree,\n} from \"../../cache\";\n\nimport { useApolloClient } from \"./useApolloClient\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore\";\nimport { OperationVariables } from \"../../core\";\nimport { NoInfer } from \"../types/types\";\n\nexport interface UseFragmentOptions<TData, TVars>\nextends Omit<\n Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>,\n | \"id\"\n | \"query\"\n | \"optimistic\"\n | \"previousResult\"\n | \"returnPartialData\"\n>, Omit<Cache.ReadFragmentOptions<TData, TVars>,\n | \"id\"\n | \"variables\"\n | \"returnPartialData\"\n> {\n from: StoreObject | Reference | string;\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\n\n /**\n * Whether to return incomplete data rather than null.\n * Defaults to `true`.\n * @deprecated This option will be removed in Apollo Client 3.8.\n * Please check `result.missing` instead.\n */\n returnPartialData?: boolean;\n}\n\n// Since the above definition of UseFragmentOptions can be hard to parse without\n// help from TypeScript/VSCode, here are the intended fields and their types.\n// Uncomment this code to check that it's consistent with the definition above.\n//\n// export interface UseFragmentOptions<TData, TVars> {\n// from: string | StoreObject | Reference;\n// fragment: DocumentNode | TypedDocumentNode<TData, TVars>;\n// fragmentName?: string;\n// optimistic?: boolean;\n// variables?: TVars;\n// returnPartialData?: boolean;\n// canonizeResults?: boolean;\n// }\n\nexport interface UseFragmentResult<TData> {\n data: TData | undefined;\n complete: boolean;\n missing?: MissingTree;\n}\n\nexport function useFragment_experimental<\n TData = any,\n TVars = OperationVariables\n>(\n options: UseFragmentOptions<TData, TVars>,\n): UseFragmentResult<TData> {\n const { cache } = useApolloClient();\n\n const {\n fragment,\n fragmentName,\n from,\n optimistic = true,\n ...rest\n } = options;\n\n const diffOptions: Cache.DiffOptions<TData, TVars> = {\n ...rest,\n id: typeof from === \"string\" ? from : cache.identify(from),\n query: cache[\"getFragmentDoc\"](fragment, fragmentName),\n optimistic,\n };\n\n const resultRef = useRef<UseFragmentResult<TData>>();\n let latestDiff = cache.diff<TData>(diffOptions);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = () => {\n const latestDiffToResult = diffToResult(latestDiff);\n return resultRef.current &&\n equal(resultRef.current.data, latestDiffToResult.data)\n ? resultRef.current\n : (resultRef.current = latestDiffToResult);\n };\n\n return useSyncExternalStore(\n (forceUpdate) => {\n return cache.watch({\n ...diffOptions,\n immediate: true,\n callback(diff) {\n if (!equal(diff, latestDiff)) {\n resultRef.current = diffToResult((latestDiff = diff));\n forceUpdate();\n }\n },\n });\n },\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult<TData>(\n diff: Cache.DiffResult<TData>,\n): UseFragmentResult<TData> {\n const result: UseFragmentResult<TData> = {\n data: diff.result,\n complete: !!diff.complete,\n };\n\n if (diff.missing) {\n result.missing = mergeDeepArray(\n diff.missing.map(error => error.missing),\n );\n }\n\n return result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useLazyQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useLazyQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EACpB,OAAO,EAER,MAAM,gBAAgB,CAAC;AAexB,wBAAgB,YAAY,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EAClG,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1D,OAAO,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,GAClE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAkFzC"}
1
+ {"version":3,"file":"useLazyQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useLazyQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAGtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAEL,oBAAoB,EACpB,oBAAoB,EACpB,OAAO,EAER,MAAM,gBAAgB,CAAC;AAexB,wBAAgB,YAAY,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EAClG,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1D,OAAO,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,GAClE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CA8EzC"}
@@ -1,5 +1,5 @@
1
1
  import { __assign } from "tslib";
2
- import { useCallback, useEffect, useMemo, useRef } from 'react';
2
+ import { useCallback, useMemo, useRef } from 'react';
3
3
  import { mergeOptions } from "../../utilities/index.js";
4
4
  import { useInternalState } from "./useQuery.js";
5
5
  import { useApolloClient } from "./useApolloClient.js";
@@ -12,11 +12,15 @@ var EAGER_METHODS = [
12
12
  'subscribeToMore',
13
13
  ];
14
14
  export function useLazyQuery(query, options) {
15
- var _a, _b;
16
- var abortControllersRef = useRef(new Set());
15
+ var _a;
17
16
  var execOptionsRef = useRef();
18
- var merged = execOptionsRef.current ? mergeOptions(options, execOptionsRef.current) : options;
19
- var internalState = useInternalState(useApolloClient(options && options.client), (_b = (_a = execOptionsRef.current) === null || _a === void 0 ? void 0 : _a.query) !== null && _b !== void 0 ? _b : query);
17
+ var optionsRef = useRef();
18
+ var queryRef = useRef();
19
+ var merged = mergeOptions(options, execOptionsRef.current || {});
20
+ var document = (_a = merged === null || merged === void 0 ? void 0 : merged.query) !== null && _a !== void 0 ? _a : query;
21
+ optionsRef.current = merged;
22
+ queryRef.current = document;
23
+ var internalState = useInternalState(useApolloClient(options && options.client), document);
20
24
  var useQueryResult = internalState.useQuery(__assign(__assign({}, merged), { skip: !execOptionsRef.current }));
21
25
  var initialFetchPolicy = useQueryResult.observable.options.initialFetchPolicy ||
22
26
  internalState.getDefaultFetchPolicy();
@@ -42,28 +46,15 @@ export function useLazyQuery(query, options) {
42
46
  return eagerMethods;
43
47
  }, []);
44
48
  Object.assign(result, eagerMethods);
45
- useEffect(function () {
46
- return function () {
47
- abortControllersRef.current.forEach(function (controller) {
48
- controller.abort();
49
- });
50
- };
51
- }, []);
52
49
  var execute = useCallback(function (executeOptions) {
53
- var controller = new AbortController();
54
- abortControllersRef.current.add(controller);
55
50
  execOptionsRef.current = executeOptions ? __assign(__assign({}, executeOptions), { fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy }) : {
56
51
  fetchPolicy: initialFetchPolicy,
57
52
  };
53
+ var options = mergeOptions(optionsRef.current, __assign({ query: queryRef.current }, execOptionsRef.current));
58
54
  var promise = internalState
59
- .asyncUpdate(controller.signal)
60
- .then(function (queryResult) {
61
- abortControllersRef.current.delete(controller);
62
- return Object.assign(queryResult, eagerMethods);
63
- });
64
- promise.catch(function () {
65
- abortControllersRef.current.delete(controller);
66
- });
55
+ .executeQuery(__assign(__assign({}, options), { skip: false }))
56
+ .then(function (queryResult) { return Object.assign(queryResult, eagerMethods); });
57
+ promise.catch(function () { });
67
58
  return promise;
68
59
  }, []);
69
60
  return [execute, result];
@@ -1 +1 @@
1
- {"version":3,"file":"useLazyQuery.js","sourceRoot":"","sources":["../../../src/react/hooks/useLazyQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { DocumentNode } from 'graphql';\nimport { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { OperationVariables } from '../../core';\nimport { mergeOptions } from '../../utilities';\nimport {\n LazyQueryHookExecOptions,\n LazyQueryHookOptions,\n LazyQueryResultTuple,\n NoInfer,\n QueryResult,\n} from '../types/types';\nimport { useInternalState } from './useQuery';\nimport { useApolloClient } from './useApolloClient';\n\n// The following methods, when called will execute the query, regardless of\n// whether the useLazyQuery execute function was called before.\nconst EAGER_METHODS = [\n 'refetch',\n 'reobserve',\n 'fetchMore',\n 'updateQuery',\n 'startPolling',\n 'subscribeToMore',\n] as const;\n\nexport function useLazyQuery<TData = any, TVariables extends OperationVariables = OperationVariables>(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options?: LazyQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>>\n): LazyQueryResultTuple<TData, TVariables> {\n const abortControllersRef = useRef(new Set<AbortController>());\n\n const execOptionsRef = useRef<Partial<LazyQueryHookExecOptions<TData, TVariables>>>();\n const merged = execOptionsRef.current ? mergeOptions(options, execOptionsRef.current) : options;\n\n const internalState = useInternalState<TData, TVariables>(\n useApolloClient(options && options.client),\n execOptionsRef.current?.query ?? query\n );\n\n const useQueryResult = internalState.useQuery({\n ...merged,\n skip: !execOptionsRef.current,\n });\n\n const initialFetchPolicy =\n useQueryResult.observable.options.initialFetchPolicy ||\n internalState.getDefaultFetchPolicy();\n\n const result: QueryResult<TData, TVariables> =\n Object.assign(useQueryResult, {\n called: !!execOptionsRef.current,\n });\n\n // We use useMemo here to make sure the eager methods have a stable identity.\n const eagerMethods = useMemo(() => {\n const eagerMethods: Record<string, any> = {};\n for (const key of EAGER_METHODS) {\n const method = result[key];\n eagerMethods[key] = function () {\n if (!execOptionsRef.current) {\n execOptionsRef.current = Object.create(null);\n // Only the first time populating execOptionsRef.current matters here.\n internalState.forceUpdate();\n }\n return method.apply(this, arguments);\n };\n }\n\n return eagerMethods;\n }, []);\n\n Object.assign(result, eagerMethods);\n\n useEffect(() => {\n return () => {\n abortControllersRef.current.forEach((controller) => {\n controller.abort();\n });\n }\n }, [])\n\n const execute = useCallback<\n LazyQueryResultTuple<TData, TVariables>[0]\n >(executeOptions => {\n const controller = new AbortController();\n abortControllersRef.current.add(controller);\n\n execOptionsRef.current = executeOptions ? {\n ...executeOptions,\n fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy,\n } : {\n fetchPolicy: initialFetchPolicy,\n };\n\n const promise = internalState\n .asyncUpdate(controller.signal) // Like internalState.forceUpdate, but returns a Promise.\n .then(queryResult => {\n abortControllersRef.current.delete(controller);\n\n return Object.assign(queryResult, eagerMethods);\n });\n\n promise.catch(() => {\n abortControllersRef.current.delete(controller);\n });\n\n return promise;\n }, []);\n\n return [execute, result];\n}\n"]}
1
+ {"version":3,"file":"useLazyQuery.js","sourceRoot":"","sources":["../../../src/react/hooks/useLazyQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { DocumentNode } from 'graphql';\nimport { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { OperationVariables } from '../../core';\nimport { mergeOptions } from '../../utilities';\nimport {\n LazyQueryHookExecOptions,\n LazyQueryHookOptions,\n LazyQueryResultTuple,\n NoInfer,\n QueryResult,\n} from '../types/types';\nimport { useInternalState } from './useQuery';\nimport { useApolloClient } from './useApolloClient';\n\n// The following methods, when called will execute the query, regardless of\n// whether the useLazyQuery execute function was called before.\nconst EAGER_METHODS = [\n 'refetch',\n 'reobserve',\n 'fetchMore',\n 'updateQuery',\n 'startPolling',\n 'subscribeToMore',\n] as const;\n\nexport function useLazyQuery<TData = any, TVariables extends OperationVariables = OperationVariables>(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options?: LazyQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>>\n): LazyQueryResultTuple<TData, TVariables> {\n const execOptionsRef = useRef<Partial<LazyQueryHookExecOptions<TData, TVariables>>>();\n const optionsRef = useRef<LazyQueryHookOptions<TData, TVariables>>();\n const queryRef = useRef<DocumentNode | TypedDocumentNode<TData, TVariables>>();\n const merged = mergeOptions(options, execOptionsRef.current || {});\n const document = merged?.query ?? query;\n\n // Use refs to track options and the used query to ensure the `execute` \n // function remains referentially stable between renders.\n optionsRef.current = merged;\n queryRef.current = document;\n\n const internalState = useInternalState<TData, TVariables>(\n useApolloClient(options && options.client),\n document\n );\n\n const useQueryResult = internalState.useQuery({\n ...merged,\n skip: !execOptionsRef.current,\n });\n\n const initialFetchPolicy =\n useQueryResult.observable.options.initialFetchPolicy ||\n internalState.getDefaultFetchPolicy();\n\n const result: QueryResult<TData, TVariables> =\n Object.assign(useQueryResult, {\n called: !!execOptionsRef.current,\n });\n\n // We use useMemo here to make sure the eager methods have a stable identity.\n const eagerMethods = useMemo(() => {\n const eagerMethods: Record<string, any> = {};\n for (const key of EAGER_METHODS) {\n const method = result[key];\n eagerMethods[key] = function () {\n if (!execOptionsRef.current) {\n execOptionsRef.current = Object.create(null);\n // Only the first time populating execOptionsRef.current matters here.\n internalState.forceUpdate();\n }\n return method.apply(this, arguments);\n };\n }\n\n return eagerMethods;\n }, []);\n\n Object.assign(result, eagerMethods);\n\n const execute = useCallback<\n LazyQueryResultTuple<TData, TVariables>[0]\n >(executeOptions => {\n execOptionsRef.current = executeOptions ? {\n ...executeOptions,\n fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy,\n } : {\n fetchPolicy: initialFetchPolicy,\n };\n\n const options = mergeOptions(optionsRef.current, {\n query: queryRef.current,\n ...execOptionsRef.current,\n })\n\n const promise = internalState\n .executeQuery({ ...options, skip: false })\n .then((queryResult) => Object.assign(queryResult, eagerMethods));\n\n // Because the return value of `useLazyQuery` is usually floated, we need\n // to catch the promise to prevent unhandled rejections.\n promise.catch(() => {});\n\n return promise;\n }, []);\n\n return [execute, result];\n}\n"]}