@apollo/client 3.5.10 → 3.6.5

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 (152) hide show
  1. package/LICENSE +1 -1
  2. package/apollo-client.cjs +541 -369
  3. package/apollo-client.cjs.map +1 -1
  4. package/apollo-client.min.cjs +1 -1
  5. package/cache/cache.cjs +9 -10
  6. package/cache/cache.cjs.map +1 -1
  7. package/cache/cache.cjs.native.js +2288 -0
  8. package/cache/inmemory/readFromStore.d.ts.map +1 -1
  9. package/cache/inmemory/readFromStore.js +10 -11
  10. package/cache/inmemory/readFromStore.js.map +1 -1
  11. package/core/ApolloClient.d.ts +2 -3
  12. package/core/ApolloClient.d.ts.map +1 -1
  13. package/core/ApolloClient.js +4 -8
  14. package/core/ApolloClient.js.map +1 -1
  15. package/core/ObservableQuery.d.ts +10 -4
  16. package/core/ObservableQuery.d.ts.map +1 -1
  17. package/core/ObservableQuery.js +97 -45
  18. package/core/ObservableQuery.js.map +1 -1
  19. package/core/QueryInfo.d.ts.map +1 -1
  20. package/core/QueryInfo.js +4 -2
  21. package/core/QueryInfo.js.map +1 -1
  22. package/core/QueryManager.d.ts +5 -2
  23. package/core/QueryManager.d.ts.map +1 -1
  24. package/core/QueryManager.js +29 -23
  25. package/core/QueryManager.js.map +1 -1
  26. package/core/core.cjs +138 -85
  27. package/core/core.cjs.map +1 -1
  28. package/core/core.cjs.native.js +2141 -0
  29. package/core/index.d.ts +1 -1
  30. package/core/index.d.ts.map +1 -1
  31. package/core/index.js +1 -1
  32. package/core/index.js.map +1 -1
  33. package/core/watchQueryOptions.d.ts +9 -1
  34. package/core/watchQueryOptions.d.ts.map +1 -1
  35. package/core/watchQueryOptions.js.map +1 -1
  36. package/errors/errors.cjs.native.js +48 -0
  37. package/invariantErrorCodes.js +1 -1
  38. package/link/batch/batch.cjs +47 -37
  39. package/link/batch/batch.cjs.map +1 -1
  40. package/link/batch/batch.cjs.native.js +161 -0
  41. package/link/batch/batching.d.ts +2 -6
  42. package/link/batch/batching.d.ts.map +1 -1
  43. package/link/batch/batching.js +47 -37
  44. package/link/batch/batching.js.map +1 -1
  45. package/link/batch-http/batch-http.cjs.native.js +127 -0
  46. package/link/context/context.cjs.native.js +38 -0
  47. package/link/core/core.cjs.native.js +121 -0
  48. package/link/error/error.cjs.native.js +90 -0
  49. package/link/http/http.cjs.native.js +320 -0
  50. package/link/http/selectHttpOptionsAndBody.d.ts.map +1 -1
  51. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  52. package/link/persisted-queries/index.d.ts +2 -1
  53. package/link/persisted-queries/index.d.ts.map +1 -1
  54. package/link/persisted-queries/index.js +26 -13
  55. package/link/persisted-queries/index.js.map +1 -1
  56. package/link/persisted-queries/persisted-queries.cjs +25 -12
  57. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  58. package/link/persisted-queries/persisted-queries.cjs.native.js +174 -0
  59. package/link/retry/retry.cjs.native.js +170 -0
  60. package/link/schema/schema.cjs.native.js +56 -0
  61. package/link/subscriptions/subscriptions.cjs.native.js +45 -0
  62. package/link/utils/utils.cjs.native.js +115 -0
  63. package/link/ws/ws.cjs.native.js +28 -0
  64. package/main.cjs.native.js +16 -0
  65. package/package.json +28 -26
  66. package/react/components/components.cjs.native.js +79 -0
  67. package/react/context/ApolloConsumer.js +2 -2
  68. package/react/context/ApolloProvider.js +2 -2
  69. package/react/context/context.cjs +4 -4
  70. package/react/context/context.cjs.map +1 -1
  71. package/react/context/context.cjs.native.js +67 -0
  72. package/react/hoc/hoc.cjs.native.js +325 -0
  73. package/react/hooks/hooks.cjs +365 -253
  74. package/react/hooks/hooks.cjs.map +1 -1
  75. package/react/hooks/hooks.cjs.native.js +612 -0
  76. package/react/hooks/index.d.ts +1 -1
  77. package/react/hooks/index.d.ts.map +1 -1
  78. package/react/hooks/index.js +1 -1
  79. package/react/hooks/index.js.map +1 -1
  80. package/react/hooks/useLazyQuery.d.ts +2 -2
  81. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  82. package/react/hooks/useLazyQuery.js +26 -21
  83. package/react/hooks/useLazyQuery.js.map +1 -1
  84. package/react/hooks/useMutation.d.ts.map +1 -1
  85. package/react/hooks/useMutation.js +13 -10
  86. package/react/hooks/useMutation.js.map +1 -1
  87. package/react/hooks/useQuery.d.ts +36 -2
  88. package/react/hooks/useQuery.d.ts.map +1 -1
  89. package/react/hooks/useQuery.js +245 -206
  90. package/react/hooks/useQuery.js.map +1 -1
  91. package/react/hooks/useSubscription.d.ts.map +1 -1
  92. package/react/hooks/useSubscription.js +17 -7
  93. package/react/hooks/useSubscription.js.map +1 -1
  94. package/react/hooks/useSyncExternalStore.d.ts +4 -0
  95. package/react/hooks/useSyncExternalStore.d.ts.map +1 -0
  96. package/react/hooks/useSyncExternalStore.js +48 -0
  97. package/react/hooks/useSyncExternalStore.js.map +1 -0
  98. package/react/parser/index.d.ts.map +1 -1
  99. package/react/parser/index.js +24 -10
  100. package/react/parser/index.js.map +1 -1
  101. package/react/parser/parser.cjs +24 -10
  102. package/react/parser/parser.cjs.map +1 -1
  103. package/react/parser/parser.cjs.native.js +103 -0
  104. package/react/react.cjs.native.js +22 -0
  105. package/react/ssr/RenderPromises.d.ts +3 -2
  106. package/react/ssr/RenderPromises.d.ts.map +1 -1
  107. package/react/ssr/RenderPromises.js +25 -3
  108. package/react/ssr/RenderPromises.js.map +1 -1
  109. package/react/ssr/ssr.cjs +25 -3
  110. package/react/ssr/ssr.cjs.map +1 -1
  111. package/react/ssr/ssr.cjs.native.js +150 -0
  112. package/react/types/types.d.ts +10 -11
  113. package/react/types/types.d.ts.map +1 -1
  114. package/react/types/types.js.map +1 -1
  115. package/testing/core/core.cjs.native.js +288 -0
  116. package/testing/core/mocking/mockFetch.js +1 -1
  117. package/testing/core/mocking/mockFetch.js.map +1 -1
  118. package/testing/core/mocking/mockQueryManager.js +1 -1
  119. package/testing/core/mocking/mockWatchQuery.js +1 -1
  120. package/testing/core/wrap.js +1 -1
  121. package/testing/testing.cjs.native.js +58 -0
  122. package/utilities/common/canUse.d.ts +2 -0
  123. package/utilities/common/canUse.d.ts.map +1 -1
  124. package/utilities/common/canUse.js +6 -2
  125. package/utilities/common/canUse.js.map +1 -1
  126. package/utilities/common/mergeDeep.d.ts.map +1 -1
  127. package/utilities/common/mergeDeep.js +8 -11
  128. package/utilities/common/mergeDeep.js.map +1 -1
  129. package/utilities/common/mergeOptions.d.ts +5 -0
  130. package/utilities/common/mergeOptions.d.ts.map +1 -0
  131. package/utilities/common/mergeOptions.js +8 -0
  132. package/utilities/common/mergeOptions.js.map +1 -0
  133. package/utilities/globals/global.js +1 -2
  134. package/utilities/globals/globals.cjs.native.js +56 -0
  135. package/utilities/graphql/transform.d.ts +2 -2
  136. package/utilities/graphql/transform.d.ts.map +1 -1
  137. package/utilities/graphql/transform.js +1 -1
  138. package/utilities/graphql/transform.js.map +1 -1
  139. package/utilities/index.d.ts +1 -0
  140. package/utilities/index.d.ts.map +1 -1
  141. package/utilities/index.js +1 -0
  142. package/utilities/index.js.map +1 -1
  143. package/utilities/observables/Concast.d.ts.map +1 -1
  144. package/utilities/observables/Concast.js +5 -2
  145. package/utilities/observables/Concast.js.map +1 -1
  146. package/utilities/policies/pagination.d.ts.map +1 -1
  147. package/utilities/policies/pagination.js +9 -7
  148. package/utilities/policies/pagination.js.map +1 -1
  149. package/utilities/utilities.cjs +37 -23
  150. package/utilities/utilities.cjs.map +1 -1
  151. package/utilities/utilities.cjs.native.js +1281 -0
  152. package/version.js +1 -1
@@ -3,16 +3,31 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var globals = require('../../utilities/globals');
6
- var react = require('react');
6
+ var React = require('react');
7
7
  var context = require('../context');
8
8
  var tslib = require('tslib');
9
+ var utilities = require('../../utilities');
9
10
  var equality = require('@wry/equality');
10
11
  var core = require('../../core');
11
12
  var errors = require('../../errors');
12
13
  var parser = require('../parser');
13
14
 
15
+ function _interopNamespace(e) {
16
+ if (e && e.__esModule) return e;
17
+ var n = Object.create(null);
18
+ if (e) {
19
+ for (var k in e) {
20
+ n[k] = e[k];
21
+ }
22
+ }
23
+ n["default"] = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
14
29
  function useApolloClient(override) {
15
- var context$1 = react.useContext(context.getApolloContext());
30
+ var context$1 = React.useContext(context.getApolloContext());
16
31
  var client = override || context$1.client;
17
32
  __DEV__ ? globals.invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
18
33
  'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
@@ -20,254 +35,339 @@ function useApolloClient(override) {
20
35
  return client;
21
36
  }
22
37
 
23
- function useQuery(query, options) {
24
- var _a;
25
- var context$1 = react.useContext(context.getApolloContext());
26
- var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
27
- var defaultWatchQueryOptions = client.defaultOptions.watchQuery;
28
- parser.verifyDocumentType(query, parser.DocumentType.Query);
29
- var _b = react.useState(function () {
30
- var watchQueryOptions = createWatchQueryOptions(query, options, defaultWatchQueryOptions);
31
- var obsQuery = null;
32
- if (context$1.renderPromises) {
33
- obsQuery = context$1.renderPromises.getSSRObservable(watchQueryOptions);
38
+ var didWarnUncachedGetSnapshot = false;
39
+ var uSESKey = "useSyncExternalStore";
40
+ var realHook = React__namespace[uSESKey];
41
+ var useSyncExternalStore = realHook || (function (subscribe, getSnapshot, getServerSnapshot) {
42
+ var value = getSnapshot();
43
+ if (__DEV__ &&
44
+ !didWarnUncachedGetSnapshot &&
45
+ value !== getSnapshot()) {
46
+ didWarnUncachedGetSnapshot = true;
47
+ __DEV__ && globals.invariant.error('The result of getSnapshot should be cached to avoid an infinite loop');
48
+ }
49
+ var _a = React__namespace.useState({ inst: { value: value, getSnapshot: getSnapshot } }), inst = _a[0].inst, forceUpdate = _a[1];
50
+ if (utilities.canUseLayoutEffect) {
51
+ React__namespace.useLayoutEffect(function () {
52
+ Object.assign(inst, { value: value, getSnapshot: getSnapshot });
53
+ if (checkIfSnapshotChanged(inst)) {
54
+ forceUpdate({ inst: inst });
55
+ }
56
+ }, [subscribe, value, getSnapshot]);
57
+ }
58
+ else {
59
+ Object.assign(inst, { value: value, getSnapshot: getSnapshot });
60
+ }
61
+ React__namespace.useEffect(function () {
62
+ if (checkIfSnapshotChanged(inst)) {
63
+ forceUpdate({ inst: inst });
34
64
  }
35
- if (!obsQuery) {
36
- obsQuery = client.watchQuery(watchQueryOptions);
37
- if (context$1.renderPromises) {
38
- context$1.renderPromises.registerSSRObservable(obsQuery, watchQueryOptions);
65
+ return subscribe(function handleStoreChange() {
66
+ if (checkIfSnapshotChanged(inst)) {
67
+ forceUpdate({ inst: inst });
39
68
  }
69
+ });
70
+ }, [subscribe]);
71
+ return value;
72
+ });
73
+ function checkIfSnapshotChanged(_a) {
74
+ var value = _a.value, getSnapshot = _a.getSnapshot;
75
+ try {
76
+ return value !== getSnapshot();
77
+ }
78
+ catch (_b) {
79
+ return true;
80
+ }
81
+ }
82
+
83
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
84
+ function useQuery(query, options) {
85
+ if (options === void 0) { options = Object.create(null); }
86
+ return useInternalState(useApolloClient(options.client), query).useQuery(options);
87
+ }
88
+ function useInternalState(client, query) {
89
+ var stateRef = React.useRef();
90
+ if (!stateRef.current ||
91
+ client !== stateRef.current.client ||
92
+ query !== stateRef.current.query) {
93
+ stateRef.current = new InternalState(client, query, stateRef.current);
94
+ }
95
+ var state = stateRef.current;
96
+ var _a = React.useState(0); _a[0]; var setTick = _a[1];
97
+ state.forceUpdate = function () {
98
+ setTick(function (tick) { return tick + 1; });
99
+ };
100
+ return state;
101
+ }
102
+ var InternalState = (function () {
103
+ function InternalState(client, query, previous) {
104
+ this.client = client;
105
+ this.query = query;
106
+ this.asyncResolveFns = new Set();
107
+ this.optionsToIgnoreOnce = new (utilities.canUseWeakSet ? WeakSet : Set)();
108
+ this.ssrDisabledResult = utilities.maybeDeepFreeze({
109
+ loading: true,
110
+ data: void 0,
111
+ error: void 0,
112
+ networkStatus: core.NetworkStatus.loading,
113
+ });
114
+ this.skipStandbyResult = utilities.maybeDeepFreeze({
115
+ loading: false,
116
+ data: void 0,
117
+ error: void 0,
118
+ networkStatus: core.NetworkStatus.ready,
119
+ });
120
+ this.toQueryResultCache = new (utilities.canUseWeakMap ? WeakMap : Map)();
121
+ parser.verifyDocumentType(query, parser.DocumentType.Query);
122
+ var previousResult = previous && previous.result;
123
+ var previousData = previousResult && previousResult.data;
124
+ if (previousData) {
125
+ this.previousData = previousData;
40
126
  }
41
- if (context$1.renderPromises &&
42
- (options === null || options === void 0 ? void 0 : options.ssr) !== false &&
43
- !(options === null || options === void 0 ? void 0 : options.skip) &&
44
- obsQuery.getCurrentResult().loading) {
45
- context$1.renderPromises.addQueryPromise({
46
- getOptions: function () { return createWatchQueryOptions(query, options, defaultWatchQueryOptions); },
47
- fetchData: function () { return new Promise(function (resolve) {
48
- var sub = obsQuery.subscribe({
49
- next: function (result) {
50
- if (!result.loading) {
51
- resolve();
52
- sub.unsubscribe();
53
- }
54
- },
55
- error: function () {
56
- resolve();
57
- sub.unsubscribe();
58
- },
59
- complete: function () {
60
- resolve();
61
- },
127
+ }
128
+ InternalState.prototype.forceUpdate = function () {
129
+ __DEV__ && globals.invariant.warn("Calling default no-op implementation of InternalState#forceUpdate");
130
+ };
131
+ InternalState.prototype.asyncUpdate = function () {
132
+ var _this = this;
133
+ return new Promise(function (resolve) {
134
+ _this.asyncResolveFns.add(resolve);
135
+ _this.optionsToIgnoreOnce.add(_this.watchQueryOptions);
136
+ _this.forceUpdate();
137
+ });
138
+ };
139
+ InternalState.prototype.useQuery = function (options) {
140
+ var _this = this;
141
+ this.renderPromises = React.useContext(context.getApolloContext()).renderPromises;
142
+ this.useOptions(options);
143
+ var obsQuery = this.useObservableQuery();
144
+ var result = useSyncExternalStore(React.useCallback(function () {
145
+ if (_this.renderPromises) {
146
+ return function () { };
147
+ }
148
+ var onNext = function () {
149
+ var previousResult = _this.result;
150
+ var result = obsQuery.getCurrentResult();
151
+ if (previousResult &&
152
+ previousResult.loading === result.loading &&
153
+ previousResult.networkStatus === result.networkStatus &&
154
+ equality.equal(previousResult.data, result.data)) {
155
+ return;
156
+ }
157
+ _this.setResult(result);
158
+ };
159
+ var onError = function (error) {
160
+ var last = obsQuery["last"];
161
+ subscription.unsubscribe();
162
+ try {
163
+ obsQuery.resetLastResults();
164
+ subscription = obsQuery.subscribe(onNext, onError);
165
+ }
166
+ finally {
167
+ obsQuery["last"] = last;
168
+ }
169
+ if (!hasOwnProperty.call(error, 'graphQLErrors')) {
170
+ throw error;
171
+ }
172
+ var previousResult = _this.result;
173
+ if (!previousResult ||
174
+ (previousResult && previousResult.loading) ||
175
+ !equality.equal(error, previousResult.error)) {
176
+ _this.setResult({
177
+ data: (previousResult && previousResult.data),
178
+ error: error,
179
+ loading: false,
180
+ networkStatus: core.NetworkStatus.error,
62
181
  });
63
- }); },
64
- }, function () { return null; });
182
+ }
183
+ };
184
+ var subscription = obsQuery.subscribe(onNext, onError);
185
+ return function () { return subscription.unsubscribe(); };
186
+ }, [
187
+ obsQuery,
188
+ this.renderPromises,
189
+ this.client.disableNetworkFetches,
190
+ ]), function () { return _this.getCurrentResult(); }, function () { return _this.getCurrentResult(); });
191
+ this.unsafeHandlePartialRefetch(result);
192
+ var queryResult = this.toQueryResult(result);
193
+ if (!queryResult.loading && this.asyncResolveFns.size) {
194
+ this.asyncResolveFns.forEach(function (resolve) { return resolve(queryResult); });
195
+ this.asyncResolveFns.clear();
65
196
  }
66
- return obsQuery;
67
- }), obsQuery = _b[0], setObsQuery = _b[1];
68
- var _c = react.useState(function () {
69
- var _a, _b;
70
- var result = obsQuery.getCurrentResult();
71
- if (!result.loading && options) {
72
- if (result.error) {
73
- (_a = options.onError) === null || _a === void 0 ? void 0 : _a.call(options, result.error);
74
- }
75
- else if (result.data) {
76
- (_b = options.onCompleted) === null || _b === void 0 ? void 0 : _b.call(options, result.data);
197
+ return queryResult;
198
+ };
199
+ InternalState.prototype.useOptions = function (options) {
200
+ var _a;
201
+ var watchQueryOptions = this.createWatchQueryOptions(this.queryHookOptions = options);
202
+ var currentWatchQueryOptions = this.watchQueryOptions;
203
+ if (this.optionsToIgnoreOnce.has(currentWatchQueryOptions) ||
204
+ !equality.equal(watchQueryOptions, currentWatchQueryOptions)) {
205
+ this.watchQueryOptions = watchQueryOptions;
206
+ if (currentWatchQueryOptions && this.observable) {
207
+ this.optionsToIgnoreOnce.delete(currentWatchQueryOptions);
208
+ this.observable.reobserve(watchQueryOptions);
209
+ this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
210
+ this.result = void 0;
77
211
  }
78
212
  }
79
- return result;
80
- }), result = _c[0], setResult = _c[1];
81
- var ref = react.useRef({
82
- client: client,
83
- query: query,
84
- options: options,
85
- result: result,
86
- previousData: void 0,
87
- watchQueryOptions: createWatchQueryOptions(query, options, defaultWatchQueryOptions),
88
- });
89
- react.useEffect(function () {
90
- var _a, _b;
91
- var watchQueryOptions = createWatchQueryOptions(query, options, defaultWatchQueryOptions);
92
- var nextResult;
93
- if (ref.current.client !== client || !equality.equal(ref.current.query, query)) {
94
- var obsQuery_1 = client.watchQuery(watchQueryOptions);
95
- setObsQuery(obsQuery_1);
96
- nextResult = obsQuery_1.getCurrentResult();
213
+ this.onCompleted = options.onCompleted || InternalState.prototype.onCompleted;
214
+ this.onError = options.onError || InternalState.prototype.onError;
215
+ if ((this.renderPromises || this.client.disableNetworkFetches) &&
216
+ this.queryHookOptions.ssr === false &&
217
+ !this.queryHookOptions.skip) {
218
+ this.result = this.ssrDisabledResult;
97
219
  }
98
- else if (!equality.equal(ref.current.watchQueryOptions, watchQueryOptions)) {
99
- obsQuery.setOptions(watchQueryOptions).catch(function () { });
100
- nextResult = obsQuery.getCurrentResult();
101
- ref.current.watchQueryOptions = watchQueryOptions;
220
+ else if (this.queryHookOptions.skip ||
221
+ this.watchQueryOptions.fetchPolicy === 'standby') {
222
+ this.result = this.skipStandbyResult;
102
223
  }
103
- if (nextResult) {
104
- var previousResult = ref.current.result;
105
- if (previousResult.data) {
106
- ref.current.previousData = previousResult.data;
107
- }
108
- setResult(ref.current.result = nextResult);
109
- if (!nextResult.loading && options) {
110
- if (nextResult.error) {
111
- (_a = options.onError) === null || _a === void 0 ? void 0 : _a.call(options, nextResult.error);
112
- }
113
- else if (nextResult.data) {
114
- (_b = options.onCompleted) === null || _b === void 0 ? void 0 : _b.call(options, nextResult.data);
115
- }
116
- }
224
+ else if (this.result === this.ssrDisabledResult ||
225
+ this.result === this.skipStandbyResult) {
226
+ this.result = void 0;
117
227
  }
118
- Object.assign(ref.current, { client: client, query: query });
119
- }, [obsQuery, client, query, options]);
120
- react.useEffect(function () {
121
- if (context$1.renderPromises) {
122
- return;
228
+ };
229
+ InternalState.prototype.createWatchQueryOptions = function (_a) {
230
+ var _b;
231
+ if (_a === void 0) { _a = {}; }
232
+ var skip = _a.skip; _a.ssr; _a.onCompleted; _a.onError; _a.displayName; _a.defaultOptions; var otherOptions = tslib.__rest(_a, ["skip", "ssr", "onCompleted", "onError", "displayName", "defaultOptions"]);
233
+ var watchQueryOptions = Object.assign(otherOptions, { query: this.query });
234
+ if (this.renderPromises &&
235
+ (watchQueryOptions.fetchPolicy === 'network-only' ||
236
+ watchQueryOptions.fetchPolicy === 'cache-and-network')) {
237
+ watchQueryOptions.fetchPolicy = 'cache-first';
123
238
  }
124
- var subscription = obsQuery.subscribe(onNext, onError);
125
- function onNext() {
126
- var _a, _b;
127
- var previousResult = ref.current.result;
128
- var result = obsQuery.getCurrentResult();
129
- if (previousResult &&
130
- previousResult.loading === result.loading &&
131
- previousResult.networkStatus === result.networkStatus &&
132
- equality.equal(previousResult.data, result.data)) {
133
- return;
134
- }
135
- if (previousResult.data) {
136
- ref.current.previousData = previousResult.data;
137
- }
138
- setResult(ref.current.result = result);
139
- if (!result.loading) {
140
- (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onCompleted) === null || _b === void 0 ? void 0 : _b.call(_a, result.data);
141
- }
239
+ if (!watchQueryOptions.variables) {
240
+ watchQueryOptions.variables = {};
142
241
  }
143
- function onError(error) {
144
- var _a, _b;
145
- var last = obsQuery["last"];
146
- subscription.unsubscribe();
147
- try {
148
- obsQuery.resetLastResults();
149
- subscription = obsQuery.subscribe(onNext, onError);
150
- }
151
- finally {
152
- obsQuery["last"] = last;
242
+ if (skip) {
243
+ var _c = watchQueryOptions.fetchPolicy, fetchPolicy = _c === void 0 ? this.getDefaultFetchPolicy() : _c, _d = watchQueryOptions.initialFetchPolicy, initialFetchPolicy = _d === void 0 ? fetchPolicy : _d;
244
+ Object.assign(watchQueryOptions, {
245
+ initialFetchPolicy: initialFetchPolicy,
246
+ fetchPolicy: 'standby',
247
+ });
248
+ }
249
+ else if (!watchQueryOptions.fetchPolicy) {
250
+ watchQueryOptions.fetchPolicy =
251
+ ((_b = this.observable) === null || _b === void 0 ? void 0 : _b.options.initialFetchPolicy) ||
252
+ this.getDefaultFetchPolicy();
253
+ }
254
+ return watchQueryOptions;
255
+ };
256
+ InternalState.prototype.getDefaultFetchPolicy = function () {
257
+ var _a, _b;
258
+ return (((_a = this.queryHookOptions.defaultOptions) === null || _a === void 0 ? void 0 : _a.fetchPolicy) ||
259
+ ((_b = this.client.defaultOptions.watchQuery) === null || _b === void 0 ? void 0 : _b.fetchPolicy) ||
260
+ "cache-first");
261
+ };
262
+ InternalState.prototype.onCompleted = function (data) { };
263
+ InternalState.prototype.onError = function (error) { };
264
+ InternalState.prototype.useObservableQuery = function () {
265
+ var obsQuery = this.observable =
266
+ this.renderPromises
267
+ && this.renderPromises.getSSRObservable(this.watchQueryOptions)
268
+ || this.observable
269
+ || this.client.watchQuery(core.mergeOptions(this.queryHookOptions.defaultOptions, this.watchQueryOptions));
270
+ this.obsQueryFields = React.useMemo(function () { return ({
271
+ refetch: obsQuery.refetch.bind(obsQuery),
272
+ reobserve: obsQuery.reobserve.bind(obsQuery),
273
+ fetchMore: obsQuery.fetchMore.bind(obsQuery),
274
+ updateQuery: obsQuery.updateQuery.bind(obsQuery),
275
+ startPolling: obsQuery.startPolling.bind(obsQuery),
276
+ stopPolling: obsQuery.stopPolling.bind(obsQuery),
277
+ subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
278
+ }); }, [obsQuery]);
279
+ var ssrAllowed = !(this.queryHookOptions.ssr === false ||
280
+ this.queryHookOptions.skip);
281
+ if (this.renderPromises && ssrAllowed) {
282
+ this.renderPromises.registerSSRObservable(obsQuery);
283
+ if (obsQuery.getCurrentResult().loading) {
284
+ this.renderPromises.addObservableQueryPromise(obsQuery);
153
285
  }
154
- if (!error.hasOwnProperty('graphQLErrors')) {
155
- throw error;
286
+ }
287
+ return obsQuery;
288
+ };
289
+ InternalState.prototype.setResult = function (nextResult) {
290
+ var previousResult = this.result;
291
+ if (previousResult && previousResult.data) {
292
+ this.previousData = previousResult.data;
293
+ }
294
+ this.result = nextResult;
295
+ this.forceUpdate();
296
+ this.handleErrorOrCompleted(nextResult);
297
+ };
298
+ InternalState.prototype.handleErrorOrCompleted = function (result) {
299
+ if (!result.loading) {
300
+ if (result.error) {
301
+ this.onError(result.error);
156
302
  }
157
- var previousResult = ref.current.result;
158
- if ((previousResult && previousResult.loading) ||
159
- !equality.equal(error, previousResult.error)) {
160
- setResult(ref.current.result = {
161
- data: previousResult.data,
162
- error: error,
163
- loading: false,
164
- networkStatus: core.NetworkStatus.error,
165
- });
166
- (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
303
+ else if (result.data) {
304
+ this.onCompleted(result.data);
167
305
  }
168
306
  }
169
- return function () { return subscription.unsubscribe(); };
170
- }, [obsQuery, context$1.renderPromises, client.disableNetworkFetches]);
171
- var partial;
172
- (_a = result, partial = _a.partial, result = tslib.__rest(_a, ["partial"]));
173
- {
174
- if (partial &&
175
- (options === null || options === void 0 ? void 0 : options.partialRefetch) &&
307
+ };
308
+ InternalState.prototype.getCurrentResult = function () {
309
+ if (!this.result) {
310
+ this.handleErrorOrCompleted(this.result = this.observable.getCurrentResult());
311
+ }
312
+ return this.result;
313
+ };
314
+ InternalState.prototype.toQueryResult = function (result) {
315
+ var queryResult = this.toQueryResultCache.get(result);
316
+ if (queryResult)
317
+ return queryResult;
318
+ var data = result.data; result.partial; var resultWithoutPartial = tslib.__rest(result, ["data", "partial"]);
319
+ this.toQueryResultCache.set(result, queryResult = tslib.__assign(tslib.__assign(tslib.__assign({ data: data }, resultWithoutPartial), this.obsQueryFields), { client: this.client, observable: this.observable, variables: this.observable.variables, called: true, previousData: this.previousData }));
320
+ if (!queryResult.error && utilities.isNonEmptyArray(result.errors)) {
321
+ queryResult.error = new errors.ApolloError({ graphQLErrors: result.errors });
322
+ }
323
+ return queryResult;
324
+ };
325
+ InternalState.prototype.unsafeHandlePartialRefetch = function (result) {
326
+ if (result.partial &&
327
+ this.queryHookOptions.partialRefetch &&
176
328
  !result.loading &&
177
329
  (!result.data || Object.keys(result.data).length === 0) &&
178
- obsQuery.options.fetchPolicy !== 'cache-only') {
179
- result = tslib.__assign(tslib.__assign({}, result), { loading: true, networkStatus: core.NetworkStatus.refetch });
180
- obsQuery.refetch();
181
- }
182
- if (context$1.renderPromises &&
183
- (options === null || options === void 0 ? void 0 : options.ssr) !== false &&
184
- !(options === null || options === void 0 ? void 0 : options.skip) &&
185
- result.loading) {
186
- obsQuery.setOptions(createWatchQueryOptions(query, options, defaultWatchQueryOptions)).catch(function () { });
330
+ this.observable.options.fetchPolicy !== 'cache-only') {
331
+ Object.assign(result, {
332
+ loading: true,
333
+ networkStatus: core.NetworkStatus.refetch,
334
+ });
335
+ this.observable.refetch();
187
336
  }
188
- Object.assign(ref.current, { options: options });
189
- }
190
- if ((context$1.renderPromises || client.disableNetworkFetches) &&
191
- (options === null || options === void 0 ? void 0 : options.ssr) === false) {
192
- result = ref.current.result = {
193
- loading: true,
194
- data: void 0,
195
- error: void 0,
196
- networkStatus: core.NetworkStatus.loading,
197
- };
198
- }
199
- else if ((options === null || options === void 0 ? void 0 : options.skip) || (options === null || options === void 0 ? void 0 : options.fetchPolicy) === 'standby') {
200
- result = {
201
- loading: false,
202
- data: void 0,
203
- error: void 0,
204
- networkStatus: core.NetworkStatus.ready,
205
- };
206
- }
207
- if (result.errors && result.errors.length) {
208
- result = tslib.__assign(tslib.__assign({}, result), { error: result.error || new errors.ApolloError({ graphQLErrors: result.errors }) });
209
- }
210
- var obsQueryFields = react.useMemo(function () { return ({
211
- refetch: obsQuery.refetch.bind(obsQuery),
212
- fetchMore: obsQuery.fetchMore.bind(obsQuery),
213
- updateQuery: obsQuery.updateQuery.bind(obsQuery),
214
- startPolling: obsQuery.startPolling.bind(obsQuery),
215
- stopPolling: obsQuery.stopPolling.bind(obsQuery),
216
- subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
217
- }); }, [obsQuery]);
218
- return tslib.__assign(tslib.__assign(tslib.__assign({}, obsQueryFields), { variables: createWatchQueryOptions(query, options, defaultWatchQueryOptions).variables, client: client, called: true, previousData: ref.current.previousData }), result);
219
- }
220
- function createWatchQueryOptions(query, options, defaultOptions) {
221
- var _a;
222
- if (options === void 0) { options = {}; }
223
- var skip = options.skip; options.ssr; options.onCompleted; options.onError; options.displayName; var otherOptions = tslib.__rest(options, ["skip", "ssr", "onCompleted", "onError", "displayName"]);
224
- var watchQueryOptions = tslib.__assign({ query: query }, otherOptions);
225
- if (defaultOptions) {
226
- watchQueryOptions = core.mergeOptions(defaultOptions, watchQueryOptions);
227
- }
228
- if (skip) {
229
- watchQueryOptions.fetchPolicy = 'standby';
230
- }
231
- else if (((_a = watchQueryOptions.context) === null || _a === void 0 ? void 0 : _a.renderPromises) &&
232
- (watchQueryOptions.fetchPolicy === 'network-only' ||
233
- watchQueryOptions.fetchPolicy === 'cache-and-network')) {
234
- watchQueryOptions.fetchPolicy = 'cache-first';
235
- }
236
- else if (!watchQueryOptions.fetchPolicy) {
237
- watchQueryOptions.fetchPolicy = 'cache-first';
238
- }
239
- if (!watchQueryOptions.variables) {
240
- watchQueryOptions.variables = {};
241
- }
242
- return watchQueryOptions;
243
- }
337
+ };
338
+ return InternalState;
339
+ }());
244
340
 
245
341
  var EAGER_METHODS = [
246
342
  'refetch',
343
+ 'reobserve',
247
344
  'fetchMore',
248
345
  'updateQuery',
249
346
  'startPolling',
250
347
  'subscribeToMore',
251
348
  ];
252
349
  function useLazyQuery(query, options) {
253
- var _a = react.useState({
254
- called: false,
255
- }), execution = _a[0], setExecution = _a[1];
256
- 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 }));
257
- if (!execution.called) {
258
- result = tslib.__assign(tslib.__assign({}, result), { loading: false, data: void 0, error: void 0, called: false });
259
- }
260
- var eagerMethods = react.useMemo(function () {
350
+ var internalState = useInternalState(useApolloClient(options && options.client), query);
351
+ var execOptionsRef = React.useRef();
352
+ var merged = execOptionsRef.current
353
+ ? utilities.mergeOptions(options, execOptionsRef.current)
354
+ : options;
355
+ var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign({}, merged), { skip: !execOptionsRef.current }));
356
+ var initialFetchPolicy = useQueryResult.observable.options.initialFetchPolicy ||
357
+ internalState.getDefaultFetchPolicy();
358
+ var result = Object.assign(useQueryResult, {
359
+ called: !!execOptionsRef.current,
360
+ });
361
+ var eagerMethods = React.useMemo(function () {
261
362
  var eagerMethods = {};
262
363
  var _loop_1 = function (key) {
263
364
  var method = result[key];
264
365
  eagerMethods[key] = function () {
265
- var args = [];
266
- for (var _i = 0; _i < arguments.length; _i++) {
267
- args[_i] = arguments[_i];
366
+ if (!execOptionsRef.current) {
367
+ execOptionsRef.current = Object.create(null);
368
+ internalState.forceUpdate();
268
369
  }
269
- setExecution(function (execution) { return (tslib.__assign(tslib.__assign({}, execution), { called: true })); });
270
- return method.apply(void 0, args);
370
+ return method.apply(this, arguments);
271
371
  };
272
372
  };
273
373
  for (var _i = 0, EAGER_METHODS_1 = EAGER_METHODS; _i < EAGER_METHODS_1.length; _i++) {
@@ -276,15 +376,14 @@ function useLazyQuery(query, options) {
276
376
  }
277
377
  return eagerMethods;
278
378
  }, []);
279
- result.error = result.error || void 0;
280
379
  Object.assign(result, eagerMethods);
281
- var execute = react.useCallback(function (executeOptions) {
282
- setExecution({ called: true, options: executeOptions });
283
- var promise = result.refetch(executeOptions === null || executeOptions === void 0 ? void 0 : executeOptions.variables).then(function (result1) {
284
- var result2 = tslib.__assign(tslib.__assign({}, result), { data: result1.data, error: result1.error, called: true, loading: false });
285
- Object.assign(result2, eagerMethods);
286
- return result2;
287
- });
380
+ var execute = React.useCallback(function (executeOptions) {
381
+ execOptionsRef.current = executeOptions ? tslib.__assign(tslib.__assign({}, executeOptions), { fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy }) : {
382
+ fetchPolicy: initialFetchPolicy,
383
+ };
384
+ var promise = internalState
385
+ .asyncUpdate()
386
+ .then(function (queryResult) { return Object.assign(queryResult, eagerMethods); });
288
387
  promise.catch(function () { });
289
388
  return promise;
290
389
  }, []);
@@ -294,12 +393,12 @@ function useLazyQuery(query, options) {
294
393
  function useMutation(mutation, options) {
295
394
  var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
296
395
  parser.verifyDocumentType(mutation, parser.DocumentType.Mutation);
297
- var _a = react.useState({
396
+ var _a = React.useState({
298
397
  called: false,
299
398
  loading: false,
300
399
  client: client,
301
400
  }), result = _a[0], setResult = _a[1];
302
- var ref = react.useRef({
401
+ var ref = React.useRef({
303
402
  result: result,
304
403
  mutationId: 0,
305
404
  isMounted: true,
@@ -310,7 +409,7 @@ function useMutation(mutation, options) {
310
409
  {
311
410
  Object.assign(ref.current, { client: client, options: options, mutation: mutation });
312
411
  }
313
- var execute = react.useCallback(function (executeOptions) {
412
+ var execute = React.useCallback(function (executeOptions) {
314
413
  if (executeOptions === void 0) { executeOptions = {}; }
315
414
  var _a = ref.current, client = _a.client, options = _a.options, mutation = _a.mutation;
316
415
  var baseOptions = tslib.__assign(tslib.__assign({}, options), { mutation: mutation });
@@ -326,7 +425,7 @@ function useMutation(mutation, options) {
326
425
  var mutationId = ++ref.current.mutationId;
327
426
  var clientOptions = core.mergeOptions(baseOptions, executeOptions);
328
427
  return client.mutate(clientOptions).then(function (response) {
329
- var _a, _b;
428
+ var _a, _b, _c;
330
429
  var data = response.data, errors$1 = response.errors;
331
430
  var error = errors$1 && errors$1.length > 0
332
431
  ? new errors.ApolloError({ graphQLErrors: errors$1 })
@@ -344,11 +443,11 @@ function useMutation(mutation, options) {
344
443
  setResult(ref.current.result = result_1);
345
444
  }
346
445
  }
347
- (_a = baseOptions.onCompleted) === null || _a === void 0 ? void 0 : _a.call(baseOptions, response.data);
348
- (_b = executeOptions.onCompleted) === null || _b === void 0 ? void 0 : _b.call(executeOptions, response.data);
446
+ (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onCompleted) === null || _b === void 0 ? void 0 : _b.call(_a, response.data);
447
+ (_c = executeOptions.onCompleted) === null || _c === void 0 ? void 0 : _c.call(executeOptions, response.data);
349
448
  return response;
350
449
  }).catch(function (error) {
351
- var _a, _b;
450
+ var _a, _b, _c, _d;
352
451
  if (mutationId === ref.current.mutationId &&
353
452
  ref.current.isMounted) {
354
453
  var result_2 = {
@@ -362,33 +461,36 @@ function useMutation(mutation, options) {
362
461
  setResult(ref.current.result = result_2);
363
462
  }
364
463
  }
365
- if (baseOptions.onError || clientOptions.onError) {
366
- (_a = baseOptions.onError) === null || _a === void 0 ? void 0 : _a.call(baseOptions, error);
367
- (_b = executeOptions.onError) === null || _b === void 0 ? void 0 : _b.call(executeOptions, error);
464
+ if (((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) || clientOptions.onError) {
465
+ (_c = (_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onError) === null || _c === void 0 ? void 0 : _c.call(_b, error);
466
+ (_d = executeOptions.onError) === null || _d === void 0 ? void 0 : _d.call(executeOptions, error);
368
467
  return { data: void 0, errors: error };
369
468
  }
370
469
  throw error;
371
470
  });
372
471
  }, []);
373
- var reset = react.useCallback(function () {
472
+ var reset = React.useCallback(function () {
374
473
  setResult({ called: false, loading: false, client: client });
375
474
  }, []);
376
- react.useEffect(function () { return function () {
377
- ref.current.isMounted = false;
378
- }; }, []);
475
+ React.useEffect(function () {
476
+ ref.current.isMounted = true;
477
+ return function () {
478
+ ref.current.isMounted = false;
479
+ };
480
+ }, []);
379
481
  return [execute, tslib.__assign({ reset: reset }, result)];
380
482
  }
381
483
 
382
484
  function useSubscription(subscription, options) {
383
485
  var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
384
486
  parser.verifyDocumentType(subscription, parser.DocumentType.Subscription);
385
- var _a = react.useState({
487
+ var _a = React.useState({
386
488
  loading: !(options === null || options === void 0 ? void 0 : options.skip),
387
489
  error: void 0,
388
490
  data: void 0,
389
491
  variables: options === null || options === void 0 ? void 0 : options.variables,
390
492
  }), result = _a[0], setResult = _a[1];
391
- var _b = react.useState(function () {
493
+ var _b = React.useState(function () {
392
494
  if (options === null || options === void 0 ? void 0 : options.skip) {
393
495
  return null;
394
496
  }
@@ -399,15 +501,21 @@ function useSubscription(subscription, options) {
399
501
  context: options === null || options === void 0 ? void 0 : options.context,
400
502
  });
401
503
  }), observable = _b[0], setObservable = _b[1];
402
- var ref = react.useRef({ client: client, subscription: subscription, options: options });
403
- react.useEffect(function () {
504
+ var canResetObservableRef = React.useRef(false);
505
+ React.useEffect(function () {
506
+ return function () {
507
+ canResetObservableRef.current = true;
508
+ };
509
+ }, []);
510
+ var ref = React.useRef({ client: client, subscription: subscription, options: options });
511
+ React.useEffect(function () {
404
512
  var _a, _b, _c, _d;
405
513
  var shouldResubscribe = options === null || options === void 0 ? void 0 : options.shouldResubscribe;
406
514
  if (typeof shouldResubscribe === 'function') {
407
515
  shouldResubscribe = !!shouldResubscribe(options);
408
516
  }
409
517
  if (options === null || options === void 0 ? void 0 : options.skip) {
410
- if (!(options === null || options === void 0 ? void 0 : options.skip) !== !((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.skip)) {
518
+ if (!(options === null || options === void 0 ? void 0 : options.skip) !== !((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.skip) || canResetObservableRef.current) {
411
519
  setResult({
412
520
  loading: false,
413
521
  data: void 0,
@@ -415,13 +523,16 @@ function useSubscription(subscription, options) {
415
523
  variables: options === null || options === void 0 ? void 0 : options.variables,
416
524
  });
417
525
  setObservable(null);
526
+ canResetObservableRef.current = false;
418
527
  }
419
528
  }
420
- else if (shouldResubscribe !== false && (client !== ref.current.client ||
421
- subscription !== ref.current.subscription ||
422
- (options === null || options === void 0 ? void 0 : options.fetchPolicy) !== ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.fetchPolicy) ||
423
- !(options === null || options === void 0 ? void 0 : options.skip) !== !((_c = ref.current.options) === null || _c === void 0 ? void 0 : _c.skip) ||
424
- !equality.equal(options === null || options === void 0 ? void 0 : options.variables, (_d = ref.current.options) === null || _d === void 0 ? void 0 : _d.variables))) {
529
+ else if ((shouldResubscribe !== false &&
530
+ (client !== ref.current.client ||
531
+ subscription !== ref.current.subscription ||
532
+ (options === null || options === void 0 ? void 0 : options.fetchPolicy) !== ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.fetchPolicy) ||
533
+ !(options === null || options === void 0 ? void 0 : options.skip) !== !((_c = ref.current.options) === null || _c === void 0 ? void 0 : _c.skip) ||
534
+ !equality.equal(options === null || options === void 0 ? void 0 : options.variables, (_d = ref.current.options) === null || _d === void 0 ? void 0 : _d.variables))) ||
535
+ canResetObservableRef.current) {
425
536
  setResult({
426
537
  loading: true,
427
538
  data: void 0,
@@ -434,10 +545,11 @@ function useSubscription(subscription, options) {
434
545
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
435
546
  context: options === null || options === void 0 ? void 0 : options.context,
436
547
  }));
548
+ canResetObservableRef.current = false;
437
549
  }
438
550
  Object.assign(ref.current, { client: client, subscription: subscription, options: options });
439
- }, [client, subscription, options]);
440
- react.useEffect(function () {
551
+ }, [client, subscription, options, canResetObservableRef.current]);
552
+ React.useEffect(function () {
441
553
  if (!observable) {
442
554
  return;
443
555
  }
@@ -478,8 +590,8 @@ function useSubscription(subscription, options) {
478
590
 
479
591
  function useReactiveVar(rv) {
480
592
  var value = rv();
481
- var setValue = react.useState(value)[1];
482
- react.useEffect(function () {
593
+ var setValue = React.useState(value)[1];
594
+ React.useEffect(function () {
483
595
  var probablySameValue = rv();
484
596
  if (value !== probablySameValue) {
485
597
  setValue(probablySameValue);