@apollo/client 3.7.0-alpha.5 → 3.7.0-beta.1

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 (56) hide show
  1. package/apollo-client.cjs +94 -37
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/cache/cache.cjs +21 -12
  5. package/cache/cache.cjs.map +1 -1
  6. package/cache/cache.cjs.native.js +21 -12
  7. package/cache/core/types/Cache.d.ts +2 -2
  8. package/cache/core/types/Cache.d.ts.map +1 -1
  9. package/cache/core/types/Cache.js.map +1 -1
  10. package/cache/core/types/common.d.ts +1 -0
  11. package/cache/core/types/common.d.ts.map +1 -1
  12. package/cache/core/types/common.js +10 -0
  13. package/cache/core/types/common.js.map +1 -1
  14. package/cache/index.d.ts +1 -1
  15. package/cache/index.d.ts.map +1 -1
  16. package/cache/index.js.map +1 -1
  17. package/cache/inmemory/inMemoryCache.js +2 -2
  18. package/cache/inmemory/inMemoryCache.js.map +1 -1
  19. package/cache/inmemory/readFromStore.d.ts.map +1 -1
  20. package/cache/inmemory/readFromStore.js +10 -11
  21. package/cache/inmemory/readFromStore.js.map +1 -1
  22. package/core/ObservableQuery.d.ts.map +1 -1
  23. package/core/ObservableQuery.js +2 -2
  24. package/core/ObservableQuery.js.map +1 -1
  25. package/core/core.cjs +2 -2
  26. package/core/core.cjs.map +1 -1
  27. package/core/core.cjs.native.js +2 -2
  28. package/invariantErrorCodes.js +1 -1
  29. package/package.json +7 -7
  30. package/react/hooks/hooks.cjs +63 -12
  31. package/react/hooks/hooks.cjs.map +1 -1
  32. package/react/hooks/hooks.cjs.native.js +63 -12
  33. package/react/hooks/index.d.ts +1 -0
  34. package/react/hooks/index.d.ts.map +1 -1
  35. package/react/hooks/index.js +1 -0
  36. package/react/hooks/index.js.map +1 -1
  37. package/react/hooks/useFragment.d.ts +14 -0
  38. package/react/hooks/useFragment.d.ts.map +1 -0
  39. package/react/hooks/useFragment.js +37 -0
  40. package/react/hooks/useFragment.js.map +1 -0
  41. package/react/hooks/useLazyQuery.d.ts.map +1 -1
  42. package/react/hooks/useLazyQuery.js +5 -1
  43. package/react/hooks/useLazyQuery.js.map +1 -1
  44. package/react/hooks/useMutation.js +7 -7
  45. package/react/hooks/useMutation.js.map +1 -1
  46. package/react/hooks/useQuery.d.ts +2 -1
  47. package/react/hooks/useQuery.d.ts.map +1 -1
  48. package/react/hooks/useQuery.js +21 -5
  49. package/react/hooks/useQuery.js.map +1 -1
  50. package/utilities/common/mergeDeep.d.ts.map +1 -1
  51. package/utilities/common/mergeDeep.js +8 -11
  52. package/utilities/common/mergeDeep.js.map +1 -1
  53. package/utilities/utilities.cjs +8 -11
  54. package/utilities/utilities.cjs.map +1 -1
  55. package/utilities/utilities.cjs.native.js +8 -11
  56. package/version.js +1 -1
package/apollo-client.cjs CHANGED
@@ -761,18 +761,15 @@ var DeepMerger = (function () {
761
761
  };
762
762
  DeepMerger.prototype.shallowCopyForMerge = function (value) {
763
763
  if (isNonNullObject(value)) {
764
- if (this.pastCopies.has(value)) {
765
- if (!Object.isFrozen(value))
766
- return value;
767
- this.pastCopies.delete(value);
768
- }
769
- if (Array.isArray(value)) {
770
- value = value.slice(0);
771
- }
772
- else {
773
- value = tslib.__assign({ __proto__: Object.getPrototypeOf(value) }, value);
764
+ if (!this.pastCopies.has(value)) {
765
+ if (Array.isArray(value)) {
766
+ value = value.slice(0);
767
+ }
768
+ else {
769
+ value = tslib.__assign({ __proto__: Object.getPrototypeOf(value) }, value);
770
+ }
771
+ this.pastCopies.add(value);
774
772
  }
775
- this.pastCopies.add(value);
776
773
  }
777
774
  return value;
778
775
  };
@@ -1301,7 +1298,7 @@ var concat = ApolloLink.concat;
1301
1298
 
1302
1299
  var execute = ApolloLink.execute;
1303
1300
 
1304
- var version = '3.7.0-alpha.5';
1301
+ var version = '3.7.0-beta.1';
1305
1302
 
1306
1303
  var hasOwnProperty$3 = Object.prototype.hasOwnProperty;
1307
1304
  function parseAndCheckHttpResponse(operations) {
@@ -1685,10 +1682,20 @@ exports.Cache = void 0;
1685
1682
 
1686
1683
  var MissingFieldError = (function () {
1687
1684
  function MissingFieldError(message, path, query, variables) {
1685
+ var _a;
1688
1686
  this.message = message;
1689
1687
  this.path = path;
1690
1688
  this.query = query;
1691
1689
  this.variables = variables;
1690
+ if (Array.isArray(this.path)) {
1691
+ this.missing = this.message;
1692
+ for (var i = this.path.length - 1; i >= 0; --i) {
1693
+ this.missing = (_a = {}, _a[this.path[i]] = this.missing, _a);
1694
+ }
1695
+ }
1696
+ else {
1697
+ this.missing = this.path;
1698
+ }
1692
1699
  }
1693
1700
  return MissingFieldError;
1694
1701
  }());
@@ -2394,7 +2401,6 @@ var StoreReader = (function () {
2394
2401
  var policies = this.config.cache.policies;
2395
2402
  variables = tslib.__assign(tslib.__assign({}, getDefaultValues(getQueryDefinition(query))), variables);
2396
2403
  var rootRef = makeReference(rootId);
2397
- var merger = new DeepMerger;
2398
2404
  var execResult = this.executeSelectionSet({
2399
2405
  selectionSet: getMainDefinition(query).selectionSet,
2400
2406
  objectOrReference: rootRef,
@@ -2407,9 +2413,6 @@ var StoreReader = (function () {
2407
2413
  varString: canonicalStringify(variables),
2408
2414
  canonizeResults: canonizeResults,
2409
2415
  fragmentMap: createFragmentMap(getFragmentDefinitions(query)),
2410
- merge: function (a, b) {
2411
- return merger.merge(a, b);
2412
- },
2413
2416
  },
2414
2417
  });
2415
2418
  var missing;
@@ -2448,17 +2451,18 @@ var StoreReader = (function () {
2448
2451
  }
2449
2452
  var variables = context.variables, policies = context.policies, store = context.store;
2450
2453
  var typename = store.getFieldValue(objectOrReference, "__typename");
2451
- var result = {};
2454
+ var objectsToMerge = [];
2452
2455
  var missing;
2456
+ var missingMerger = new DeepMerger();
2453
2457
  if (this.config.addTypename &&
2454
2458
  typeof typename === "string" &&
2455
2459
  !policies.rootIdsByTypename[typename]) {
2456
- result = { __typename: typename };
2460
+ objectsToMerge.push({ __typename: typename });
2457
2461
  }
2458
2462
  function handleMissing(result, resultName) {
2459
2463
  var _a;
2460
2464
  if (result.missing) {
2461
- missing = context.merge(missing, (_a = {}, _a[resultName] = result.missing, _a));
2465
+ missing = missingMerger.merge(missing, (_a = {}, _a[resultName] = result.missing, _a));
2462
2466
  }
2463
2467
  return result.result;
2464
2468
  }
@@ -2477,7 +2481,7 @@ var StoreReader = (function () {
2477
2481
  var resultName = resultKeyNameFromField(selection);
2478
2482
  if (fieldValue === void 0) {
2479
2483
  if (!addTypenameToDocument.added(selection)) {
2480
- missing = context.merge(missing, (_a = {},
2484
+ missing = missingMerger.merge(missing, (_a = {},
2481
2485
  _a[resultName] = "Can't find field '".concat(selection.name.value, "' on ").concat(isReference(objectOrReference)
2482
2486
  ? objectOrReference.__ref + " object"
2483
2487
  : "object " + JSON.stringify(objectOrReference, null, 2)),
@@ -2506,7 +2510,7 @@ var StoreReader = (function () {
2506
2510
  }), resultName);
2507
2511
  }
2508
2512
  if (fieldValue !== void 0) {
2509
- result = context.merge(result, (_b = {}, _b[resultName] = fieldValue, _b));
2513
+ objectsToMerge.push((_b = {}, _b[resultName] = fieldValue, _b));
2510
2514
  }
2511
2515
  }
2512
2516
  else {
@@ -2516,6 +2520,7 @@ var StoreReader = (function () {
2516
2520
  }
2517
2521
  }
2518
2522
  });
2523
+ var result = mergeDeepArray(objectsToMerge);
2519
2524
  var finalResult = { result: result, missing: missing };
2520
2525
  var frozen = context.canonizeResults
2521
2526
  ? this.canon.admit(finalResult)
@@ -2529,10 +2534,11 @@ var StoreReader = (function () {
2529
2534
  var _this = this;
2530
2535
  var field = _a.field, array = _a.array, enclosingRef = _a.enclosingRef, context = _a.context;
2531
2536
  var missing;
2537
+ var missingMerger = new DeepMerger();
2532
2538
  function handleMissing(childResult, i) {
2533
2539
  var _a;
2534
2540
  if (childResult.missing) {
2535
- missing = context.merge(missing, (_a = {}, _a[i] = childResult.missing, _a));
2541
+ missing = missingMerger.merge(missing, (_a = {}, _a[i] = childResult.missing, _a));
2536
2542
  }
2537
2543
  return childResult.result;
2538
2544
  }
@@ -3619,8 +3625,8 @@ var InMemoryCache = (function (_super) {
3619
3625
  makeCacheKey: function (c) {
3620
3626
  var store = c.optimistic ? _this.optimisticData : _this.data;
3621
3627
  if (supportsResultCaching(store)) {
3622
- var optimistic = c.optimistic, rootId = c.rootId, variables = c.variables;
3623
- return store.makeCacheKey(c.query, c.callback, canonicalStringify({ optimistic: optimistic, rootId: rootId, variables: variables }));
3628
+ var optimistic = c.optimistic, id = c.id, variables = c.variables;
3629
+ return store.makeCacheKey(c.query, c.callback, canonicalStringify({ optimistic: optimistic, id: id, variables: variables }));
3624
3630
  }
3625
3631
  }
3626
3632
  });
@@ -4305,7 +4311,7 @@ var ObservableQuery = (function (_super) {
4305
4311
  newNetworkStatus === exports.NetworkStatus.poll;
4306
4312
  var oldVariables = this.options.variables;
4307
4313
  var oldFetchPolicy = this.options.fetchPolicy;
4308
- var mergedOptions = mergeOptions(this.options, newOptions || {});
4314
+ var mergedOptions = compact(this.options, newOptions || {});
4309
4315
  var options = useDisposableConcast
4310
4316
  ? mergedOptions
4311
4317
  : assign(this.options, mergedOptions);
@@ -6188,7 +6194,7 @@ function useInternalState(client, query) {
6188
6194
  if (!stateRef.current ||
6189
6195
  client !== stateRef.current.client ||
6190
6196
  query !== stateRef.current.query) {
6191
- stateRef.current = new InternalState(client, query);
6197
+ stateRef.current = new InternalState(client, query, stateRef.current);
6192
6198
  }
6193
6199
  var state = stateRef.current;
6194
6200
  var _a = React.useState(0); _a[0]; var setTick = _a[1];
@@ -6198,7 +6204,7 @@ function useInternalState(client, query) {
6198
6204
  return state;
6199
6205
  }
6200
6206
  var InternalState = (function () {
6201
- function InternalState(client, query) {
6207
+ function InternalState(client, query, previous) {
6202
6208
  this.client = client;
6203
6209
  this.query = query;
6204
6210
  this.asyncResolveFns = new Set();
@@ -6217,6 +6223,11 @@ var InternalState = (function () {
6217
6223
  });
6218
6224
  this.toQueryResultCache = new (canUseWeakMap ? WeakMap : Map)();
6219
6225
  verifyDocumentType(query, exports.DocumentType.Query);
6226
+ var previousResult = previous && previous.result;
6227
+ var previousData = previousResult && previousResult.data;
6228
+ if (previousData) {
6229
+ this.previousData = previousData;
6230
+ }
6220
6231
  }
6221
6232
  InternalState.prototype.forceUpdate = function () {
6222
6233
  __DEV__ && tsInvariant.invariant.warn("Calling default no-op implementation of InternalState#forceUpdate");
@@ -6298,7 +6309,7 @@ var InternalState = (function () {
6298
6309
  this.watchQueryOptions = watchQueryOptions;
6299
6310
  if (currentWatchQueryOptions && this.observable) {
6300
6311
  this.optionsToIgnoreOnce.delete(currentWatchQueryOptions);
6301
- this.observable.reobserve(watchQueryOptions);
6312
+ this.observable.reobserve(this.getObsQueryOptions());
6302
6313
  this.previousData = ((_a = this.result) === null || _a === void 0 ? void 0 : _a.data) || this.previousData;
6303
6314
  this.result = void 0;
6304
6315
  }
@@ -6319,6 +6330,17 @@ var InternalState = (function () {
6319
6330
  this.result = void 0;
6320
6331
  }
6321
6332
  };
6333
+ InternalState.prototype.getObsQueryOptions = function () {
6334
+ var toMerge = [];
6335
+ var globalDefaults = this.client.defaultOptions.watchQuery;
6336
+ if (globalDefaults)
6337
+ toMerge.push(globalDefaults);
6338
+ if (this.queryHookOptions.defaultOptions) {
6339
+ toMerge.push(this.queryHookOptions.defaultOptions);
6340
+ }
6341
+ toMerge.push(compact(this.observable && this.observable.options, this.watchQueryOptions));
6342
+ return toMerge.reduce(mergeOptions);
6343
+ };
6322
6344
  InternalState.prototype.createWatchQueryOptions = function (_a) {
6323
6345
  var _b;
6324
6346
  if (_a === void 0) { _a = {}; }
@@ -6359,7 +6381,7 @@ var InternalState = (function () {
6359
6381
  this.renderPromises
6360
6382
  && this.renderPromises.getSSRObservable(this.watchQueryOptions)
6361
6383
  || this.observable
6362
- || this.client.watchQuery(mergeOptions(this.queryHookOptions.defaultOptions, this.watchQueryOptions));
6384
+ || this.client.watchQuery(this.getObsQueryOptions());
6363
6385
  this.obsQueryFields = React.useMemo(function () { return ({
6364
6386
  refetch: obsQuery.refetch.bind(obsQuery),
6365
6387
  reobserve: obsQuery.reobserve.bind(obsQuery),
@@ -6442,7 +6464,10 @@ var EAGER_METHODS = [
6442
6464
  function useLazyQuery(query, options) {
6443
6465
  var internalState = useInternalState(useApolloClient(options && options.client), query);
6444
6466
  var execOptionsRef = React.useRef();
6445
- var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign(tslib.__assign({}, options), execOptionsRef.current), { skip: !execOptionsRef.current }));
6467
+ var merged = execOptionsRef.current
6468
+ ? mergeOptions(options, execOptionsRef.current)
6469
+ : options;
6470
+ var useQueryResult = internalState.useQuery(tslib.__assign(tslib.__assign({}, merged), { skip: !execOptionsRef.current }));
6446
6471
  var initialFetchPolicy = useQueryResult.observable.options.initialFetchPolicy ||
6447
6472
  internalState.getDefaultFetchPolicy();
6448
6473
  var result = Object.assign(useQueryResult, {
@@ -6515,7 +6540,7 @@ function useMutation(mutation, options) {
6515
6540
  var mutationId = ++ref.current.mutationId;
6516
6541
  var clientOptions = mergeOptions(baseOptions, executeOptions);
6517
6542
  return client.mutate(clientOptions).then(function (response) {
6518
- var _a, _b;
6543
+ var _a, _b, _c;
6519
6544
  var data = response.data, errors = response.errors;
6520
6545
  var error = errors && errors.length > 0
6521
6546
  ? new ApolloError({ graphQLErrors: errors })
@@ -6533,11 +6558,11 @@ function useMutation(mutation, options) {
6533
6558
  setResult(ref.current.result = result_1);
6534
6559
  }
6535
6560
  }
6536
- (_a = baseOptions.onCompleted) === null || _a === void 0 ? void 0 : _a.call(baseOptions, response.data);
6537
- (_b = executeOptions.onCompleted) === null || _b === void 0 ? void 0 : _b.call(executeOptions, response.data);
6561
+ (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onCompleted) === null || _b === void 0 ? void 0 : _b.call(_a, response.data);
6562
+ (_c = executeOptions.onCompleted) === null || _c === void 0 ? void 0 : _c.call(executeOptions, response.data);
6538
6563
  return response;
6539
6564
  }).catch(function (error) {
6540
- var _a, _b;
6565
+ var _a, _b, _c, _d;
6541
6566
  if (mutationId === ref.current.mutationId &&
6542
6567
  ref.current.isMounted) {
6543
6568
  var result_2 = {
@@ -6551,9 +6576,9 @@ function useMutation(mutation, options) {
6551
6576
  setResult(ref.current.result = result_2);
6552
6577
  }
6553
6578
  }
6554
- if (baseOptions.onError || clientOptions.onError) {
6555
- (_a = baseOptions.onError) === null || _a === void 0 ? void 0 : _a.call(baseOptions, error);
6556
- (_b = executeOptions.onError) === null || _b === void 0 ? void 0 : _b.call(executeOptions, error);
6579
+ if (((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) || clientOptions.onError) {
6580
+ (_c = (_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onError) === null || _c === void 0 ? void 0 : _c.call(_b, error);
6581
+ (_d = executeOptions.onError) === null || _d === void 0 ? void 0 : _d.call(executeOptions, error);
6557
6582
  return { data: void 0, errors: error };
6558
6583
  }
6559
6584
  throw error;
@@ -6693,6 +6718,37 @@ function useReactiveVar(rv) {
6693
6718
  return value;
6694
6719
  }
6695
6720
 
6721
+ function useFragment(options) {
6722
+ var cache = useApolloClient().cache;
6723
+ var fragment = options.fragment, fragmentName = options.fragmentName, from = options.from, _a = options.optimistic, optimistic = _a === void 0 ? true : _a, rest = tslib.__rest(options, ["fragment", "fragmentName", "from", "optimistic"]);
6724
+ var diffOptions = tslib.__assign(tslib.__assign({}, rest), { id: typeof from === "string" ? from : cache.identify(from), query: cache["getFragmentDoc"](fragment, fragmentName), optimistic: optimistic });
6725
+ var resultRef = React.useRef();
6726
+ var latestDiff = cache.diff(diffOptions);
6727
+ return useSyncExternalStore(function (forceUpdate) {
6728
+ var immediate = true;
6729
+ return cache.watch(tslib.__assign(tslib.__assign({}, diffOptions), { immediate: immediate, callback: function (diff) {
6730
+ if (!immediate && !equality.equal(diff, latestDiff)) {
6731
+ resultRef.current = diffToResult(latestDiff = diff);
6732
+ forceUpdate();
6733
+ }
6734
+ immediate = false;
6735
+ } }));
6736
+ }, function () {
6737
+ return resultRef.current ||
6738
+ (resultRef.current = diffToResult(latestDiff));
6739
+ });
6740
+ }
6741
+ function diffToResult(diff) {
6742
+ var result = {
6743
+ data: diff.result,
6744
+ complete: !!diff.complete,
6745
+ };
6746
+ if (diff.missing) {
6747
+ result.missing = mergeDeepArray(diff.missing.map(function (error) { return error.missing; }));
6748
+ }
6749
+ return result;
6750
+ }
6751
+
6696
6752
  exports.setLogVerbosity = tsInvariant.setVerbosity;
6697
6753
  exports.Observable = zenObservableTs.Observable;
6698
6754
  exports.disableExperimentalFragmentVariables = graphqlTag.disableExperimentalFragmentVariables;
@@ -6741,6 +6797,7 @@ exports.split = split;
6741
6797
  exports.throwServerError = throwServerError;
6742
6798
  exports.toPromise = toPromise;
6743
6799
  exports.useApolloClient = useApolloClient;
6800
+ exports.useFragment = useFragment;
6744
6801
  exports.useLazyQuery = useLazyQuery;
6745
6802
  exports.useMutation = useMutation;
6746
6803
  exports.useQuery = useQuery;