@apollo/client 3.5.5 → 3.5.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 (55) hide show
  1. package/apollo-client.cjs +141 -144
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/cache/cache.cjs +21 -20
  5. package/cache/cache.cjs.map +1 -1
  6. package/cache/inmemory/helpers.d.ts +1 -0
  7. package/cache/inmemory/helpers.d.ts.map +1 -1
  8. package/cache/inmemory/helpers.js +3 -2
  9. package/cache/inmemory/helpers.js.map +1 -1
  10. package/cache/inmemory/key-extractor.js +5 -5
  11. package/cache/inmemory/key-extractor.js.map +1 -1
  12. package/cache/inmemory/object-canon.d.ts.map +1 -1
  13. package/cache/inmemory/object-canon.js +2 -1
  14. package/cache/inmemory/object-canon.js.map +1 -1
  15. package/cache/inmemory/policies.d.ts +1 -1
  16. package/cache/inmemory/policies.d.ts.map +1 -1
  17. package/cache/inmemory/policies.js +6 -6
  18. package/cache/inmemory/policies.js.map +1 -1
  19. package/cache/inmemory/readFromStore.js +3 -3
  20. package/cache/inmemory/readFromStore.js.map +1 -1
  21. package/cache/inmemory/writeToStore.js +7 -7
  22. package/cache/inmemory/writeToStore.js.map +1 -1
  23. package/core/ObservableQuery.d.ts.map +1 -1
  24. package/core/ObservableQuery.js +6 -3
  25. package/core/ObservableQuery.js.map +1 -1
  26. package/core/core.cjs +7 -4
  27. package/core/core.cjs.map +1 -1
  28. package/invariantErrorCodes.js +3 -3
  29. package/package.json +14 -14
  30. package/react/hooks/hooks.cjs +113 -120
  31. package/react/hooks/hooks.cjs.map +1 -1
  32. package/react/hooks/useApolloClient.js +2 -2
  33. package/react/hooks/useApolloClient.js.map +1 -1
  34. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  35. package/react/hooks/useLazyQuery.js +20 -27
  36. package/react/hooks/useLazyQuery.js.map +1 -1
  37. package/react/hooks/useMutation.d.ts.map +1 -1
  38. package/react/hooks/useMutation.js +59 -68
  39. package/react/hooks/useMutation.js.map +1 -1
  40. package/react/hooks/useQuery.d.ts.map +1 -1
  41. package/react/hooks/useQuery.js +25 -17
  42. package/react/hooks/useQuery.js.map +1 -1
  43. package/react/hooks/useSubscription.d.ts.map +1 -1
  44. package/react/hooks/useSubscription.js +10 -8
  45. package/react/hooks/useSubscription.js.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 +2 -8
  50. package/utilities/globals/global.d.ts.map +1 -1
  51. package/utilities/globals/global.js +1 -1
  52. package/utilities/globals/global.js.map +1 -1
  53. package/utilities/globals/globals.cjs +1 -1
  54. package/utilities/globals/globals.cjs.map +1 -1
  55. package/version.js +1 -1
@@ -5,7 +5,7 @@
5
5
  // consult the @apollo/client/invariantErrorCodes.js file specific to
6
6
  // your @apollo/client version. This file is not meant to be imported.
7
7
  {
8
- "@apollo/client version": "3.5.5",
8
+ "@apollo/client version": "3.5.9",
9
9
 
10
10
  1: {
11
11
  file: "@apollo/client/cache/inmemory/entityStore.js",
@@ -174,8 +174,8 @@
174
174
  file: "@apollo/client/react/hooks/useApolloClient.js",
175
175
 
176
176
  node: invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
177
- 'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient' +
178
- 'ApolloClient instance in via options.')
177
+ 'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
178
+ 'instance in via options.')
179
179
  },
180
180
 
181
181
  30: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apollo/client",
3
- "version": "3.5.5",
3
+ "version": "3.5.9",
4
4
  "description": "A fully-featured caching GraphQL client.",
5
5
  "private": false,
6
6
  "keywords": [
@@ -51,12 +51,12 @@
51
51
  "optimism": "^0.16.1",
52
52
  "prop-types": "^15.7.2",
53
53
  "symbol-observable": "^4.0.0",
54
- "ts-invariant": "^0.9.0",
54
+ "ts-invariant": "^0.9.4",
55
55
  "tslib": "^2.3.0",
56
56
  "zen-observable-ts": "^1.2.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@babel/parser": "7.16.4",
59
+ "@babel/parser": "7.17.0",
60
60
  "@graphql-tools/schema": "8.3.1",
61
61
  "@rollup/plugin-node-resolve": "11.2.1",
62
62
  "@testing-library/react": "12.1.2",
@@ -65,34 +65,34 @@
65
65
  "@types/fetch-mock": "7.3.5",
66
66
  "@types/glob": "7.2.0",
67
67
  "@types/hoist-non-react-statics": "3.3.1",
68
- "@types/jest": "27.0.3",
69
- "@types/lodash": "4.14.177",
70
- "@types/node": "16.11.9",
68
+ "@types/jest": "27.4.0",
69
+ "@types/lodash": "4.14.178",
70
+ "@types/node": "16.11.24",
71
71
  "@types/react": "17.0.34",
72
72
  "@types/react-dom": "17.0.2",
73
73
  "bundlesize": "0.18.1",
74
- "cross-fetch": "3.1.4",
74
+ "cross-fetch": "3.1.5",
75
75
  "crypto-hash": "1.3.0",
76
76
  "fetch-mock": "9.11.0",
77
77
  "glob": "7.2.0",
78
78
  "graphql": "16.0.1",
79
- "jest": "27.3.1",
79
+ "jest": "27.5.1",
80
80
  "jest-fetch-mock": "3.0.3",
81
81
  "jest-junit": "13.0.0",
82
82
  "lodash": "4.17.21",
83
83
  "react": "17.0.2",
84
84
  "react-dom": "17.0.2",
85
- "recast": "0.20.5",
86
- "resolve": "1.20.0",
85
+ "recast": "0.21.0",
86
+ "resolve": "1.22.0",
87
87
  "rimraf": "3.0.2",
88
- "rollup": "2.60.0",
88
+ "rollup": "2.67.2",
89
89
  "rollup-plugin-terser": "7.0.2",
90
90
  "rxjs": "6.6.7",
91
91
  "subscriptions-transport-ws": "0.11.0",
92
92
  "terser": "5.10.0",
93
- "ts-jest": "27.0.7",
94
- "ts-node": "10.4.0",
95
- "typescript": "4.5.2",
93
+ "ts-jest": "27.1.3",
94
+ "ts-node": "10.5.0",
95
+ "typescript": "4.5.5",
96
96
  "wait-for-observables": "1.0.3",
97
97
  "whatwg-fetch": "3.6.2"
98
98
  },
@@ -7,16 +7,16 @@ var react = require('react');
7
7
  var context = require('../context');
8
8
  var tslib = require('tslib');
9
9
  var equality = require('@wry/equality');
10
- var errors = require('../../errors');
11
10
  var core = require('../../core');
11
+ var errors = require('../../errors');
12
12
  var parser = require('../parser');
13
13
 
14
14
  function useApolloClient(override) {
15
15
  var context$1 = react.useContext(context.getApolloContext());
16
16
  var client = override || context$1.client;
17
17
  __DEV__ ? globals.invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
18
- 'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient' +
19
- '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);
20
20
  return client;
21
21
  }
22
22
 
@@ -24,9 +24,10 @@ function useQuery(query, options) {
24
24
  var _a;
25
25
  var context$1 = react.useContext(context.getApolloContext());
26
26
  var client = useApolloClient(options === null || options === void 0 ? void 0 : options.client);
27
+ var defaultWatchQueryOptions = client.defaultOptions.watchQuery;
27
28
  parser.verifyDocumentType(query, parser.DocumentType.Query);
28
29
  var _b = react.useState(function () {
29
- var watchQueryOptions = createWatchQueryOptions(query, options);
30
+ var watchQueryOptions = createWatchQueryOptions(query, options, defaultWatchQueryOptions);
30
31
  var obsQuery = null;
31
32
  if (context$1.renderPromises) {
32
33
  obsQuery = context$1.renderPromises.getSSRObservable(watchQueryOptions);
@@ -42,7 +43,7 @@ function useQuery(query, options) {
42
43
  !(options === null || options === void 0 ? void 0 : options.skip) &&
43
44
  obsQuery.getCurrentResult().loading) {
44
45
  context$1.renderPromises.addQueryPromise({
45
- getOptions: function () { return createWatchQueryOptions(query, options); },
46
+ getOptions: function () { return createWatchQueryOptions(query, options, defaultWatchQueryOptions); },
46
47
  fetchData: function () { return new Promise(function (resolve) {
47
48
  var sub = obsQuery.subscribe({
48
49
  next: function (result) {
@@ -83,11 +84,11 @@ function useQuery(query, options) {
83
84
  options: options,
84
85
  result: result,
85
86
  previousData: void 0,
86
- watchQueryOptions: createWatchQueryOptions(query, options),
87
+ watchQueryOptions: createWatchQueryOptions(query, options, defaultWatchQueryOptions),
87
88
  });
88
89
  react.useEffect(function () {
89
90
  var _a, _b;
90
- var watchQueryOptions = createWatchQueryOptions(query, options);
91
+ var watchQueryOptions = createWatchQueryOptions(query, options, defaultWatchQueryOptions);
91
92
  var nextResult;
92
93
  if (ref.current.client !== client || !equality.equal(ref.current.query, query)) {
93
94
  var obsQuery_1 = client.watchQuery(watchQueryOptions);
@@ -106,17 +107,15 @@ function useQuery(query, options) {
106
107
  }
107
108
  setResult(ref.current.result = nextResult);
108
109
  if (!nextResult.loading && options) {
109
- if (!result.loading) {
110
- if (result.error) {
111
- (_a = options.onError) === null || _a === void 0 ? void 0 : _a.call(options, result.error);
112
- }
113
- else if (result.data) {
114
- (_b = options.onCompleted) === null || _b === void 0 ? void 0 : _b.call(options, result.data);
115
- }
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);
116
115
  }
117
116
  }
118
117
  }
119
- Object.assign(ref.current, { client: client, query: query, options: options });
118
+ Object.assign(ref.current, { client: client, query: query });
120
119
  }, [obsQuery, client, query, options]);
121
120
  react.useEffect(function () {
122
121
  if (context$1.renderPromises) {
@@ -184,8 +183,9 @@ function useQuery(query, options) {
184
183
  (options === null || options === void 0 ? void 0 : options.ssr) !== false &&
185
184
  !(options === null || options === void 0 ? void 0 : options.skip) &&
186
185
  result.loading) {
187
- obsQuery.setOptions(createWatchQueryOptions(query, options)).catch(function () { });
186
+ obsQuery.setOptions(createWatchQueryOptions(query, options, defaultWatchQueryOptions)).catch(function () { });
188
187
  }
188
+ Object.assign(ref.current, { options: options });
189
189
  }
190
190
  if ((context$1.renderPromises || client.disableNetworkFetches) &&
191
191
  (options === null || options === void 0 ? void 0 : options.ssr) === false) {
@@ -215,12 +215,16 @@ function useQuery(query, options) {
215
215
  stopPolling: obsQuery.stopPolling.bind(obsQuery),
216
216
  subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),
217
217
  }); }, [obsQuery]);
218
- return tslib.__assign(tslib.__assign(tslib.__assign({}, obsQueryFields), { variables: obsQuery.variables, client: client, called: true, previousData: ref.current.previousData }), result);
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
219
  }
220
- function createWatchQueryOptions(query, options) {
220
+ function createWatchQueryOptions(query, options, defaultOptions) {
221
221
  var _a;
222
222
  if (options === void 0) { options = {}; }
223
- 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
+ }
224
228
  if (skip) {
225
229
  watchQueryOptions.fetchPolicy = 'standby';
226
230
  }
@@ -232,7 +236,10 @@ function createWatchQueryOptions(query, options) {
232
236
  else if (!watchQueryOptions.fetchPolicy) {
233
237
  watchQueryOptions.fetchPolicy = 'cache-first';
234
238
  }
235
- return tslib.__assign({ query: query }, watchQueryOptions);
239
+ if (!watchQueryOptions.variables) {
240
+ watchQueryOptions.variables = {};
241
+ }
242
+ return watchQueryOptions;
236
243
  }
237
244
 
238
245
  var EAGER_METHODS = [
@@ -245,36 +252,16 @@ var EAGER_METHODS = [
245
252
  function useLazyQuery(query, options) {
246
253
  var _a = react.useState({
247
254
  called: false,
248
- resolves: [],
249
255
  }), execution = _a[0], setExecution = _a[1];
250
- var execute = react.useCallback(function (executeOptions) {
251
- var resolve;
252
- var promise = new Promise(function (resolve1) { return (resolve = resolve1); });
253
- setExecution(function (execution) {
254
- if (execution.called) {
255
- result && result.refetch(executeOptions === null || executeOptions === void 0 ? void 0 : executeOptions.variables);
256
- }
257
- return {
258
- called: true,
259
- resolves: tslib.__spreadArray(tslib.__spreadArray([], execution.resolves, true), [resolve], false),
260
- options: executeOptions,
261
- };
262
- });
263
- return promise;
264
- }, []);
265
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 }));
266
- react.useEffect(function () {
267
- var resolves = execution.resolves;
268
- if (!result.loading && resolves.length) {
269
- setExecution(function (execution) { return (tslib.__assign(tslib.__assign({}, execution), { resolves: [] })); });
270
- resolves.forEach(function (resolve) { return resolve(result); });
271
- }
272
- }, [result, execution]);
273
257
  if (!execution.called) {
274
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 = {};
275
262
  var _loop_1 = function (key) {
276
263
  var method = result[key];
277
- result[key] = function () {
264
+ eagerMethods[key] = function () {
278
265
  var args = [];
279
266
  for (var _i = 0; _i < arguments.length; _i++) {
280
267
  args[_i] = arguments[_i];
@@ -287,7 +274,20 @@ function useLazyQuery(query, options) {
287
274
  var key = EAGER_METHODS_1[_i];
288
275
  _loop_1(key);
289
276
  }
290
- }
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
+ }, []);
291
291
  return [execute, result];
292
292
  }
293
293
 
@@ -303,82 +303,73 @@ function useMutation(mutation, options) {
303
303
  result: result,
304
304
  mutationId: 0,
305
305
  isMounted: true,
306
- execute: null,
307
306
  client: client,
308
307
  mutation: mutation,
309
308
  options: options,
310
309
  });
311
- var execute = react.useMemo(function () {
312
- if (ref.current.execute != null &&
313
- ref.current.client === client &&
314
- equality.equal(options, ref.current.options) &&
315
- equality.equal(mutation, ref.current.mutation)) {
316
- 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
+ });
317
325
  }
318
- ref.current.client = client;
319
- ref.current.options = options;
320
- ref.current.mutation = mutation;
321
- ref.current.execute = function (executeOptions) {
322
- if (executeOptions === void 0) { executeOptions = {}; }
323
- var baseOptions = tslib.__assign(tslib.__assign({}, options), { mutation: mutation });
324
- if (!ref.current.result.loading && !baseOptions.ignoreResults) {
325
- setResult(ref.current.result = {
326
- loading: true,
327
- error: void 0,
328
- 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 = {
329
337
  called: true,
338
+ loading: false,
339
+ data: data,
340
+ error: error,
330
341
  client: client,
331
- });
332
- }
333
- var mutationId = ++ref.current.mutationId;
334
- var clientOptions = core.mergeOptions(baseOptions, executeOptions);
335
- return client.mutate(clientOptions).then(function (response) {
336
- var _a, _b;
337
- var data = response.data, errors$1 = response.errors;
338
- var error = errors$1 && errors$1.length > 0
339
- ? new errors.ApolloError({ graphQLErrors: errors$1 })
340
- : void 0;
341
- if (mutationId === ref.current.mutationId &&
342
- !clientOptions.ignoreResults) {
343
- var result_1 = {
344
- called: true,
345
- loading: false,
346
- data: data,
347
- error: error,
348
- client: client,
349
- };
350
- if (ref.current.isMounted && !equality.equal(ref.current.result, result_1)) {
351
- setResult(ref.current.result = result_1);
352
- }
353
- }
354
- (_a = baseOptions.onCompleted) === null || _a === void 0 ? void 0 : _a.call(baseOptions, response.data);
355
- (_b = executeOptions.onCompleted) === null || _b === void 0 ? void 0 : _b.call(executeOptions, response.data);
356
- return response;
357
- }).catch(function (error) {
358
- var _a, _b;
359
- if (mutationId === ref.current.mutationId &&
360
- ref.current.isMounted) {
361
- var result_2 = {
362
- loading: false,
363
- error: error,
364
- data: void 0,
365
- called: true,
366
- client: client,
367
- };
368
- if (!equality.equal(ref.current.result, result_2)) {
369
- setResult(ref.current.result = result_2);
370
- }
342
+ };
343
+ if (ref.current.isMounted && !equality.equal(ref.current.result, result_1)) {
344
+ setResult(ref.current.result = result_1);
371
345
  }
372
- if (baseOptions.onError || clientOptions.onError) {
373
- (_a = baseOptions.onError) === null || _a === void 0 ? void 0 : _a.call(baseOptions, error);
374
- (_b = executeOptions.onError) === null || _b === void 0 ? void 0 : _b.call(executeOptions, error);
375
- 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);
376
363
  }
377
- throw error;
378
- });
379
- };
380
- return ref.current.execute;
381
- }, [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
+ }, []);
382
373
  var reset = react.useCallback(function () {
383
374
  setResult({ called: false, loading: false, client: client });
384
375
  }, []);
@@ -415,14 +406,16 @@ function useSubscription(subscription, options) {
415
406
  if (typeof shouldResubscribe === 'function') {
416
407
  shouldResubscribe = !!shouldResubscribe(options);
417
408
  }
418
- 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)) {
419
- setResult({
420
- loading: false,
421
- data: void 0,
422
- error: void 0,
423
- variables: options === null || options === void 0 ? void 0 : options.variables,
424
- });
425
- 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
+ }
426
419
  }
427
420
  else if (shouldResubscribe !== false && (client !== ref.current.client ||
428
421
  subscription !== ref.current.subscription ||