@apollo/client 3.8.0-alpha.12 → 3.8.0-alpha.13

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 (90) hide show
  1. package/apollo-client.cjs +145 -119
  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.map +1 -1
  6. package/core/core.cjs +1 -1
  7. package/core/core.cjs.map +1 -1
  8. package/core/core.cjs.native.js +1 -1
  9. package/invariantErrorCodes.js +29 -34
  10. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  11. package/link/persisted-queries/index.d.ts.map +1 -1
  12. package/link/persisted-queries/index.js +12 -13
  13. package/link/persisted-queries/index.js.map +1 -1
  14. package/link/persisted-queries/persisted-queries.cjs +12 -13
  15. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  16. package/link/persisted-queries/persisted-queries.cjs.native.js +12 -13
  17. package/link/utils/throwServerError.d.ts +1 -1
  18. package/link/utils/throwServerError.d.ts.map +1 -1
  19. package/link/utils/throwServerError.js.map +1 -1
  20. package/package.json +18 -17
  21. package/react/cache/QuerySubscription.d.ts +11 -4
  22. package/react/cache/QuerySubscription.d.ts.map +1 -1
  23. package/react/cache/QuerySubscription.js +52 -34
  24. package/react/cache/QuerySubscription.js.map +1 -1
  25. package/react/context/ApolloConsumer.js +1 -1
  26. package/react/context/ApolloProvider.js +1 -1
  27. package/react/context/context.cjs +2 -2
  28. package/react/context/context.cjs.map +1 -1
  29. package/react/context/context.cjs.native.js +2 -2
  30. package/react/hoc/hoc-utils.js +1 -1
  31. package/react/hoc/hoc.cjs +2 -2
  32. package/react/hoc/hoc.cjs.map +1 -1
  33. package/react/hoc/hoc.cjs.native.js +2 -2
  34. package/react/hoc/withApollo.js +1 -1
  35. package/react/hooks/hooks.cjs +58 -63
  36. package/react/hooks/hooks.cjs.map +1 -1
  37. package/react/hooks/hooks.cjs.native.js +58 -63
  38. package/react/hooks/useApolloClient.js +1 -1
  39. package/react/hooks/useFragment.d.ts +2 -1
  40. package/react/hooks/useFragment.d.ts.map +1 -1
  41. package/react/hooks/useFragment.js.map +1 -1
  42. package/react/hooks/useSubscription.d.ts.map +1 -1
  43. package/react/hooks/useSubscription.js +25 -13
  44. package/react/hooks/useSubscription.js.map +1 -1
  45. package/react/hooks/useSuspenseCache.js +1 -1
  46. package/react/hooks/useSuspenseQuery.d.ts +15 -3
  47. package/react/hooks/useSuspenseQuery.d.ts.map +1 -1
  48. package/react/hooks/useSuspenseQuery.js +34 -52
  49. package/react/hooks/useSuspenseQuery.js.map +1 -1
  50. package/react/parser/index.js +5 -5
  51. package/react/parser/parser.cjs +5 -5
  52. package/react/parser/parser.cjs.map +1 -1
  53. package/react/parser/parser.cjs.native.js +5 -5
  54. package/react/react.cjs +52 -33
  55. package/react/react.cjs.map +1 -1
  56. package/react/react.cjs.native.js +52 -33
  57. package/react/types/types.d.ts +1 -3
  58. package/react/types/types.d.ts.map +1 -1
  59. package/react/types/types.js.map +1 -1
  60. package/testing/core/core.cjs +1 -1
  61. package/testing/core/core.cjs.map +1 -1
  62. package/testing/core/core.cjs.native.js +1 -1
  63. package/testing/core/mocking/mockLink.js +1 -1
  64. package/utilities/graphql/directives.js +4 -4
  65. package/utilities/graphql/fragments.js +3 -3
  66. package/utilities/graphql/getFromAST.js +8 -8
  67. package/utilities/graphql/storeUtils.js +1 -1
  68. package/utilities/index.d.ts +2 -1
  69. package/utilities/index.d.ts.map +1 -1
  70. package/utilities/index.js +1 -1
  71. package/utilities/index.js.map +1 -1
  72. package/utilities/promises/decoration.d.ts +2 -0
  73. package/utilities/promises/decoration.d.ts.map +1 -1
  74. package/utilities/promises/decoration.js +12 -0
  75. package/utilities/promises/decoration.js.map +1 -1
  76. package/utilities/types/DeepOmit.d.ts +4 -3
  77. package/utilities/types/DeepOmit.d.ts.map +1 -1
  78. package/utilities/types/DeepOmit.js.map +1 -1
  79. package/utilities/types/DeepPartial.d.ts +12 -0
  80. package/utilities/types/DeepPartial.d.ts.map +1 -0
  81. package/utilities/types/DeepPartial.js +2 -0
  82. package/utilities/types/DeepPartial.js.map +1 -0
  83. package/utilities/types/Primitive.d.ts +2 -0
  84. package/utilities/types/Primitive.d.ts.map +1 -0
  85. package/utilities/types/Primitive.js +2 -0
  86. package/utilities/types/Primitive.js.map +1 -0
  87. package/utilities/utilities.cjs +30 -16
  88. package/utilities/utilities.cjs.map +1 -1
  89. package/utilities/utilities.cjs.native.js +30 -16
  90. package/version.js +1 -1
@@ -35,7 +35,7 @@ function useApolloClient(override) {
35
35
  var client = override || context$1.client;
36
36
  globals.__DEV__ ? globals.invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
37
37
  'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
38
- 'instance in via options.') : globals.invariant(!!client, 33);
38
+ 'instance in via options.') : globals.invariant(!!client, 32);
39
39
  return client;
40
40
  }
41
41
 
@@ -612,9 +612,13 @@ function useSubscription(subscription, options) {
612
612
  if (!observable) {
613
613
  return;
614
614
  }
615
+ var subscriptionStopped = false;
615
616
  var subscription = observable.subscribe({
616
617
  next: function (fetchResult) {
617
618
  var _a, _b;
619
+ if (subscriptionStopped) {
620
+ return;
621
+ }
618
622
  var result = {
619
623
  loading: false,
620
624
  data: fetchResult.data,
@@ -637,26 +641,33 @@ function useSubscription(subscription, options) {
637
641
  },
638
642
  error: function (error) {
639
643
  var _a, _b;
640
- setResult({
641
- loading: false,
642
- data: void 0,
643
- error: error,
644
- variables: options === null || options === void 0 ? void 0 : options.variables,
645
- });
646
- (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
644
+ if (!subscriptionStopped) {
645
+ setResult({
646
+ loading: false,
647
+ data: void 0,
648
+ error: error,
649
+ variables: options === null || options === void 0 ? void 0 : options.variables,
650
+ });
651
+ (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
652
+ }
647
653
  },
648
654
  complete: function () {
649
655
  var _a, _b;
650
- if ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onComplete) {
651
- ref.current.options.onComplete();
652
- }
653
- else if ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onSubscriptionComplete) {
654
- ref.current.options.onSubscriptionComplete();
656
+ if (!subscriptionStopped) {
657
+ if ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onComplete) {
658
+ ref.current.options.onComplete();
659
+ }
660
+ else if ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onSubscriptionComplete) {
661
+ ref.current.options.onSubscriptionComplete();
662
+ }
655
663
  }
656
664
  },
657
665
  });
658
666
  return function () {
659
- subscription.unsubscribe();
667
+ subscriptionStopped = true;
668
+ setTimeout(function () {
669
+ subscription.unsubscribe();
670
+ });
660
671
  };
661
672
  }, [observable]);
662
673
  return result;
@@ -748,46 +759,40 @@ function useSuspenseCache(override) {
748
759
  var suspenseCache = override || context$1.suspenseCache;
749
760
  globals.__DEV__ ? globals.invariant(suspenseCache, 'Could not find a "suspenseCache" in the context or passed in as an option. ' +
750
761
  'Wrap the root component in an <ApolloProvider> and provide a suspenseCache, ' +
751
- 'or pass a SuspenseCache instance in via options.') : globals.invariant(suspenseCache, 34);
762
+ 'or pass a SuspenseCache instance in via options.') : globals.invariant(suspenseCache, 33);
752
763
  return suspenseCache;
753
764
  }
754
765
 
755
766
  function useSuspenseQuery_experimental(query, options) {
756
767
  if (options === void 0) { options = Object.create(null); }
757
- var didPreviouslySuspend = React.useRef(false);
758
768
  var client = useApolloClient(options.client);
759
769
  var suspenseCache = useSuspenseCache(options.suspenseCache);
760
770
  var watchQueryOptions = useWatchQueryOptions({ query: query, options: options });
761
- var _a = watchQueryOptions.returnPartialData, returnPartialData = _a === void 0 ? false : _a, variables = watchQueryOptions.variables;
762
- var _b = options.suspensePolicy, suspensePolicy = _b === void 0 ? 'always' : _b, _c = options.queryKey, queryKey = _c === void 0 ? [] : _c;
763
- var shouldSuspend = suspensePolicy === 'always' || !didPreviouslySuspend.current;
771
+ var variables = watchQueryOptions.variables;
772
+ var _a = options.queryKey, queryKey = _a === void 0 ? [] : _a;
773
+ var _b = usePromiseVersion(), version = _b[0], setVersion = _b[1];
764
774
  var cacheKey = [client, query, cache.canonicalStringify(variables)].concat(queryKey);
765
775
  var subscription = suspenseCache.getSubscription(cacheKey, function () {
766
776
  return client.watchQuery(watchQueryOptions);
767
777
  });
768
- var dispose = useTrackedSubscriptions(subscription);
769
- useStrictModeSafeCleanupEffect(dispose);
770
- var result = useSyncExternalStore(subscription.listen, function () { return subscription.result; }, function () { return subscription.result; });
771
- var previousVariables = React.useRef(variables);
772
- var previousData = React.useRef(result.data);
773
- if (!equality.equal(variables, previousVariables.current)) {
774
- if (result.networkStatus !== core.NetworkStatus.ready) {
775
- result = tslib.__assign(tslib.__assign({}, result), { data: previousData.current, networkStatus: core.NetworkStatus.setVariables });
776
- }
777
- previousVariables.current = variables;
778
- previousData.current = result.data;
779
- }
780
- if (result.networkStatus === core.NetworkStatus.error ||
781
- (shouldSuspend &&
782
- !shouldUseCachedResult(subscription.result, {
783
- returnPartialData: returnPartialData,
784
- fetchPolicy: options.fetchPolicy,
785
- }))) {
786
- __use(subscription.promise);
787
- }
788
- didPreviouslySuspend.current = true;
789
- var fetchMore = React.useCallback(function (options) { return subscription.fetchMore(options); }, [subscription]);
790
- var refetch = React.useCallback(function (variables) { return subscription.refetch(variables); }, [subscription]);
778
+ useTrackedSubscriptions(subscription);
779
+ React.useEffect(function () {
780
+ return subscription.listen(function () {
781
+ setVersion('main');
782
+ });
783
+ }, [subscription]);
784
+ var promise = subscription.promises[version] || subscription.promises.main;
785
+ var result = __use(promise);
786
+ var fetchMore = React.useCallback(function (options) {
787
+ var promise = subscription.fetchMore(options);
788
+ setVersion('network');
789
+ return promise;
790
+ }, [subscription]);
791
+ var refetch = React.useCallback(function (variables) {
792
+ var promise = subscription.refetch(variables);
793
+ setVersion('network');
794
+ return promise;
795
+ }, [subscription]);
791
796
  var subscribeToMore = React.useCallback(function (options) { return subscription.observable.subscribeToMore(options); }, [subscription]);
792
797
  return React.useMemo(function () {
793
798
  return {
@@ -815,7 +820,7 @@ function validateFetchPolicy(fetchPolicy) {
815
820
  'no-cache',
816
821
  'cache-and-network',
817
822
  ];
818
- globals.__DEV__ ? globals.invariant(supportedFetchPolicies.includes(fetchPolicy), "The fetch policy `".concat(fetchPolicy, "` is not supported with suspense.")) : globals.invariant(supportedFetchPolicies.includes(fetchPolicy), 35);
823
+ globals.__DEV__ ? globals.invariant(supportedFetchPolicies.includes(fetchPolicy), "The fetch policy `".concat(fetchPolicy, "` is not supported with suspense.")) : globals.invariant(supportedFetchPolicies.includes(fetchPolicy), 34);
819
824
  }
820
825
  function validatePartialDataReturn(fetchPolicy, returnPartialData) {
821
826
  if (fetchPolicy === 'no-cache' && returnPartialData) {
@@ -830,35 +835,25 @@ function toApolloError(result) {
830
835
  function useTrackedSubscriptions(subscription) {
831
836
  var trackedSubscriptions = React.useRef(new Set());
832
837
  trackedSubscriptions.current.add(subscription);
833
- return function dispose() {
838
+ useStrictModeSafeCleanupEffect(function () {
834
839
  trackedSubscriptions.current.forEach(function (sub) { return sub.dispose(); });
835
- };
840
+ });
841
+ }
842
+ function usePromiseVersion() {
843
+ var _a = React.useState({
844
+ version: 'main',
845
+ }), version = _a[0].version, setState = _a[1];
846
+ var setVersion = React.useCallback(function (version) { return setState({ version: version }); }, []);
847
+ return [version, setVersion];
836
848
  }
837
849
  function useWatchQueryOptions(_a) {
838
850
  var query = _a.query, options = _a.options;
839
- var watchQueryOptions = useDeepMemo(function () { return (tslib.__assign(tslib.__assign({}, options), { query: query, notifyOnNetworkStatusChange: true, nextFetchPolicy: void 0 })); }, [options, query]);
851
+ var watchQueryOptions = useDeepMemo(function () { return (tslib.__assign(tslib.__assign({}, options), { query: query, notifyOnNetworkStatusChange: false, nextFetchPolicy: void 0 })); }, [options, query]);
840
852
  if (globals.__DEV__) {
841
853
  validateOptions(watchQueryOptions);
842
854
  }
843
855
  return watchQueryOptions;
844
856
  }
845
- function shouldUseCachedResult(result, _a) {
846
- var returnPartialData = _a.returnPartialData, fetchPolicy = _a.fetchPolicy;
847
- if (result.networkStatus === core.NetworkStatus.refetch ||
848
- result.networkStatus === core.NetworkStatus.fetchMore ||
849
- result.networkStatus === core.NetworkStatus.error) {
850
- return false;
851
- }
852
- switch (fetchPolicy) {
853
- case void 0:
854
- case 'cache-first':
855
- case 'cache-and-network': {
856
- return Boolean(result.data && (!result.partial || returnPartialData));
857
- }
858
- default:
859
- return false;
860
- }
861
- }
862
857
 
863
858
  exports.useApolloClient = useApolloClient;
864
859
  exports.useFragment_experimental = useFragment_experimental;
@@ -6,7 +6,7 @@ export function useApolloClient(override) {
6
6
  var client = override || context.client;
7
7
  __DEV__ ? invariant(!!client, 'Could not find "client" in the context or passed in as an option. ' +
8
8
  'Wrap the root component in an <ApolloProvider>, or pass an ApolloClient ' +
9
- 'instance in via options.') : invariant(!!client, 33);
9
+ 'instance in via options.') : invariant(!!client, 32);
10
10
  return client;
11
11
  }
12
12
  //# sourceMappingURL=useApolloClient.js.map
@@ -1,9 +1,10 @@
1
1
  import { Cache, Reference, StoreObject, MissingTree } from "../../cache";
2
2
  import { OperationVariables } from "../../core";
3
3
  import { NoInfer } from "../types/types";
4
- export interface UseFragmentOptions<TData, TVars> extends Omit<Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>, "id" | "query" | "optimistic" | "previousResult">, Omit<Cache.ReadFragmentOptions<TData, TVars>, "id" | "variables"> {
4
+ export interface UseFragmentOptions<TData, TVars> extends Omit<Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>, "id" | "query" | "optimistic" | "previousResult" | "returnPartialData">, Omit<Cache.ReadFragmentOptions<TData, TVars>, "id" | "variables" | "returnPartialData"> {
5
5
  from: StoreObject | Reference | string;
6
6
  optimistic?: boolean;
7
+ returnPartialData?: boolean;
7
8
  }
8
9
  export interface UseFragmentResult<TData> {
9
10
  data: TData | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"useFragment.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAChD,SAAQ,IAAI,CACV,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAC/C,IAAI,GACJ,OAAO,GACP,YAAY,GACZ,gBAAgB,CACnB,EAAE,IAAI,CACL,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EACrC,IAAI,GACJ,WAAW,CACd;IACC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAgBD,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,GAAG,GAAG,EACX,KAAK,GAAG,kBAAkB,EAE1B,OAAO,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GACxC,iBAAiB,CAAC,KAAK,CAAC,CA8C1B"}
1
+ {"version":3,"file":"useFragment.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,EACL,SAAS,EACT,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAChD,SAAQ,IAAI,CACV,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAC/C,IAAI,GACJ,OAAO,GACP,YAAY,GACZ,gBAAgB,GAChB,mBAAmB,CACtB,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAC3C,IAAI,GACJ,WAAW,GACX,mBAAmB,CACtB;IACC,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;IAEvC,UAAU,CAAC,EAAE,OAAO,CAAC;IAQrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAgBD,MAAM,WAAW,iBAAiB,CAAC,KAAK;IACtC,IAAI,EAAE,KAAK,GAAG,SAAS,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,GAAG,GAAG,EACX,KAAK,GAAG,kBAAkB,EAE1B,OAAO,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GACxC,iBAAiB,CAAC,KAAK,CAAC,CA8C1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAyC9D,MAAM,UAAU,wBAAwB,CAItC,OAAyC;IAEjC,IAAA,KAAK,GAAK,eAAe,EAAE,MAAtB,CAAuB;IAGlC,IAAA,QAAQ,GAKN,OAAO,SALD,EACR,YAAY,GAIV,OAAO,aAJG,EACZ,IAAI,GAGF,OAAO,KAHL,EACJ,KAEE,OAAO,WAFQ,EAAjB,UAAU,mBAAG,IAAI,KAAA,EACd,IAAI,UACL,OAAO,EANL,kDAML,CADQ,CACG;IAEZ,IAAM,WAAW,yBACZ,IAAI,KACP,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1D,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtD,UAAU,YAAA,GACX,CAAC;IAEF,IAAM,SAAS,GAAG,MAAM,EAA4B,CAAC;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAQ,WAAW,CAAC,CAAC;IAGhD,IAAM,WAAW,GAAG;QAClB,IAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,OAAO;YACtB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,oBAAoB,CACzB,UAAC,WAAW;QACV,OAAO,KAAK,CAAC,KAAK,uBACb,WAAW,KACd,SAAS,EAAE,IAAI,EACf,QAAQ,YAAC,IAAI;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5B,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtD,WAAW,EAAE,CAAC;iBACf;YACH,CAAC,IACD,CAAC;IACL,CAAC,EACD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAA6B;IAE7B,IAAM,MAAM,GAA6B;QACvC,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;KAC1B,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,OAAO,GAAG,cAAc,CAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,OAAO,EAAb,CAAa,CAAC,CACzC,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { useRef } from \"react\";\nimport { equal } from \"@wry/equality\";\n\nimport { mergeDeepArray } from \"../../utilities\";\nimport {\n Cache,\n Reference,\n StoreObject,\n MissingTree,\n} from \"../../cache\";\n\nimport { useApolloClient } from \"./useApolloClient\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore\";\nimport { OperationVariables } from \"../../core\";\nimport { NoInfer } from \"../types/types\";\n\nexport interface UseFragmentOptions<TData, TVars>\nextends Omit<\n Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>,\n | \"id\"\n | \"query\"\n | \"optimistic\"\n | \"previousResult\"\n>, Omit<\n Cache.ReadFragmentOptions<TData, TVars>,\n | \"id\"\n | \"variables\"\n> {\n from: StoreObject | Reference | string;\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\n}\n\n// Since the above definition of UseFragmentOptions can be hard to parse without\n// help from TypeScript/VSCode, here are the intended fields and their types.\n// Uncomment this code to check that it's consistent with the definition above.\n//\n// export interface UseFragmentOptions<TData, TVars> {\n// from: string | StoreObject | Reference;\n// fragment: DocumentNode | TypedDocumentNode<TData, TVars>;\n// fragmentName?: string;\n// optimistic?: boolean;\n// variables?: TVars;\n// returnPartialData?: boolean;\n// canonizeResults?: boolean;\n// }\n\nexport interface UseFragmentResult<TData> {\n data: TData | undefined;\n complete: boolean;\n missing?: MissingTree;\n}\n\nexport function useFragment_experimental<\n TData = any,\n TVars = OperationVariables\n>(\n options: UseFragmentOptions<TData, TVars>,\n): UseFragmentResult<TData> {\n const { cache } = useApolloClient();\n\n const {\n fragment,\n fragmentName,\n from,\n optimistic = true,\n ...rest\n } = options;\n\n const diffOptions: Cache.DiffOptions<TData, TVars> = {\n ...rest,\n id: typeof from === \"string\" ? from : cache.identify(from),\n query: cache[\"getFragmentDoc\"](fragment, fragmentName),\n optimistic,\n };\n\n const resultRef = useRef<UseFragmentResult<TData>>();\n let latestDiff = cache.diff<TData>(diffOptions);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = () => {\n const latestDiffToResult = diffToResult(latestDiff);\n return resultRef.current &&\n equal(resultRef.current.data, latestDiffToResult.data)\n ? resultRef.current\n : (resultRef.current = latestDiffToResult);\n };\n\n return useSyncExternalStore(\n (forceUpdate) => {\n return cache.watch({\n ...diffOptions,\n immediate: true,\n callback(diff) {\n if (!equal(diff, latestDiff)) {\n resultRef.current = diffToResult((latestDiff = diff));\n forceUpdate();\n }\n },\n });\n },\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult<TData>(\n diff: Cache.DiffResult<TData>,\n): UseFragmentResult<TData> {\n const result: UseFragmentResult<TData> = {\n data: diff.result,\n complete: !!diff.complete,\n };\n\n if (diff.missing) {\n result.missing = mergeDeepArray(\n diff.missing.map(error => error.missing),\n );\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"useFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useFragment.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAQjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAkD9D,MAAM,UAAU,wBAAwB,CAItC,OAAyC;IAEjC,IAAA,KAAK,GAAK,eAAe,EAAE,MAAtB,CAAuB;IAGlC,IAAA,QAAQ,GAKN,OAAO,SALD,EACR,YAAY,GAIV,OAAO,aAJG,EACZ,IAAI,GAGF,OAAO,KAHL,EACJ,KAEE,OAAO,WAFQ,EAAjB,UAAU,mBAAG,IAAI,KAAA,EACd,IAAI,UACL,OAAO,EANL,kDAML,CADQ,CACG;IAEZ,IAAM,WAAW,yBACZ,IAAI,KACP,EAAE,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC1D,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAC,EACtD,UAAU,YAAA,GACX,CAAC;IAEF,IAAM,SAAS,GAAG,MAAM,EAA4B,CAAC;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAQ,WAAW,CAAC,CAAC;IAGhD,IAAM,WAAW,GAAG;QAClB,IAAM,kBAAkB,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,OAAO;YACtB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YACtD,CAAC,CAAC,SAAS,CAAC,OAAO;YACnB,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,OAAO,oBAAoB,CACzB,UAAC,WAAW;QACV,OAAO,KAAK,CAAC,KAAK,uBACb,WAAW,KACd,SAAS,EAAE,IAAI,EACf,QAAQ,YAAC,IAAI;gBACX,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE;oBAC5B,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtD,WAAW,EAAE,CAAC;iBACf;YACH,CAAC,IACD,CAAC;IACL,CAAC,EACD,WAAW,EACX,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CACnB,IAA6B;IAE7B,IAAM,MAAM,GAA6B;QACvC,IAAI,EAAE,IAAI,CAAC,MAAM;QACjB,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;KAC1B,CAAC;IAEF,IAAI,IAAI,CAAC,OAAO,EAAE;QAChB,MAAM,CAAC,OAAO,GAAG,cAAc,CAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,KAAK,IAAI,OAAA,KAAK,CAAC,OAAO,EAAb,CAAa,CAAC,CACzC,CAAC;KACH;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { useRef } from \"react\";\nimport { equal } from \"@wry/equality\";\n\nimport { mergeDeepArray } from \"../../utilities\";\nimport {\n Cache,\n Reference,\n StoreObject,\n MissingTree,\n} from \"../../cache\";\n\nimport { useApolloClient } from \"./useApolloClient\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore\";\nimport { OperationVariables } from \"../../core\";\nimport { NoInfer } from \"../types/types\";\n\nexport interface UseFragmentOptions<TData, TVars>\nextends Omit<\n Cache.DiffOptions<NoInfer<TData>, NoInfer<TVars>>,\n | \"id\"\n | \"query\"\n | \"optimistic\"\n | \"previousResult\"\n | \"returnPartialData\"\n>, Omit<Cache.ReadFragmentOptions<TData, TVars>,\n | \"id\"\n | \"variables\"\n | \"returnPartialData\"\n> {\n from: StoreObject | Reference | string;\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\n\n /**\n * Whether to return incomplete data rather than null.\n * Defaults to `true`.\n * @deprecated This option will be removed in Apollo Client 3.8.\n * Please check `result.missing` instead.\n */\n returnPartialData?: boolean;\n}\n\n// Since the above definition of UseFragmentOptions can be hard to parse without\n// help from TypeScript/VSCode, here are the intended fields and their types.\n// Uncomment this code to check that it's consistent with the definition above.\n//\n// export interface UseFragmentOptions<TData, TVars> {\n// from: string | StoreObject | Reference;\n// fragment: DocumentNode | TypedDocumentNode<TData, TVars>;\n// fragmentName?: string;\n// optimistic?: boolean;\n// variables?: TVars;\n// returnPartialData?: boolean;\n// canonizeResults?: boolean;\n// }\n\nexport interface UseFragmentResult<TData> {\n data: TData | undefined;\n complete: boolean;\n missing?: MissingTree;\n}\n\nexport function useFragment_experimental<\n TData = any,\n TVars = OperationVariables\n>(\n options: UseFragmentOptions<TData, TVars>,\n): UseFragmentResult<TData> {\n const { cache } = useApolloClient();\n\n const {\n fragment,\n fragmentName,\n from,\n optimistic = true,\n ...rest\n } = options;\n\n const diffOptions: Cache.DiffOptions<TData, TVars> = {\n ...rest,\n id: typeof from === \"string\" ? from : cache.identify(from),\n query: cache[\"getFragmentDoc\"](fragment, fragmentName),\n optimistic,\n };\n\n const resultRef = useRef<UseFragmentResult<TData>>();\n let latestDiff = cache.diff<TData>(diffOptions);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = () => {\n const latestDiffToResult = diffToResult(latestDiff);\n return resultRef.current &&\n equal(resultRef.current.data, latestDiffToResult.data)\n ? resultRef.current\n : (resultRef.current = latestDiffToResult);\n };\n\n return useSyncExternalStore(\n (forceUpdate) => {\n return cache.watch({\n ...diffOptions,\n immediate: true,\n callback(diff) {\n if (!equal(diff, latestDiff)) {\n resultRef.current = diffToResult((latestDiff = diff));\n forceUpdate();\n }\n },\n });\n },\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult<TData>(\n diff: Cache.DiffResult<TData>,\n): UseFragmentResult<TData> {\n const result: UseFragmentResult<TData> = {\n data: diff.result,\n complete: !!diff.complete,\n };\n\n if (diff.missing) {\n result.missing = mergeDeepArray(\n diff.missing.map(error => error.missing),\n );\n }\n\n return result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscription.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSubscription.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAItE,OAAO,EACL,OAAO,EACP,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,eAAe,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EACrG,YAAY,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EACjE,OAAO,CAAC,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,yCAsJvE"}
1
+ {"version":3,"file":"useSubscription.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSubscription.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAItE,OAAO,EACL,OAAO,EACP,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,eAAe,CAAC,KAAK,GAAG,GAAG,EAAE,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EACrG,YAAY,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EACjE,OAAO,CAAC,EAAE,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,yCAqKvE"}
@@ -89,9 +89,13 @@ export function useSubscription(subscription, options) {
89
89
  if (!observable) {
90
90
  return;
91
91
  }
92
+ var subscriptionStopped = false;
92
93
  var subscription = observable.subscribe({
93
94
  next: function (fetchResult) {
94
95
  var _a, _b;
96
+ if (subscriptionStopped) {
97
+ return;
98
+ }
95
99
  var result = {
96
100
  loading: false,
97
101
  data: fetchResult.data,
@@ -114,26 +118,34 @@ export function useSubscription(subscription, options) {
114
118
  },
115
119
  error: function (error) {
116
120
  var _a, _b;
117
- setResult({
118
- loading: false,
119
- data: void 0,
120
- error: error,
121
- variables: options === null || options === void 0 ? void 0 : options.variables,
122
- });
123
- (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
121
+ if (!subscriptionStopped) {
122
+ setResult({
123
+ loading: false,
124
+ data: void 0,
125
+ error: error,
126
+ variables: options === null || options === void 0 ? void 0 : options.variables,
127
+ });
128
+ (_b = (_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onError) === null || _b === void 0 ? void 0 : _b.call(_a, error);
129
+ }
130
+ ;
124
131
  },
125
132
  complete: function () {
126
133
  var _a, _b;
127
- if ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onComplete) {
128
- ref.current.options.onComplete();
129
- }
130
- else if ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onSubscriptionComplete) {
131
- ref.current.options.onSubscriptionComplete();
134
+ if (!subscriptionStopped) {
135
+ if ((_a = ref.current.options) === null || _a === void 0 ? void 0 : _a.onComplete) {
136
+ ref.current.options.onComplete();
137
+ }
138
+ else if ((_b = ref.current.options) === null || _b === void 0 ? void 0 : _b.onSubscriptionComplete) {
139
+ ref.current.options.onSubscriptionComplete();
140
+ }
132
141
  }
133
142
  },
134
143
  });
135
144
  return function () {
136
- subscription.unsubscribe();
145
+ subscriptionStopped = true;
146
+ setTimeout(function () {
147
+ subscription.unsubscribe();
148
+ });
137
149
  };
138
150
  }, [observable]);
139
151
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscription.js","sourceRoot":"","sources":["../../../src/react/hooks/useSubscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from '../../utilities/globals';\nimport { useState, useRef, useEffect } from 'react';\nimport { DocumentNode } from 'graphql';\nimport { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { equal } from '@wry/equality';\n\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport {\n NoInfer,\n SubscriptionHookOptions,\n SubscriptionResult\n} from '../types/types';\nimport { OperationVariables } from '../../core';\nimport { useApolloClient } from './useApolloClient';\n\nexport function useSubscription<TData = any, TVariables extends OperationVariables = OperationVariables>(\n subscription: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options?: SubscriptionHookOptions<NoInfer<TData>, NoInfer<TVariables>>,\n) {\n const hasIssuedDeprecationWarningRef = useRef(false);\n const client = useApolloClient(options?.client);\n verifyDocumentType(subscription, DocumentType.Subscription);\n const [result, setResult] = useState<SubscriptionResult<TData, TVariables>>({\n loading: !options?.skip,\n error: void 0,\n data: void 0,\n variables: options?.variables,\n });\n\n if (!hasIssuedDeprecationWarningRef.current) {\n hasIssuedDeprecationWarningRef.current = true;\n\n if (options?.onSubscriptionData) {\n invariant.warn(\n options.onData\n ? \"'useSubscription' supports only the 'onSubscriptionData' or 'onData' option, but not both. Only the 'onData' option will be used.\"\n : \"'onSubscriptionData' is deprecated and will be removed in a future major version. Please use the 'onData' option instead.\"\n );\n }\n\n if (options?.onSubscriptionComplete) {\n invariant.warn(\n options.onComplete\n ? \"'useSubscription' supports only the 'onSubscriptionComplete' or 'onComplete' option, but not both. Only the 'onComplete' option will be used.\"\n : \"'onSubscriptionComplete' is deprecated and will be removed in a future major version. Please use the 'onComplete' option instead.\"\n );\n }\n }\n\n const [observable, setObservable] = useState(() => {\n if (options?.skip) {\n return null;\n }\n\n return client.subscribe({\n query: subscription,\n variables: options?.variables,\n fetchPolicy: options?.fetchPolicy,\n context: options?.context,\n });\n });\n\n const canResetObservableRef = useRef(false);\n useEffect(() => {\n return () => {\n canResetObservableRef.current = true;\n };\n }, []);\n\n const ref = useRef({ client, subscription, options });\n useEffect(() => {\n let shouldResubscribe = options?.shouldResubscribe;\n if (typeof shouldResubscribe === 'function') {\n shouldResubscribe = !!shouldResubscribe(options!);\n }\n\n if (options?.skip) {\n if (!options?.skip !== !ref.current.options?.skip || canResetObservableRef.current) {\n setResult({\n loading: false,\n data: void 0,\n error: void 0,\n variables: options?.variables,\n });\n setObservable(null);\n canResetObservableRef.current = false;\n }\n } else if (\n (shouldResubscribe !== false &&\n (client !== ref.current.client ||\n subscription !== ref.current.subscription ||\n options?.fetchPolicy !== ref.current.options?.fetchPolicy ||\n !options?.skip !== !ref.current.options?.skip ||\n !equal(options?.variables, ref.current.options?.variables))) ||\n canResetObservableRef.current\n ) {\n setResult({\n loading: true,\n data: void 0,\n error: void 0,\n variables: options?.variables,\n });\n setObservable(client.subscribe({\n query: subscription,\n variables: options?.variables,\n fetchPolicy: options?.fetchPolicy,\n context: options?.context,\n }));\n canResetObservableRef.current = false;\n }\n\n Object.assign(ref.current, { client, subscription, options });\n }, [client, subscription, options, canResetObservableRef.current]);\n\n useEffect(() => {\n if (!observable) {\n return;\n }\n\n const subscription = observable.subscribe({\n next(fetchResult) {\n const result = {\n loading: false,\n // TODO: fetchResult.data can be null but SubscriptionResult.data\n // expects TData | undefined only\n data: fetchResult.data!,\n error: void 0,\n variables: options?.variables,\n };\n setResult(result);\n\n if (ref.current.options?.onData) {\n ref.current.options.onData({\n client,\n data: result\n });\n } else if (ref.current.options?.onSubscriptionData) {\n ref.current.options.onSubscriptionData({\n client,\n subscriptionData: result\n });\n }\n },\n error(error) {\n setResult({\n loading: false,\n data: void 0,\n error,\n variables: options?.variables,\n });\n ref.current.options?.onError?.(error);\n },\n complete() {\n if (ref.current.options?.onComplete) {\n ref.current.options.onComplete();\n } else if (ref.current.options?.onSubscriptionComplete) {\n ref.current.options.onSubscriptionComplete();\n }\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [observable]);\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"useSubscription.js","sourceRoot":"","sources":["../../../src/react/hooks/useSubscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from '../../utilities/globals';\nimport { useState, useRef, useEffect } from 'react';\nimport { DocumentNode } from 'graphql';\nimport { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { equal } from '@wry/equality';\n\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport {\n NoInfer,\n SubscriptionHookOptions,\n SubscriptionResult\n} from '../types/types';\nimport { OperationVariables } from '../../core';\nimport { useApolloClient } from './useApolloClient';\n\nexport function useSubscription<TData = any, TVariables extends OperationVariables = OperationVariables>(\n subscription: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options?: SubscriptionHookOptions<NoInfer<TData>, NoInfer<TVariables>>,\n) {\n const hasIssuedDeprecationWarningRef = useRef(false);\n const client = useApolloClient(options?.client);\n verifyDocumentType(subscription, DocumentType.Subscription);\n const [result, setResult] = useState<SubscriptionResult<TData, TVariables>>({\n loading: !options?.skip,\n error: void 0,\n data: void 0,\n variables: options?.variables,\n });\n\n if (!hasIssuedDeprecationWarningRef.current) {\n hasIssuedDeprecationWarningRef.current = true;\n\n if (options?.onSubscriptionData) {\n invariant.warn(\n options.onData\n ? \"'useSubscription' supports only the 'onSubscriptionData' or 'onData' option, but not both. Only the 'onData' option will be used.\"\n : \"'onSubscriptionData' is deprecated and will be removed in a future major version. Please use the 'onData' option instead.\"\n );\n }\n\n if (options?.onSubscriptionComplete) {\n invariant.warn(\n options.onComplete\n ? \"'useSubscription' supports only the 'onSubscriptionComplete' or 'onComplete' option, but not both. Only the 'onComplete' option will be used.\"\n : \"'onSubscriptionComplete' is deprecated and will be removed in a future major version. Please use the 'onComplete' option instead.\"\n );\n }\n }\n\n const [observable, setObservable] = useState(() => {\n if (options?.skip) {\n return null;\n }\n\n return client.subscribe({\n query: subscription,\n variables: options?.variables,\n fetchPolicy: options?.fetchPolicy,\n context: options?.context,\n });\n });\n\n const canResetObservableRef = useRef(false);\n useEffect(() => {\n return () => {\n canResetObservableRef.current = true;\n };\n }, []);\n\n const ref = useRef({ client, subscription, options });\n useEffect(() => {\n let shouldResubscribe = options?.shouldResubscribe;\n if (typeof shouldResubscribe === 'function') {\n shouldResubscribe = !!shouldResubscribe(options!);\n }\n\n if (options?.skip) {\n if (!options?.skip !== !ref.current.options?.skip || canResetObservableRef.current) {\n setResult({\n loading: false,\n data: void 0,\n error: void 0,\n variables: options?.variables,\n });\n setObservable(null);\n canResetObservableRef.current = false;\n }\n } else if (\n (shouldResubscribe !== false &&\n (client !== ref.current.client ||\n subscription !== ref.current.subscription ||\n options?.fetchPolicy !== ref.current.options?.fetchPolicy ||\n !options?.skip !== !ref.current.options?.skip ||\n !equal(options?.variables, ref.current.options?.variables))) ||\n canResetObservableRef.current\n ) {\n setResult({\n loading: true,\n data: void 0,\n error: void 0,\n variables: options?.variables,\n });\n setObservable(client.subscribe({\n query: subscription,\n variables: options?.variables,\n fetchPolicy: options?.fetchPolicy,\n context: options?.context,\n }));\n canResetObservableRef.current = false;\n }\n\n Object.assign(ref.current, { client, subscription, options });\n }, [client, subscription, options, canResetObservableRef.current]);\n\n useEffect(() => {\n if (!observable) {\n return;\n }\n\n let subscriptionStopped = false;\n const subscription = observable.subscribe({\n next(fetchResult) {\n if (subscriptionStopped) {\n return;\n }\n\n const result = {\n loading: false,\n // TODO: fetchResult.data can be null but SubscriptionResult.data\n // expects TData | undefined only\n data: fetchResult.data!,\n error: void 0,\n variables: options?.variables,\n };\n setResult(result);\n\n if (ref.current.options?.onData) {\n ref.current.options.onData({\n client,\n data: result\n });\n } else if (ref.current.options?.onSubscriptionData) {\n ref.current.options.onSubscriptionData({\n client,\n subscriptionData: result\n });\n }\n },\n error(error) {\n if (!subscriptionStopped) {\n setResult({\n loading: false,\n data: void 0,\n error,\n variables: options?.variables,\n });\n ref.current.options?.onError?.(error);\n };\n },\n complete() {\n if (!subscriptionStopped) {\n if (ref.current.options?.onComplete) {\n ref.current.options.onComplete();\n } else if (ref.current.options?.onSubscriptionComplete) {\n ref.current.options.onSubscriptionComplete();\n }\n }\n },\n });\n\n return () => {\n // immediately stop receiving subscription values, but do not unsubscribe\n // until after a short delay in case another useSubscription hook is\n // reusing the same underlying observable and is about to subscribe\n subscriptionStopped = true;\n setTimeout(() => {\n subscription.unsubscribe();\n });\n };\n }, [observable]);\n\n return result;\n}\n"]}
@@ -6,7 +6,7 @@ export function useSuspenseCache(override) {
6
6
  var suspenseCache = override || context.suspenseCache;
7
7
  __DEV__ ? invariant(suspenseCache, 'Could not find a "suspenseCache" in the context or passed in as an option. ' +
8
8
  'Wrap the root component in an <ApolloProvider> and provide a suspenseCache, ' +
9
- 'or pass a SuspenseCache instance in via options.') : invariant(suspenseCache, 34);
9
+ 'or pass a SuspenseCache instance in via options.') : invariant(suspenseCache, 33);
10
10
  return suspenseCache;
11
11
  }
12
12
  //# sourceMappingURL=useSuspenseCache.js.map
@@ -1,6 +1,7 @@
1
1
  import { ApolloClient, ApolloError, ApolloQueryResult, DocumentNode, OperationVariables, TypedDocumentNode, NetworkStatus, FetchMoreQueryOptions } from '../../core';
2
- import { SuspenseQueryHookOptions, ObservableQueryFields } from '../types/types';
3
- export interface UseSuspenseQueryResult<TData = any, TVariables extends OperationVariables = OperationVariables> {
2
+ import { DeepPartial } from '../../utilities';
3
+ import { SuspenseQueryHookOptions, ObservableQueryFields, NoInfer } from '../types/types';
4
+ export interface UseSuspenseQueryResult<TData = unknown, TVariables extends OperationVariables = OperationVariables> {
4
5
  client: ApolloClient<any>;
5
6
  data: TData;
6
7
  error: ApolloError | undefined;
@@ -17,6 +18,17 @@ type FetchMoreFunction<TData, TVariables extends OperationVariables> = (fetchMor
17
18
  }) => Promise<ApolloQueryResult<TData>>;
18
19
  type RefetchFunction<TData, TVariables extends OperationVariables> = ObservableQueryFields<TData, TVariables>['refetch'];
19
20
  type SubscribeToMoreFunction<TData, TVariables extends OperationVariables> = ObservableQueryFields<TData, TVariables>['subscribeToMore'];
20
- export declare function useSuspenseQuery_experimental<TData = any, TVariables extends OperationVariables = OperationVariables>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options?: SuspenseQueryHookOptions<TData, TVariables>): UseSuspenseQueryResult<TData, TVariables>;
21
+ export declare function useSuspenseQuery_experimental<TData, TVariables extends OperationVariables, TOptions extends Omit<SuspenseQueryHookOptions<TData>, 'variables'>>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options?: SuspenseQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>> & TOptions): UseSuspenseQueryResult<TOptions['errorPolicy'] extends 'ignore' | 'all' ? TOptions['returnPartialData'] extends true ? DeepPartial<TData> | undefined : TData | undefined : TOptions['returnPartialData'] extends true ? DeepPartial<TData> : TData, TVariables>;
22
+ export declare function useSuspenseQuery_experimental<TData = unknown, TVariables extends OperationVariables = OperationVariables>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options: SuspenseQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>> & {
23
+ returnPartialData: true;
24
+ errorPolicy: 'ignore' | 'all';
25
+ }): UseSuspenseQueryResult<DeepPartial<TData> | undefined, TVariables>;
26
+ export declare function useSuspenseQuery_experimental<TData = unknown, TVariables extends OperationVariables = OperationVariables>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options: SuspenseQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>> & {
27
+ errorPolicy: 'ignore' | 'all';
28
+ }): UseSuspenseQueryResult<TData | undefined, TVariables>;
29
+ export declare function useSuspenseQuery_experimental<TData = unknown, TVariables extends OperationVariables = OperationVariables>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options: SuspenseQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>> & {
30
+ returnPartialData: true;
31
+ }): UseSuspenseQueryResult<DeepPartial<TData>, TVariables>;
32
+ export declare function useSuspenseQuery_experimental<TData = unknown, TVariables extends OperationVariables = OperationVariables>(query: DocumentNode | TypedDocumentNode<TData, TVariables>, options?: SuspenseQueryHookOptions<NoInfer<TData>, NoInfer<TVariables>>): UseSuspenseQueryResult<TData, TVariables>;
21
33
  export {};
22
34
  //# sourceMappingURL=useSuspenseQuery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSuspenseQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseQuery.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAGjB,aAAa,EACb,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAIpB,OAAO,EAEL,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAOxB,MAAM,WAAW,sBAAsB,CACrC,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,kBAAkB,GAAG,kBAAkB;IAE1D,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAChD,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,eAAe,EAAE,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;CAC7D;AAED,KAAK,iBAAiB,CAAC,KAAK,EAAE,UAAU,SAAS,kBAAkB,IAAI,CACrE,gBAAgB,EAAE,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG;IAC3D,WAAW,CAAC,EAAE,CACZ,mBAAmB,EAAE,KAAK,EAC1B,OAAO,EAAE;QACP,eAAe,EAAE,KAAK,CAAC;QACvB,SAAS,EAAE,UAAU,CAAC;KACvB,KACE,KAAK,CAAC;CACZ,KACE,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;AAEvC,KAAK,eAAe,CAClB,KAAK,EACL,UAAU,SAAS,kBAAkB,IACnC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;AAExD,KAAK,uBAAuB,CAC1B,KAAK,EACL,UAAU,SAAS,kBAAkB,IACnC,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAEhE,wBAAgB,6BAA6B,CAC3C,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EAE1D,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1D,OAAO,GAAE,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAuB,GACzE,sBAAsB,CAAC,KAAK,EAAE,UAAU,CAAC,CA2F3C"}
1
+ {"version":3,"file":"useSuspenseQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseQuery.ts"],"names":[],"mappings":"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"}
@@ -1,51 +1,43 @@
1
1
  import { __assign } from "tslib";
2
2
  import { invariant, __DEV__ } from "../../utilities/globals/index.js";
3
- import { equal } from '@wry/equality';
4
- import { useRef, useCallback, useMemo } from 'react';
5
- import { ApolloError, NetworkStatus, } from "../../core/index.js";
3
+ import { useRef, useCallback, useMemo, useEffect, useState } from 'react';
4
+ import { ApolloError, } from "../../core/index.js";
6
5
  import { isNonEmptyArray } from "../../utilities/index.js";
7
6
  import { useApolloClient } from "./useApolloClient.js";
8
7
  import { DocumentType, verifyDocumentType } from "../parser/index.js";
9
8
  import { useDeepMemo, useStrictModeSafeCleanupEffect, __use } from "./internal/index.js";
10
9
  import { useSuspenseCache } from "./useSuspenseCache.js";
11
- import { useSyncExternalStore } from "./useSyncExternalStore.js";
12
10
  import { canonicalStringify } from "../../cache/index.js";
13
11
  export function useSuspenseQuery_experimental(query, options) {
14
12
  if (options === void 0) { options = Object.create(null); }
15
- var didPreviouslySuspend = useRef(false);
16
13
  var client = useApolloClient(options.client);
17
14
  var suspenseCache = useSuspenseCache(options.suspenseCache);
18
15
  var watchQueryOptions = useWatchQueryOptions({ query: query, options: options });
19
- var _a = watchQueryOptions.returnPartialData, returnPartialData = _a === void 0 ? false : _a, variables = watchQueryOptions.variables;
20
- var _b = options.suspensePolicy, suspensePolicy = _b === void 0 ? 'always' : _b, _c = options.queryKey, queryKey = _c === void 0 ? [] : _c;
21
- var shouldSuspend = suspensePolicy === 'always' || !didPreviouslySuspend.current;
16
+ var variables = watchQueryOptions.variables;
17
+ var _a = options.queryKey, queryKey = _a === void 0 ? [] : _a;
18
+ var _b = usePromiseVersion(), version = _b[0], setVersion = _b[1];
22
19
  var cacheKey = [client, query, canonicalStringify(variables)].concat(queryKey);
23
20
  var subscription = suspenseCache.getSubscription(cacheKey, function () {
24
21
  return client.watchQuery(watchQueryOptions);
25
22
  });
26
- var dispose = useTrackedSubscriptions(subscription);
27
- useStrictModeSafeCleanupEffect(dispose);
28
- var result = useSyncExternalStore(subscription.listen, function () { return subscription.result; }, function () { return subscription.result; });
29
- var previousVariables = useRef(variables);
30
- var previousData = useRef(result.data);
31
- if (!equal(variables, previousVariables.current)) {
32
- if (result.networkStatus !== NetworkStatus.ready) {
33
- result = __assign(__assign({}, result), { data: previousData.current, networkStatus: NetworkStatus.setVariables });
34
- }
35
- previousVariables.current = variables;
36
- previousData.current = result.data;
37
- }
38
- if (result.networkStatus === NetworkStatus.error ||
39
- (shouldSuspend &&
40
- !shouldUseCachedResult(subscription.result, {
41
- returnPartialData: returnPartialData,
42
- fetchPolicy: options.fetchPolicy,
43
- }))) {
44
- __use(subscription.promise);
45
- }
46
- didPreviouslySuspend.current = true;
47
- var fetchMore = useCallback(function (options) { return subscription.fetchMore(options); }, [subscription]);
48
- var refetch = useCallback(function (variables) { return subscription.refetch(variables); }, [subscription]);
23
+ useTrackedSubscriptions(subscription);
24
+ useEffect(function () {
25
+ return subscription.listen(function () {
26
+ setVersion('main');
27
+ });
28
+ }, [subscription]);
29
+ var promise = subscription.promises[version] || subscription.promises.main;
30
+ var result = __use(promise);
31
+ var fetchMore = useCallback(function (options) {
32
+ var promise = subscription.fetchMore(options);
33
+ setVersion('network');
34
+ return promise;
35
+ }, [subscription]);
36
+ var refetch = useCallback(function (variables) {
37
+ var promise = subscription.refetch(variables);
38
+ setVersion('network');
39
+ return promise;
40
+ }, [subscription]);
49
41
  var subscribeToMore = useCallback(function (options) { return subscription.observable.subscribeToMore(options); }, [subscription]);
50
42
  return useMemo(function () {
51
43
  return {
@@ -73,7 +65,7 @@ function validateFetchPolicy(fetchPolicy) {
73
65
  'no-cache',
74
66
  'cache-and-network',
75
67
  ];
76
- __DEV__ ? invariant(supportedFetchPolicies.includes(fetchPolicy), "The fetch policy `".concat(fetchPolicy, "` is not supported with suspense.")) : invariant(supportedFetchPolicies.includes(fetchPolicy), 35);
68
+ __DEV__ ? invariant(supportedFetchPolicies.includes(fetchPolicy), "The fetch policy `".concat(fetchPolicy, "` is not supported with suspense.")) : invariant(supportedFetchPolicies.includes(fetchPolicy), 34);
77
69
  }
78
70
  function validatePartialDataReturn(fetchPolicy, returnPartialData) {
79
71
  if (fetchPolicy === 'no-cache' && returnPartialData) {
@@ -88,33 +80,23 @@ function toApolloError(result) {
88
80
  function useTrackedSubscriptions(subscription) {
89
81
  var trackedSubscriptions = useRef(new Set());
90
82
  trackedSubscriptions.current.add(subscription);
91
- return function dispose() {
83
+ useStrictModeSafeCleanupEffect(function () {
92
84
  trackedSubscriptions.current.forEach(function (sub) { return sub.dispose(); });
93
- };
85
+ });
86
+ }
87
+ function usePromiseVersion() {
88
+ var _a = useState({
89
+ version: 'main',
90
+ }), version = _a[0].version, setState = _a[1];
91
+ var setVersion = useCallback(function (version) { return setState({ version: version }); }, []);
92
+ return [version, setVersion];
94
93
  }
95
94
  function useWatchQueryOptions(_a) {
96
95
  var query = _a.query, options = _a.options;
97
- var watchQueryOptions = useDeepMemo(function () { return (__assign(__assign({}, options), { query: query, notifyOnNetworkStatusChange: true, nextFetchPolicy: void 0 })); }, [options, query]);
96
+ var watchQueryOptions = useDeepMemo(function () { return (__assign(__assign({}, options), { query: query, notifyOnNetworkStatusChange: false, nextFetchPolicy: void 0 })); }, [options, query]);
98
97
  if (__DEV__) {
99
98
  validateOptions(watchQueryOptions);
100
99
  }
101
100
  return watchQueryOptions;
102
101
  }
103
- function shouldUseCachedResult(result, _a) {
104
- var returnPartialData = _a.returnPartialData, fetchPolicy = _a.fetchPolicy;
105
- if (result.networkStatus === NetworkStatus.refetch ||
106
- result.networkStatus === NetworkStatus.fetchMore ||
107
- result.networkStatus === NetworkStatus.error) {
108
- return false;
109
- }
110
- switch (fetchPolicy) {
111
- case void 0:
112
- case 'cache-first':
113
- case 'cache-and-network': {
114
- return Boolean(result.data && (!result.partial || returnPartialData));
115
- }
116
- default:
117
- return false;
118
- }
119
- }
120
102
  //# sourceMappingURL=useSuspenseQuery.js.map