@apollo/client 3.9.0-alpha.5 → 3.9.0-beta.0

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 (154) hide show
  1. package/.changeset/dirty-tigers-matter.md +13 -0
  2. package/.changeset/mighty-coats-check.md +47 -0
  3. package/.changeset/pre.json +9 -1
  4. package/.changeset/rare-snakes-melt.md +24 -0
  5. package/.changeset/swift-zoos-collect.md +19 -0
  6. package/.changeset/thick-tips-cry.md +9 -0
  7. package/.changeset/tough-timers-begin.md +8 -0
  8. package/.changeset/unlucky-rats-decide.md +5 -0
  9. package/.changeset/wet-forks-rhyme.md +5 -0
  10. package/CHANGELOG.md +118 -4
  11. package/apollo-client.cjs +329 -82
  12. package/apollo-client.cjs.map +1 -1
  13. package/apollo-client.min.cjs +1 -1
  14. package/cache/cache.cjs +78 -6
  15. package/cache/cache.cjs.map +1 -1
  16. package/cache/cache.cjs.native.js +78 -6
  17. package/cache/core/cache.d.ts +9 -0
  18. package/cache/core/cache.js +11 -2
  19. package/cache/core/cache.js.map +1 -1
  20. package/cache/core/types/Cache.d.ts +7 -0
  21. package/cache/core/types/Cache.js.map +1 -1
  22. package/cache/core/types/DataProxy.d.ts +12 -0
  23. package/cache/core/types/DataProxy.js.map +1 -1
  24. package/cache/core/types/common.d.ts +4 -0
  25. package/cache/core/types/common.js.map +1 -1
  26. package/cache/inmemory/fragmentRegistry.js +19 -3
  27. package/cache/inmemory/fragmentRegistry.js.map +1 -1
  28. package/cache/inmemory/inMemoryCache.d.ts +9 -0
  29. package/cache/inmemory/inMemoryCache.js +8 -2
  30. package/cache/inmemory/inMemoryCache.js.map +1 -1
  31. package/cache/inmemory/readFromStore.js +7 -3
  32. package/cache/inmemory/readFromStore.js.map +1 -1
  33. package/cache/inmemory/types.d.ts +18 -0
  34. package/cache/inmemory/types.js.map +1 -1
  35. package/core/ApolloClient.d.ts +9 -0
  36. package/core/ApolloClient.js +4 -0
  37. package/core/ApolloClient.js.map +1 -1
  38. package/core/ObservableQuery.d.ts +2 -0
  39. package/core/ObservableQuery.js +7 -1
  40. package/core/ObservableQuery.js.map +1 -1
  41. package/core/QueryInfo.d.ts +1 -0
  42. package/core/QueryInfo.js +4 -0
  43. package/core/QueryInfo.js.map +1 -1
  44. package/core/QueryManager.d.ts +1 -1
  45. package/core/QueryManager.js +15 -10
  46. package/core/QueryManager.js.map +1 -1
  47. package/core/core.cjs +99 -12
  48. package/core/core.cjs.map +1 -1
  49. package/core/core.cjs.native.js +99 -12
  50. package/core/watchQueryOptions.d.ts +20 -1
  51. package/core/watchQueryOptions.js.map +1 -1
  52. package/dev/dev.cjs +1 -1
  53. package/dev/dev.cjs.map +1 -1
  54. package/dev/dev.cjs.native.js +1 -1
  55. package/link/core/ApolloLink.d.ts +15 -0
  56. package/link/core/ApolloLink.js +8 -4
  57. package/link/core/ApolloLink.js.map +1 -1
  58. package/link/core/core.cjs +8 -4
  59. package/link/core/core.cjs.map +1 -1
  60. package/link/core/core.cjs.native.js +8 -4
  61. package/link/persisted-queries/index.d.ts +11 -1
  62. package/link/persisted-queries/index.js +28 -3
  63. package/link/persisted-queries/index.js.map +1 -1
  64. package/link/persisted-queries/persisted-queries.cjs +26 -3
  65. package/link/persisted-queries/persisted-queries.cjs.map +1 -1
  66. package/link/persisted-queries/persisted-queries.cjs.native.js +26 -3
  67. package/link/remove-typename/remove-typename.cjs +18 -2
  68. package/link/remove-typename/remove-typename.cjs.map +1 -1
  69. package/link/remove-typename/remove-typename.cjs.native.js +18 -2
  70. package/link/remove-typename/removeTypenameFromVariables.d.ts +9 -1
  71. package/link/remove-typename/removeTypenameFromVariables.js +19 -3
  72. package/link/remove-typename/removeTypenameFromVariables.js.map +1 -1
  73. package/package.json +21 -21
  74. package/react/cache/QueryReference.d.ts +11 -5
  75. package/react/cache/QueryReference.js +91 -55
  76. package/react/cache/QueryReference.js.map +1 -1
  77. package/react/hooks/hooks.cjs +112 -52
  78. package/react/hooks/hooks.cjs.map +1 -1
  79. package/react/hooks/hooks.cjs.native.js +112 -52
  80. package/react/hooks/index.d.ts +2 -0
  81. package/react/hooks/index.js +1 -0
  82. package/react/hooks/index.js.map +1 -1
  83. package/react/hooks/useBackgroundQuery.d.ts +12 -9
  84. package/react/hooks/useBackgroundQuery.js +1 -1
  85. package/react/hooks/useBackgroundQuery.js.map +1 -1
  86. package/react/hooks/useLoadableQuery.d.ts +1 -1
  87. package/react/hooks/useLoadableQuery.js +1 -1
  88. package/react/hooks/useLoadableQuery.js.map +1 -1
  89. package/react/hooks/useQueryRefHandlers.d.ts +35 -0
  90. package/react/hooks/useQueryRefHandlers.js +48 -0
  91. package/react/hooks/useQueryRefHandlers.js.map +1 -0
  92. package/react/hooks/useReadQuery.js +8 -2
  93. package/react/hooks/useReadQuery.js.map +1 -1
  94. package/react/index.d.ts +2 -0
  95. package/react/index.js +1 -0
  96. package/react/index.js.map +1 -1
  97. package/react/parser/index.js +6 -3
  98. package/react/parser/index.js.map +1 -1
  99. package/react/parser/parser.cjs +11 -3
  100. package/react/parser/parser.cjs.map +1 -1
  101. package/react/parser/parser.cjs.native.js +11 -3
  102. package/react/query-preloader/createQueryPreloader.d.ts +253 -0
  103. package/react/query-preloader/createQueryPreloader.js +29 -0
  104. package/react/query-preloader/createQueryPreloader.js.map +1 -0
  105. package/react/react.cjs +248 -1
  106. package/react/react.cjs.map +1 -1
  107. package/react/react.cjs.native.js +248 -1
  108. package/react/types/types.d.ts +6 -0
  109. package/react/types/types.js.map +1 -1
  110. package/testing/internal/index.d.ts +4 -0
  111. package/testing/internal/index.js +2 -0
  112. package/testing/internal/index.js.map +1 -1
  113. package/testing/internal/renderHelpers.d.ts +12 -0
  114. package/testing/internal/renderHelpers.js +22 -0
  115. package/testing/internal/renderHelpers.js.map +1 -0
  116. package/testing/internal/scenarios/index.d.ts +41 -0
  117. package/testing/internal/scenarios/index.js +46 -0
  118. package/testing/internal/scenarios/index.js.map +1 -0
  119. package/testing/matchers/index.js +2 -0
  120. package/testing/matchers/index.js.map +1 -1
  121. package/testing/matchers/toBeDisposed.d.ts +3 -0
  122. package/testing/matchers/toBeDisposed.js +26 -0
  123. package/testing/matchers/toBeDisposed.js.map +1 -0
  124. package/utilities/caching/caches.d.ts +34 -0
  125. package/utilities/caching/caches.js +64 -0
  126. package/utilities/caching/caches.js.map +1 -0
  127. package/utilities/caching/getMemoryInternals.d.ts +76 -0
  128. package/utilities/caching/getMemoryInternals.js +112 -0
  129. package/utilities/caching/getMemoryInternals.js.map +1 -0
  130. package/utilities/caching/index.d.ts +4 -0
  131. package/utilities/caching/index.js +3 -0
  132. package/utilities/caching/index.js.map +1 -0
  133. package/utilities/caching/sizes.d.ts +261 -0
  134. package/utilities/caching/sizes.js +27 -0
  135. package/utilities/caching/sizes.js.map +1 -0
  136. package/utilities/common/canUse.js +1 -1
  137. package/utilities/common/canUse.js.map +1 -1
  138. package/utilities/common/canonicalStringify.js +8 -2
  139. package/utilities/common/canonicalStringify.js.map +1 -1
  140. package/utilities/globals/globals.cjs +1 -1
  141. package/utilities/globals/globals.cjs.map +1 -1
  142. package/utilities/globals/globals.cjs.native.js +1 -1
  143. package/utilities/graphql/DocumentTransform.d.ts +14 -1
  144. package/utilities/graphql/DocumentTransform.js +9 -5
  145. package/utilities/graphql/DocumentTransform.js.map +1 -1
  146. package/utilities/graphql/print.js +6 -2
  147. package/utilities/graphql/print.js.map +1 -1
  148. package/utilities/index.d.ts +2 -0
  149. package/utilities/index.js +1 -0
  150. package/utilities/index.js.map +1 -1
  151. package/utilities/utilities.cjs +57 -9
  152. package/utilities/utilities.cjs.map +1 -1
  153. package/utilities/utilities.cjs.native.js +57 -9
  154. package/version.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"QueryReference.js","sourceRoot":"","sources":["../../../src/react/cache/QueryReference.ts"],"names":[],"mappings":"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","sourcesContent":["import { equal } from \"@wry/equality\";\nimport type {\n ApolloError,\n ApolloQueryResult,\n ObservableQuery,\n OperationVariables,\n WatchQueryOptions,\n} from \"../../core/index.js\";\nimport { isNetworkRequestSettled } from \"../../core/index.js\";\nimport type {\n ObservableSubscription,\n PromiseWithState,\n} from \"../../utilities/index.js\";\nimport {\n createFulfilledPromise,\n createRejectedPromise,\n} from \"../../utilities/index.js\";\nimport type { QueryKey } from \"./types.js\";\nimport type { useBackgroundQuery, useReadQuery } from \"../hooks/index.js\";\nimport { wrapPromiseWithState } from \"../../utilities/index.js\";\n\ntype QueryRefPromise<TData> = PromiseWithState<ApolloQueryResult<TData>>;\n\ntype Listener<TData> = (promise: QueryRefPromise<TData>) => void;\n\ntype FetchMoreOptions<TData> = Parameters<\n ObservableQuery<TData>[\"fetchMore\"]\n>[0];\n\nconst QUERY_REFERENCE_SYMBOL: unique symbol = Symbol();\nconst PROMISE_SYMBOL: unique symbol = Symbol();\n\n/**\n * A `QueryReference` is an opaque object returned by {@link useBackgroundQuery}.\n * A child component reading the `QueryReference` via {@link useReadQuery} will\n * suspend until the promise resolves.\n */\nexport interface QueryReference<TData = unknown> {\n readonly [QUERY_REFERENCE_SYMBOL]: InternalQueryReference<TData>;\n [PROMISE_SYMBOL]: QueryRefPromise<TData>;\n}\n\ninterface InternalQueryReferenceOptions {\n onDispose?: () => void;\n autoDisposeTimeoutMs?: number;\n}\n\nexport function wrapQueryRef<TData>(\n internalQueryRef: InternalQueryReference<TData>\n): QueryReference<TData> {\n return {\n [QUERY_REFERENCE_SYMBOL]: internalQueryRef,\n [PROMISE_SYMBOL]: internalQueryRef.promise,\n };\n}\n\nexport function unwrapQueryRef<TData>(\n queryRef: QueryReference<TData>\n): [InternalQueryReference<TData>, () => QueryRefPromise<TData>] {\n const internalQueryRef = queryRef[QUERY_REFERENCE_SYMBOL];\n\n return [\n internalQueryRef,\n () =>\n // There is a chance the query ref's promise has been updated in the time\n // the original promise had been suspended. In that case, we want to use\n // it instead of the older promise which may contain outdated data.\n internalQueryRef.promise.status === \"fulfilled\" ?\n internalQueryRef.promise\n : queryRef[PROMISE_SYMBOL],\n ];\n}\n\nexport function updateWrappedQueryRef<TData>(\n queryRef: QueryReference<TData>,\n promise: QueryRefPromise<TData>\n) {\n queryRef[PROMISE_SYMBOL] = promise;\n}\n\nconst OBSERVED_CHANGED_OPTIONS = [\n \"canonizeResults\",\n \"context\",\n \"errorPolicy\",\n \"fetchPolicy\",\n \"refetchWritePolicy\",\n \"returnPartialData\",\n] as const;\n\ntype ObservedOptions = Pick<\n WatchQueryOptions,\n (typeof OBSERVED_CHANGED_OPTIONS)[number]\n>;\n\nexport class InternalQueryReference<TData = unknown> {\n public result: ApolloQueryResult<TData>;\n public readonly key: QueryKey = {};\n public readonly observable: ObservableQuery<TData>;\n\n public promise: QueryRefPromise<TData>;\n\n private subscription: ObservableSubscription;\n private listeners = new Set<Listener<TData>>();\n private autoDisposeTimeoutId?: NodeJS.Timeout;\n private status: \"idle\" | \"loading\" = \"loading\";\n\n private resolve: ((result: ApolloQueryResult<TData>) => void) | undefined;\n private reject: ((error: unknown) => void) | undefined;\n\n private references = 0;\n\n constructor(\n observable: ObservableQuery<TData>,\n options: InternalQueryReferenceOptions\n ) {\n this.handleNext = this.handleNext.bind(this);\n this.handleError = this.handleError.bind(this);\n this.dispose = this.dispose.bind(this);\n this.observable = observable;\n // Don't save this result as last result to prevent delivery of last result\n // when first subscribing\n this.result = observable.getCurrentResult(false);\n\n if (options.onDispose) {\n this.onDispose = options.onDispose;\n }\n\n if (\n isNetworkRequestSettled(this.result.networkStatus) ||\n (this.result.data &&\n (!this.result.partial || this.watchQueryOptions.returnPartialData))\n ) {\n this.promise = createFulfilledPromise(this.result);\n this.status = \"idle\";\n } else {\n this.promise = wrapPromiseWithState(\n new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n })\n );\n }\n\n this.subscription = observable\n .filter(({ data }) => !equal(data, {}))\n .subscribe({\n next: this.handleNext,\n error: this.handleError,\n });\n\n // Start a timer that will automatically dispose of the query if the\n // suspended resource does not use this queryRef in the given time. This\n // helps prevent memory leaks when a component has unmounted before the\n // query has finished loading.\n const startDisposeTimer = () => {\n if (!this.references) {\n this.autoDisposeTimeoutId = setTimeout(\n this.dispose,\n options.autoDisposeTimeoutMs ?? 30_000\n );\n }\n };\n\n // We wait until the request has settled to ensure we don't dispose of the\n // query ref before the request finishes, otherwise we would leave the\n // promise in a pending state rendering the suspense boundary indefinitely.\n this.promise.then(startDisposeTimer, startDisposeTimer);\n }\n\n get watchQueryOptions() {\n return this.observable.options;\n }\n\n retain() {\n this.references++;\n clearTimeout(this.autoDisposeTimeoutId);\n let disposed = false;\n\n return () => {\n if (disposed) {\n return;\n }\n\n disposed = true;\n this.references--;\n\n // Wait before fully disposing in case the app is running in strict mode.\n setTimeout(() => {\n if (!this.references) {\n this.dispose();\n }\n });\n };\n }\n\n didChangeOptions(watchQueryOptions: ObservedOptions) {\n return OBSERVED_CHANGED_OPTIONS.some(\n (option) =>\n !equal(this.watchQueryOptions[option], watchQueryOptions[option])\n );\n }\n\n applyOptions(watchQueryOptions: ObservedOptions) {\n const {\n fetchPolicy: currentFetchPolicy,\n canonizeResults: currentCanonizeResults,\n } = this.watchQueryOptions;\n\n // \"standby\" is used when `skip` is set to `true`. Detect when we've\n // enabled the query (i.e. `skip` is `false`) to execute a network request.\n if (\n currentFetchPolicy === \"standby\" &&\n currentFetchPolicy !== watchQueryOptions.fetchPolicy\n ) {\n this.initiateFetch(this.observable.reobserve(watchQueryOptions));\n } else {\n this.observable.silentSetOptions(watchQueryOptions);\n\n if (currentCanonizeResults !== watchQueryOptions.canonizeResults) {\n this.result = { ...this.result, ...this.observable.getCurrentResult() };\n this.promise = createFulfilledPromise(this.result);\n }\n }\n\n return this.promise;\n }\n\n listen(listener: Listener<TData>) {\n this.listeners.add(listener);\n\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n refetch(variables: OperationVariables | undefined) {\n return this.initiateFetch(this.observable.refetch(variables));\n }\n\n fetchMore(options: FetchMoreOptions<TData>) {\n return this.initiateFetch(this.observable.fetchMore<TData>(options));\n }\n\n private dispose() {\n this.subscription.unsubscribe();\n this.onDispose();\n }\n\n private onDispose() {\n // noop. overridable by options\n }\n\n private handleNext(result: ApolloQueryResult<TData>) {\n switch (this.status) {\n case \"loading\": {\n // Maintain the last successful `data` value if the next result does not\n // have one.\n if (result.data === void 0) {\n result.data = this.result.data;\n }\n this.status = \"idle\";\n this.result = result;\n this.resolve?.(result);\n break;\n }\n case \"idle\": {\n // This occurs when switching to a result that is fully cached when this\n // class is instantiated. ObservableQuery will run reobserve when\n // subscribing, which delivers a result from the cache.\n if (result.data === this.result.data) {\n return;\n }\n\n // Maintain the last successful `data` value if the next result does not\n // have one.\n if (result.data === void 0) {\n result.data = this.result.data;\n }\n\n this.result = result;\n this.promise = createFulfilledPromise(result);\n this.deliver(this.promise);\n break;\n }\n }\n }\n\n private handleError(error: ApolloError) {\n this.subscription.unsubscribe();\n this.subscription = this.observable.resubscribeAfterError(\n this.handleNext,\n this.handleError\n );\n\n switch (this.status) {\n case \"loading\": {\n this.status = \"idle\";\n this.reject?.(error);\n break;\n }\n case \"idle\": {\n this.promise = createRejectedPromise<ApolloQueryResult<TData>>(error);\n this.deliver(this.promise);\n }\n }\n }\n\n private deliver(promise: QueryRefPromise<TData>) {\n this.listeners.forEach((listener) => listener(promise));\n }\n\n private initiateFetch(returnedPromise: Promise<ApolloQueryResult<TData>>) {\n this.status = \"loading\";\n\n this.promise = wrapPromiseWithState(\n new Promise((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n })\n );\n\n this.promise.catch(() => {});\n\n // If the data returned from the fetch is deeply equal to the data already\n // in the cache, `handleNext` will not be triggered leaving the promise we\n // created in a pending state forever. To avoid this situtation, we attempt\n // to resolve the promise if `handleNext` hasn't been run to ensure the\n // promise is resolved correctly.\n returnedPromise\n .then((result) => {\n if (this.status === \"loading\") {\n this.status = \"idle\";\n this.result = result;\n this.resolve?.(result);\n }\n })\n .catch(() => {});\n\n return returnedPromise;\n }\n}\n"]}
1
+ {"version":3,"file":"QueryReference.js","sourceRoot":"","sources":["../../../src/react/cache/QueryReference.ts"],"names":[],"mappings":"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","sourcesContent":["import { equal } from \"@wry/equality\";\nimport type {\n ApolloError,\n ApolloQueryResult,\n ObservableQuery,\n OperationVariables,\n WatchQueryOptions,\n} from \"../../core/index.js\";\nimport type {\n ObservableSubscription,\n PromiseWithState,\n} from \"../../utilities/index.js\";\nimport {\n createFulfilledPromise,\n createRejectedPromise,\n} from \"../../utilities/index.js\";\nimport type { QueryKey } from \"./types.js\";\nimport type { useBackgroundQuery, useReadQuery } from \"../hooks/index.js\";\nimport { wrapPromiseWithState } from \"../../utilities/index.js\";\n\ntype QueryRefPromise<TData> = PromiseWithState<ApolloQueryResult<TData>>;\n\ntype Listener<TData> = (promise: QueryRefPromise<TData>) => void;\n\ntype FetchMoreOptions<TData> = Parameters<\n ObservableQuery<TData>[\"fetchMore\"]\n>[0];\n\nconst QUERY_REFERENCE_SYMBOL: unique symbol = Symbol();\nconst PROMISE_SYMBOL: unique symbol = Symbol();\n\n/**\n * A `QueryReference` is an opaque object returned by {@link useBackgroundQuery}.\n * A child component reading the `QueryReference` via {@link useReadQuery} will\n * suspend until the promise resolves.\n */\nexport interface QueryReference<TData = unknown, TVariables = unknown> {\n readonly [QUERY_REFERENCE_SYMBOL]: InternalQueryReference<TData>;\n [PROMISE_SYMBOL]: QueryRefPromise<TData>;\n toPromise(): Promise<QueryReference<TData, TVariables>>;\n}\n\ninterface InternalQueryReferenceOptions {\n onDispose?: () => void;\n autoDisposeTimeoutMs?: number;\n}\n\nexport function wrapQueryRef<TData, TVariables extends OperationVariables>(\n internalQueryRef: InternalQueryReference<TData>\n) {\n const ref: QueryReference<TData, TVariables> = {\n toPromise() {\n // We avoid resolving this promise with the query data because we want to\n // discourage using the server data directly from the queryRef. Instead,\n // the data should be accessed through `useReadQuery`. When the server\n // data is needed, its better to use `client.query()` directly.\n //\n // Here we resolve with the ref itself to make using this in React Router\n // or TanStack Router `loader` functions a bit more ergonomic e.g.\n //\n // function loader() {\n // return { queryRef: await preloadQuery(query).toPromise() }\n // }\n return getWrappedPromise(ref).then(() => ref);\n },\n [QUERY_REFERENCE_SYMBOL]: internalQueryRef,\n [PROMISE_SYMBOL]: internalQueryRef.promise,\n };\n\n return ref;\n}\n\nexport function getWrappedPromise<TData>(queryRef: QueryReference<TData, any>) {\n const internalQueryRef = unwrapQueryRef(queryRef);\n\n return internalQueryRef.promise.status === \"fulfilled\" ?\n internalQueryRef.promise\n : queryRef[PROMISE_SYMBOL];\n}\n\nexport function unwrapQueryRef<TData>(\n queryRef: QueryReference<TData>\n): InternalQueryReference<TData> {\n return queryRef[QUERY_REFERENCE_SYMBOL];\n}\n\nexport function updateWrappedQueryRef<TData>(\n queryRef: QueryReference<TData>,\n promise: QueryRefPromise<TData>\n) {\n queryRef[PROMISE_SYMBOL] = promise;\n}\n\nconst OBSERVED_CHANGED_OPTIONS = [\n \"canonizeResults\",\n \"context\",\n \"errorPolicy\",\n \"fetchPolicy\",\n \"refetchWritePolicy\",\n \"returnPartialData\",\n] as const;\n\ntype ObservedOptions = Pick<\n WatchQueryOptions,\n (typeof OBSERVED_CHANGED_OPTIONS)[number]\n>;\n\nexport class InternalQueryReference<TData = unknown> {\n public result!: ApolloQueryResult<TData>;\n public readonly key: QueryKey = {};\n public readonly observable: ObservableQuery<TData>;\n\n public promise!: QueryRefPromise<TData>;\n\n private subscription!: ObservableSubscription;\n private listeners = new Set<Listener<TData>>();\n private autoDisposeTimeoutId?: NodeJS.Timeout;\n\n private resolve: ((result: ApolloQueryResult<TData>) => void) | undefined;\n private reject: ((error: unknown) => void) | undefined;\n\n private references = 0;\n\n constructor(\n observable: ObservableQuery<TData, any>,\n options: InternalQueryReferenceOptions\n ) {\n this.handleNext = this.handleNext.bind(this);\n this.handleError = this.handleError.bind(this);\n this.dispose = this.dispose.bind(this);\n this.observable = observable;\n\n if (options.onDispose) {\n this.onDispose = options.onDispose;\n }\n\n this.setResult();\n this.subscribeToQuery();\n\n // Start a timer that will automatically dispose of the query if the\n // suspended resource does not use this queryRef in the given time. This\n // helps prevent memory leaks when a component has unmounted before the\n // query has finished loading.\n const startDisposeTimer = () => {\n if (!this.references) {\n this.autoDisposeTimeoutId = setTimeout(\n this.dispose,\n options.autoDisposeTimeoutMs ?? 30_000\n );\n }\n };\n\n // We wait until the request has settled to ensure we don't dispose of the\n // query ref before the request finishes, otherwise we would leave the\n // promise in a pending state rendering the suspense boundary indefinitely.\n this.promise.then(startDisposeTimer, startDisposeTimer);\n }\n\n get disposed() {\n return this.subscription.closed;\n }\n\n get watchQueryOptions() {\n return this.observable.options;\n }\n\n reinitialize() {\n const { observable } = this;\n\n const originalFetchPolicy = this.watchQueryOptions.fetchPolicy;\n\n try {\n if (originalFetchPolicy !== \"no-cache\") {\n observable.resetLastResults();\n observable.silentSetOptions({ fetchPolicy: \"cache-first\" });\n } else {\n observable.silentSetOptions({ fetchPolicy: \"standby\" });\n }\n\n this.subscribeToQuery();\n\n if (originalFetchPolicy === \"no-cache\") {\n return;\n }\n\n observable.resetDiff();\n this.setResult();\n } finally {\n observable.silentSetOptions({ fetchPolicy: originalFetchPolicy });\n }\n }\n\n retain() {\n this.references++;\n clearTimeout(this.autoDisposeTimeoutId);\n let disposed = false;\n\n return () => {\n if (disposed) {\n return;\n }\n\n disposed = true;\n this.references--;\n\n // Wait before fully disposing in case the app is running in strict mode.\n setTimeout(() => {\n if (!this.references) {\n this.dispose();\n }\n });\n };\n }\n\n didChangeOptions(watchQueryOptions: ObservedOptions) {\n return OBSERVED_CHANGED_OPTIONS.some(\n (option) =>\n !equal(this.watchQueryOptions[option], watchQueryOptions[option])\n );\n }\n\n applyOptions(watchQueryOptions: ObservedOptions) {\n const {\n fetchPolicy: currentFetchPolicy,\n canonizeResults: currentCanonizeResults,\n } = this.watchQueryOptions;\n\n // \"standby\" is used when `skip` is set to `true`. Detect when we've\n // enabled the query (i.e. `skip` is `false`) to execute a network request.\n if (\n currentFetchPolicy === \"standby\" &&\n currentFetchPolicy !== watchQueryOptions.fetchPolicy\n ) {\n this.initiateFetch(this.observable.reobserve(watchQueryOptions));\n } else {\n this.observable.silentSetOptions(watchQueryOptions);\n\n if (currentCanonizeResults !== watchQueryOptions.canonizeResults) {\n this.result = { ...this.result, ...this.observable.getCurrentResult() };\n this.promise = createFulfilledPromise(this.result);\n }\n }\n\n return this.promise;\n }\n\n listen(listener: Listener<TData>) {\n this.listeners.add(listener);\n\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n refetch(variables: OperationVariables | undefined) {\n return this.initiateFetch(this.observable.refetch(variables));\n }\n\n fetchMore(options: FetchMoreOptions<TData>) {\n return this.initiateFetch(this.observable.fetchMore<TData>(options));\n }\n\n private dispose() {\n this.subscription.unsubscribe();\n this.onDispose();\n }\n\n private onDispose() {\n // noop. overridable by options\n }\n\n private handleNext(result: ApolloQueryResult<TData>) {\n switch (this.promise.status) {\n case \"pending\": {\n // Maintain the last successful `data` value if the next result does not\n // have one.\n if (result.data === void 0) {\n result.data = this.result.data;\n }\n this.result = result;\n this.resolve?.(result);\n break;\n }\n default: {\n // This occurs when switching to a result that is fully cached when this\n // class is instantiated. ObservableQuery will run reobserve when\n // subscribing, which delivers a result from the cache.\n if (result.data === this.result.data) {\n return;\n }\n\n // Maintain the last successful `data` value if the next result does not\n // have one.\n if (result.data === void 0) {\n result.data = this.result.data;\n }\n\n this.result = result;\n this.promise = createFulfilledPromise(result);\n this.deliver(this.promise);\n break;\n }\n }\n }\n\n private handleError(error: ApolloError) {\n this.subscription.unsubscribe();\n this.subscription = this.observable.resubscribeAfterError(\n this.handleNext,\n this.handleError\n );\n\n switch (this.promise.status) {\n case \"pending\": {\n this.reject?.(error);\n break;\n }\n default: {\n this.promise = createRejectedPromise<ApolloQueryResult<TData>>(error);\n this.deliver(this.promise);\n }\n }\n }\n\n private deliver(promise: QueryRefPromise<TData>) {\n this.listeners.forEach((listener) => listener(promise));\n }\n\n private initiateFetch(returnedPromise: Promise<ApolloQueryResult<TData>>) {\n this.promise = this.createPendingPromise();\n this.promise.catch(() => {});\n\n // If the data returned from the fetch is deeply equal to the data already\n // in the cache, `handleNext` will not be triggered leaving the promise we\n // created in a pending state forever. To avoid this situtation, we attempt\n // to resolve the promise if `handleNext` hasn't been run to ensure the\n // promise is resolved correctly.\n returnedPromise\n .then((result) => {\n if (this.promise.status === \"pending\") {\n this.result = result;\n this.resolve?.(result);\n }\n })\n .catch(() => {});\n\n return returnedPromise;\n }\n\n private subscribeToQuery() {\n this.subscription = this.observable\n .filter(\n (result) => !equal(result.data, {}) && !equal(result, this.result)\n )\n .subscribe(this.handleNext, this.handleError);\n }\n\n private setResult() {\n // Don't save this result as last result to prevent delivery of last result\n // when first subscribing\n const result = this.observable.getCurrentResult(false);\n\n if (equal(result, this.result)) {\n return;\n }\n\n this.result = result;\n this.promise =\n (\n result.data &&\n (!result.partial || this.watchQueryOptions.returnPartialData)\n ) ?\n createFulfilledPromise(result)\n : this.createPendingPromise();\n }\n\n private createPendingPromise() {\n return wrapPromiseWithState(\n new Promise<ApolloQueryResult<TData>>((resolve, reject) => {\n this.resolve = resolve;\n this.reject = reject;\n })\n );\n }\n}\n"]}
@@ -768,21 +768,24 @@ var QUERY_REFERENCE_SYMBOL = Symbol();
768
768
  var PROMISE_SYMBOL = Symbol();
769
769
  function wrapQueryRef(internalQueryRef) {
770
770
  var _a;
771
- return _a = {},
771
+ var ref = (_a = {
772
+ toPromise: function () {
773
+ return getWrappedPromise(ref).then(function () { return ref; });
774
+ }
775
+ },
772
776
  _a[QUERY_REFERENCE_SYMBOL] = internalQueryRef,
773
777
  _a[PROMISE_SYMBOL] = internalQueryRef.promise,
774
- _a;
778
+ _a);
779
+ return ref;
780
+ }
781
+ function getWrappedPromise(queryRef) {
782
+ var internalQueryRef = unwrapQueryRef(queryRef);
783
+ return internalQueryRef.promise.status === "fulfilled" ?
784
+ internalQueryRef.promise
785
+ : queryRef[PROMISE_SYMBOL];
775
786
  }
776
787
  function unwrapQueryRef(queryRef) {
777
- var internalQueryRef = queryRef[QUERY_REFERENCE_SYMBOL];
778
- return [
779
- internalQueryRef,
780
- function () {
781
- return internalQueryRef.promise.status === "fulfilled" ?
782
- internalQueryRef.promise
783
- : queryRef[PROMISE_SYMBOL];
784
- },
785
- ];
788
+ return queryRef[QUERY_REFERENCE_SYMBOL];
786
789
  }
787
790
  function updateWrappedQueryRef(queryRef, promise) {
788
791
  queryRef[PROMISE_SYMBOL] = promise;
@@ -800,37 +803,16 @@ var InternalQueryReference = (function () {
800
803
  var _this = this;
801
804
  this.key = {};
802
805
  this.listeners = new Set();
803
- this.status = "loading";
804
806
  this.references = 0;
805
807
  this.handleNext = this.handleNext.bind(this);
806
808
  this.handleError = this.handleError.bind(this);
807
809
  this.dispose = this.dispose.bind(this);
808
810
  this.observable = observable;
809
- this.result = observable.getCurrentResult(false);
810
811
  if (options.onDispose) {
811
812
  this.onDispose = options.onDispose;
812
813
  }
813
- if (core.isNetworkRequestSettled(this.result.networkStatus) ||
814
- (this.result.data &&
815
- (!this.result.partial || this.watchQueryOptions.returnPartialData))) {
816
- this.promise = utilities.createFulfilledPromise(this.result);
817
- this.status = "idle";
818
- }
819
- else {
820
- this.promise = utilities.wrapPromiseWithState(new Promise(function (resolve, reject) {
821
- _this.resolve = resolve;
822
- _this.reject = reject;
823
- }));
824
- }
825
- this.subscription = observable
826
- .filter(function (_a) {
827
- var data = _a.data;
828
- return !equality.equal(data, {});
829
- })
830
- .subscribe({
831
- next: this.handleNext,
832
- error: this.handleError,
833
- });
814
+ this.setResult();
815
+ this.subscribeToQuery();
834
816
  var startDisposeTimer = function () {
835
817
  var _a;
836
818
  if (!_this.references) {
@@ -839,6 +821,13 @@ var InternalQueryReference = (function () {
839
821
  };
840
822
  this.promise.then(startDisposeTimer, startDisposeTimer);
841
823
  }
824
+ Object.defineProperty(InternalQueryReference.prototype, "disposed", {
825
+ get: function () {
826
+ return this.subscription.closed;
827
+ },
828
+ enumerable: false,
829
+ configurable: true
830
+ });
842
831
  Object.defineProperty(InternalQueryReference.prototype, "watchQueryOptions", {
843
832
  get: function () {
844
833
  return this.observable.options;
@@ -846,6 +835,28 @@ var InternalQueryReference = (function () {
846
835
  enumerable: false,
847
836
  configurable: true
848
837
  });
838
+ InternalQueryReference.prototype.reinitialize = function () {
839
+ var observable = this.observable;
840
+ var originalFetchPolicy = this.watchQueryOptions.fetchPolicy;
841
+ try {
842
+ if (originalFetchPolicy !== "no-cache") {
843
+ observable.resetLastResults();
844
+ observable.silentSetOptions({ fetchPolicy: "cache-first" });
845
+ }
846
+ else {
847
+ observable.silentSetOptions({ fetchPolicy: "standby" });
848
+ }
849
+ this.subscribeToQuery();
850
+ if (originalFetchPolicy === "no-cache") {
851
+ return;
852
+ }
853
+ observable.resetDiff();
854
+ this.setResult();
855
+ }
856
+ finally {
857
+ observable.silentSetOptions({ fetchPolicy: originalFetchPolicy });
858
+ }
859
+ };
849
860
  InternalQueryReference.prototype.retain = function () {
850
861
  var _this = this;
851
862
  this.references++;
@@ -906,17 +917,16 @@ var InternalQueryReference = (function () {
906
917
  };
907
918
  InternalQueryReference.prototype.handleNext = function (result) {
908
919
  var _a;
909
- switch (this.status) {
910
- case "loading": {
920
+ switch (this.promise.status) {
921
+ case "pending": {
911
922
  if (result.data === void 0) {
912
923
  result.data = this.result.data;
913
924
  }
914
- this.status = "idle";
915
925
  this.result = result;
916
926
  (_a = this.resolve) === null || _a === void 0 ? void 0 : _a.call(this, result);
917
927
  break;
918
928
  }
919
- case "idle": {
929
+ default: {
920
930
  if (result.data === this.result.data) {
921
931
  return;
922
932
  }
@@ -934,13 +944,12 @@ var InternalQueryReference = (function () {
934
944
  var _a;
935
945
  this.subscription.unsubscribe();
936
946
  this.subscription = this.observable.resubscribeAfterError(this.handleNext, this.handleError);
937
- switch (this.status) {
938
- case "loading": {
939
- this.status = "idle";
947
+ switch (this.promise.status) {
948
+ case "pending": {
940
949
  (_a = this.reject) === null || _a === void 0 ? void 0 : _a.call(this, error);
941
950
  break;
942
951
  }
943
- case "idle": {
952
+ default: {
944
953
  this.promise = utilities.createRejectedPromise(error);
945
954
  this.deliver(this.promise);
946
955
  }
@@ -951,17 +960,12 @@ var InternalQueryReference = (function () {
951
960
  };
952
961
  InternalQueryReference.prototype.initiateFetch = function (returnedPromise) {
953
962
  var _this = this;
954
- this.status = "loading";
955
- this.promise = utilities.wrapPromiseWithState(new Promise(function (resolve, reject) {
956
- _this.resolve = resolve;
957
- _this.reject = reject;
958
- }));
963
+ this.promise = this.createPendingPromise();
959
964
  this.promise.catch(function () { });
960
965
  returnedPromise
961
966
  .then(function (result) {
962
967
  var _a;
963
- if (_this.status === "loading") {
964
- _this.status = "idle";
968
+ if (_this.promise.status === "pending") {
965
969
  _this.result = result;
966
970
  (_a = _this.resolve) === null || _a === void 0 ? void 0 : _a.call(_this, result);
967
971
  }
@@ -969,6 +973,31 @@ var InternalQueryReference = (function () {
969
973
  .catch(function () { });
970
974
  return returnedPromise;
971
975
  };
976
+ InternalQueryReference.prototype.subscribeToQuery = function () {
977
+ var _this = this;
978
+ this.subscription = this.observable
979
+ .filter(function (result) { return !equality.equal(result.data, {}) && !equality.equal(result, _this.result); })
980
+ .subscribe(this.handleNext, this.handleError);
981
+ };
982
+ InternalQueryReference.prototype.setResult = function () {
983
+ var result = this.observable.getCurrentResult(false);
984
+ if (equality.equal(result, this.result)) {
985
+ return;
986
+ }
987
+ this.result = result;
988
+ this.promise =
989
+ (result.data &&
990
+ (!result.partial || this.watchQueryOptions.returnPartialData)) ?
991
+ utilities.createFulfilledPromise(result)
992
+ : this.createPendingPromise();
993
+ };
994
+ InternalQueryReference.prototype.createPendingPromise = function () {
995
+ var _this = this;
996
+ return utilities.wrapPromiseWithState(new Promise(function (resolve, reject) {
997
+ _this.resolve = resolve;
998
+ _this.reject = reject;
999
+ }));
1000
+ };
972
1001
  return InternalQueryReference;
973
1002
  }());
974
1003
 
@@ -1138,7 +1167,7 @@ function useBackgroundQuery(query, options) {
1138
1167
  return client.watchQuery(watchQueryOptions);
1139
1168
  });
1140
1169
  var _b = React__namespace.useState(wrapQueryRef(queryRef)), wrappedQueryRef = _b[0], setWrappedQueryRef = _b[1];
1141
- if (unwrapQueryRef(wrappedQueryRef)[0] !== queryRef) {
1170
+ if (unwrapQueryRef(wrappedQueryRef) !== queryRef) {
1142
1171
  setWrappedQueryRef(wrapQueryRef(queryRef));
1143
1172
  }
1144
1173
  if (queryRef.didChangeOptions(watchQueryOptions)) {
@@ -1169,7 +1198,7 @@ function useLoadableQuery(query, options) {
1169
1198
  var watchQueryOptions = useWatchQueryOptions({ client: client, query: query, options: options });
1170
1199
  var _a = options.queryKey, queryKey = _a === void 0 ? [] : _a;
1171
1200
  var _b = React__namespace.useState(null), queryRef = _b[0], setQueryRef = _b[1];
1172
- var internalQueryRef = queryRef && unwrapQueryRef(queryRef)[0];
1201
+ var internalQueryRef = queryRef && unwrapQueryRef(queryRef);
1173
1202
  if (queryRef && (internalQueryRef === null || internalQueryRef === void 0 ? void 0 : internalQueryRef.didChangeOptions(watchQueryOptions))) {
1174
1203
  var promise = internalQueryRef.applyOptions(watchQueryOptions);
1175
1204
  updateWrappedQueryRef(queryRef, promise);
@@ -1214,8 +1243,38 @@ function useLoadableQuery(query, options) {
1214
1243
  return [loadQuery, queryRef, { fetchMore: fetchMore, refetch: refetch, reset: reset }];
1215
1244
  }
1216
1245
 
1246
+ function useQueryRefHandlers(queryRef) {
1247
+ var _a = React__namespace.useState(queryRef), previousQueryRef = _a[0], setPreviousQueryRef = _a[1];
1248
+ var _b = React__namespace.useState(queryRef), wrappedQueryRef = _b[0], setWrappedQueryRef = _b[1];
1249
+ var internalQueryRef = unwrapQueryRef(queryRef);
1250
+ if (previousQueryRef !== queryRef) {
1251
+ setPreviousQueryRef(queryRef);
1252
+ setWrappedQueryRef(queryRef);
1253
+ }
1254
+ else {
1255
+ updateWrappedQueryRef(queryRef, getWrappedPromise(wrappedQueryRef));
1256
+ }
1257
+ var refetch = React__namespace.useCallback(function (variables) {
1258
+ var promise = internalQueryRef.refetch(variables);
1259
+ setWrappedQueryRef(wrapQueryRef(internalQueryRef));
1260
+ return promise;
1261
+ }, [internalQueryRef]);
1262
+ var fetchMore = React__namespace.useCallback(function (options) {
1263
+ var promise = internalQueryRef.fetchMore(options);
1264
+ setWrappedQueryRef(wrapQueryRef(internalQueryRef));
1265
+ return promise;
1266
+ }, [internalQueryRef]);
1267
+ return { refetch: refetch, fetchMore: fetchMore };
1268
+ }
1269
+
1217
1270
  function useReadQuery(queryRef) {
1218
- var _a = React__namespace.useMemo(function () { return unwrapQueryRef(queryRef); }, [queryRef]), internalQueryRef = _a[0], getPromise = _a[1];
1271
+ var internalQueryRef = React__namespace.useMemo(function () { return unwrapQueryRef(queryRef); }, [queryRef]);
1272
+ var getPromise = React__namespace.useCallback(function () { return getWrappedPromise(queryRef); }, [queryRef]);
1273
+ if (internalQueryRef.disposed) {
1274
+ internalQueryRef.reinitialize();
1275
+ updateWrappedQueryRef(queryRef, internalQueryRef.promise);
1276
+ }
1277
+ React__namespace.useEffect(function () { return internalQueryRef.retain(); }, [internalQueryRef]);
1219
1278
  var promise = useSyncExternalStore(React__namespace.useCallback(function (forceUpdate) {
1220
1279
  return internalQueryRef.listen(function (promise) {
1221
1280
  updateWrappedQueryRef(queryRef, promise);
@@ -1240,6 +1299,7 @@ exports.useLazyQuery = useLazyQuery;
1240
1299
  exports.useLoadableQuery = useLoadableQuery;
1241
1300
  exports.useMutation = useMutation;
1242
1301
  exports.useQuery = useQuery;
1302
+ exports.useQueryRefHandlers = useQueryRefHandlers;
1243
1303
  exports.useReactiveVar = useReactiveVar;
1244
1304
  exports.useReadQuery = useReadQuery;
1245
1305
  exports.useSubscription = useSubscription;