@apollo/client 3.8.0-alpha.8 → 3.8.0-alpha.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 (41) hide show
  1. package/apollo-client.cjs +44 -17
  2. package/apollo-client.cjs.map +1 -1
  3. package/apollo-client.min.cjs +1 -1
  4. package/cache/cache.cjs +14 -3
  5. package/cache/cache.cjs.map +1 -1
  6. package/cache/cache.cjs.native.js +14 -3
  7. package/cache/core/types/DataProxy.d.ts +3 -2
  8. package/cache/core/types/DataProxy.d.ts.map +1 -1
  9. package/cache/core/types/DataProxy.js.map +1 -1
  10. package/cache/inmemory/policies.d.ts.map +1 -1
  11. package/cache/inmemory/policies.js +14 -3
  12. package/cache/inmemory/policies.js.map +1 -1
  13. package/core/ApolloClient.d.ts +3 -3
  14. package/core/ApolloClient.d.ts.map +1 -1
  15. package/core/ApolloClient.js +10 -4
  16. package/core/ApolloClient.js.map +1 -1
  17. package/core/core.cjs +11 -5
  18. package/core/core.cjs.map +1 -1
  19. package/core/core.cjs.native.js +11 -5
  20. package/invariantErrorCodes.js +1 -1
  21. package/package.json +10 -11
  22. package/react/hooks/hooks.cjs +12 -6
  23. package/react/hooks/hooks.cjs.map +1 -1
  24. package/react/hooks/hooks.cjs.native.js +12 -6
  25. package/react/hooks/useMutation.d.ts.map +1 -1
  26. package/react/hooks/useMutation.js +2 -1
  27. package/react/hooks/useMutation.js.map +1 -1
  28. package/react/hooks/useQuery.d.ts.map +1 -1
  29. package/react/hooks/useQuery.js +1 -1
  30. package/react/hooks/useQuery.js.map +1 -1
  31. package/react/hooks/useSuspenseQuery.d.ts.map +1 -1
  32. package/react/hooks/useSuspenseQuery.js +9 -4
  33. package/react/hooks/useSuspenseQuery.js.map +1 -1
  34. package/testing/core/itAsync.js.map +1 -1
  35. package/utilities/graphql/getFromAST.d.ts.map +1 -1
  36. package/utilities/graphql/getFromAST.js +7 -3
  37. package/utilities/graphql/getFromAST.js.map +1 -1
  38. package/utilities/utilities.cjs +7 -3
  39. package/utilities/utilities.cjs.map +1 -1
  40. package/utilities/utilities.cjs.native.js +7 -3
  41. package/version.js +1 -1
@@ -190,7 +190,7 @@ var InternalState = (function () {
190
190
  }
191
191
  };
192
192
  var subscription = obsQuery.subscribe(onNext, onError);
193
- return function () { return subscription.unsubscribe(); };
193
+ return function () { return setTimeout(function () { return subscription.unsubscribe(); }); };
194
194
  }, [
195
195
  obsQuery,
196
196
  this.renderPromises,
@@ -457,8 +457,9 @@ function useMutation(mutation, options) {
457
457
  }
458
458
  var execute = React.useCallback(function (executeOptions) {
459
459
  if (executeOptions === void 0) { executeOptions = {}; }
460
- var _a = ref.current, client = _a.client, options = _a.options, mutation = _a.mutation;
460
+ var _a = ref.current, options = _a.options, mutation = _a.mutation;
461
461
  var baseOptions = tslib.__assign(tslib.__assign({}, options), { mutation: mutation });
462
+ var client = executeOptions.client || ref.current.client;
462
463
  if (!ref.current.result.loading && !baseOptions.ignoreResults && ref.current.isMounted) {
463
464
  setResult(ref.current.result = {
464
465
  loading: true,
@@ -871,6 +872,7 @@ function useIsDeferred(query) {
871
872
  function useObservableQueryResult(observable) {
872
873
  var resultRef = React.useRef();
873
874
  var isMountedRef = React.useRef(false);
875
+ var subscribeTimeoutRef = React.useRef();
874
876
  if (!resultRef.current) {
875
877
  resultRef.current = observable.getCurrentResult();
876
878
  }
@@ -881,6 +883,7 @@ function useObservableQueryResult(observable) {
881
883
  };
882
884
  }, []);
883
885
  return useSyncExternalStore(React.useCallback(function (forceUpdate) {
886
+ clearTimeout(subscribeTimeoutRef.current);
884
887
  function handleUpdate() {
885
888
  var previousResult = resultRef.current;
886
889
  var result = observable.getCurrentResult();
@@ -894,12 +897,15 @@ function useObservableQueryResult(observable) {
894
897
  forceUpdate();
895
898
  }
896
899
  }
897
- var subscription = observable.subscribe({
898
- next: handleUpdate,
899
- error: handleUpdate,
900
+ var subscription;
901
+ subscribeTimeoutRef.current = setTimeout(function () {
902
+ subscription = observable.subscribe({
903
+ next: handleUpdate,
904
+ error: handleUpdate,
905
+ });
900
906
  });
901
907
  return function () {
902
- subscription.unsubscribe();
908
+ subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
903
909
  };
904
910
  }, [observable]), function () { return resultRef.current; }, function () { return resultRef.current; });
905
911
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useMutation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAEL,mBAAmB,EAEnB,aAAa,EACb,OAAO,EACR,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,WAAW,EACX,cAAc,EAEd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,WAAW,CACzB,KAAK,GAAG,GAAG,EACX,UAAU,GAAG,kBAAkB,EAC/B,QAAQ,GAAG,cAAc,EACzB,MAAM,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,EAElD,QAAQ,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC7D,OAAO,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GACnF,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CA4HpD"}
1
+ {"version":3,"file":"useMutation.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useMutation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAEL,mBAAmB,EAEnB,aAAa,EACb,OAAO,EACR,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,WAAW,EACX,cAAc,EAEd,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAMpB,wBAAgB,WAAW,CACzB,KAAK,GAAG,GAAG,EACX,UAAU,GAAG,kBAAkB,EAC/B,QAAQ,GAAG,cAAc,EACzB,MAAM,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,EAElD,QAAQ,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC7D,OAAO,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,GACnF,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CA8HpD"}
@@ -26,8 +26,9 @@ export function useMutation(mutation, options) {
26
26
  }
27
27
  var execute = useCallback(function (executeOptions) {
28
28
  if (executeOptions === void 0) { executeOptions = {}; }
29
- var _a = ref.current, client = _a.client, options = _a.options, mutation = _a.mutation;
29
+ var _a = ref.current, options = _a.options, mutation = _a.mutation;
30
30
  var baseOptions = __assign(__assign({}, options), { mutation: mutation });
31
+ var client = executeOptions.client || ref.current.client;
31
32
  if (!ref.current.result.loading && !baseOptions.ignoreResults && ref.current.isMounted) {
32
33
  setResult(ref.current.result = {
33
34
  loading: true,
@@ -1 +1 @@
1
- {"version":3,"file":"useMutation.js","sourceRoot":"","sources":["../../../src/react/hooks/useMutation.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAWjE,OAAO,EAGL,YAAY,GAEb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,UAAU,WAAW,CAMzB,QAA6D,EAC7D,OAAoF;IAEpF,IAAM,MAAM,GAAG,eAAe,CAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,CAAC,CAAC;IAChD,kBAAkB,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAA,KAAsB,QAAQ,CAAgC;QAClE,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,MAAM,QAAA;KACP,CAAC,EAJK,MAAM,QAAA,EAAE,SAAS,QAItB,CAAC;IAEH,IAAM,GAAG,GAAG,MAAM,CAAC;QACjB,MAAM,QAAA;QACN,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,IAAI;QACf,MAAM,QAAA;QACN,QAAQ,UAAA;QACR,OAAO,SAAA;KACR,CAAC,CAAC;IAIH;QACE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,QAAA,EAAE,OAAO,SAAA,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAC;KAC3D;IAED,IAAM,OAAO,GAAG,WAAW,CAAC,UAC1B,cAKM;QALN,+BAAA,EAAA,mBAKM;QAEA,IAAA,KAA8B,GAAG,CAAC,OAAO,EAAxC,MAAM,YAAA,EAAE,OAAO,aAAA,EAAE,QAAQ,cAAe,CAAC;QAChD,IAAM,WAAW,yBAAQ,OAAO,KAAE,QAAQ,UAAA,GAAE,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YACtF,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG;gBAC7B,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,KAAK,CAAC;gBACb,IAAI,EAAE,KAAK,CAAC;gBACZ,MAAM,EAAE,IAAI;gBACZ,MAAM,QAAA;aACP,CAAC,CAAC;SACJ;QAED,IAAM,UAAU,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;QAC5C,IAAM,aAAa,GAAG,YAAY,CAChC,WAAW,EACX,cAAqB,CACtB,CAAC;QAEF,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;;YACxC,IAAA,IAAI,GAAa,QAAQ,KAArB,EAAE,MAAM,GAAK,QAAQ,OAAb,CAAc;YAClC,IAAM,KAAK,GACT,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBACzB,CAAC,CAAC,IAAI,WAAW,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;gBAC5C,CAAC,CAAC,KAAK,CAAC,CAAC;YAEb,IACE,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU;gBACrC,CAAC,aAAa,CAAC,aAAa,EAC5B;gBACA,IAAM,QAAM,GAAG;oBACb,MAAM,EAAE,IAAI;oBACZ,OAAO,EAAE,KAAK;oBACd,IAAI,MAAA;oBACJ,KAAK,OAAA;oBACL,MAAM,QAAA;iBACP,CAAC;gBAEF,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAM,CAAC,EAAE;oBAC/D,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,QAAM,CAAC,CAAC;iBACxC;aACF;YAED,IAAM,WAAW,GAAG,cAAc,CAAC,WAAW,KAAI,MAAA,GAAG,CAAC,OAAO,CAAC,OAAO,0CAAE,WAAW,CAAA,CAAA;YAClF,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,QAAQ,CAAC,IAAK,EAAE,aAAa,CAAC,CAAC;YAE7C,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK;;YACb,IACE,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC,UAAU;gBACrC,GAAG,CAAC,OAAO,CAAC,SAAS,EACrB;gBACA,IAAM,QAAM,GAAG;oBACb,OAAO,EAAE,KAAK;oBACd,KAAK,OAAA;oBACL,IAAI,EAAE,KAAK,CAAC;oBACZ,MAAM,EAAE,IAAI;oBACZ,MAAM,QAAA;iBACP,CAAC;gBAEF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,QAAM,CAAC,EAAE;oBACtC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,QAAM,CAAC,CAAC;iBACxC;aACF;YAED,IAAM,OAAO,GAAG,cAAc,CAAC,OAAO,KAAI,MAAA,GAAG,CAAC,OAAO,CAAC,OAAO,0CAAE,OAAO,CAAA,CAAA;YAEtE,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAG9B,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;aACxC;YAED,MAAM,KAAK,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,KAAK,GAAG,WAAW,CAAC;QACxB,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;YACzB,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAA,EAAE,CAAC,CAAC;SACtD;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC;QACR,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;QAE7B,OAAO;YACL,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,OAAO,aAAI,KAAK,OAAA,IAAK,MAAM,EAAG,CAAC;AACzC,CAAC","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { DocumentNode } from 'graphql';\nimport { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport {\n MutationFunctionOptions,\n MutationHookOptions,\n MutationResult,\n MutationTuple,\n NoInfer,\n} from '../types/types';\n\nimport {\n ApolloCache,\n DefaultContext,\n mergeOptions,\n OperationVariables,\n} from '../../core';\nimport { equal } from '@wry/equality';\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport { ApolloError } from '../../errors';\nimport { useApolloClient } from './useApolloClient';\n\nexport function useMutation<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n>(\n mutation: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options?: MutationHookOptions<NoInfer<TData>, NoInfer<TVariables>, TContext, TCache>,\n): MutationTuple<TData, TVariables, TContext, TCache> {\n const client = useApolloClient(options?.client);\n verifyDocumentType(mutation, DocumentType.Mutation);\n const [result, setResult] = useState<Omit<MutationResult, 'reset'>>({\n called: false,\n loading: false,\n client,\n });\n\n const ref = useRef({\n result,\n mutationId: 0,\n isMounted: true,\n client,\n mutation,\n options,\n });\n\n // TODO: Trying to assign these in a useEffect or useLayoutEffect breaks\n // higher-order components.\n {\n Object.assign(ref.current, { client, options, mutation });\n }\n\n const execute = useCallback((\n executeOptions: MutationFunctionOptions<\n TData,\n TVariables,\n TContext,\n TCache\n > = {}\n ) => {\n const {client, options, mutation} = ref.current;\n const baseOptions = { ...options, mutation };\n if (!ref.current.result.loading && !baseOptions.ignoreResults && ref.current.isMounted) {\n setResult(ref.current.result = {\n loading: true,\n error: void 0,\n data: void 0,\n called: true,\n client,\n });\n }\n\n const mutationId = ++ref.current.mutationId;\n const clientOptions = mergeOptions(\n baseOptions,\n executeOptions as any,\n );\n\n return client.mutate(clientOptions).then((response) => {\n const { data, errors } = response;\n const error =\n errors && errors.length > 0\n ? new ApolloError({ graphQLErrors: errors })\n : void 0;\n\n if (\n mutationId === ref.current.mutationId &&\n !clientOptions.ignoreResults\n ) {\n const result = {\n called: true,\n loading: false,\n data,\n error,\n client,\n };\n\n if (ref.current.isMounted && !equal(ref.current.result, result)) {\n setResult(ref.current.result = result);\n }\n }\n\n const onCompleted = executeOptions.onCompleted || ref.current.options?.onCompleted\n onCompleted?.(response.data!, clientOptions);\n\n return response;\n }).catch((error) => {\n if (\n mutationId === ref.current.mutationId &&\n ref.current.isMounted\n ) {\n const result = {\n loading: false,\n error,\n data: void 0,\n called: true,\n client,\n };\n\n if (!equal(ref.current.result, result)) {\n setResult(ref.current.result = result);\n }\n }\n\n const onError = executeOptions.onError || ref.current.options?.onError\n\n if (onError) {\n onError(error, clientOptions);\n\n // TODO(brian): why are we returning this here???\n return { data: void 0, errors: error };\n }\n\n throw error;\n });\n }, []);\n\n const reset = useCallback(() => {\n if (ref.current.isMounted) {\n setResult({ called: false, loading: false, client });\n }\n }, []);\n\n useEffect(() => {\n ref.current.isMounted = true;\n\n return () => {\n ref.current.isMounted = false;\n };\n }, []);\n\n return [execute, { reset, ...result }];\n}\n"]}
1
+ {"version":3,"file":"useMutation.js","sourceRoot":"","sources":["../../../src/react/hooks/useMutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { DocumentNode } from 'graphql';\nimport { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport {\n MutationFunctionOptions,\n MutationHookOptions,\n MutationResult,\n MutationTuple,\n NoInfer,\n} from '../types/types';\n\nimport {\n ApolloCache,\n DefaultContext,\n mergeOptions,\n OperationVariables,\n} from '../../core';\nimport { equal } from '@wry/equality';\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport { ApolloError } from '../../errors';\nimport { useApolloClient } from './useApolloClient';\n\nexport function useMutation<\n TData = any,\n TVariables = OperationVariables,\n TContext = DefaultContext,\n TCache extends ApolloCache<any> = ApolloCache<any>,\n>(\n mutation: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options?: MutationHookOptions<NoInfer<TData>, NoInfer<TVariables>, TContext, TCache>,\n): MutationTuple<TData, TVariables, TContext, TCache> {\n const client = useApolloClient(options?.client);\n verifyDocumentType(mutation, DocumentType.Mutation);\n const [result, setResult] = useState<Omit<MutationResult, 'reset'>>({\n called: false,\n loading: false,\n client,\n });\n\n const ref = useRef({\n result,\n mutationId: 0,\n isMounted: true,\n client,\n mutation,\n options,\n });\n\n // TODO: Trying to assign these in a useEffect or useLayoutEffect breaks\n // higher-order components.\n {\n Object.assign(ref.current, { client, options, mutation });\n }\n\n const execute = useCallback((\n executeOptions: MutationFunctionOptions<\n TData,\n TVariables,\n TContext,\n TCache\n > = {}\n ) => {\n const {options, mutation} = ref.current;\n const baseOptions = { ...options, mutation };\n const client = executeOptions.client || ref.current.client;\n\n if (!ref.current.result.loading && !baseOptions.ignoreResults && ref.current.isMounted) {\n setResult(ref.current.result = {\n loading: true,\n error: void 0,\n data: void 0,\n called: true,\n client,\n });\n }\n\n const mutationId = ++ref.current.mutationId;\n const clientOptions = mergeOptions(\n baseOptions,\n executeOptions as any,\n );\n\n return client.mutate(clientOptions).then((response) => {\n const { data, errors } = response;\n const error =\n errors && errors.length > 0\n ? new ApolloError({ graphQLErrors: errors })\n : void 0;\n\n if (\n mutationId === ref.current.mutationId &&\n !clientOptions.ignoreResults\n ) {\n const result = {\n called: true,\n loading: false,\n data,\n error,\n client,\n };\n\n if (ref.current.isMounted && !equal(ref.current.result, result)) {\n setResult(ref.current.result = result);\n }\n }\n\n const onCompleted = executeOptions.onCompleted || ref.current.options?.onCompleted\n onCompleted?.(response.data!, clientOptions);\n\n return response;\n }).catch((error) => {\n if (\n mutationId === ref.current.mutationId &&\n ref.current.isMounted\n ) {\n const result = {\n loading: false,\n error,\n data: void 0,\n called: true,\n client,\n };\n\n if (!equal(ref.current.result, result)) {\n setResult(ref.current.result = result);\n }\n }\n\n const onError = executeOptions.onError || ref.current.options?.onError\n\n if (onError) {\n onError(error, clientOptions);\n\n // TODO(brian): why are we returning this here???\n return { data: void 0, errors: error };\n }\n\n throw error;\n });\n }, []);\n\n const reset = useCallback(() => {\n if (ref.current.isMounted) {\n setResult({ called: false, loading: false, client });\n }\n }, []);\n\n useEffect(() => {\n ref.current.isMounted = true;\n\n return () => {\n ref.current.isMounted = false;\n };\n }, []);\n\n return [execute, { reset, ...result }];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGrF,OAAO,EACL,YAAY,EACZ,iBAAiB,EAGjB,YAAY,EACZ,iBAAiB,EAElB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,WAAW,EAEX,OAAO,EACR,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASpD,wBAAgB,QAAQ,CACtB,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EAE1D,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1D,OAAO,GAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAuB,GACnF,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAKhC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,SAAS,kBAAkB,EAC3E,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,GACzD,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAuBlC;AAED,cAAM,aAAa,CAAC,KAAK,EAAE,UAAU,SAAS,kBAAkB;aAE5C,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC;aAC1C,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC;gBAD1D,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EAC1C,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1E,QAAQ,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;IAa7C,WAAW;IAKX,WAAW,CAAC,MAAM,EAAE,WAAW;IAkB/B,OAAO,CAAC,eAAe,CAEnB;IAEJ,OAAO,CAAC,mBAAmB,CAEvB;IAKJ,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC;IAgHrD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,iBAAiB,CAAuC;IAEhE,OAAO,CAAC,UAAU;IA0FlB,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,iBAAiB,CAKtB;IAEH,OAAO,CAAC,iBAAiB,CAKtB;IAGH,OAAO,CAAC,uBAAuB;IAsD/B,qBAAqB,IAAI,qBAAqB;IAW9C,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;IAEf,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,cAAc,CAGpB;IAEF,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,kBAAkB,CAGtB;IAEJ,aAAa,CACX,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAC/B,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;IA2BjC,OAAO,CAAC,0BAA0B;CAoBnC"}
1
+ {"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"AAYA,OAAO,EAAgB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGrF,OAAO,EACL,YAAY,EACZ,iBAAiB,EAGjB,YAAY,EACZ,iBAAiB,EAElB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,gBAAgB,EAChB,WAAW,EAEX,OAAO,EACR,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AASpD,wBAAgB,QAAQ,CACtB,KAAK,GAAG,GAAG,EACX,UAAU,SAAS,kBAAkB,GAAG,kBAAkB,EAE1D,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1D,OAAO,GAAE,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAuB,GACnF,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC,CAKhC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,SAAS,kBAAkB,EAC3E,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,EACzB,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,GACzD,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAuBlC;AAED,cAAM,aAAa,CAAC,KAAK,EAAE,UAAU,SAAS,kBAAkB;aAE5C,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC;aAC1C,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC;gBAD1D,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EAC1C,KAAK,EAAE,YAAY,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1E,QAAQ,CAAC,EAAE,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;IAa7C,WAAW;IAKX,WAAW,CAAC,MAAM,EAAE,WAAW;IAkB/B,OAAO,CAAC,eAAe,CAEnB;IAEJ,OAAO,CAAC,mBAAmB,CAEvB;IAKJ,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC;IAoHrD,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,iBAAiB,CAAuC;IAEhE,OAAO,CAAC,UAAU;IA0FlB,OAAO,CAAC,kBAAkB;IAgC1B,OAAO,CAAC,iBAAiB,CAKtB;IAEH,OAAO,CAAC,iBAAiB,CAKtB;IAGH,OAAO,CAAC,uBAAuB;IAsD/B,qBAAqB,IAAI,qBAAqB;IAW9C,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;IAEf,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,cAAc,CAGpB;IAEF,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,YAAY,CAAoB;IAExC,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,sBAAsB;IAwB9B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,kBAAkB,CAGtB;IAEJ,aAAa,CACX,MAAM,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAC/B,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;IA2BjC,OAAO,CAAC,0BAA0B;CAoBnC"}
@@ -120,7 +120,7 @@ var InternalState = (function () {
120
120
  }
121
121
  };
122
122
  var subscription = obsQuery.subscribe(onNext, onError);
123
- return function () { return subscription.unsubscribe(); };
123
+ return function () { return setTimeout(function () { return subscription.unsubscribe(); }); };
124
124
  }, [
125
125
  obsQuery,
126
126
  this.renderPromises,
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from '../../utilities/globals';\n\nimport {\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useSyncExternalStore } from './useSyncExternalStore';\nimport { equal } from '@wry/equality';\n\nimport { mergeOptions, OperationVariables, WatchQueryFetchPolicy } from '../../core';\nimport { ApolloContextValue, getApolloContext } from '../context';\nimport { ApolloError } from '../../errors';\nimport {\n ApolloClient,\n ApolloQueryResult,\n NetworkStatus,\n ObservableQuery,\n DocumentNode,\n TypedDocumentNode,\n WatchQueryOptions,\n} from '../../core';\nimport {\n QueryHookOptions,\n QueryResult,\n ObservableQueryFields,\n NoInfer,\n} from '../types/types';\n\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport { useApolloClient } from './useApolloClient';\nimport { canUseWeakMap, canUseWeakSet, compact, isNonEmptyArray, maybeDeepFreeze } from '../../utilities';\n\nconst {\n prototype: {\n hasOwnProperty,\n },\n} = Object;\n\nexport function useQuery<\n TData = any,\n TVariables extends OperationVariables = OperationVariables,\n>(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options: QueryHookOptions<NoInfer<TData>, NoInfer<TVariables>> = Object.create(null),\n): QueryResult<TData, TVariables> {\n return useInternalState(\n useApolloClient(options.client),\n query,\n ).useQuery(options);\n}\n\nexport function useInternalState<TData, TVariables extends OperationVariables>(\n client: ApolloClient<any>,\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n): InternalState<TData, TVariables> {\n const stateRef = useRef<InternalState<TData, TVariables>>();\n if (\n !stateRef.current ||\n client !== stateRef.current.client ||\n query !== stateRef.current.query\n ) {\n stateRef.current = new InternalState(client, query, stateRef.current);\n }\n const state = stateRef.current;\n\n // By default, InternalState.prototype.forceUpdate is an empty function, but\n // we replace it here (before anyone has had a chance to see this state yet)\n // with a function that unconditionally forces an update, using the latest\n // setTick function. Updating this state by calling state.forceUpdate is the\n // only way we trigger React component updates (no other useState calls within\n // the InternalState class).\n const [_tick, setTick] = useState(0);\n state.forceUpdate = () => {\n setTick(tick => tick + 1);\n };\n\n return state;\n}\n\nclass InternalState<TData, TVariables extends OperationVariables> {\n constructor(\n public readonly client: ReturnType<typeof useApolloClient>,\n public readonly query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n previous?: InternalState<TData, TVariables>,\n ) {\n verifyDocumentType(query, DocumentType.Query);\n\n // Reuse previousData from previous InternalState (if any) to provide\n // continuity of previousData even if/when the query or client changes.\n const previousResult = previous && previous.result;\n const previousData = previousResult && previousResult.data;\n if (previousData) {\n this.previousData = previousData;\n }\n }\n\n forceUpdate() {\n // Replaced (in useInternalState) with a method that triggers an update.\n invariant.warn(\"Calling default no-op implementation of InternalState#forceUpdate\");\n }\n\n asyncUpdate(signal: AbortSignal) {\n return new Promise<QueryResult<TData, TVariables>>((resolve, reject) => {\n const watchQueryOptions = this.watchQueryOptions;\n\n const handleAborted = () => {\n this.asyncResolveFns.delete(resolve)\n this.optionsToIgnoreOnce.delete(watchQueryOptions);\n signal.removeEventListener('abort', handleAborted)\n reject(signal.reason);\n };\n\n this.asyncResolveFns.add(resolve);\n this.optionsToIgnoreOnce.add(watchQueryOptions);\n signal.addEventListener('abort', handleAborted)\n this.forceUpdate();\n });\n }\n\n private asyncResolveFns = new Set<\n (result: QueryResult<TData, TVariables>) => void\n >();\n\n private optionsToIgnoreOnce = new (canUseWeakSet ? WeakSet : Set)<\n WatchQueryOptions<TVariables, TData>\n >();\n\n // Methods beginning with use- should be called according to the standard\n // rules of React hooks: only at the top level of the calling function, and\n // without any dynamic conditional logic.\n useQuery(options: QueryHookOptions<TData, TVariables>) {\n // The renderPromises field gets initialized here in the useQuery method, at\n // the beginning of everything (for a given component rendering, at least),\n // so we can safely use this.renderPromises in other/later InternalState\n // methods without worrying it might be uninitialized. Even after\n // initialization, this.renderPromises is usually undefined (unless SSR is\n // happening), but that's fine as long as it has been initialized that way,\n // rather than left uninitialized.\n this.renderPromises = useContext(getApolloContext()).renderPromises;\n\n this.useOptions(options);\n\n const obsQuery = this.useObservableQuery();\n\n const result = useSyncExternalStore(\n useCallback(() => {\n if (this.renderPromises) {\n return () => {};\n }\n\n const onNext = () => {\n const previousResult = this.result;\n // We use `getCurrentResult()` instead of the onNext argument because\n // the values differ slightly. Specifically, loading results will have\n // an empty object for data instead of `undefined` for some reason.\n const result = obsQuery.getCurrentResult();\n // Make sure we're not attempting to re-render similar results\n if (\n previousResult &&\n previousResult.loading === result.loading &&\n previousResult.networkStatus === result.networkStatus &&\n equal(previousResult.data, result.data)\n ) {\n return;\n }\n\n this.setResult(result);\n };\n\n const onError = (error: Error) => {\n const last = obsQuery[\"last\"];\n subscription.unsubscribe();\n // Unfortunately, if `lastError` is set in the current\n // `observableQuery` when the subscription is re-created,\n // the subscription will immediately receive the error, which will\n // cause it to terminate again. To avoid this, we first clear\n // the last error/result from the `observableQuery` before re-starting\n // the subscription, and restore it afterwards (so the subscription\n // has a chance to stay open).\n try {\n obsQuery.resetLastResults();\n subscription = obsQuery.subscribe(onNext, onError);\n } finally {\n obsQuery[\"last\"] = last;\n }\n\n if (!hasOwnProperty.call(error, 'graphQLErrors')) {\n // The error is not a GraphQL error\n throw error;\n }\n\n const previousResult = this.result;\n if (\n !previousResult ||\n (previousResult && previousResult.loading) ||\n !equal(error, previousResult.error)\n ) {\n this.setResult({\n data: (previousResult && previousResult.data) as TData,\n error: error as ApolloError,\n loading: false,\n networkStatus: NetworkStatus.error,\n });\n }\n };\n\n let subscription = obsQuery.subscribe(onNext, onError);\n\n return () => subscription.unsubscribe();\n }, [\n // We memoize the subscribe function using useCallback and the following\n // dependency keys, because the subscribe function reference is all that\n // useSyncExternalStore uses internally as a dependency key for the\n // useEffect ultimately responsible for the subscription, so we are\n // effectively passing this dependency array to that useEffect buried\n // inside useSyncExternalStore, as desired.\n obsQuery,\n this.renderPromises,\n this.client.disableNetworkFetches,\n ]),\n\n () => this.getCurrentResult(),\n () => this.getCurrentResult(),\n );\n\n // TODO Remove this method when we remove support for options.partialRefetch.\n this.unsafeHandlePartialRefetch(result);\n\n const queryResult = this.toQueryResult(result);\n\n if (!queryResult.loading && this.asyncResolveFns.size) {\n this.asyncResolveFns.forEach(resolve => resolve(queryResult));\n this.asyncResolveFns.clear();\n }\n\n return queryResult;\n }\n\n // These members (except for renderPromises) are all populated by the\n // useOptions method, which is called unconditionally at the beginning of the\n // useQuery method, so we can safely use these members in other/later methods\n // without worrying they might be uninitialized.\n private renderPromises: ApolloContextValue[\"renderPromises\"];\n private queryHookOptions: QueryHookOptions<TData, TVariables>;\n private watchQueryOptions: WatchQueryOptions<TVariables, TData>;\n\n private useOptions(\n options: QueryHookOptions<TData, TVariables>,\n ) {\n const watchQueryOptions = this.createWatchQueryOptions(\n this.queryHookOptions = options,\n );\n\n // Update this.watchQueryOptions, but only when they have changed, which\n // allows us to depend on the referential stability of\n // this.watchQueryOptions elsewhere.\n const currentWatchQueryOptions = this.watchQueryOptions;\n\n // To force this equality test to \"fail,\" thereby reliably triggering\n // observable.reobserve, add any current WatchQueryOptions object(s) you\n // want to be ignored to this.optionsToIgnoreOnce. A similar effect could be\n // achieved by nullifying this.watchQueryOptions so the equality test\n // immediately fails because currentWatchQueryOptions is null, but this way\n // we can promise a truthy this.watchQueryOptions at all times.\n if (\n this.optionsToIgnoreOnce.has(currentWatchQueryOptions) ||\n !equal(watchQueryOptions, currentWatchQueryOptions)\n ) {\n this.watchQueryOptions = watchQueryOptions;\n\n if (currentWatchQueryOptions && this.observable) {\n // As advertised in the -Once of this.optionsToIgnoreOnce, this trick is\n // only good for one forced execution of observable.reobserve per\n // ignored WatchQueryOptions object, though it is unlikely we will ever\n // see this exact currentWatchQueryOptions object again here, since we\n // just replaced this.watchQueryOptions with watchQueryOptions.\n this.optionsToIgnoreOnce.delete(currentWatchQueryOptions);\n\n // Though it might be tempting to postpone this reobserve call to the\n // useEffect block, we need getCurrentResult to return an appropriate\n // loading:true result synchronously (later within the same call to\n // useQuery). Since we already have this.observable here (not true for\n // the very first call to useQuery), we are not initiating any new\n // subscriptions, though it does feel less than ideal that reobserve\n // (potentially) kicks off a network request (for example, when the\n // variables have changed), which is technically a side-effect.\n this.observable.reobserve(this.getObsQueryOptions());\n\n // Make sure getCurrentResult returns a fresh ApolloQueryResult<TData>,\n // but save the current data as this.previousData, just like setResult\n // usually does.\n this.previousData = this.result?.data || this.previousData;\n this.result = void 0;\n }\n }\n\n // Make sure state.onCompleted and state.onError always reflect the latest\n // options.onCompleted and options.onError callbacks provided to useQuery,\n // since those functions are often recreated every time useQuery is called.\n // Like the forceUpdate method, the versions of these methods inherited from\n // InternalState.prototype are empty no-ops, but we can override them on the\n // base state object (without modifying the prototype).\n this.onCompleted = options.onCompleted || InternalState.prototype.onCompleted;\n this.onError = options.onError || InternalState.prototype.onError;\n\n if (\n (this.renderPromises || this.client.disableNetworkFetches) &&\n this.queryHookOptions.ssr === false &&\n !this.queryHookOptions.skip\n ) {\n // If SSR has been explicitly disabled, and this function has been called\n // on the server side, return the default loading state.\n this.result = this.ssrDisabledResult;\n } else if (\n this.queryHookOptions.skip ||\n this.watchQueryOptions.fetchPolicy === 'standby'\n ) {\n // When skipping a query (ie. we're not querying for data but still want to\n // render children), make sure the `data` is cleared out and `loading` is\n // set to `false` (since we aren't loading anything).\n //\n // NOTE: We no longer think this is the correct behavior. Skipping should\n // not automatically set `data` to `undefined`, but instead leave the\n // previous data in place. In other words, skipping should not mandate that\n // previously received data is all of a sudden removed. Unfortunately,\n // changing this is breaking, so we'll have to wait until Apollo Client 4.0\n // to address this.\n this.result = this.skipStandbyResult;\n } else if (\n this.result === this.ssrDisabledResult ||\n this.result === this.skipStandbyResult\n ) {\n this.result = void 0;\n }\n }\n\n private getObsQueryOptions(): WatchQueryOptions<TVariables, TData> {\n const toMerge: Array<\n Partial<WatchQueryOptions<TVariables, TData>>\n > = [];\n\n const globalDefaults = this.client.defaultOptions.watchQuery;\n if (globalDefaults) toMerge.push(globalDefaults);\n\n if (this.queryHookOptions.defaultOptions) {\n toMerge.push(this.queryHookOptions.defaultOptions);\n }\n\n // We use compact rather than mergeOptions for this part of the merge,\n // because we want watchQueryOptions.variables (if defined) to replace\n // this.observable.options.variables whole. This replacement allows\n // removing variables by removing them from the variables input to\n // useQuery. If the variables were always merged together (rather than\n // replaced), there would be no way to remove existing variables.\n // However, the variables from options.defaultOptions and globalDefaults\n // (if provided) should be merged, to ensure individual defaulted\n // variables always have values, if not otherwise defined in\n // observable.options or watchQueryOptions.\n toMerge.push(compact(\n this.observable && this.observable.options,\n this.watchQueryOptions,\n ));\n\n return toMerge.reduce(\n mergeOptions\n ) as WatchQueryOptions<TVariables, TData>;\n }\n\n private ssrDisabledResult = maybeDeepFreeze({\n loading: true,\n data: void 0 as unknown as TData,\n error: void 0,\n networkStatus: NetworkStatus.loading,\n });\n\n private skipStandbyResult = maybeDeepFreeze({\n loading: false,\n data: void 0 as unknown as TData,\n error: void 0,\n networkStatus: NetworkStatus.ready,\n });\n\n // A function to massage options before passing them to ObservableQuery.\n private createWatchQueryOptions({\n skip,\n ssr,\n onCompleted,\n onError,\n defaultOptions,\n // The above options are useQuery-specific, so this ...otherOptions spread\n // makes otherOptions almost a WatchQueryOptions object, except for the\n // query property that we add below.\n ...otherOptions\n }: QueryHookOptions<TData, TVariables> = {}): WatchQueryOptions<TVariables, TData> {\n // This Object.assign is safe because otherOptions is a fresh ...rest object\n // that did not exist until just now, so modifications are still allowed.\n const watchQueryOptions: WatchQueryOptions<TVariables, TData> =\n Object.assign(otherOptions, { query: this.query });\n\n if (\n this.renderPromises &&\n (\n watchQueryOptions.fetchPolicy === 'network-only' ||\n watchQueryOptions.fetchPolicy === 'cache-and-network'\n )\n ) {\n // this behavior was added to react-apollo without explanation in this PR\n // https://github.com/apollographql/react-apollo/pull/1579\n watchQueryOptions.fetchPolicy = 'cache-first';\n }\n\n if (!watchQueryOptions.variables) {\n watchQueryOptions.variables = {} as TVariables;\n }\n\n if (skip) {\n const {\n fetchPolicy = this.getDefaultFetchPolicy(),\n initialFetchPolicy = fetchPolicy,\n } = watchQueryOptions;\n\n // When skipping, we set watchQueryOptions.fetchPolicy initially to\n // \"standby\", but we also need/want to preserve the initial non-standby\n // fetchPolicy that would have been used if not skipping.\n Object.assign(watchQueryOptions, {\n initialFetchPolicy,\n fetchPolicy: 'standby',\n });\n } else if (!watchQueryOptions.fetchPolicy) {\n watchQueryOptions.fetchPolicy =\n this.observable?.options.initialFetchPolicy ||\n this.getDefaultFetchPolicy();\n }\n\n return watchQueryOptions;\n }\n\n getDefaultFetchPolicy(): WatchQueryFetchPolicy {\n return (\n this.queryHookOptions.defaultOptions?.fetchPolicy ||\n this.client.defaultOptions.watchQuery?.fetchPolicy ||\n \"cache-first\"\n );\n }\n\n // Defining these methods as no-ops on the prototype allows us to call\n // state.onCompleted and/or state.onError without worrying about whether a\n // callback was provided.\n private onCompleted(data: TData) {}\n private onError(error: ApolloError) {}\n\n private observable: ObservableQuery<TData, TVariables>;\n private obsQueryFields: Omit<\n ObservableQueryFields<TData, TVariables>,\n \"variables\"\n >;\n\n private useObservableQuery() {\n // See if there is an existing observable that was used to fetch the same\n // data and if so, use it instead since it will contain the proper queryId\n // to fetch the result set. This is used during SSR.\n const obsQuery = this.observable =\n this.renderPromises\n && this.renderPromises.getSSRObservable(this.watchQueryOptions)\n || this.observable // Reuse this.observable if possible (and not SSR)\n || this.client.watchQuery(this.getObsQueryOptions());\n\n this.obsQueryFields = useMemo(() => ({\n refetch: obsQuery.refetch.bind(obsQuery),\n reobserve: obsQuery.reobserve.bind(obsQuery),\n fetchMore: obsQuery.fetchMore.bind(obsQuery),\n updateQuery: obsQuery.updateQuery.bind(obsQuery),\n startPolling: obsQuery.startPolling.bind(obsQuery),\n stopPolling: obsQuery.stopPolling.bind(obsQuery),\n subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),\n }), [obsQuery]);\n\n const ssrAllowed = !(\n this.queryHookOptions.ssr === false ||\n this.queryHookOptions.skip\n );\n\n if (this.renderPromises && ssrAllowed) {\n this.renderPromises.registerSSRObservable(obsQuery);\n\n if (obsQuery.getCurrentResult().loading) {\n // TODO: This is a legacy API which could probably be cleaned up\n this.renderPromises.addObservableQueryPromise(obsQuery);\n }\n }\n\n return obsQuery;\n }\n\n // These members are populated by getCurrentResult and setResult, and it's\n // okay/normal for them to be initially undefined.\n private result: undefined | ApolloQueryResult<TData>;\n private previousData: undefined | TData;\n\n private setResult(nextResult: ApolloQueryResult<TData>) {\n const previousResult = this.result;\n if (previousResult && previousResult.data) {\n this.previousData = previousResult.data;\n }\n this.result = nextResult;\n // Calling state.setResult always triggers an update, though some call sites\n // perform additional equality checks before committing to an update.\n this.forceUpdate();\n this.handleErrorOrCompleted(nextResult, previousResult);\n }\n\n private handleErrorOrCompleted(\n result: ApolloQueryResult<TData>,\n previousResult?: ApolloQueryResult<TData>\n ) {\n if (!result.loading) {\n const error = this.toApolloError(result);\n\n // wait a tick in case we are in the middle of rendering a component\n Promise.resolve().then(() => {\n if (error) {\n this.onError(error);\n } else if (\n result.data &&\n previousResult?.networkStatus !== result.networkStatus &&\n result.networkStatus === NetworkStatus.ready\n ) {\n this.onCompleted(result.data);\n }\n }).catch(error => {\n invariant.warn(error);\n });\n }\n }\n\n private toApolloError(result: ApolloQueryResult<TData>): ApolloError | undefined {\n return isNonEmptyArray(result.errors)\n ? new ApolloError({ graphQLErrors: result.errors })\n : result.error\n }\n\n private getCurrentResult(): ApolloQueryResult<TData> {\n // Using this.result as a cache ensures getCurrentResult continues returning\n // the same (===) result object, unless state.setResult has been called, or\n // we're doing server rendering and therefore override the result below.\n if (!this.result) {\n this.handleErrorOrCompleted(\n this.result = this.observable.getCurrentResult()\n );\n }\n return this.result;\n }\n\n // This cache allows the referential stability of this.result (as returned by\n // getCurrentResult) to translate into referential stability of the resulting\n // QueryResult object returned by toQueryResult.\n private toQueryResultCache = new (canUseWeakMap ? WeakMap : Map)<\n ApolloQueryResult<TData>,\n QueryResult<TData, TVariables>\n >();\n\n toQueryResult(\n result: ApolloQueryResult<TData>,\n ): QueryResult<TData, TVariables> {\n let queryResult = this.toQueryResultCache.get(result);\n if (queryResult) return queryResult;\n\n const { data, partial, ...resultWithoutPartial } = result;\n this.toQueryResultCache.set(result, queryResult = {\n data, // Ensure always defined, even if result.data is missing.\n ...resultWithoutPartial,\n ...this.obsQueryFields,\n client: this.client,\n observable: this.observable,\n variables: this.observable.variables,\n called: !this.queryHookOptions.skip,\n previousData: this.previousData,\n });\n\n if (!queryResult.error && isNonEmptyArray(result.errors)) {\n // Until a set naming convention for networkError and graphQLErrors is\n // decided upon, we map errors (graphQLErrors) to the error options.\n // TODO: Is it possible for both result.error and result.errors to be\n // defined here?\n queryResult.error = new ApolloError({ graphQLErrors: result.errors });\n }\n\n return queryResult;\n }\n\n private unsafeHandlePartialRefetch(result: ApolloQueryResult<TData>) {\n // WARNING: SIDE-EFFECTS IN THE RENDER FUNCTION\n //\n // TODO: This code should be removed when the partialRefetch option is\n // removed. I was unable to get this hook to behave reasonably in certain\n // edge cases when this block was put in an effect.\n if (\n result.partial &&\n this.queryHookOptions.partialRefetch &&\n !result.loading &&\n (!result.data || Object.keys(result.data).length === 0) &&\n this.observable.options.fetchPolicy !== 'cache-only'\n ) {\n Object.assign(result, {\n loading: true,\n networkStatus: NetworkStatus.refetch,\n });\n this.observable.refetch();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"useQuery.js","sourceRoot":"","sources":["../../../src/react/hooks/useQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from '../../utilities/globals';\n\nimport {\n useCallback,\n useContext,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useSyncExternalStore } from './useSyncExternalStore';\nimport { equal } from '@wry/equality';\n\nimport { mergeOptions, OperationVariables, WatchQueryFetchPolicy } from '../../core';\nimport { ApolloContextValue, getApolloContext } from '../context';\nimport { ApolloError } from '../../errors';\nimport {\n ApolloClient,\n ApolloQueryResult,\n NetworkStatus,\n ObservableQuery,\n DocumentNode,\n TypedDocumentNode,\n WatchQueryOptions,\n} from '../../core';\nimport {\n QueryHookOptions,\n QueryResult,\n ObservableQueryFields,\n NoInfer,\n} from '../types/types';\n\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport { useApolloClient } from './useApolloClient';\nimport { canUseWeakMap, canUseWeakSet, compact, isNonEmptyArray, maybeDeepFreeze } from '../../utilities';\n\nconst {\n prototype: {\n hasOwnProperty,\n },\n} = Object;\n\nexport function useQuery<\n TData = any,\n TVariables extends OperationVariables = OperationVariables,\n>(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options: QueryHookOptions<NoInfer<TData>, NoInfer<TVariables>> = Object.create(null),\n): QueryResult<TData, TVariables> {\n return useInternalState(\n useApolloClient(options.client),\n query,\n ).useQuery(options);\n}\n\nexport function useInternalState<TData, TVariables extends OperationVariables>(\n client: ApolloClient<any>,\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n): InternalState<TData, TVariables> {\n const stateRef = useRef<InternalState<TData, TVariables>>();\n if (\n !stateRef.current ||\n client !== stateRef.current.client ||\n query !== stateRef.current.query\n ) {\n stateRef.current = new InternalState(client, query, stateRef.current);\n }\n const state = stateRef.current;\n\n // By default, InternalState.prototype.forceUpdate is an empty function, but\n // we replace it here (before anyone has had a chance to see this state yet)\n // with a function that unconditionally forces an update, using the latest\n // setTick function. Updating this state by calling state.forceUpdate is the\n // only way we trigger React component updates (no other useState calls within\n // the InternalState class).\n const [_tick, setTick] = useState(0);\n state.forceUpdate = () => {\n setTick(tick => tick + 1);\n };\n\n return state;\n}\n\nclass InternalState<TData, TVariables extends OperationVariables> {\n constructor(\n public readonly client: ReturnType<typeof useApolloClient>,\n public readonly query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n previous?: InternalState<TData, TVariables>,\n ) {\n verifyDocumentType(query, DocumentType.Query);\n\n // Reuse previousData from previous InternalState (if any) to provide\n // continuity of previousData even if/when the query or client changes.\n const previousResult = previous && previous.result;\n const previousData = previousResult && previousResult.data;\n if (previousData) {\n this.previousData = previousData;\n }\n }\n\n forceUpdate() {\n // Replaced (in useInternalState) with a method that triggers an update.\n invariant.warn(\"Calling default no-op implementation of InternalState#forceUpdate\");\n }\n\n asyncUpdate(signal: AbortSignal) {\n return new Promise<QueryResult<TData, TVariables>>((resolve, reject) => {\n const watchQueryOptions = this.watchQueryOptions;\n\n const handleAborted = () => {\n this.asyncResolveFns.delete(resolve)\n this.optionsToIgnoreOnce.delete(watchQueryOptions);\n signal.removeEventListener('abort', handleAborted)\n reject(signal.reason);\n };\n\n this.asyncResolveFns.add(resolve);\n this.optionsToIgnoreOnce.add(watchQueryOptions);\n signal.addEventListener('abort', handleAborted)\n this.forceUpdate();\n });\n }\n\n private asyncResolveFns = new Set<\n (result: QueryResult<TData, TVariables>) => void\n >();\n\n private optionsToIgnoreOnce = new (canUseWeakSet ? WeakSet : Set)<\n WatchQueryOptions<TVariables, TData>\n >();\n\n // Methods beginning with use- should be called according to the standard\n // rules of React hooks: only at the top level of the calling function, and\n // without any dynamic conditional logic.\n useQuery(options: QueryHookOptions<TData, TVariables>) {\n // The renderPromises field gets initialized here in the useQuery method, at\n // the beginning of everything (for a given component rendering, at least),\n // so we can safely use this.renderPromises in other/later InternalState\n // methods without worrying it might be uninitialized. Even after\n // initialization, this.renderPromises is usually undefined (unless SSR is\n // happening), but that's fine as long as it has been initialized that way,\n // rather than left uninitialized.\n this.renderPromises = useContext(getApolloContext()).renderPromises;\n\n this.useOptions(options);\n\n const obsQuery = this.useObservableQuery();\n\n const result = useSyncExternalStore(\n useCallback(() => {\n if (this.renderPromises) {\n return () => {};\n }\n\n const onNext = () => {\n const previousResult = this.result;\n // We use `getCurrentResult()` instead of the onNext argument because\n // the values differ slightly. Specifically, loading results will have\n // an empty object for data instead of `undefined` for some reason.\n const result = obsQuery.getCurrentResult();\n // Make sure we're not attempting to re-render similar results\n if (\n previousResult &&\n previousResult.loading === result.loading &&\n previousResult.networkStatus === result.networkStatus &&\n equal(previousResult.data, result.data)\n ) {\n return;\n }\n\n this.setResult(result);\n };\n\n const onError = (error: Error) => {\n const last = obsQuery[\"last\"];\n subscription.unsubscribe();\n // Unfortunately, if `lastError` is set in the current\n // `observableQuery` when the subscription is re-created,\n // the subscription will immediately receive the error, which will\n // cause it to terminate again. To avoid this, we first clear\n // the last error/result from the `observableQuery` before re-starting\n // the subscription, and restore it afterwards (so the subscription\n // has a chance to stay open).\n try {\n obsQuery.resetLastResults();\n subscription = obsQuery.subscribe(onNext, onError);\n } finally {\n obsQuery[\"last\"] = last;\n }\n\n if (!hasOwnProperty.call(error, 'graphQLErrors')) {\n // The error is not a GraphQL error\n throw error;\n }\n\n const previousResult = this.result;\n if (\n !previousResult ||\n (previousResult && previousResult.loading) ||\n !equal(error, previousResult.error)\n ) {\n this.setResult({\n data: (previousResult && previousResult.data) as TData,\n error: error as ApolloError,\n loading: false,\n networkStatus: NetworkStatus.error,\n });\n }\n };\n\n let subscription = obsQuery.subscribe(onNext, onError);\n\n // Do the \"unsubscribe\" with a short delay.\n // This way, an existing subscription can be reused without an additional\n // request if \"unsubscribe\" and \"resubscribe\" to the same ObservableQuery \n // happen in very fast succession.\n return () => setTimeout(() => subscription.unsubscribe());\n }, [\n // We memoize the subscribe function using useCallback and the following\n // dependency keys, because the subscribe function reference is all that\n // useSyncExternalStore uses internally as a dependency key for the\n // useEffect ultimately responsible for the subscription, so we are\n // effectively passing this dependency array to that useEffect buried\n // inside useSyncExternalStore, as desired.\n obsQuery,\n this.renderPromises,\n this.client.disableNetworkFetches,\n ]),\n\n () => this.getCurrentResult(),\n () => this.getCurrentResult(),\n );\n\n // TODO Remove this method when we remove support for options.partialRefetch.\n this.unsafeHandlePartialRefetch(result);\n\n const queryResult = this.toQueryResult(result);\n\n if (!queryResult.loading && this.asyncResolveFns.size) {\n this.asyncResolveFns.forEach(resolve => resolve(queryResult));\n this.asyncResolveFns.clear();\n }\n\n return queryResult;\n }\n\n // These members (except for renderPromises) are all populated by the\n // useOptions method, which is called unconditionally at the beginning of the\n // useQuery method, so we can safely use these members in other/later methods\n // without worrying they might be uninitialized.\n private renderPromises: ApolloContextValue[\"renderPromises\"];\n private queryHookOptions: QueryHookOptions<TData, TVariables>;\n private watchQueryOptions: WatchQueryOptions<TVariables, TData>;\n\n private useOptions(\n options: QueryHookOptions<TData, TVariables>,\n ) {\n const watchQueryOptions = this.createWatchQueryOptions(\n this.queryHookOptions = options,\n );\n\n // Update this.watchQueryOptions, but only when they have changed, which\n // allows us to depend on the referential stability of\n // this.watchQueryOptions elsewhere.\n const currentWatchQueryOptions = this.watchQueryOptions;\n\n // To force this equality test to \"fail,\" thereby reliably triggering\n // observable.reobserve, add any current WatchQueryOptions object(s) you\n // want to be ignored to this.optionsToIgnoreOnce. A similar effect could be\n // achieved by nullifying this.watchQueryOptions so the equality test\n // immediately fails because currentWatchQueryOptions is null, but this way\n // we can promise a truthy this.watchQueryOptions at all times.\n if (\n this.optionsToIgnoreOnce.has(currentWatchQueryOptions) ||\n !equal(watchQueryOptions, currentWatchQueryOptions)\n ) {\n this.watchQueryOptions = watchQueryOptions;\n\n if (currentWatchQueryOptions && this.observable) {\n // As advertised in the -Once of this.optionsToIgnoreOnce, this trick is\n // only good for one forced execution of observable.reobserve per\n // ignored WatchQueryOptions object, though it is unlikely we will ever\n // see this exact currentWatchQueryOptions object again here, since we\n // just replaced this.watchQueryOptions with watchQueryOptions.\n this.optionsToIgnoreOnce.delete(currentWatchQueryOptions);\n\n // Though it might be tempting to postpone this reobserve call to the\n // useEffect block, we need getCurrentResult to return an appropriate\n // loading:true result synchronously (later within the same call to\n // useQuery). Since we already have this.observable here (not true for\n // the very first call to useQuery), we are not initiating any new\n // subscriptions, though it does feel less than ideal that reobserve\n // (potentially) kicks off a network request (for example, when the\n // variables have changed), which is technically a side-effect.\n this.observable.reobserve(this.getObsQueryOptions());\n\n // Make sure getCurrentResult returns a fresh ApolloQueryResult<TData>,\n // but save the current data as this.previousData, just like setResult\n // usually does.\n this.previousData = this.result?.data || this.previousData;\n this.result = void 0;\n }\n }\n\n // Make sure state.onCompleted and state.onError always reflect the latest\n // options.onCompleted and options.onError callbacks provided to useQuery,\n // since those functions are often recreated every time useQuery is called.\n // Like the forceUpdate method, the versions of these methods inherited from\n // InternalState.prototype are empty no-ops, but we can override them on the\n // base state object (without modifying the prototype).\n this.onCompleted = options.onCompleted || InternalState.prototype.onCompleted;\n this.onError = options.onError || InternalState.prototype.onError;\n\n if (\n (this.renderPromises || this.client.disableNetworkFetches) &&\n this.queryHookOptions.ssr === false &&\n !this.queryHookOptions.skip\n ) {\n // If SSR has been explicitly disabled, and this function has been called\n // on the server side, return the default loading state.\n this.result = this.ssrDisabledResult;\n } else if (\n this.queryHookOptions.skip ||\n this.watchQueryOptions.fetchPolicy === 'standby'\n ) {\n // When skipping a query (ie. we're not querying for data but still want to\n // render children), make sure the `data` is cleared out and `loading` is\n // set to `false` (since we aren't loading anything).\n //\n // NOTE: We no longer think this is the correct behavior. Skipping should\n // not automatically set `data` to `undefined`, but instead leave the\n // previous data in place. In other words, skipping should not mandate that\n // previously received data is all of a sudden removed. Unfortunately,\n // changing this is breaking, so we'll have to wait until Apollo Client 4.0\n // to address this.\n this.result = this.skipStandbyResult;\n } else if (\n this.result === this.ssrDisabledResult ||\n this.result === this.skipStandbyResult\n ) {\n this.result = void 0;\n }\n }\n\n private getObsQueryOptions(): WatchQueryOptions<TVariables, TData> {\n const toMerge: Array<\n Partial<WatchQueryOptions<TVariables, TData>>\n > = [];\n\n const globalDefaults = this.client.defaultOptions.watchQuery;\n if (globalDefaults) toMerge.push(globalDefaults);\n\n if (this.queryHookOptions.defaultOptions) {\n toMerge.push(this.queryHookOptions.defaultOptions);\n }\n\n // We use compact rather than mergeOptions for this part of the merge,\n // because we want watchQueryOptions.variables (if defined) to replace\n // this.observable.options.variables whole. This replacement allows\n // removing variables by removing them from the variables input to\n // useQuery. If the variables were always merged together (rather than\n // replaced), there would be no way to remove existing variables.\n // However, the variables from options.defaultOptions and globalDefaults\n // (if provided) should be merged, to ensure individual defaulted\n // variables always have values, if not otherwise defined in\n // observable.options or watchQueryOptions.\n toMerge.push(compact(\n this.observable && this.observable.options,\n this.watchQueryOptions,\n ));\n\n return toMerge.reduce(\n mergeOptions\n ) as WatchQueryOptions<TVariables, TData>;\n }\n\n private ssrDisabledResult = maybeDeepFreeze({\n loading: true,\n data: void 0 as unknown as TData,\n error: void 0,\n networkStatus: NetworkStatus.loading,\n });\n\n private skipStandbyResult = maybeDeepFreeze({\n loading: false,\n data: void 0 as unknown as TData,\n error: void 0,\n networkStatus: NetworkStatus.ready,\n });\n\n // A function to massage options before passing them to ObservableQuery.\n private createWatchQueryOptions({\n skip,\n ssr,\n onCompleted,\n onError,\n defaultOptions,\n // The above options are useQuery-specific, so this ...otherOptions spread\n // makes otherOptions almost a WatchQueryOptions object, except for the\n // query property that we add below.\n ...otherOptions\n }: QueryHookOptions<TData, TVariables> = {}): WatchQueryOptions<TVariables, TData> {\n // This Object.assign is safe because otherOptions is a fresh ...rest object\n // that did not exist until just now, so modifications are still allowed.\n const watchQueryOptions: WatchQueryOptions<TVariables, TData> =\n Object.assign(otherOptions, { query: this.query });\n\n if (\n this.renderPromises &&\n (\n watchQueryOptions.fetchPolicy === 'network-only' ||\n watchQueryOptions.fetchPolicy === 'cache-and-network'\n )\n ) {\n // this behavior was added to react-apollo without explanation in this PR\n // https://github.com/apollographql/react-apollo/pull/1579\n watchQueryOptions.fetchPolicy = 'cache-first';\n }\n\n if (!watchQueryOptions.variables) {\n watchQueryOptions.variables = {} as TVariables;\n }\n\n if (skip) {\n const {\n fetchPolicy = this.getDefaultFetchPolicy(),\n initialFetchPolicy = fetchPolicy,\n } = watchQueryOptions;\n\n // When skipping, we set watchQueryOptions.fetchPolicy initially to\n // \"standby\", but we also need/want to preserve the initial non-standby\n // fetchPolicy that would have been used if not skipping.\n Object.assign(watchQueryOptions, {\n initialFetchPolicy,\n fetchPolicy: 'standby',\n });\n } else if (!watchQueryOptions.fetchPolicy) {\n watchQueryOptions.fetchPolicy =\n this.observable?.options.initialFetchPolicy ||\n this.getDefaultFetchPolicy();\n }\n\n return watchQueryOptions;\n }\n\n getDefaultFetchPolicy(): WatchQueryFetchPolicy {\n return (\n this.queryHookOptions.defaultOptions?.fetchPolicy ||\n this.client.defaultOptions.watchQuery?.fetchPolicy ||\n \"cache-first\"\n );\n }\n\n // Defining these methods as no-ops on the prototype allows us to call\n // state.onCompleted and/or state.onError without worrying about whether a\n // callback was provided.\n private onCompleted(data: TData) {}\n private onError(error: ApolloError) {}\n\n private observable: ObservableQuery<TData, TVariables>;\n private obsQueryFields: Omit<\n ObservableQueryFields<TData, TVariables>,\n \"variables\"\n >;\n\n private useObservableQuery() {\n // See if there is an existing observable that was used to fetch the same\n // data and if so, use it instead since it will contain the proper queryId\n // to fetch the result set. This is used during SSR.\n const obsQuery = this.observable =\n this.renderPromises\n && this.renderPromises.getSSRObservable(this.watchQueryOptions)\n || this.observable // Reuse this.observable if possible (and not SSR)\n || this.client.watchQuery(this.getObsQueryOptions());\n\n this.obsQueryFields = useMemo(() => ({\n refetch: obsQuery.refetch.bind(obsQuery),\n reobserve: obsQuery.reobserve.bind(obsQuery),\n fetchMore: obsQuery.fetchMore.bind(obsQuery),\n updateQuery: obsQuery.updateQuery.bind(obsQuery),\n startPolling: obsQuery.startPolling.bind(obsQuery),\n stopPolling: obsQuery.stopPolling.bind(obsQuery),\n subscribeToMore: obsQuery.subscribeToMore.bind(obsQuery),\n }), [obsQuery]);\n\n const ssrAllowed = !(\n this.queryHookOptions.ssr === false ||\n this.queryHookOptions.skip\n );\n\n if (this.renderPromises && ssrAllowed) {\n this.renderPromises.registerSSRObservable(obsQuery);\n\n if (obsQuery.getCurrentResult().loading) {\n // TODO: This is a legacy API which could probably be cleaned up\n this.renderPromises.addObservableQueryPromise(obsQuery);\n }\n }\n\n return obsQuery;\n }\n\n // These members are populated by getCurrentResult and setResult, and it's\n // okay/normal for them to be initially undefined.\n private result: undefined | ApolloQueryResult<TData>;\n private previousData: undefined | TData;\n\n private setResult(nextResult: ApolloQueryResult<TData>) {\n const previousResult = this.result;\n if (previousResult && previousResult.data) {\n this.previousData = previousResult.data;\n }\n this.result = nextResult;\n // Calling state.setResult always triggers an update, though some call sites\n // perform additional equality checks before committing to an update.\n this.forceUpdate();\n this.handleErrorOrCompleted(nextResult, previousResult);\n }\n\n private handleErrorOrCompleted(\n result: ApolloQueryResult<TData>,\n previousResult?: ApolloQueryResult<TData>\n ) {\n if (!result.loading) {\n const error = this.toApolloError(result);\n\n // wait a tick in case we are in the middle of rendering a component\n Promise.resolve().then(() => {\n if (error) {\n this.onError(error);\n } else if (\n result.data &&\n previousResult?.networkStatus !== result.networkStatus &&\n result.networkStatus === NetworkStatus.ready\n ) {\n this.onCompleted(result.data);\n }\n }).catch(error => {\n invariant.warn(error);\n });\n }\n }\n\n private toApolloError(result: ApolloQueryResult<TData>): ApolloError | undefined {\n return isNonEmptyArray(result.errors)\n ? new ApolloError({ graphQLErrors: result.errors })\n : result.error\n }\n\n private getCurrentResult(): ApolloQueryResult<TData> {\n // Using this.result as a cache ensures getCurrentResult continues returning\n // the same (===) result object, unless state.setResult has been called, or\n // we're doing server rendering and therefore override the result below.\n if (!this.result) {\n this.handleErrorOrCompleted(\n this.result = this.observable.getCurrentResult()\n );\n }\n return this.result;\n }\n\n // This cache allows the referential stability of this.result (as returned by\n // getCurrentResult) to translate into referential stability of the resulting\n // QueryResult object returned by toQueryResult.\n private toQueryResultCache = new (canUseWeakMap ? WeakMap : Map)<\n ApolloQueryResult<TData>,\n QueryResult<TData, TVariables>\n >();\n\n toQueryResult(\n result: ApolloQueryResult<TData>,\n ): QueryResult<TData, TVariables> {\n let queryResult = this.toQueryResultCache.get(result);\n if (queryResult) return queryResult;\n\n const { data, partial, ...resultWithoutPartial } = result;\n this.toQueryResultCache.set(result, queryResult = {\n data, // Ensure always defined, even if result.data is missing.\n ...resultWithoutPartial,\n ...this.obsQueryFields,\n client: this.client,\n observable: this.observable,\n variables: this.observable.variables,\n called: !this.queryHookOptions.skip,\n previousData: this.previousData,\n });\n\n if (!queryResult.error && isNonEmptyArray(result.errors)) {\n // Until a set naming convention for networkError and graphQLErrors is\n // decided upon, we map errors (graphQLErrors) to the error options.\n // TODO: Is it possible for both result.error and result.errors to be\n // defined here?\n queryResult.error = new ApolloError({ graphQLErrors: result.errors });\n }\n\n return queryResult;\n }\n\n private unsafeHandlePartialRefetch(result: ApolloQueryResult<TData>) {\n // WARNING: SIDE-EFFECTS IN THE RENDER FUNCTION\n //\n // TODO: This code should be removed when the partialRefetch option is\n // removed. I was unable to get this hook to behave reasonably in certain\n // edge cases when this block was put in an effect.\n if (\n result.partial &&\n this.queryHookOptions.partialRefetch &&\n !result.loading &&\n (!result.data || Object.keys(result.data).length === 0) &&\n this.observable.options.fetchPolicy !== 'cache-only'\n ) {\n Object.assign(result, {\n loading: true,\n networkStatus: NetworkStatus.refetch,\n });\n this.observable.refetch();\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useSuspenseQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseQuery.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,WAAW,EAEX,YAAY,EAEZ,kBAAkB,EAClB,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AASpB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAKxB,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,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7D,eAAe,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,iBAAiB,CAAC,CAAC;CAC9E;AAaD,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,CAoH3C"}
1
+ {"version":3,"file":"useSuspenseQuery.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseQuery.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,YAAY,EACZ,WAAW,EAEX,YAAY,EAEZ,kBAAkB,EAClB,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AASpB,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,gBAAgB,CAAC;AAMxB,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,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;IAC7D,eAAe,EAAE,qBAAqB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,iBAAiB,CAAC,CAAC;CAC9E;AAaD,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,CAoH3C"}
@@ -146,6 +146,7 @@ function useIsDeferred(query) {
146
146
  function useObservableQueryResult(observable) {
147
147
  var resultRef = useRef();
148
148
  var isMountedRef = useRef(false);
149
+ var subscribeTimeoutRef = useRef();
149
150
  if (!resultRef.current) {
150
151
  resultRef.current = observable.getCurrentResult();
151
152
  }
@@ -156,6 +157,7 @@ function useObservableQueryResult(observable) {
156
157
  };
157
158
  }, []);
158
159
  return useSyncExternalStore(useCallback(function (forceUpdate) {
160
+ clearTimeout(subscribeTimeoutRef.current);
159
161
  function handleUpdate() {
160
162
  var previousResult = resultRef.current;
161
163
  var result = observable.getCurrentResult();
@@ -169,12 +171,15 @@ function useObservableQueryResult(observable) {
169
171
  forceUpdate();
170
172
  }
171
173
  }
172
- var subscription = observable.subscribe({
173
- next: handleUpdate,
174
- error: handleUpdate,
174
+ var subscription;
175
+ subscribeTimeoutRef.current = setTimeout(function () {
176
+ subscription = observable.subscribe({
177
+ next: handleUpdate,
178
+ error: handleUpdate,
179
+ });
175
180
  });
176
181
  return function () {
177
- subscription.unsubscribe();
182
+ subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
178
183
  };
179
184
  }, [observable]), function () { return resultRef.current; }, function () { return resultRef.current; });
180
185
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useSuspenseQuery.js","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, __DEV__ } from '../../utilities/globals';\nimport { useRef, useEffect, useCallback, useMemo, useState } from 'react';\nimport { equal } from '@wry/equality';\nimport {\n ApolloClient,\n ApolloError,\n ApolloQueryResult,\n DocumentNode,\n ObservableQuery,\n OperationVariables,\n TypedDocumentNode,\n WatchQueryOptions,\n WatchQueryFetchPolicy,\n} from '../../core';\nimport {\n compact,\n Concast,\n isNonEmptyArray,\n hasDirectives,\n} from '../../utilities';\nimport { useApolloClient } from './useApolloClient';\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport {\n SuspenseQueryHookOptions,\n ObservableQueryFields,\n} from '../types/types';\nimport { useDeepMemo, useIsomorphicLayoutEffect } from './internal';\nimport { useSuspenseCache } from './useSuspenseCache';\nimport { useSyncExternalStore } from './useSyncExternalStore';\n\nexport interface UseSuspenseQueryResult<\n TData = any,\n TVariables extends OperationVariables = OperationVariables\n> {\n client: ApolloClient<any>;\n data: TData;\n error: ApolloError | undefined;\n fetchMore: ObservableQueryFields<TData, TVariables>['fetchMore'];\n refetch: ObservableQueryFields<TData, TVariables>['refetch'];\n subscribeToMore: ObservableQueryFields<TData, TVariables>['subscribeToMore'];\n}\n\nconst SUPPORTED_FETCH_POLICIES: WatchQueryFetchPolicy[] = [\n 'cache-first',\n 'network-only',\n 'no-cache',\n 'cache-and-network',\n];\n\nconst DEFAULT_FETCH_POLICY = 'cache-first';\nconst DEFAULT_SUSPENSE_POLICY = 'always';\nconst DEFAULT_ERROR_POLICY = 'none';\n\nexport function useSuspenseQuery_experimental<\n TData = any,\n TVariables extends OperationVariables = OperationVariables\n>(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options: SuspenseQueryHookOptions<TData, TVariables> = Object.create(null)\n): UseSuspenseQueryResult<TData, TVariables> {\n const suspenseCache = useSuspenseCache(options.suspenseCache);\n const client = useApolloClient(options.client);\n const watchQueryOptions = useWatchQueryOptions({ query, options, client });\n const previousWatchQueryOptionsRef = useRef(watchQueryOptions);\n const deferred = useIsDeferred(query);\n\n const { fetchPolicy, errorPolicy, returnPartialData, variables } =\n watchQueryOptions;\n\n let cacheEntry = suspenseCache.lookup(query, variables);\n\n const [observable] = useState(() => {\n return cacheEntry?.observable || client.watchQuery(watchQueryOptions);\n });\n\n const result = useObservableQueryResult(observable);\n\n const hasFullResult = result.data && !result.partial;\n const hasPartialResult = result.data && result.partial;\n const usePartialResult = returnPartialData && hasPartialResult;\n\n const allowsThrownErrors =\n // If we've got a deferred query that errors on an incremental chunk, we\n // will have a partial result before the error is collected. We do not want\n // to throw errors that have been returned from incremental chunks. Instead\n // we offload those errors to the `error` property.\n errorPolicy === 'none' && (!deferred || !hasPartialResult);\n\n if (\n result.error &&\n // Always throw network errors regardless of the error policy\n (result.error.networkError || allowsThrownErrors)\n ) {\n throw result.error;\n }\n\n if (result.loading) {\n // If we don't have a cache entry, but we are in a loading state, we are on\n // the first run of the hook. Kick off a network request so we can suspend\n // immediately\n if (!cacheEntry) {\n cacheEntry = suspenseCache.add(query, variables, {\n promise: maybeWrapConcastWithCustomPromise(\n observable.reobserveAsConcast(watchQueryOptions),\n { deferred }\n ),\n observable,\n });\n }\n\n const hasUsableResult =\n // When we have partial data in the cache, a network request will be kicked\n // off to load the full set of data. Avoid suspending when the request is\n // in flight to return the partial data immediately.\n usePartialResult ||\n // `cache-and-network` kicks off a network request even with a full set of\n // data in the cache, which means the loading state will be set to `true`.\n // Avoid suspending in this case.\n (fetchPolicy === 'cache-and-network' && hasFullResult);\n\n if (!hasUsableResult && !cacheEntry.fulfilled) {\n throw cacheEntry.promise;\n }\n }\n\n useEffect(() => {\n const { variables, query } = watchQueryOptions;\n const previousOpts = previousWatchQueryOptionsRef.current;\n\n if (variables !== previousOpts.variables || query !== previousOpts.query) {\n suspenseCache.remove(previousOpts.query, previousOpts.variables);\n\n suspenseCache.add(query, variables, {\n promise: observable.reobserve({ query, variables }),\n observable,\n });\n\n previousWatchQueryOptionsRef.current = watchQueryOptions;\n }\n }, [watchQueryOptions]);\n\n useEffect(() => {\n return () => {\n suspenseCache.remove(query, variables);\n };\n }, []);\n\n return useMemo(() => {\n return {\n client,\n data: result.data,\n error: errorPolicy === 'ignore' ? void 0 : toApolloError(result),\n fetchMore: (options) => {\n const promise = observable.fetchMore(options);\n\n suspenseCache.add(query, watchQueryOptions.variables, {\n promise,\n observable,\n });\n\n return promise;\n },\n refetch: (variables?: Partial<TVariables>) => {\n const promise = observable.refetch(variables);\n\n suspenseCache.add(query, watchQueryOptions.variables, {\n promise,\n observable,\n });\n\n return promise;\n },\n subscribeToMore: (options) => observable.subscribeToMore(options),\n };\n }, [client, result, observable, errorPolicy]);\n}\n\nfunction validateOptions(options: WatchQueryOptions) {\n const {\n query,\n fetchPolicy = DEFAULT_FETCH_POLICY,\n returnPartialData,\n } = options;\n\n verifyDocumentType(query, DocumentType.Query);\n validateFetchPolicy(fetchPolicy);\n validatePartialDataReturn(fetchPolicy, returnPartialData);\n}\n\nfunction validateFetchPolicy(fetchPolicy: WatchQueryFetchPolicy) {\n invariant(\n SUPPORTED_FETCH_POLICIES.includes(fetchPolicy),\n `The fetch policy \\`${fetchPolicy}\\` is not supported with suspense.`\n );\n}\n\nfunction validatePartialDataReturn(\n fetchPolicy: WatchQueryFetchPolicy,\n returnPartialData: boolean | undefined\n) {\n if (fetchPolicy === 'no-cache' && returnPartialData) {\n invariant.warn(\n 'Using `returnPartialData` with a `no-cache` fetch policy has no effect. To read partial data from the cache, consider using an alternate fetch policy.'\n );\n }\n}\n\nfunction toApolloError(result: ApolloQueryResult<any>) {\n return isNonEmptyArray(result.errors)\n ? new ApolloError({ graphQLErrors: result.errors })\n : result.error;\n}\n\nfunction maybeWrapConcastWithCustomPromise<TData>(\n concast: Concast<ApolloQueryResult<TData>>,\n { deferred }: { deferred: boolean }\n): Promise<ApolloQueryResult<TData>> {\n if (deferred) {\n return new Promise((resolve, reject) => {\n // Unlike `concast.promise`, we want to resolve the promise on the initial\n // chunk of the deferred query. This allows the component to unsuspend\n // when we get the initial set of data, rather than waiting until all\n // chunks have been loaded.\n const subscription = concast.subscribe({\n next: (value) => {\n resolve(value);\n subscription.unsubscribe();\n },\n error: reject,\n });\n });\n }\n\n return concast.promise;\n}\n\ninterface UseWatchQueryOptionsHookOptions<\n TData,\n TVariables extends OperationVariables\n> {\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n options: SuspenseQueryHookOptions<TData, TVariables>;\n client: ApolloClient<any>;\n}\n\nfunction useWatchQueryOptions<TData, TVariables extends OperationVariables>({\n query,\n options,\n client,\n}: UseWatchQueryOptionsHookOptions<TData, TVariables>): WatchQueryOptions<\n TVariables,\n TData\n> {\n const { watchQuery: defaultOptions } = client.defaultOptions;\n\n const watchQueryOptions = useDeepMemo<\n WatchQueryOptions<TVariables, TData>\n >(() => {\n const {\n errorPolicy,\n fetchPolicy,\n suspensePolicy = DEFAULT_SUSPENSE_POLICY,\n variables,\n ...watchQueryOptions\n } = options;\n\n return {\n ...watchQueryOptions,\n query,\n errorPolicy:\n errorPolicy || defaultOptions?.errorPolicy || DEFAULT_ERROR_POLICY,\n fetchPolicy:\n fetchPolicy || defaultOptions?.fetchPolicy || DEFAULT_FETCH_POLICY,\n notifyOnNetworkStatusChange: suspensePolicy === 'always',\n // By default, `ObservableQuery` will run `reobserve` the first time\n // something `subscribe`s to the observable, which kicks off a network\n // request. This creates a problem for suspense because we need to begin\n // fetching the data immediately so we can throw the promise on the first\n // render. Since we don't subscribe until after we've unsuspended, we need\n // to avoid kicking off another network request for the same data we just\n // fetched. This option toggles that behavior off to avoid the `reobserve`\n // when the observable is first subscribed to.\n fetchOnFirstSubscribe: false,\n variables: compact({ ...defaultOptions?.variables, ...variables }),\n };\n }, [options, query, defaultOptions]);\n\n if (__DEV__) {\n validateOptions(watchQueryOptions);\n }\n\n return watchQueryOptions;\n}\n\nfunction useIsDeferred(query: DocumentNode) {\n return useMemo(() => hasDirectives(['defer'], query), [query]);\n}\n\nfunction useObservableQueryResult<TData>(observable: ObservableQuery<TData>) {\n const resultRef = useRef<ApolloQueryResult<TData>>();\n const isMountedRef = useRef(false);\n\n if (!resultRef.current) {\n resultRef.current = observable.getCurrentResult();\n }\n\n // React keeps refs and effects from useSyncExternalStore around after the\n // component initially mounts even if the component re-suspends. We need to\n // track when the component suspends/unsuspends to ensure we don't try and\n // update the component while its suspended since the observable's\n // `next` function is called before the promise resolved.\n //\n // Unlike useEffect, useLayoutEffect will run its cleanup and initialization\n // functions each time a component is suspended.\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n return useSyncExternalStore(\n useCallback(\n (forceUpdate) => {\n function handleUpdate() {\n const previousResult = resultRef.current!;\n const result = observable.getCurrentResult();\n\n if (\n previousResult.loading === result.loading &&\n previousResult.networkStatus === result.networkStatus &&\n equal(previousResult.data, result.data)\n ) {\n return;\n }\n\n resultRef.current = result;\n\n if (isMountedRef.current) {\n forceUpdate();\n }\n }\n\n const subscription = observable.subscribe({\n next: handleUpdate,\n error: handleUpdate,\n });\n\n return () => {\n subscription.unsubscribe();\n };\n },\n [observable]\n ),\n () => resultRef.current!,\n () => resultRef.current!\n );\n}\n"]}
1
+ {"version":3,"file":"useSuspenseQuery.js","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseQuery.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, __DEV__ } from '../../utilities/globals';\nimport { useRef, useEffect, useCallback, useMemo, useState } from 'react';\nimport { equal } from '@wry/equality';\nimport {\n ApolloClient,\n ApolloError,\n ApolloQueryResult,\n DocumentNode,\n ObservableQuery,\n OperationVariables,\n TypedDocumentNode,\n WatchQueryOptions,\n WatchQueryFetchPolicy,\n} from '../../core';\nimport {\n compact,\n Concast,\n isNonEmptyArray,\n hasDirectives,\n} from '../../utilities';\nimport { useApolloClient } from './useApolloClient';\nimport { DocumentType, verifyDocumentType } from '../parser';\nimport {\n SuspenseQueryHookOptions,\n ObservableQueryFields,\n} from '../types/types';\nimport { useDeepMemo, useIsomorphicLayoutEffect } from './internal';\nimport { useSuspenseCache } from './useSuspenseCache';\nimport { useSyncExternalStore } from './useSyncExternalStore';\nimport { Subscription } from 'zen-observable-ts';\n\nexport interface UseSuspenseQueryResult<\n TData = any,\n TVariables extends OperationVariables = OperationVariables\n> {\n client: ApolloClient<any>;\n data: TData;\n error: ApolloError | undefined;\n fetchMore: ObservableQueryFields<TData, TVariables>['fetchMore'];\n refetch: ObservableQueryFields<TData, TVariables>['refetch'];\n subscribeToMore: ObservableQueryFields<TData, TVariables>['subscribeToMore'];\n}\n\nconst SUPPORTED_FETCH_POLICIES: WatchQueryFetchPolicy[] = [\n 'cache-first',\n 'network-only',\n 'no-cache',\n 'cache-and-network',\n];\n\nconst DEFAULT_FETCH_POLICY = 'cache-first';\nconst DEFAULT_SUSPENSE_POLICY = 'always';\nconst DEFAULT_ERROR_POLICY = 'none';\n\nexport function useSuspenseQuery_experimental<\n TData = any,\n TVariables extends OperationVariables = OperationVariables\n>(\n query: DocumentNode | TypedDocumentNode<TData, TVariables>,\n options: SuspenseQueryHookOptions<TData, TVariables> = Object.create(null)\n): UseSuspenseQueryResult<TData, TVariables> {\n const suspenseCache = useSuspenseCache(options.suspenseCache);\n const client = useApolloClient(options.client);\n const watchQueryOptions = useWatchQueryOptions({ query, options, client });\n const previousWatchQueryOptionsRef = useRef(watchQueryOptions);\n const deferred = useIsDeferred(query);\n\n const { fetchPolicy, errorPolicy, returnPartialData, variables } =\n watchQueryOptions;\n\n let cacheEntry = suspenseCache.lookup(query, variables);\n\n const [observable] = useState(() => {\n return cacheEntry?.observable || client.watchQuery(watchQueryOptions);\n });\n\n const result = useObservableQueryResult(observable);\n\n const hasFullResult = result.data && !result.partial;\n const hasPartialResult = result.data && result.partial;\n const usePartialResult = returnPartialData && hasPartialResult;\n\n const allowsThrownErrors =\n // If we've got a deferred query that errors on an incremental chunk, we\n // will have a partial result before the error is collected. We do not want\n // to throw errors that have been returned from incremental chunks. Instead\n // we offload those errors to the `error` property.\n errorPolicy === 'none' && (!deferred || !hasPartialResult);\n\n if (\n result.error &&\n // Always throw network errors regardless of the error policy\n (result.error.networkError || allowsThrownErrors)\n ) {\n throw result.error;\n }\n\n if (result.loading) {\n // If we don't have a cache entry, but we are in a loading state, we are on\n // the first run of the hook. Kick off a network request so we can suspend\n // immediately\n if (!cacheEntry) {\n cacheEntry = suspenseCache.add(query, variables, {\n promise: maybeWrapConcastWithCustomPromise(\n observable.reobserveAsConcast(watchQueryOptions),\n { deferred }\n ),\n observable,\n });\n }\n\n const hasUsableResult =\n // When we have partial data in the cache, a network request will be kicked\n // off to load the full set of data. Avoid suspending when the request is\n // in flight to return the partial data immediately.\n usePartialResult ||\n // `cache-and-network` kicks off a network request even with a full set of\n // data in the cache, which means the loading state will be set to `true`.\n // Avoid suspending in this case.\n (fetchPolicy === 'cache-and-network' && hasFullResult);\n\n if (!hasUsableResult && !cacheEntry.fulfilled) {\n throw cacheEntry.promise;\n }\n }\n\n useEffect(() => {\n const { variables, query } = watchQueryOptions;\n const previousOpts = previousWatchQueryOptionsRef.current;\n\n if (variables !== previousOpts.variables || query !== previousOpts.query) {\n suspenseCache.remove(previousOpts.query, previousOpts.variables);\n\n suspenseCache.add(query, variables, {\n promise: observable.reobserve({ query, variables }),\n observable,\n });\n\n previousWatchQueryOptionsRef.current = watchQueryOptions;\n }\n }, [watchQueryOptions]);\n\n useEffect(() => {\n return () => {\n suspenseCache.remove(query, variables);\n };\n }, []);\n\n return useMemo(() => {\n return {\n client,\n data: result.data,\n error: errorPolicy === 'ignore' ? void 0 : toApolloError(result),\n fetchMore: (options) => {\n const promise = observable.fetchMore(options);\n\n suspenseCache.add(query, watchQueryOptions.variables, {\n promise,\n observable,\n });\n\n return promise;\n },\n refetch: (variables?: Partial<TVariables>) => {\n const promise = observable.refetch(variables);\n\n suspenseCache.add(query, watchQueryOptions.variables, {\n promise,\n observable,\n });\n\n return promise;\n },\n subscribeToMore: (options) => observable.subscribeToMore(options),\n };\n }, [client, result, observable, errorPolicy]);\n}\n\nfunction validateOptions(options: WatchQueryOptions) {\n const {\n query,\n fetchPolicy = DEFAULT_FETCH_POLICY,\n returnPartialData,\n } = options;\n\n verifyDocumentType(query, DocumentType.Query);\n validateFetchPolicy(fetchPolicy);\n validatePartialDataReturn(fetchPolicy, returnPartialData);\n}\n\nfunction validateFetchPolicy(fetchPolicy: WatchQueryFetchPolicy) {\n invariant(\n SUPPORTED_FETCH_POLICIES.includes(fetchPolicy),\n `The fetch policy \\`${fetchPolicy}\\` is not supported with suspense.`\n );\n}\n\nfunction validatePartialDataReturn(\n fetchPolicy: WatchQueryFetchPolicy,\n returnPartialData: boolean | undefined\n) {\n if (fetchPolicy === 'no-cache' && returnPartialData) {\n invariant.warn(\n 'Using `returnPartialData` with a `no-cache` fetch policy has no effect. To read partial data from the cache, consider using an alternate fetch policy.'\n );\n }\n}\n\nfunction toApolloError(result: ApolloQueryResult<any>) {\n return isNonEmptyArray(result.errors)\n ? new ApolloError({ graphQLErrors: result.errors })\n : result.error;\n}\n\nfunction maybeWrapConcastWithCustomPromise<TData>(\n concast: Concast<ApolloQueryResult<TData>>,\n { deferred }: { deferred: boolean }\n): Promise<ApolloQueryResult<TData>> {\n if (deferred) {\n return new Promise((resolve, reject) => {\n // Unlike `concast.promise`, we want to resolve the promise on the initial\n // chunk of the deferred query. This allows the component to unsuspend\n // when we get the initial set of data, rather than waiting until all\n // chunks have been loaded.\n const subscription = concast.subscribe({\n next: (value) => {\n resolve(value);\n subscription.unsubscribe();\n },\n error: reject,\n });\n });\n }\n\n return concast.promise;\n}\n\ninterface UseWatchQueryOptionsHookOptions<\n TData,\n TVariables extends OperationVariables\n> {\n query: DocumentNode | TypedDocumentNode<TData, TVariables>;\n options: SuspenseQueryHookOptions<TData, TVariables>;\n client: ApolloClient<any>;\n}\n\nfunction useWatchQueryOptions<TData, TVariables extends OperationVariables>({\n query,\n options,\n client,\n}: UseWatchQueryOptionsHookOptions<TData, TVariables>): WatchQueryOptions<\n TVariables,\n TData\n> {\n const { watchQuery: defaultOptions } = client.defaultOptions;\n\n const watchQueryOptions = useDeepMemo<\n WatchQueryOptions<TVariables, TData>\n >(() => {\n const {\n errorPolicy,\n fetchPolicy,\n suspensePolicy = DEFAULT_SUSPENSE_POLICY,\n variables,\n ...watchQueryOptions\n } = options;\n\n return {\n ...watchQueryOptions,\n query,\n errorPolicy:\n errorPolicy || defaultOptions?.errorPolicy || DEFAULT_ERROR_POLICY,\n fetchPolicy:\n fetchPolicy || defaultOptions?.fetchPolicy || DEFAULT_FETCH_POLICY,\n notifyOnNetworkStatusChange: suspensePolicy === 'always',\n // By default, `ObservableQuery` will run `reobserve` the first time\n // something `subscribe`s to the observable, which kicks off a network\n // request. This creates a problem for suspense because we need to begin\n // fetching the data immediately so we can throw the promise on the first\n // render. Since we don't subscribe until after we've unsuspended, we need\n // to avoid kicking off another network request for the same data we just\n // fetched. This option toggles that behavior off to avoid the `reobserve`\n // when the observable is first subscribed to.\n fetchOnFirstSubscribe: false,\n variables: compact({ ...defaultOptions?.variables, ...variables }),\n };\n }, [options, query, defaultOptions]);\n\n if (__DEV__) {\n validateOptions(watchQueryOptions);\n }\n\n return watchQueryOptions;\n}\n\nfunction useIsDeferred(query: DocumentNode) {\n return useMemo(() => hasDirectives(['defer'], query), [query]);\n}\n\nfunction useObservableQueryResult<TData>(observable: ObservableQuery<TData>) {\n const resultRef = useRef<ApolloQueryResult<TData>>();\n const isMountedRef = useRef(false);\n const subscribeTimeoutRef = useRef<NodeJS.Timeout>();\n\n if (!resultRef.current) {\n resultRef.current = observable.getCurrentResult();\n }\n\n // React keeps refs and effects from useSyncExternalStore around after the\n // component initially mounts even if the component re-suspends. We need to\n // track when the component suspends/unsuspends to ensure we don't try and\n // update the component while its suspended since the observable's\n // `next` function is called before the promise resolved.\n //\n // Unlike useEffect, useLayoutEffect will run its cleanup and initialization\n // functions each time a component is suspended.\n useIsomorphicLayoutEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n return useSyncExternalStore(\n useCallback(\n (forceUpdate) => {\n clearTimeout(subscribeTimeoutRef.current);\n\n function handleUpdate() {\n const previousResult = resultRef.current!;\n const result = observable.getCurrentResult();\n\n if (\n previousResult.loading === result.loading &&\n previousResult.networkStatus === result.networkStatus &&\n equal(previousResult.data, result.data)\n ) {\n return;\n }\n\n resultRef.current = result;\n\n if (isMountedRef.current) {\n forceUpdate();\n }\n }\n\n let subscription: Subscription;\n\n // We use a `setTimeout` here to avoid issues in React's strict mode\n // where the subscription would be torn down, but resubscribing would\n // be stuck in the torn down state, therefore updates to the cache would\n // not trigger the observable's subscription. This occurs due to the new\n // `fetchOnFirstSubscribe` option introduced with `useSuspenseQuery`,\n // which avoids issuing a network request (via `reobserve`) when calling\n // `subscribe` on the observable. Unfortunately `reobserve` is required\n // to put the observable back into a non-torn-down state, which is not\n // called due to this option. Instead we try delaying calling subscribe\n // for the first time by allowing React to run this effect, tear it down,\n // then set it back up again before we resubscribe.\n //\n // Authors note (Jerel): This feels super hacky and I hate it, but this\n // seems like the best approach to avoid completely changing around the\n // internals of ObservableQuery, which could introduce new bugs if I'm\n // not careful. Ideally we could call `subscribe()`, `unsubscribe()`,\n // then `subscribe()` again and be back into a normal state, but this\n // might require a sizable refactor to accomplish.\n //\n // Related to https://github.com/apollographql/apollo-client/issues/10428\n subscribeTimeoutRef.current = setTimeout(() => {\n subscription = observable.subscribe({\n next: handleUpdate,\n error: handleUpdate,\n });\n });\n\n return () => {\n subscription?.unsubscribe();\n };\n },\n [observable]\n ),\n () => resultRef.current!,\n () => resultRef.current!\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"itAsync.js","sourceRoot":"","sources":["../../../src/testing/core/itAsync.ts"],"names":[],"mappings":"AAAA,SAAS,IAAI,CAAU,GAA8B;IACnD,OAAO,UACL,OAAe,EACf,QAGQ,EACR,OAAgB,IACb,OAAA,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;QAAA,iBAIlC;QAHC,OAAO,IAAI,OAAO,CAChB,UAAC,OAAO,EAAE,MAAM,IAAK,OAAA,QAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAApC,CAAoC,CAC1D,CAAC;IACJ,CAAC,EAAE,OAAO,CAAC,EAJN,CAIM,CAAC;AACd,CAAC;AAED,IAAM,SAAS,GAAG,IAAI,EAAE,CAAC;AAEzB,MAAM,CAAC,IAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,cAAqC;SAArC,UAAqC,EAArC,qBAAqC,EAArC,IAAqC;QAArC,yBAAqC;;IAErC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC,CAAC","sourcesContent":["function wrap<TResult>(key?: \"only\" | \"skip\" | \"todo\") {\n return (\n message: string,\n callback: (\n resolve: (result?: any) => void,\n reject: (reason?: any) => void,\n ) => any,\n timeout?: number,\n ) => (key ? it[key] : it)(message, function () {\n return new Promise(\n (resolve, reject) => callback.call(this, resolve, reject),\n );\n }, timeout);\n}\n\nconst wrappedIt = wrap();\n\nexport const itAsync = Object.assign(function (\n ...args: Parameters<typeof wrappedIt>\n) {\n return wrappedIt.apply(this, args);\n}, {\n only: wrap(\"only\"),\n skip: wrap(\"skip\"),\n todo: wrap(\"todo\"),\n});\n"]}
1
+ {"version":3,"file":"itAsync.js","sourceRoot":"","sources":["../../../src/testing/core/itAsync.ts"],"names":[],"mappings":"AAAA,SAAS,IAAI,CAAC,GAA8B;IAC1C,OAAO,UACL,OAAe,EACf,QAGQ,EACR,OAAgB,IACb,OAAA,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;QAAA,iBAIlC;QAHC,OAAO,IAAI,OAAO,CAChB,UAAC,OAAO,EAAE,MAAM,IAAK,OAAA,QAAQ,CAAC,IAAI,CAAC,KAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAApC,CAAoC,CAC1D,CAAC;IACJ,CAAC,EAAE,OAAO,CAAC,EAJN,CAIM,CAAC;AACd,CAAC;AAED,IAAM,SAAS,GAAG,IAAI,EAAE,CAAC;AAEzB,MAAM,CAAC,IAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,cAAqC;SAArC,UAAqC,EAArC,qBAAqC,EAArC,IAAqC;QAArC,yBAAqC;;IAErC,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,EAAE;IACD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;CACnB,CAAC,CAAC","sourcesContent":["function wrap(key?: \"only\" | \"skip\" | \"todo\") {\n return (\n message: string,\n callback: (\n resolve: (result?: any) => void,\n reject: (reason?: any) => void,\n ) => any,\n timeout?: number,\n ) => (key ? it[key] : it)(message, function () {\n return new Promise(\n (resolve, reject) => callback.call(this, resolve, reject),\n );\n }, timeout);\n}\n\nconst wrappedIt = wrap();\n\nexport const itAsync = Object.assign(function (\n ...args: Parameters<typeof wrappedIt>\n) {\n return wrappedIt.apply(this, args);\n}, {\n only: wrap(\"only\"),\n skip: wrap(\"skip\"),\n todo: wrap(\"todo\"),\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"getFromAST.d.ts","sourceRoot":"","sources":["../../../src/utilities/graphql/getFromAST.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EAEvB,MAAM,SAAS,CAAC;AAKjB,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,gBA0B9C;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,GAChB,uBAAuB,GAAG,SAAS,CAKrC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CASjE;AAGD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,GAChB,sBAAsB,EAAE,CAI1B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,uBAAuB,CAS7E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,YAAY,GAChB,sBAAsB,CAoBxB;AAOD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,GACrB,uBAAuB,GAAG,sBAAsB,CA8BlD;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,uBAAuB,GAAG,SAAS,GAC9C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAerB"}
1
+ {"version":3,"file":"getFromAST.d.ts","sourceRoot":"","sources":["../../../src/utilities/graphql/getFromAST.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,sBAAsB,EAEvB,MAAM,SAAS,CAAC;AASjB,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,gBA0B9C;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,GAChB,uBAAuB,GAAG,SAAS,CAMrC;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CASjE;AAGD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,YAAY,GAChB,sBAAsB,EAAE,CAK1B;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,YAAY,GAAG,uBAAuB,CAS7E;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,YAAY,GAChB,sBAAsB,CAoBxB;AAOD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,YAAY,GACrB,uBAAuB,GAAG,sBAAsB,CA8BlD;AAED,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,uBAAuB,GAAG,SAAS,GAC9C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAerB"}
@@ -15,17 +15,21 @@ export function checkDocument(doc) {
15
15
  }
16
16
  export function getOperationDefinition(doc) {
17
17
  checkDocument(doc);
18
- return doc.definitions.filter(function (definition) { return definition.kind === 'OperationDefinition'; })[0];
18
+ return doc.definitions.filter(function (definition) {
19
+ return definition.kind === 'OperationDefinition';
20
+ })[0];
19
21
  }
20
22
  export function getOperationName(doc) {
21
23
  return (doc.definitions
22
24
  .filter(function (definition) {
23
- return definition.kind === 'OperationDefinition' && definition.name;
25
+ return definition.kind === 'OperationDefinition' && !!definition.name;
24
26
  })
25
27
  .map(function (x) { return x.name.value; })[0] || null);
26
28
  }
27
29
  export function getFragmentDefinitions(doc) {
28
- return doc.definitions.filter(function (definition) { return definition.kind === 'FragmentDefinition'; });
30
+ return doc.definitions.filter(function (definition) {
31
+ return definition.kind === 'FragmentDefinition';
32
+ });
29
33
  }
30
34
  export function getQueryDefinition(doc) {
31
35
  var queryDef = getOperationDefinition(doc);
@@ -1 +1 @@
1
- {"version":3,"file":"getFromAST.js","sourceRoot":"","sources":["../../../src/utilities/graphql/getFromAST.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, InvariantError } from '../globals';\n\nimport {\n DocumentNode,\n OperationDefinitionNode,\n FragmentDefinitionNode,\n ValueNode,\n} from 'graphql';\n\nimport { valueToObjectRepresentation } from './storeUtils';\n\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc: DocumentNode) {\n invariant(\n doc && doc.kind === 'Document',\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`,\n );\n\n const operations = doc.definitions\n .filter(d => d.kind !== 'FragmentDefinition')\n .map(definition => {\n if (definition.kind !== 'OperationDefinition') {\n throw new InvariantError(\n `Schema type definitions not allowed in queries. Found: \"${\n definition.kind\n }\"`,\n );\n }\n return definition;\n });\n\n invariant(\n operations.length <= 1,\n `Ambiguous GraphQL document: contains ${operations.length} operations`,\n );\n\n return doc;\n}\n\nexport function getOperationDefinition(\n doc: DocumentNode,\n): OperationDefinitionNode | undefined {\n checkDocument(doc);\n return doc.definitions.filter(\n definition => definition.kind === 'OperationDefinition',\n )[0] as OperationDefinitionNode;\n}\n\nexport function getOperationName(doc: DocumentNode): string | null {\n return (\n doc.definitions\n .filter(\n definition =>\n definition.kind === 'OperationDefinition' && definition.name,\n )\n .map((x: OperationDefinitionNode) => x!.name!.value)[0] || null\n );\n}\n\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(\n doc: DocumentNode,\n): FragmentDefinitionNode[] {\n return doc.definitions.filter(\n definition => definition.kind === 'FragmentDefinition',\n ) as FragmentDefinitionNode[];\n}\n\nexport function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode {\n const queryDef = getOperationDefinition(doc) as OperationDefinitionNode;\n\n invariant(\n queryDef && queryDef.operation === 'query',\n 'Must contain a query definition.',\n );\n\n return queryDef;\n}\n\nexport function getFragmentDefinition(\n doc: DocumentNode,\n): FragmentDefinitionNode {\n invariant(\n doc.kind === 'Document',\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`,\n );\n\n invariant(\n doc.definitions.length <= 1,\n 'Fragment must have exactly one definition.',\n );\n\n const fragmentDef = doc.definitions[0] as FragmentDefinitionNode;\n\n invariant(\n fragmentDef.kind === 'FragmentDefinition',\n 'Must be a fragment definition.',\n );\n\n return fragmentDef as FragmentDefinitionNode;\n}\n\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(\n queryDoc: DocumentNode,\n): OperationDefinitionNode | FragmentDefinitionNode {\n checkDocument(queryDoc);\n\n let fragmentDefinition;\n\n for (let definition of queryDoc.definitions) {\n if (definition.kind === 'OperationDefinition') {\n const operation = (definition as OperationDefinitionNode).operation;\n if (\n operation === 'query' ||\n operation === 'mutation' ||\n operation === 'subscription'\n ) {\n return definition as OperationDefinitionNode;\n }\n }\n if (definition.kind === 'FragmentDefinition' && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition as FragmentDefinitionNode;\n }\n }\n\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n\n throw new InvariantError(\n 'Expected a parsed GraphQL query with a query, mutation, subscription, or a fragment.',\n );\n}\n\nexport function getDefaultValues(\n definition: OperationDefinitionNode | undefined,\n): Record<string, any> {\n const defaultValues = Object.create(null);\n const defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach(def => {\n if (def.defaultValue) {\n valueToObjectRepresentation(\n defaultValues,\n def.variable.name,\n def.defaultValue as ValueNode,\n );\n }\n });\n }\n return defaultValues;\n}\n"]}
1
+ {"version":3,"file":"getFromAST.js","sourceRoot":"","sources":["../../../src/utilities/graphql/getFromAST.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant, InvariantError } from '../globals';\n\nimport {\n DocumentNode,\n OperationDefinitionNode,\n FragmentDefinitionNode,\n ValueNode,\n} from 'graphql';\n\nimport { valueToObjectRepresentation } from './storeUtils';\n\ntype OperationDefinitionWithName = OperationDefinitionNode & {\n name: NonNullable<OperationDefinitionNode['name']>;\n};\n\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc: DocumentNode) {\n invariant(\n doc && doc.kind === 'Document',\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`,\n );\n\n const operations = doc.definitions\n .filter(d => d.kind !== 'FragmentDefinition')\n .map(definition => {\n if (definition.kind !== 'OperationDefinition') {\n throw new InvariantError(\n `Schema type definitions not allowed in queries. Found: \"${\n definition.kind\n }\"`,\n );\n }\n return definition;\n });\n\n invariant(\n operations.length <= 1,\n `Ambiguous GraphQL document: contains ${operations.length} operations`,\n );\n\n return doc;\n}\n\nexport function getOperationDefinition(\n doc: DocumentNode,\n): OperationDefinitionNode | undefined {\n checkDocument(doc);\n return doc.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === 'OperationDefinition',\n )[0];\n}\n\nexport function getOperationName(doc: DocumentNode): string | null {\n return (\n doc.definitions\n .filter(\n (definition): definition is OperationDefinitionWithName =>\n definition.kind === 'OperationDefinition' && !!definition.name,\n )\n .map((x) => x.name.value)[0] || null\n );\n}\n\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(\n doc: DocumentNode,\n): FragmentDefinitionNode[] {\n return doc.definitions.filter(\n (definition): definition is FragmentDefinitionNode =>\n definition.kind === 'FragmentDefinition',\n );\n}\n\nexport function getQueryDefinition(doc: DocumentNode): OperationDefinitionNode {\n const queryDef = getOperationDefinition(doc)!;\n\n invariant(\n queryDef && queryDef.operation === 'query',\n 'Must contain a query definition.',\n );\n\n return queryDef;\n}\n\nexport function getFragmentDefinition(\n doc: DocumentNode,\n): FragmentDefinitionNode {\n invariant(\n doc.kind === 'Document',\n `Expecting a parsed GraphQL document. Perhaps you need to wrap the query \\\nstring in a \"gql\" tag? http://docs.apollostack.com/apollo-client/core.html#gql`,\n );\n\n invariant(\n doc.definitions.length <= 1,\n 'Fragment must have exactly one definition.',\n );\n\n const fragmentDef = doc.definitions[0] as FragmentDefinitionNode;\n\n invariant(\n fragmentDef.kind === 'FragmentDefinition',\n 'Must be a fragment definition.',\n );\n\n return fragmentDef as FragmentDefinitionNode;\n}\n\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(\n queryDoc: DocumentNode,\n): OperationDefinitionNode | FragmentDefinitionNode {\n checkDocument(queryDoc);\n\n let fragmentDefinition;\n\n for (let definition of queryDoc.definitions) {\n if (definition.kind === 'OperationDefinition') {\n const operation = (definition as OperationDefinitionNode).operation;\n if (\n operation === 'query' ||\n operation === 'mutation' ||\n operation === 'subscription'\n ) {\n return definition as OperationDefinitionNode;\n }\n }\n if (definition.kind === 'FragmentDefinition' && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition as FragmentDefinitionNode;\n }\n }\n\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n\n throw new InvariantError(\n 'Expected a parsed GraphQL query with a query, mutation, subscription, or a fragment.',\n );\n}\n\nexport function getDefaultValues(\n definition: OperationDefinitionNode | undefined,\n): Record<string, any> {\n const defaultValues = Object.create(null);\n const defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach(def => {\n if (def.defaultValue) {\n valueToObjectRepresentation(\n defaultValues,\n def.variable.name,\n def.defaultValue as ValueNode,\n );\n }\n });\n }\n return defaultValues;\n}\n"]}
@@ -364,17 +364,21 @@ function checkDocument(doc) {
364
364
  }
365
365
  function getOperationDefinition(doc) {
366
366
  checkDocument(doc);
367
- return doc.definitions.filter(function (definition) { return definition.kind === 'OperationDefinition'; })[0];
367
+ return doc.definitions.filter(function (definition) {
368
+ return definition.kind === 'OperationDefinition';
369
+ })[0];
368
370
  }
369
371
  function getOperationName(doc) {
370
372
  return (doc.definitions
371
373
  .filter(function (definition) {
372
- return definition.kind === 'OperationDefinition' && definition.name;
374
+ return definition.kind === 'OperationDefinition' && !!definition.name;
373
375
  })
374
376
  .map(function (x) { return x.name.value; })[0] || null);
375
377
  }
376
378
  function getFragmentDefinitions(doc) {
377
- return doc.definitions.filter(function (definition) { return definition.kind === 'FragmentDefinition'; });
379
+ return doc.definitions.filter(function (definition) {
380
+ return definition.kind === 'FragmentDefinition';
381
+ });
378
382
  }
379
383
  function getQueryDefinition(doc) {
380
384
  var queryDef = getOperationDefinition(doc);