@apollo/client 3.5.10 → 3.6.9

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 (156) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +5 -5
  3. package/apollo-client.cjs +563 -375
  4. package/apollo-client.cjs.map +1 -1
  5. package/apollo-client.min.cjs +1 -1
  6. package/cache/cache.cjs +10 -11
  7. package/cache/cache.cjs.map +1 -1
  8. package/cache/cache.cjs.native.js +2288 -0
  9. package/cache/inmemory/policies.js +1 -1
  10. package/cache/inmemory/policies.js.map +1 -1
  11. package/cache/inmemory/readFromStore.d.ts.map +1 -1
  12. package/cache/inmemory/readFromStore.js +10 -11
  13. package/cache/inmemory/readFromStore.js.map +1 -1
  14. package/core/ApolloClient.d.ts +2 -3
  15. package/core/ApolloClient.d.ts.map +1 -1
  16. package/core/ApolloClient.js +4 -8
  17. package/core/ApolloClient.js.map +1 -1
  18. package/core/ObservableQuery.d.ts +10 -4
  19. package/core/ObservableQuery.d.ts.map +1 -1
  20. package/core/ObservableQuery.js +101 -46
  21. package/core/ObservableQuery.js.map +1 -1
  22. package/core/QueryInfo.d.ts.map +1 -1
  23. package/core/QueryInfo.js +4 -2
  24. package/core/QueryInfo.js.map +1 -1
  25. package/core/QueryManager.d.ts +5 -2
  26. package/core/QueryManager.d.ts.map +1 -1
  27. package/core/QueryManager.js +36 -27
  28. package/core/QueryManager.js.map +1 -1
  29. package/core/core.cjs +148 -90
  30. package/core/core.cjs.map +1 -1
  31. package/core/core.cjs.native.js +2146 -0
  32. package/core/index.d.ts +1 -1
  33. package/core/index.d.ts.map +1 -1
  34. package/core/index.js +1 -1
  35. package/core/index.js.map +1 -1
  36. package/core/watchQueryOptions.d.ts +9 -1
  37. package/core/watchQueryOptions.d.ts.map +1 -1
  38. package/core/watchQueryOptions.js.map +1 -1
  39. package/errors/errors.cjs.native.js +48 -0
  40. package/invariantErrorCodes.js +1 -1
  41. package/link/batch/batch.cjs +46 -37
  42. package/link/batch/batch.cjs.map +1 -1
  43. package/link/batch/batch.cjs.native.js +160 -0
  44. package/link/batch/batching.d.ts +2 -6
  45. package/link/batch/batching.d.ts.map +1 -1
  46. package/link/batch/batching.js +46 -37
  47. package/link/batch/batching.js.map +1 -1
  48. package/link/batch-http/batch-http.cjs.native.js +127 -0
  49. package/link/context/context.cjs.native.js +38 -0
  50. package/link/core/core.cjs.native.js +121 -0
  51. package/link/error/error.cjs.native.js +90 -0
  52. package/link/http/http.cjs.native.js +320 -0
  53. package/link/http/selectHttpOptionsAndBody.d.ts.map +1 -1
  54. package/link/http/selectHttpOptionsAndBody.js.map +1 -1
  55. package/link/persisted-queries/index.d.ts +2 -1
  56. package/link/persisted-queries/index.d.ts.map +1 -1
  57. package/link/persisted-queries/index.js +26 -13
  58. package/link/persisted-queries/index.js.map +1 -1
  59. package/link/persisted-queries/persisted-queries.cjs +25 -12
  60. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  61. package/link/persisted-queries/persisted-queries.cjs.native.js +174 -0
  62. package/link/retry/retry.cjs.native.js +170 -0
  63. package/link/schema/schema.cjs.native.js +56 -0
  64. package/link/subscriptions/subscriptions.cjs.native.js +45 -0
  65. package/link/utils/utils.cjs.native.js +115 -0
  66. package/link/ws/ws.cjs.native.js +28 -0
  67. package/main.cjs.native.js +16 -0
  68. package/package.json +30 -27
  69. package/react/components/components.cjs.native.js +79 -0
  70. package/react/context/ApolloConsumer.js +2 -2
  71. package/react/context/ApolloProvider.js +2 -2
  72. package/react/context/context.cjs +4 -4
  73. package/react/context/context.cjs.map +1 -1
  74. package/react/context/context.cjs.native.js +67 -0
  75. package/react/hoc/hoc.cjs.native.js +325 -0
  76. package/react/hooks/hooks.cjs +376 -253
  77. package/react/hooks/hooks.cjs.map +1 -1
  78. package/react/hooks/hooks.cjs.native.js +623 -0
  79. package/react/hooks/index.d.ts +1 -1
  80. package/react/hooks/index.d.ts.map +1 -1
  81. package/react/hooks/index.js +1 -1
  82. package/react/hooks/index.js.map +1 -1
  83. package/react/hooks/useLazyQuery.d.ts +2 -2
  84. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  85. package/react/hooks/useLazyQuery.js +26 -21
  86. package/react/hooks/useLazyQuery.js.map +1 -1
  87. package/react/hooks/useMutation.d.ts.map +1 -1
  88. package/react/hooks/useMutation.js +13 -10
  89. package/react/hooks/useMutation.js.map +1 -1
  90. package/react/hooks/useQuery.d.ts +37 -2
  91. package/react/hooks/useQuery.d.ts.map +1 -1
  92. package/react/hooks/useQuery.js +256 -206
  93. package/react/hooks/useQuery.js.map +1 -1
  94. package/react/hooks/useSubscription.d.ts.map +1 -1
  95. package/react/hooks/useSubscription.js +17 -7
  96. package/react/hooks/useSubscription.js.map +1 -1
  97. package/react/hooks/useSyncExternalStore.d.ts +4 -0
  98. package/react/hooks/useSyncExternalStore.d.ts.map +1 -0
  99. package/react/hooks/useSyncExternalStore.js +48 -0
  100. package/react/hooks/useSyncExternalStore.js.map +1 -0
  101. package/react/parser/index.d.ts.map +1 -1
  102. package/react/parser/index.js +24 -10
  103. package/react/parser/index.js.map +1 -1
  104. package/react/parser/parser.cjs +24 -10
  105. package/react/parser/parser.cjs.map +1 -1
  106. package/react/parser/parser.cjs.native.js +103 -0
  107. package/react/react.cjs.native.js +22 -0
  108. package/react/ssr/RenderPromises.d.ts +3 -2
  109. package/react/ssr/RenderPromises.d.ts.map +1 -1
  110. package/react/ssr/RenderPromises.js +25 -3
  111. package/react/ssr/RenderPromises.js.map +1 -1
  112. package/react/ssr/ssr.cjs +25 -3
  113. package/react/ssr/ssr.cjs.map +1 -1
  114. package/react/ssr/ssr.cjs.native.js +150 -0
  115. package/react/types/types.d.ts +10 -11
  116. package/react/types/types.d.ts.map +1 -1
  117. package/react/types/types.js.map +1 -1
  118. package/testing/core/core.cjs.native.js +288 -0
  119. package/testing/core/mocking/mockFetch.js +1 -1
  120. package/testing/core/mocking/mockFetch.js.map +1 -1
  121. package/testing/core/mocking/mockQueryManager.js +1 -1
  122. package/testing/core/mocking/mockWatchQuery.js +1 -1
  123. package/testing/core/wrap.js +1 -1
  124. package/testing/testing.cjs.native.js +58 -0
  125. package/utilities/common/canUse.d.ts +2 -0
  126. package/utilities/common/canUse.d.ts.map +1 -1
  127. package/utilities/common/canUse.js +6 -2
  128. package/utilities/common/canUse.js.map +1 -1
  129. package/utilities/common/mergeDeep.d.ts.map +1 -1
  130. package/utilities/common/mergeDeep.js +8 -11
  131. package/utilities/common/mergeDeep.js.map +1 -1
  132. package/utilities/common/mergeOptions.d.ts +5 -0
  133. package/utilities/common/mergeOptions.d.ts.map +1 -0
  134. package/utilities/common/mergeOptions.js +8 -0
  135. package/utilities/common/mergeOptions.js.map +1 -0
  136. package/utilities/globals/global.js +1 -2
  137. package/utilities/globals/globals.cjs.native.js +56 -0
  138. package/utilities/graphql/transform.d.ts +2 -2
  139. package/utilities/graphql/transform.d.ts.map +1 -1
  140. package/utilities/graphql/transform.js +1 -1
  141. package/utilities/graphql/transform.js.map +1 -1
  142. package/utilities/index.d.ts +1 -0
  143. package/utilities/index.d.ts.map +1 -1
  144. package/utilities/index.js +1 -0
  145. package/utilities/index.js.map +1 -1
  146. package/utilities/observables/Concast.d.ts +1 -0
  147. package/utilities/observables/Concast.d.ts.map +1 -1
  148. package/utilities/observables/Concast.js +5 -2
  149. package/utilities/observables/Concast.js.map +1 -1
  150. package/utilities/policies/pagination.d.ts.map +1 -1
  151. package/utilities/policies/pagination.js +9 -7
  152. package/utilities/policies/pagination.js.map +1 -1
  153. package/utilities/utilities.cjs +37 -23
  154. package/utilities/utilities.cjs.map +1 -1
  155. package/utilities/utilities.cjs.native.js +1281 -0
  156. 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,350 @@ 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(this.getObsQueryOptions());
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.getObsQueryOptions = function () {
230
+ var toMerge = [];
231
+ var globalDefaults = this.client.defaultOptions.watchQuery;
232
+ if (globalDefaults)
233
+ toMerge.push(globalDefaults);
234
+ if (this.queryHookOptions.defaultOptions) {
235
+ toMerge.push(this.queryHookOptions.defaultOptions);
123
236
  }
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
- }
237
+ toMerge.push(utilities.compact(this.observable && this.observable.options, this.watchQueryOptions));
238
+ return toMerge.reduce(core.mergeOptions);
239
+ };
240
+ InternalState.prototype.createWatchQueryOptions = function (_a) {
241
+ var _b;
242
+ if (_a === void 0) { _a = {}; }
243
+ 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"]);
244
+ var watchQueryOptions = Object.assign(otherOptions, { query: this.query });
245
+ if (this.renderPromises &&
246
+ (watchQueryOptions.fetchPolicy === 'network-only' ||
247
+ watchQueryOptions.fetchPolicy === 'cache-and-network')) {
248
+ watchQueryOptions.fetchPolicy = 'cache-first';
142
249
  }
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;
250
+ if (!watchQueryOptions.variables) {
251
+ watchQueryOptions.variables = {};
252
+ }
253
+ if (skip) {
254
+ var _c = watchQueryOptions.fetchPolicy, fetchPolicy = _c === void 0 ? this.getDefaultFetchPolicy() : _c, _d = watchQueryOptions.initialFetchPolicy, initialFetchPolicy = _d === void 0 ? fetchPolicy : _d;
255
+ Object.assign(watchQueryOptions, {
256
+ initialFetchPolicy: initialFetchPolicy,
257
+ fetchPolicy: 'standby',
258
+ });
259
+ }
260
+ else if (!watchQueryOptions.fetchPolicy) {
261
+ watchQueryOptions.fetchPolicy =
262
+ ((_b = this.observable) === null || _b === void 0 ? void 0 : _b.options.initialFetchPolicy) ||
263
+ this.getDefaultFetchPolicy();
264
+ }
265
+ return watchQueryOptions;
266
+ };
267
+ InternalState.prototype.getDefaultFetchPolicy = function () {
268
+ var _a, _b;
269
+ return (((_a = this.queryHookOptions.defaultOptions) === null || _a === void 0 ? void 0 : _a.fetchPolicy) ||
270
+ ((_b = this.client.defaultOptions.watchQuery) === null || _b === void 0 ? void 0 : _b.fetchPolicy) ||
271
+ "cache-first");
272
+ };
273
+ InternalState.prototype.onCompleted = function (data) { };
274
+ InternalState.prototype.onError = function (error) { };
275
+ InternalState.prototype.useObservableQuery = function () {
276
+ var obsQuery = this.observable =
277
+ this.renderPromises
278
+ && this.renderPromises.getSSRObservable(this.watchQueryOptions)
279
+ || this.observable
280
+ || this.client.watchQuery(this.getObsQueryOptions());
281
+ this.obsQueryFields = React.useMemo(function () { return ({
282
+ refetch: obsQuery.refetch.bind(obsQuery),
283
+ reobserve: obsQuery.reobserve.bind(obsQuery),
284
+ fetchMore: obsQuery.fetchMore.bind(obsQuery),
285
+ updateQuery: obsQuery.updateQuery.bind(obsQuery),
286
+ startPolling: obsQuery.startPolling.bind(obsQuery),
287
+ stopPolling: obsQuery.stopPolling.bind(obsQuery),
288
+ subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
289
+ }); }, [obsQuery]);
290
+ var ssrAllowed = !(this.queryHookOptions.ssr === false ||
291
+ this.queryHookOptions.skip);
292
+ if (this.renderPromises && ssrAllowed) {
293
+ this.renderPromises.registerSSRObservable(obsQuery);
294
+ if (obsQuery.getCurrentResult().loading) {
295
+ this.renderPromises.addObservableQueryPromise(obsQuery);
153
296
  }
154
- if (!error.hasOwnProperty('graphQLErrors')) {
155
- throw error;
297
+ }
298
+ return obsQuery;
299
+ };
300
+ InternalState.prototype.setResult = function (nextResult) {
301
+ var previousResult = this.result;
302
+ if (previousResult && previousResult.data) {
303
+ this.previousData = previousResult.data;
304
+ }
305
+ this.result = nextResult;
306
+ this.forceUpdate();
307
+ this.handleErrorOrCompleted(nextResult);
308
+ };
309
+ InternalState.prototype.handleErrorOrCompleted = function (result) {
310
+ if (!result.loading) {
311
+ if (result.error) {
312
+ this.onError(result.error);
156
313
  }
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);
314
+ else if (result.data) {
315
+ this.onCompleted(result.data);
167
316
  }
168
317
  }
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) &&
318
+ };
319
+ InternalState.prototype.getCurrentResult = function () {
320
+ if (!this.result) {
321
+ this.handleErrorOrCompleted(this.result = this.observable.getCurrentResult());
322
+ }
323
+ return this.result;
324
+ };
325
+ InternalState.prototype.toQueryResult = function (result) {
326
+ var queryResult = this.toQueryResultCache.get(result);
327
+ if (queryResult)
328
+ return queryResult;
329
+ var data = result.data; result.partial; var resultWithoutPartial = tslib.__rest(result, ["data", "partial"]);
330
+ 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: !this.queryHookOptions.skip, previousData: this.previousData }));
331
+ if (!queryResult.error && utilities.isNonEmptyArray(result.errors)) {
332
+ queryResult.error = new errors.ApolloError({ graphQLErrors: result.errors });
333
+ }
334
+ return queryResult;
335
+ };
336
+ InternalState.prototype.unsafeHandlePartialRefetch = function (result) {
337
+ if (result.partial &&
338
+ this.queryHookOptions.partialRefetch &&
176
339
  !result.loading &&
177
340
  (!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 () { });
341
+ this.observable.options.fetchPolicy !== 'cache-only') {
342
+ Object.assign(result, {
343
+ loading: true,
344
+ networkStatus: core.NetworkStatus.refetch,
345
+ });
346
+ this.observable.refetch();
187
347
  }
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
- }
348
+ };
349
+ return InternalState;
350
+ }());
244
351
 
245
352
  var EAGER_METHODS = [
246
353
  'refetch',
354
+ 'reobserve',
247
355
  'fetchMore',
248
356
  'updateQuery',
249
357
  'startPolling',
250
358
  'subscribeToMore',
251
359
  ];
252
360
  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 () {
361
+ var internalState = useInternalState(useApolloClient(options && options.client), query);
362
+ var execOptionsRef = React.useRef();
363
+ var merged = execOptionsRef.current
364
+ ? utilities.mergeOptions(options, execOptionsRef.current)
365
+ : options;
366
+ var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign({}, merged), { skip: !execOptionsRef.current }));
367
+ var initialFetchPolicy = useQueryResult.observable.options.initialFetchPolicy ||
368
+ internalState.getDefaultFetchPolicy();
369
+ var result = Object.assign(useQueryResult, {
370
+ called: !!execOptionsRef.current,
371
+ });
372
+ var eagerMethods = React.useMemo(function () {
261
373
  var eagerMethods = {};
262
374
  var _loop_1 = function (key) {
263
375
  var method = result[key];
264
376
  eagerMethods[key] = function () {
265
- var args = [];
266
- for (var _i = 0; _i < arguments.length; _i++) {
267
- args[_i] = arguments[_i];
377
+ if (!execOptionsRef.current) {
378
+ execOptionsRef.current = Object.create(null);
379
+ internalState.forceUpdate();
268
380
  }
269
- setExecution(function (execution) { return (tslib.__assign(tslib.__assign({}, execution), { called: true })); });
270
- return method.apply(void 0, args);
381
+ return method.apply(this, arguments);
271
382
  };
272
383
  };
273
384
  for (var _i = 0, EAGER_METHODS_1 = EAGER_METHODS; _i < EAGER_METHODS_1.length; _i++) {
@@ -276,15 +387,14 @@ function useLazyQuery(query, options) {
276
387
  }
277
388
  return eagerMethods;
278
389
  }, []);
279
- result.error = result.error || void 0;
280
390
  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
- });
391
+ var execute = React.useCallback(function (executeOptions) {
392
+ execOptionsRef.current = executeOptions ? tslib.__assign(tslib.__assign({}, executeOptions), { fetchPolicy: executeOptions.fetchPolicy || initialFetchPolicy }) : {
393
+ fetchPolicy: initialFetchPolicy,
394
+ };
395
+ var promise = internalState
396
+ .asyncUpdate()
397
+ .then(function (queryResult) { return Object.assign(queryResult, eagerMethods); });
288
398
  promise.catch(function () { });
289
399
  return promise;
290
400
  }, []);
@@ -294,12 +404,12 @@ function useLazyQuery(query, options) {
294
404
  function useMutation(mutation, options) {
295
405
  var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
296
406
  parser.verifyDocumentType(mutation, parser.DocumentType.Mutation);
297
- var _a = react.useState({
407
+ var _a = React.useState({
298
408
  called: false,
299
409
  loading: false,
300
410
  client: client,
301
411
  }), result = _a[0], setResult = _a[1];
302
- var ref = react.useRef({
412
+ var ref = React.useRef({
303
413
  result: result,
304
414
  mutationId: 0,
305
415
  isMounted: true,
@@ -310,7 +420,7 @@ function useMutation(mutation, options) {
310
420
  {
311
421
  Object.assign(ref.current, { client: client, options: options, mutation: mutation });
312
422
  }
313
- var execute = react.useCallback(function (executeOptions) {
423
+ var execute = React.useCallback(function (executeOptions) {
314
424
  if (executeOptions === void 0) { executeOptions = {}; }
315
425
  var _a = ref.current, client = _a.client, options = _a.options, mutation = _a.mutation;
316
426
  var baseOptions = tslib.__assign(tslib.__assign({}, options), { mutation: mutation });
@@ -326,7 +436,7 @@ function useMutation(mutation, options) {
326
436
  var mutationId = ++ref.current.mutationId;
327
437
  var clientOptions = core.mergeOptions(baseOptions, executeOptions);
328
438
  return client.mutate(clientOptions).then(function (response) {
329
- var _a, _b;
439
+ var _a, _b, _c;
330
440
  var data = response.data, errors$1 = response.errors;
331
441
  var error = errors$1 && errors$1.length > 0
332
442
  ? new errors.ApolloError({ graphQLErrors: errors$1 })
@@ -344,11 +454,11 @@ function useMutation(mutation, options) {
344
454
  setResult(ref.current.result = result_1);
345
455
  }
346
456
  }
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);
457
+ (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onCompleted) === null || _b === void 0 ? void 0 : _b.call(_a, response.data);
458
+ (_c = executeOptions.onCompleted) === null || _c === void 0 ? void 0 : _c.call(executeOptions, response.data);
349
459
  return response;
350
460
  }).catch(function (error) {
351
- var _a, _b;
461
+ var _a, _b, _c, _d;
352
462
  if (mutationId === ref.current.mutationId &&
353
463
  ref.current.isMounted) {
354
464
  var result_2 = {
@@ -362,33 +472,36 @@ function useMutation(mutation, options) {
362
472
  setResult(ref.current.result = result_2);
363
473
  }
364
474
  }
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);
475
+ if (((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) || clientOptions.onError) {
476
+ (_c = (_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onError) === null || _c === void 0 ? void 0 : _c.call(_b, error);
477
+ (_d = executeOptions.onError) === null || _d === void 0 ? void 0 : _d.call(executeOptions, error);
368
478
  return { data: void 0, errors: error };
369
479
  }
370
480
  throw error;
371
481
  });
372
482
  }, []);
373
- var reset = react.useCallback(function () {
483
+ var reset = React.useCallback(function () {
374
484
  setResult({ called: false, loading: false, client: client });
375
485
  }, []);
376
- react.useEffect(function () { return function () {
377
- ref.current.isMounted = false;
378
- }; }, []);
486
+ React.useEffect(function () {
487
+ ref.current.isMounted = true;
488
+ return function () {
489
+ ref.current.isMounted = false;
490
+ };
491
+ }, []);
379
492
  return [execute, tslib.__assign({ reset: reset }, result)];
380
493
  }
381
494
 
382
495
  function useSubscription(subscription, options) {
383
496
  var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
384
497
  parser.verifyDocumentType(subscription, parser.DocumentType.Subscription);
385
- var _a = react.useState({
498
+ var _a = React.useState({
386
499
  loading: !(options === null || options === void 0 ? void 0 : options.skip),
387
500
  error: void 0,
388
501
  data: void 0,
389
502
  variables: options === null || options === void 0 ? void 0 : options.variables,
390
503
  }), result = _a[0], setResult = _a[1];
391
- var _b = react.useState(function () {
504
+ var _b = React.useState(function () {
392
505
  if (options === null || options === void 0 ? void 0 : options.skip) {
393
506
  return null;
394
507
  }
@@ -399,15 +512,21 @@ function useSubscription(subscription, options) {
399
512
  context: options === null || options === void 0 ? void 0 : options.context,
400
513
  });
401
514
  }), observable = _b[0], setObservable = _b[1];
402
- var ref = react.useRef({ client: client, subscription: subscription, options: options });
403
- react.useEffect(function () {
515
+ var canResetObservableRef = React.useRef(false);
516
+ React.useEffect(function () {
517
+ return function () {
518
+ canResetObservableRef.current = true;
519
+ };
520
+ }, []);
521
+ var ref = React.useRef({ client: client, subscription: subscription, options: options });
522
+ React.useEffect(function () {
404
523
  var _a, _b, _c, _d;
405
524
  var shouldResubscribe = options === null || options === void 0 ? void 0 : options.shouldResubscribe;
406
525
  if (typeof shouldResubscribe === 'function') {
407
526
  shouldResubscribe = !!shouldResubscribe(options);
408
527
  }
409
528
  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)) {
529
+ 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
530
  setResult({
412
531
  loading: false,
413
532
  data: void 0,
@@ -415,13 +534,16 @@ function useSubscription(subscription, options) {
415
534
  variables: options === null || options === void 0 ? void 0 : options.variables,
416
535
  });
417
536
  setObservable(null);
537
+ canResetObservableRef.current = false;
418
538
  }
419
539
  }
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))) {
540
+ else if ((shouldResubscribe !== false &&
541
+ (client !== ref.current.client ||
542
+ subscription !== ref.current.subscription ||
543
+ (options === null || options === void 0 ? void 0 : options.fetchPolicy) !== ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.fetchPolicy) ||
544
+ !(options === null || options === void 0 ? void 0 : options.skip) !== !((_c = ref.current.options) === null || _c === void 0 ? void 0 : _c.skip) ||
545
+ !equality.equal(options === null || options === void 0 ? void 0 : options.variables, (_d = ref.current.options) === null || _d === void 0 ? void 0 : _d.variables))) ||
546
+ canResetObservableRef.current) {
425
547
  setResult({
426
548
  loading: true,
427
549
  data: void 0,
@@ -434,10 +556,11 @@ function useSubscription(subscription, options) {
434
556
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
435
557
  context: options === null || options === void 0 ? void 0 : options.context,
436
558
  }));
559
+ canResetObservableRef.current = false;
437
560
  }
438
561
  Object.assign(ref.current, { client: client, subscription: subscription, options: options });
439
- }, [client, subscription, options]);
440
- react.useEffect(function () {
562
+ }, [client, subscription, options, canResetObservableRef.current]);
563
+ React.useEffect(function () {
441
564
  if (!observable) {
442
565
  return;
443
566
  }
@@ -478,8 +601,8 @@ function useSubscription(subscription, options) {
478
601
 
479
602
  function useReactiveVar(rv) {
480
603
  var value = rv();
481
- var setValue = react.useState(value)[1];
482
- react.useEffect(function () {
604
+ var setValue = React.useState(value)[1];
605
+ React.useEffect(function () {
483
606
  var probablySameValue = rv();
484
607
  if (value !== probablySameValue) {
485
608
  setValue(probablySameValue);