@apollo/client 3.6.0-beta.3 → 3.6.0-beta.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 (54) hide show
  1. package/apollo-client.cjs +233 -196
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/core/ObservableQuery.d.ts.map +1 -1
  5. package/core/ObservableQuery.js +6 -3
  6. package/core/ObservableQuery.js.map +1 -1
  7. package/core/core.cjs +7 -4
  8. package/core/core.cjs.map +1 -1
  9. package/invariantErrorCodes.js +3 -3
  10. package/link/batch/batch.cjs +47 -37
  11. package/link/batch/batch.cjs.map +1 -1
  12. package/link/batch/batching.d.ts +2 -6
  13. package/link/batch/batching.d.ts.map +1 -1
  14. package/link/batch/batching.js +47 -37
  15. package/link/batch/batching.js.map +1 -1
  16. package/link/subscriptions/index.d.ts +9 -0
  17. package/link/subscriptions/index.d.ts.map +1 -0
  18. package/link/subscriptions/index.js +39 -0
  19. package/link/subscriptions/index.js.map +1 -0
  20. package/link/subscriptions/package.json +8 -0
  21. package/link/subscriptions/subscriptions.cjs +45 -0
  22. package/link/subscriptions/subscriptions.cjs.map +1 -0
  23. package/package.json +20 -19
  24. package/react/hooks/hooks.cjs +225 -191
  25. package/react/hooks/hooks.cjs.map +1 -1
  26. package/react/hooks/useApolloClient.js +2 -2
  27. package/react/hooks/useApolloClient.js.map +1 -1
  28. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  29. package/react/hooks/useLazyQuery.js +20 -27
  30. package/react/hooks/useLazyQuery.js.map +1 -1
  31. package/react/hooks/useMutation.d.ts.map +1 -1
  32. package/react/hooks/useMutation.js +59 -68
  33. package/react/hooks/useMutation.js.map +1 -1
  34. package/react/hooks/useQuery.d.ts.map +1 -1
  35. package/react/hooks/useQuery.js +137 -88
  36. package/react/hooks/useQuery.js.map +1 -1
  37. package/react/hooks/useSubscription.d.ts.map +1 -1
  38. package/react/hooks/useSubscription.js +10 -8
  39. package/react/hooks/useSubscription.js.map +1 -1
  40. package/react/ssr/RenderPromises.d.ts +2 -2
  41. package/react/ssr/RenderPromises.d.ts.map +1 -1
  42. package/react/ssr/RenderPromises.js +7 -5
  43. package/react/ssr/RenderPromises.js.map +1 -1
  44. package/react/ssr/ssr.cjs +7 -5
  45. package/react/ssr/ssr.cjs.map +1 -1
  46. package/react/types/types.d.ts +1 -1
  47. package/react/types/types.d.ts.map +1 -1
  48. package/react/types/types.js.map +1 -1
  49. package/utilities/globals/global.d.ts.map +1 -1
  50. package/utilities/globals/global.js +1 -1
  51. package/utilities/globals/global.js.map +1 -1
  52. package/utilities/globals/globals.cjs +1 -1
  53. package/utilities/globals/globals.cjs.map +1 -1
  54. package/version.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/client",
3
- "version": "3.6.0-beta.3",
3
+ "version": "3.6.0-beta.4",
4
4
  "description": "A fully-featured caching GraphQL client.",
5
5
  "private": false,
6
6
  "keywords": [
@@ -30,18 +30,18 @@
30
30
  "homepage": "https://www.apollographql.com/docs/react/",
31
31
  "peerDependencies": {
32
32
  "graphql": "^14.0.0 || ^15.0.0 || ^16.0.0",
33
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0-beta",
34
- "subscriptions-transport-ws": "^0.9.0 || ^0.11.0",
35
- "use-sync-external-store": "^1.0.0-beta-4ff5f5719-20211115"
33
+ "graphql-ws": "^5.5.5",
34
+ "react": "^16.8.0 || ^17.0.0",
35
+ "subscriptions-transport-ws": "^0.9.0 || ^0.11.0"
36
36
  },
37
37
  "peerDependenciesMeta": {
38
- "react": {
38
+ "graphql-ws": {
39
39
  "optional": true
40
40
  },
41
- "subscriptions-transport-ws": {
41
+ "react": {
42
42
  "optional": true
43
43
  },
44
- "use-sync-external-store": {
44
+ "subscriptions-transport-ws": {
45
45
  "optional": true
46
46
  }
47
47
  },
@@ -55,12 +55,12 @@
55
55
  "optimism": "^0.16.1",
56
56
  "prop-types": "^15.7.2",
57
57
  "symbol-observable": "^4.0.0",
58
- "ts-invariant": "^0.9.0",
58
+ "ts-invariant": "^0.9.4",
59
59
  "tslib": "^2.3.0",
60
60
  "zen-observable-ts": "^1.2.0"
61
61
  },
62
62
  "devDependencies": {
63
- "@babel/parser": "7.16.4",
63
+ "@babel/parser": "7.16.12",
64
64
  "@graphql-tools/schema": "8.3.1",
65
65
  "@rollup/plugin-node-resolve": "11.2.1",
66
66
  "@testing-library/react": "12.1.2",
@@ -69,33 +69,34 @@
69
69
  "@types/fetch-mock": "7.3.5",
70
70
  "@types/glob": "7.2.0",
71
71
  "@types/hoist-non-react-statics": "3.3.1",
72
- "@types/jest": "27.0.3",
73
- "@types/lodash": "4.14.177",
74
- "@types/node": "16.11.9",
72
+ "@types/jest": "27.4.0",
73
+ "@types/lodash": "4.14.178",
74
+ "@types/node": "16.11.21",
75
75
  "@types/react": "17.0.34",
76
76
  "@types/react-dom": "17.0.2",
77
- "@types/use-sync-external-store": "^0.0.3",
77
+ "acorn": "8.6.0",
78
78
  "bundlesize": "0.18.1",
79
- "cross-fetch": "3.1.4",
79
+ "cross-fetch": "3.1.5",
80
80
  "crypto-hash": "1.3.0",
81
81
  "fetch-mock": "9.11.0",
82
82
  "glob": "7.2.0",
83
83
  "graphql": "16.0.1",
84
- "jest": "27.3.1",
84
+ "graphql-ws": "5.5.5",
85
+ "jest": "27.4.7",
85
86
  "jest-fetch-mock": "3.0.3",
86
87
  "jest-junit": "13.0.0",
87
88
  "lodash": "4.17.21",
88
89
  "react": "17.0.2",
89
90
  "react-dom": "17.0.2",
90
- "recast": "0.20.5",
91
- "resolve": "1.20.0",
91
+ "recast": "0.21.0",
92
+ "resolve": "1.22.0",
92
93
  "rimraf": "3.0.2",
93
- "rollup": "2.60.0",
94
+ "rollup": "2.66.1",
94
95
  "rollup-plugin-terser": "7.0.2",
95
96
  "rxjs": "6.6.7",
96
97
  "subscriptions-transport-ws": "0.11.0",
97
98
  "terser": "5.10.0",
98
- "ts-jest": "27.0.7",
99
+ "ts-jest": "27.1.3",
99
100
  "ts-node": "10.4.0",
100
101
  "typescript": "4.5.2",
101
102
  "wait-for-observables": "1.0.3",
@@ -6,18 +6,17 @@ var globals = require('../../utilities/globals');
6
6
  var react = require('react');
7
7
  var context = require('../context');
8
8
  var tslib = require('tslib');
9
- var shim = require('use-sync-external-store/shim');
10
9
  var equality = require('@wry/equality');
11
- var errors = require('../../errors');
12
10
  var core = require('../../core');
11
+ var errors = require('../../errors');
13
12
  var parser = require('../parser');
14
13
 
15
14
  function useApolloClient(override) {
16
15
  var context$1 = react.useContext(context.getApolloContext());
17
16
  var client = override || context$1.client;
18
17
  __DEV__ ? globals.invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
19
- 'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient' +
20
- 'ApolloClient instance in via options.') : globals.invariant(!!client, 29);
18
+ 'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
19
+ 'instance in via options.') : globals.invariant(!!client, 29);
21
20
  return client;
22
21
  }
23
22
 
@@ -25,15 +24,10 @@ function useQuery(query, options) {
25
24
  var _a;
26
25
  var context$1 = react.useContext(context.getApolloContext());
27
26
  var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
27
+ var defaultWatchQueryOptions = client.defaultOptions.watchQuery;
28
28
  parser.verifyDocumentType(query, parser.DocumentType.Query);
29
- var ref = react.useRef({
30
- client: client,
31
- query: query,
32
- options: options,
33
- watchQueryOptions: createWatchQueryOptions(query, options),
34
- });
35
29
  var _b = react.useState(function () {
36
- var watchQueryOptions = createWatchQueryOptions(query, options);
30
+ var watchQueryOptions = createWatchQueryOptions(query, options, defaultWatchQueryOptions);
37
31
  var obsQuery = null;
38
32
  if (context$1.renderPromises) {
39
33
  obsQuery = context$1.renderPromises.getSSRObservable(watchQueryOptions);
@@ -49,7 +43,7 @@ function useQuery(query, options) {
49
43
  !(options === null || options === void 0 ? void 0 : options.skip) &&
50
44
  obsQuery.getCurrentResult().loading) {
51
45
  context$1.renderPromises.addQueryPromise({
52
- getOptions: function () { return createWatchQueryOptions(query, options); },
46
+ getOptions: function () { return createWatchQueryOptions(query, options, defaultWatchQueryOptions); },
53
47
  fetchData: function () { return new Promise(function (resolve) {
54
48
  var sub = obsQuery.subscribe({
55
49
  next: function (result) {
@@ -71,96 +65,112 @@ function useQuery(query, options) {
71
65
  }
72
66
  return obsQuery;
73
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);
77
+ }
78
+ }
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
+ });
74
89
  react.useEffect(function () {
75
- var watchQueryOptions = createWatchQueryOptions(query, options);
90
+ var _a, _b;
91
+ var watchQueryOptions = createWatchQueryOptions(query, options, defaultWatchQueryOptions);
92
+ var nextResult;
76
93
  if (ref.current.client !== client || !equality.equal(ref.current.query, query)) {
77
94
  var obsQuery_1 = client.watchQuery(watchQueryOptions);
78
95
  setObsQuery(obsQuery_1);
96
+ nextResult = obsQuery_1.getCurrentResult();
79
97
  }
80
98
  else if (!equality.equal(ref.current.watchQueryOptions, watchQueryOptions)) {
81
- obsQuery.setOptions(watchQueryOptions);
82
- setObsQuery(obsQuery);
99
+ obsQuery.setOptions(watchQueryOptions).catch(function () { });
100
+ nextResult = obsQuery.getCurrentResult();
101
+ ref.current.watchQueryOptions = watchQueryOptions;
83
102
  }
84
- Object.assign(ref.current, {
85
- client: client,
86
- query: query,
87
- options: options,
88
- watchQueryOptions: watchQueryOptions,
89
- });
90
- }, [obsQuery, client, query, options]);
91
- var _c = react.useMemo(function () {
92
- var previousResult;
93
- var subscribe = function (forceUpdate) {
94
- var subscription = obsQuery.subscribe(forceUpdate, onError);
95
- function onError(error) {
96
- forceUpdate();
97
- subscription.unsubscribe();
98
- var last = obsQuery["last"];
99
- obsQuery.resetLastResults();
100
- obsQuery.subscribe(forceUpdate, onError);
101
- obsQuery["last"] = last;
102
- if (!error.hasOwnProperty('graphQLErrors')) {
103
- throw error;
104
- }
103
+ if (nextResult) {
104
+ var previousResult = ref.current.result;
105
+ if (previousResult.data) {
106
+ ref.current.previousData = previousResult.data;
105
107
  }
106
- return function () {
107
- subscription.unsubscribe();
108
- };
109
- };
110
- var getSnapshot = function () {
111
- var result = obsQuery.getCurrentResult();
112
- if (result.errors && result.errors.length) {
113
- result = tslib.__assign(tslib.__assign({}, result), { error: result.error || new errors.ApolloError({ graphQLErrors: result.errors }) });
114
- }
115
- if (!previousResult ||
116
- previousResult.loading !== result.loading ||
117
- previousResult.networkStatus !== result.networkStatus ||
118
- !equality.equal(previousResult.data, result.data) ||
119
- !equality.equal(previousResult.error, result.error)) {
120
- if (previousResult) {
121
- result = tslib.__assign(tslib.__assign({}, result), { previousData: previousResult.data || previousResult.previousData });
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);
122
115
  }
123
- previousResult = result;
124
116
  }
125
- return previousResult;
126
- };
127
- return [subscribe, getSnapshot];
128
- }, [obsQuery]), subscribe = _c[0], getSnapshot = _c[1];
129
- var obsQueryMethods = react.useMemo(function () { return ({
130
- refetch: obsQuery.refetch.bind(obsQuery),
131
- fetchMore: obsQuery.fetchMore.bind(obsQuery),
132
- updateQuery: obsQuery.updateQuery.bind(obsQuery),
133
- startPolling: obsQuery.startPolling.bind(obsQuery),
134
- stopPolling: obsQuery.stopPolling.bind(obsQuery),
135
- subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
136
- }); }, [obsQuery]);
137
- var result = shim.useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
117
+ }
118
+ Object.assign(ref.current, { client: client, query: query });
119
+ }, [obsQuery, client, query, options]);
138
120
  react.useEffect(function () {
139
- var _a, _b, _c, _d, _e, _f;
140
- if (((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.skip) ||
141
- ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.fetchPolicy) === 'standby') {
121
+ if (context$1.renderPromises) {
142
122
  return;
143
123
  }
144
- if (!result.loading) {
145
- if (result.error) {
146
- (_d = (_c = ref.current.options) === null || _c === void 0 ? void 0 : _c.onError) === null || _d === void 0 ? void 0 : _d.call(_c, result.error);
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;
147
134
  }
148
- else if (result.data) {
149
- (_f = (_e = ref.current.options) === null || _e === void 0 ? void 0 : _e.onCompleted) === null || _f === void 0 ? void 0 : _f.call(_e, result.data);
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
+ }
142
+ }
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;
153
+ }
154
+ if (!error.hasOwnProperty('graphQLErrors')) {
155
+ throw error;
156
+ }
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);
150
167
  }
151
168
  }
152
- }, [result]);
169
+ return function () { return subscription.unsubscribe(); };
170
+ }, [obsQuery, context$1.renderPromises, client.disableNetworkFetches]);
153
171
  var partial;
154
172
  (_a = result, partial = _a.partial, result = tslib.__rest(_a, ["partial"]));
155
- if ((options === null || options === void 0 ? void 0 : options.skip) || (options === null || options === void 0 ? void 0 : options.fetchPolicy) === 'standby') {
156
- result = {
157
- loading: false,
158
- data: void 0,
159
- error: void 0,
160
- networkStatus: core.NetworkStatus.ready,
161
- };
162
- }
163
- else {
173
+ {
164
174
  if (partial &&
165
175
  (options === null || options === void 0 ? void 0 : options.partialRefetch) &&
166
176
  !result.loading &&
@@ -169,17 +179,52 @@ function useQuery(query, options) {
169
179
  result = tslib.__assign(tslib.__assign({}, result), { loading: true, networkStatus: core.NetworkStatus.refetch });
170
180
  obsQuery.refetch();
171
181
  }
172
- if (context$1.renderPromises && (options === null || options === void 0 ? void 0 : options.ssr) !== false && result.loading) {
173
- obsQuery.setOptions(createWatchQueryOptions(query, options))
174
- .catch(function () { });
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 () { });
175
187
  }
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
+ };
176
206
  }
177
- return tslib.__assign(tslib.__assign(tslib.__assign({}, obsQueryMethods), { variables: obsQuery.variables, client: client, called: true }), result);
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);
178
219
  }
179
- function createWatchQueryOptions(query, options) {
220
+ function createWatchQueryOptions(query, options, defaultOptions) {
180
221
  var _a;
181
222
  if (options === void 0) { options = {}; }
182
- var skip = options.skip; options.ssr; options.onCompleted; options.onError; options.displayName; var watchQueryOptions = tslib.__rest(options, ["skip", "ssr", "onCompleted", "onError", "displayName"]);
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
+ }
183
228
  if (skip) {
184
229
  watchQueryOptions.fetchPolicy = 'standby';
185
230
  }
@@ -191,7 +236,10 @@ function createWatchQueryOptions(query, options) {
191
236
  else if (!watchQueryOptions.fetchPolicy) {
192
237
  watchQueryOptions.fetchPolicy = 'cache-first';
193
238
  }
194
- return tslib.__assign({ query: query }, watchQueryOptions);
239
+ if (!watchQueryOptions.variables) {
240
+ watchQueryOptions.variables = {};
241
+ }
242
+ return watchQueryOptions;
195
243
  }
196
244
 
197
245
  var EAGER_METHODS = [
@@ -204,36 +252,16 @@ var EAGER_METHODS = [
204
252
  function useLazyQuery(query, options) {
205
253
  var _a = react.useState({
206
254
  called: false,
207
- resolves: [],
208
255
  }), execution = _a[0], setExecution = _a[1];
209
- var execute = react.useCallback(function (executeOptions) {
210
- var resolve;
211
- var promise = new Promise(function (resolve1) { return (resolve = resolve1); });
212
- setExecution(function (execution) {
213
- if (execution.called) {
214
- result && result.refetch(executeOptions === null || executeOptions === void 0 ? void 0 : executeOptions.variables);
215
- }
216
- return {
217
- called: true,
218
- resolves: tslib.__spreadArray(tslib.__spreadArray([], execution.resolves, true), [resolve], false),
219
- options: executeOptions,
220
- };
221
- });
222
- return promise;
223
- }, []);
224
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 }));
225
- react.useEffect(function () {
226
- var resolves = execution.resolves;
227
- if (!result.loading && resolves.length) {
228
- setExecution(function (execution) { return (tslib.__assign(tslib.__assign({}, execution), { resolves: [] })); });
229
- resolves.forEach(function (resolve) { return resolve(result); });
230
- }
231
- }, [result, execution]);
232
257
  if (!execution.called) {
233
258
  result = tslib.__assign(tslib.__assign({}, result), { loading: false, data: void 0, error: void 0, called: false });
259
+ }
260
+ var eagerMethods = react.useMemo(function () {
261
+ var eagerMethods = {};
234
262
  var _loop_1 = function (key) {
235
263
  var method = result[key];
236
- result[key] = function () {
264
+ eagerMethods[key] = function () {
237
265
  var args = [];
238
266
  for (var _i = 0; _i < arguments.length; _i++) {
239
267
  args[_i] = arguments[_i];
@@ -246,7 +274,20 @@ function useLazyQuery(query, options) {
246
274
  var key = EAGER_METHODS_1[_i];
247
275
  _loop_1(key);
248
276
  }
249
- }
277
+ return eagerMethods;
278
+ }, []);
279
+ result.error = result.error || void 0;
280
+ 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
+ });
288
+ promise.catch(function () { });
289
+ return promise;
290
+ }, []);
250
291
  return [execute, result];
251
292
  }
252
293
 
@@ -262,82 +303,73 @@ function useMutation(mutation, options) {
262
303
  result: result,
263
304
  mutationId: 0,
264
305
  isMounted: true,
265
- execute: null,
266
306
  client: client,
267
307
  mutation: mutation,
268
308
  options: options,
269
309
  });
270
- var execute = react.useMemo(function () {
271
- if (ref.current.execute != null &&
272
- ref.current.client === client &&
273
- equality.equal(options, ref.current.options) &&
274
- equality.equal(mutation, ref.current.mutation)) {
275
- return ref.current.execute;
310
+ {
311
+ Object.assign(ref.current, { client: client, options: options, mutation: mutation });
312
+ }
313
+ var execute = react.useCallback(function (executeOptions) {
314
+ if (executeOptions === void 0) { executeOptions = {}; }
315
+ var _a = ref.current, client = _a.client, options = _a.options, mutation = _a.mutation;
316
+ var baseOptions = tslib.__assign(tslib.__assign({}, options), { mutation: mutation });
317
+ if (!ref.current.result.loading && !baseOptions.ignoreResults) {
318
+ setResult(ref.current.result = {
319
+ loading: true,
320
+ error: void 0,
321
+ data: void 0,
322
+ called: true,
323
+ client: client,
324
+ });
276
325
  }
277
- ref.current.client = client;
278
- ref.current.options = options;
279
- ref.current.mutation = mutation;
280
- ref.current.execute = function (executeOptions) {
281
- if (executeOptions === void 0) { executeOptions = {}; }
282
- var baseOptions = tslib.__assign(tslib.__assign({}, options), { mutation: mutation });
283
- if (!ref.current.result.loading && !baseOptions.ignoreResults) {
284
- setResult(ref.current.result = {
285
- loading: true,
286
- error: void 0,
287
- data: void 0,
326
+ var mutationId = ++ref.current.mutationId;
327
+ var clientOptions = core.mergeOptions(baseOptions, executeOptions);
328
+ return client.mutate(clientOptions).then(function (response) {
329
+ var _a, _b;
330
+ var data = response.data, errors$1 = response.errors;
331
+ var error = errors$1 && errors$1.length > 0
332
+ ? new errors.ApolloError({ graphQLErrors: errors$1 })
333
+ : void 0;
334
+ if (mutationId === ref.current.mutationId &&
335
+ !clientOptions.ignoreResults) {
336
+ var result_1 = {
288
337
  called: true,
338
+ loading: false,
339
+ data: data,
340
+ error: error,
289
341
  client: client,
290
- });
291
- }
292
- var mutationId = ++ref.current.mutationId;
293
- var clientOptions = core.mergeOptions(baseOptions, executeOptions);
294
- return client.mutate(clientOptions).then(function (response) {
295
- var _a, _b;
296
- var data = response.data, errors$1 = response.errors;
297
- var error = errors$1 && errors$1.length > 0
298
- ? new errors.ApolloError({ graphQLErrors: errors$1 })
299
- : void 0;
300
- if (mutationId === ref.current.mutationId &&
301
- !clientOptions.ignoreResults) {
302
- var result_1 = {
303
- called: true,
304
- loading: false,
305
- data: data,
306
- error: error,
307
- client: client,
308
- };
309
- if (ref.current.isMounted && !equality.equal(ref.current.result, result_1)) {
310
- setResult(ref.current.result = result_1);
311
- }
312
- }
313
- (_a = baseOptions.onCompleted) === null || _a === void 0 ? void 0 : _a.call(baseOptions, response.data);
314
- (_b = executeOptions.onCompleted) === null || _b === void 0 ? void 0 : _b.call(executeOptions, response.data);
315
- return response;
316
- }).catch(function (error) {
317
- var _a, _b;
318
- if (mutationId === ref.current.mutationId &&
319
- ref.current.isMounted) {
320
- var result_2 = {
321
- loading: false,
322
- error: error,
323
- data: void 0,
324
- called: true,
325
- client: client,
326
- };
327
- if (!equality.equal(ref.current.result, result_2)) {
328
- setResult(ref.current.result = result_2);
329
- }
342
+ };
343
+ if (ref.current.isMounted && !equality.equal(ref.current.result, result_1)) {
344
+ setResult(ref.current.result = result_1);
330
345
  }
331
- if (baseOptions.onError || clientOptions.onError) {
332
- (_a = baseOptions.onError) === null || _a === void 0 ? void 0 : _a.call(baseOptions, error);
333
- (_b = executeOptions.onError) === null || _b === void 0 ? void 0 : _b.call(executeOptions, error);
334
- return { data: void 0, errors: error };
346
+ }
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);
349
+ return response;
350
+ }).catch(function (error) {
351
+ var _a, _b;
352
+ if (mutationId === ref.current.mutationId &&
353
+ ref.current.isMounted) {
354
+ var result_2 = {
355
+ loading: false,
356
+ error: error,
357
+ data: void 0,
358
+ called: true,
359
+ client: client,
360
+ };
361
+ if (!equality.equal(ref.current.result, result_2)) {
362
+ setResult(ref.current.result = result_2);
335
363
  }
336
- throw error;
337
- });
338
- };
339
- return ref.current.execute;
340
- }, [client, mutation, options]);
364
+ }
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);
368
+ return { data: void 0, errors: error };
369
+ }
370
+ throw error;
371
+ });
372
+ }, []);
341
373
  var reset = react.useCallback(function () {
342
374
  setResult({ called: false, loading: false, client: client });
343
375
  }, []);
@@ -374,14 +406,16 @@ function useSubscription(subscription, options) {
374
406
  if (typeof shouldResubscribe === 'function') {
375
407
  shouldResubscribe = !!shouldResubscribe(options);
376
408
  }
377
- if ((options === null || options === void 0 ? void 0 : options.skip) && !(options === null || options === void 0 ? void 0 : options.skip) !== !((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.skip)) {
378
- setResult({
379
- loading: false,
380
- data: void 0,
381
- error: void 0,
382
- variables: options === null || options === void 0 ? void 0 : options.variables,
383
- });
384
- setObservable(null);
409
+ 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)) {
411
+ setResult({
412
+ loading: false,
413
+ data: void 0,
414
+ error: void 0,
415
+ variables: options === null || options === void 0 ? void 0 : options.variables,
416
+ });
417
+ setObservable(null);
418
+ }
385
419
  }
386
420
  else if (shouldResubscribe !== false && (client !== ref.current.client ||
387
421
  subscription !== ref.current.subscription ||