@apollo/client 3.5.10 → 3.6.4

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