@tanstack/query-core 5.66.2 → 5.66.4

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 (83) hide show
  1. package/build/legacy/{hydration-De8Br-lj.d.cts → hydration-BHYO6Wdv.d.cts} +3 -1
  2. package/build/legacy/{hydration-De1u5VYH.d.ts → hydration-k2LfsAVL.d.ts} +3 -1
  3. package/build/legacy/hydration.cjs +13 -4
  4. package/build/legacy/hydration.cjs.map +1 -1
  5. package/build/legacy/hydration.d.cts +1 -1
  6. package/build/legacy/hydration.d.ts +1 -1
  7. package/build/legacy/hydration.js +12 -4
  8. package/build/legacy/hydration.js.map +1 -1
  9. package/build/legacy/index.d.cts +1 -1
  10. package/build/legacy/index.d.ts +1 -1
  11. package/build/legacy/infiniteQueryBehavior.d.cts +1 -1
  12. package/build/legacy/infiniteQueryBehavior.d.ts +1 -1
  13. package/build/legacy/infiniteQueryObserver.d.cts +1 -1
  14. package/build/legacy/infiniteQueryObserver.d.ts +1 -1
  15. package/build/legacy/mutation.d.cts +1 -1
  16. package/build/legacy/mutation.d.ts +1 -1
  17. package/build/legacy/mutationCache.d.cts +1 -1
  18. package/build/legacy/mutationCache.d.ts +1 -1
  19. package/build/legacy/mutationObserver.d.cts +1 -1
  20. package/build/legacy/mutationObserver.d.ts +1 -1
  21. package/build/legacy/queriesObserver.cjs +8 -5
  22. package/build/legacy/queriesObserver.cjs.map +1 -1
  23. package/build/legacy/queriesObserver.d.cts +1 -1
  24. package/build/legacy/queriesObserver.d.ts +1 -1
  25. package/build/legacy/queriesObserver.js +8 -5
  26. package/build/legacy/queriesObserver.js.map +1 -1
  27. package/build/legacy/query.d.cts +1 -1
  28. package/build/legacy/query.d.ts +1 -1
  29. package/build/legacy/queryCache.d.cts +1 -1
  30. package/build/legacy/queryCache.d.ts +1 -1
  31. package/build/legacy/queryClient.d.cts +1 -1
  32. package/build/legacy/queryClient.d.ts +1 -1
  33. package/build/legacy/queryObserver.d.cts +1 -1
  34. package/build/legacy/queryObserver.d.ts +1 -1
  35. package/build/legacy/retryer.d.cts +1 -1
  36. package/build/legacy/retryer.d.ts +1 -1
  37. package/build/legacy/types.d.cts +1 -1
  38. package/build/legacy/types.d.ts +1 -1
  39. package/build/legacy/utils.d.cts +1 -1
  40. package/build/legacy/utils.d.ts +1 -1
  41. package/build/modern/{hydration-De8Br-lj.d.cts → hydration-BHYO6Wdv.d.cts} +3 -1
  42. package/build/modern/{hydration-De1u5VYH.d.ts → hydration-k2LfsAVL.d.ts} +3 -1
  43. package/build/modern/hydration.cjs +11 -2
  44. package/build/modern/hydration.cjs.map +1 -1
  45. package/build/modern/hydration.d.cts +1 -1
  46. package/build/modern/hydration.d.ts +1 -1
  47. package/build/modern/hydration.js +10 -2
  48. package/build/modern/hydration.js.map +1 -1
  49. package/build/modern/index.d.cts +1 -1
  50. package/build/modern/index.d.ts +1 -1
  51. package/build/modern/infiniteQueryBehavior.d.cts +1 -1
  52. package/build/modern/infiniteQueryBehavior.d.ts +1 -1
  53. package/build/modern/infiniteQueryObserver.d.cts +1 -1
  54. package/build/modern/infiniteQueryObserver.d.ts +1 -1
  55. package/build/modern/mutation.d.cts +1 -1
  56. package/build/modern/mutation.d.ts +1 -1
  57. package/build/modern/mutationCache.d.cts +1 -1
  58. package/build/modern/mutationCache.d.ts +1 -1
  59. package/build/modern/mutationObserver.d.cts +1 -1
  60. package/build/modern/mutationObserver.d.ts +1 -1
  61. package/build/modern/queriesObserver.cjs +6 -7
  62. package/build/modern/queriesObserver.cjs.map +1 -1
  63. package/build/modern/queriesObserver.d.cts +1 -1
  64. package/build/modern/queriesObserver.d.ts +1 -1
  65. package/build/modern/queriesObserver.js +6 -7
  66. package/build/modern/queriesObserver.js.map +1 -1
  67. package/build/modern/query.d.cts +1 -1
  68. package/build/modern/query.d.ts +1 -1
  69. package/build/modern/queryCache.d.cts +1 -1
  70. package/build/modern/queryCache.d.ts +1 -1
  71. package/build/modern/queryClient.d.cts +1 -1
  72. package/build/modern/queryClient.d.ts +1 -1
  73. package/build/modern/queryObserver.d.cts +1 -1
  74. package/build/modern/queryObserver.d.ts +1 -1
  75. package/build/modern/retryer.d.cts +1 -1
  76. package/build/modern/retryer.d.ts +1 -1
  77. package/build/modern/types.d.cts +1 -1
  78. package/build/modern/types.d.ts +1 -1
  79. package/build/modern/utils.d.cts +1 -1
  80. package/build/modern/utils.d.ts +1 -1
  81. package/package.json +1 -1
  82. package/src/hydration.ts +19 -1
  83. package/src/queriesObserver.ts +6 -8
@@ -44,6 +44,7 @@ var QueriesObserver = class extends import_subscribable.Subscribable {
44
44
  #combinedResult;
45
45
  #lastCombine;
46
46
  #lastResult;
47
+ #observerMatches = [];
47
48
  constructor(client, queries, options) {
48
49
  super();
49
50
  this.#client = client;
@@ -89,6 +90,7 @@ var QueriesObserver = class extends import_subscribable.Subscribable {
89
90
  import_notifyManager.notifyManager.batch(() => {
90
91
  const prevObservers = this.#observers;
91
92
  const newObserverMatches = this.#findMatchingObservers(this.#queries);
93
+ this.#observerMatches = newObserverMatches;
92
94
  newObserverMatches.forEach(
93
95
  (match) => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions)
94
96
  );
@@ -138,12 +140,11 @@ var QueriesObserver = class extends import_subscribable.Subscribable {
138
140
  return this.#combineResult(r ?? result, combine);
139
141
  },
140
142
  () => {
141
- return this.#trackResult(result, queries);
143
+ return this.#trackResult(result, matches);
142
144
  }
143
145
  ];
144
146
  }
145
- #trackResult(result, queries) {
146
- const matches = this.#findMatchingObservers(queries);
147
+ #trackResult(result, matches) {
147
148
  return matches.map((match, index) => {
148
149
  const observerResult = result[index];
149
150
  return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => {
@@ -199,10 +200,8 @@ var QueriesObserver = class extends import_subscribable.Subscribable {
199
200
  #notify() {
200
201
  if (this.hasListeners()) {
201
202
  const previousResult = this.#combinedResult;
202
- const newResult = this.#combineResult(
203
- this.#trackResult(this.#result, this.#queries),
204
- this.#options?.combine
205
- );
203
+ const newTracked = this.#trackResult(this.#result, this.#observerMatches);
204
+ const newResult = this.#combineResult(newTracked, this.#options?.combine);
206
205
  if (previousResult !== newResult) {
207
206
  import_notifyManager.notifyManager.batch(() => {
208
207
  this.listeners.forEach((listener) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\nfunction difference<T>(array1: Array<T>, array2: Array<T>): Array<T> {\n return array1.filter((x) => !array2.includes(x))\n}\n\nfunction replaceAt<T>(array: Array<T>, index: number, value: T): Array<T> {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: Array<QueryObserverResult>) => void\n\ntype CombineFn<TCombinedResult> = (\n result: Array<QueryObserverResult>,\n) => TCombinedResult\n\nexport interface QueriesObserverOptions<\n TCombinedResult = Array<QueryObserverResult>,\n> {\n combine?: CombineFn<TCombinedResult>\n}\n\nexport class QueriesObserver<\n TCombinedResult = Array<QueryObserverResult>,\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: Array<QueryObserverResult>\n #queries: Array<QueryObserverOptions>\n #options?: QueriesObserverOptions<TCombinedResult>\n #observers: Array<QueryObserver>\n #combinedResult?: TCombinedResult\n #lastCombine?: CombineFn<TCombinedResult>\n #lastResult?: Array<QueryObserverResult>\n\n constructor(\n client: QueryClient,\n queries: Array<QueryObserverOptions<any, any, any, any, any>>,\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#options = options\n this.#queries = []\n this.#observers = []\n this.#result = []\n\n this.setQueries(queries)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: Array<QueryObserverOptions>,\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\n\n if (process.env.NODE_ENV !== 'production') {\n const queryHashes = queries.map(\n (query) => this.#client.defaultQueryOptions(query).queryHash,\n )\n if (new Set(queryHashes).size !== queryHashes.length) {\n console.warn(\n '[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior.',\n )\n }\n }\n\n notifyManager.batch(() => {\n const prevObservers = this.#observers\n\n const newObserverMatches = this.#findMatchingObservers(this.#queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.#observers = newObservers\n this.#result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n\n this.#notify()\n })\n }\n\n getCurrentResult(): Array<QueryObserverResult> {\n return this.#result\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: Array<QueryObserverOptions>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): [\n rawResult: Array<QueryObserverResult>,\n combineResult: (r?: Array<QueryObserverResult>) => TCombinedResult,\n trackResult: () => Array<QueryObserverResult>,\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: Array<QueryObserverResult>) => {\n return this.#combineResult(r ?? result, combine)\n },\n () => {\n return this.#trackResult(result, queries)\n },\n ]\n }\n\n #trackResult(\n result: Array<QueryObserverResult>,\n queries: Array<QueryObserverOptions>,\n ) {\n const matches = this.#findMatchingObservers(queries)\n\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult, (accessedProp) => {\n // track property on all observers to ensure proper (synchronized) tracking (#7000)\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp)\n })\n })\n : observerResult\n })\n }\n\n #combineResult(\n input: Array<QueryObserverResult>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): TCombinedResult {\n if (combine) {\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input),\n )\n }\n\n return this.#combinedResult\n }\n return input as any\n }\n\n #findMatchingObservers(\n queries: Array<QueryObserverOptions>,\n ): Array<QueryObserverMatch> {\n const prevObserversMap = new Map(\n this.#observers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const observers: Array<QueryObserverMatch> = []\n\n queries.forEach((options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match) {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: match,\n })\n } else {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: new QueryObserver(this.#client, defaultedOptions),\n })\n }\n })\n\n return observers\n }\n\n #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result)\n this.#notify()\n }\n }\n\n #notify(): void {\n if (this.hasListeners()) {\n const previousResult = this.#combinedResult\n const newResult = this.#combineResult(\n this.#trackResult(this.#result, this.#queries),\n this.#options?.combine,\n )\n\n if (previousResult !== newResult) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result)\n })\n })\n }\n }\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\nfunction difference<T>(array1: Array<T>, array2: Array<T>): Array<T> {\n return array1.filter((x) => !array2.includes(x))\n}\n\nfunction replaceAt<T>(array: Array<T>, index: number, value: T): Array<T> {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: Array<QueryObserverResult>) => void\n\ntype CombineFn<TCombinedResult> = (\n result: Array<QueryObserverResult>,\n) => TCombinedResult\n\nexport interface QueriesObserverOptions<\n TCombinedResult = Array<QueryObserverResult>,\n> {\n combine?: CombineFn<TCombinedResult>\n}\n\nexport class QueriesObserver<\n TCombinedResult = Array<QueryObserverResult>,\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: Array<QueryObserverResult>\n #queries: Array<QueryObserverOptions>\n #options?: QueriesObserverOptions<TCombinedResult>\n #observers: Array<QueryObserver>\n #combinedResult?: TCombinedResult\n #lastCombine?: CombineFn<TCombinedResult>\n #lastResult?: Array<QueryObserverResult>\n #observerMatches: Array<QueryObserverMatch> = []\n\n constructor(\n client: QueryClient,\n queries: Array<QueryObserverOptions<any, any, any, any, any>>,\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#options = options\n this.#queries = []\n this.#observers = []\n this.#result = []\n\n this.setQueries(queries)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: Array<QueryObserverOptions>,\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\n\n if (process.env.NODE_ENV !== 'production') {\n const queryHashes = queries.map(\n (query) => this.#client.defaultQueryOptions(query).queryHash,\n )\n if (new Set(queryHashes).size !== queryHashes.length) {\n console.warn(\n '[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior.',\n )\n }\n }\n\n notifyManager.batch(() => {\n const prevObservers = this.#observers\n\n const newObserverMatches = this.#findMatchingObservers(this.#queries)\n this.#observerMatches = newObserverMatches\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.#observers = newObservers\n this.#result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n\n this.#notify()\n })\n }\n\n getCurrentResult(): Array<QueryObserverResult> {\n return this.#result\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: Array<QueryObserverOptions>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): [\n rawResult: Array<QueryObserverResult>,\n combineResult: (r?: Array<QueryObserverResult>) => TCombinedResult,\n trackResult: () => Array<QueryObserverResult>,\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: Array<QueryObserverResult>) => {\n return this.#combineResult(r ?? result, combine)\n },\n () => {\n return this.#trackResult(result, matches)\n },\n ]\n }\n\n #trackResult(\n result: Array<QueryObserverResult>,\n matches: Array<QueryObserverMatch>,\n ) {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult, (accessedProp) => {\n // track property on all observers to ensure proper (synchronized) tracking (#7000)\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp)\n })\n })\n : observerResult\n })\n }\n\n #combineResult(\n input: Array<QueryObserverResult>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): TCombinedResult {\n if (combine) {\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input),\n )\n }\n\n return this.#combinedResult\n }\n return input as any\n }\n\n #findMatchingObservers(\n queries: Array<QueryObserverOptions>,\n ): Array<QueryObserverMatch> {\n const prevObserversMap = new Map(\n this.#observers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const observers: Array<QueryObserverMatch> = []\n\n queries.forEach((options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match) {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: match,\n })\n } else {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: new QueryObserver(this.#client, defaultedOptions),\n })\n }\n })\n\n return observers\n }\n\n #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result)\n this.#notify()\n }\n }\n\n #notify(): void {\n if (this.hasListeners()) {\n const previousResult = this.#combinedResult\n const newTracked = this.#trackResult(this.#result, this.#observerMatches)\n const newResult = this.#combineResult(newTracked, this.#options?.combine)\n\n if (previousResult !== newResult) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result)\n })\n })\n }\n }\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import { aA as QueryObserverResult, b as QueryClient, a8 as QueryObserverOptions, b4 as NotifyOptions, u as Query, c as QueryObserver } from './hydration-De8Br-lj.cjs';
1
+ import { aA as QueryObserverResult, b as QueryClient, a8 as QueryObserverOptions, b4 as NotifyOptions, u as Query, c as QueryObserver } from './hydration-BHYO6Wdv.cjs';
2
2
  import { Subscribable } from './subscribable.cjs';
3
3
  import './removable.cjs';
4
4
 
@@ -1,4 +1,4 @@
1
- import { aA as QueryObserverResult, b as QueryClient, a8 as QueryObserverOptions, b4 as NotifyOptions, u as Query, c as QueryObserver } from './hydration-De1u5VYH.js';
1
+ import { aA as QueryObserverResult, b as QueryClient, a8 as QueryObserverOptions, b4 as NotifyOptions, u as Query, c as QueryObserver } from './hydration-k2LfsAVL.js';
2
2
  import { Subscribable } from './subscribable.js';
3
3
  import './removable.js';
4
4
 
@@ -20,6 +20,7 @@ var QueriesObserver = class extends Subscribable {
20
20
  #combinedResult;
21
21
  #lastCombine;
22
22
  #lastResult;
23
+ #observerMatches = [];
23
24
  constructor(client, queries, options) {
24
25
  super();
25
26
  this.#client = client;
@@ -65,6 +66,7 @@ var QueriesObserver = class extends Subscribable {
65
66
  notifyManager.batch(() => {
66
67
  const prevObservers = this.#observers;
67
68
  const newObserverMatches = this.#findMatchingObservers(this.#queries);
69
+ this.#observerMatches = newObserverMatches;
68
70
  newObserverMatches.forEach(
69
71
  (match) => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions)
70
72
  );
@@ -114,12 +116,11 @@ var QueriesObserver = class extends Subscribable {
114
116
  return this.#combineResult(r ?? result, combine);
115
117
  },
116
118
  () => {
117
- return this.#trackResult(result, queries);
119
+ return this.#trackResult(result, matches);
118
120
  }
119
121
  ];
120
122
  }
121
- #trackResult(result, queries) {
122
- const matches = this.#findMatchingObservers(queries);
123
+ #trackResult(result, matches) {
123
124
  return matches.map((match, index) => {
124
125
  const observerResult = result[index];
125
126
  return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => {
@@ -175,10 +176,8 @@ var QueriesObserver = class extends Subscribable {
175
176
  #notify() {
176
177
  if (this.hasListeners()) {
177
178
  const previousResult = this.#combinedResult;
178
- const newResult = this.#combineResult(
179
- this.#trackResult(this.#result, this.#queries),
180
- this.#options?.combine
181
- );
179
+ const newTracked = this.#trackResult(this.#result, this.#observerMatches);
180
+ const newResult = this.#combineResult(newTracked, this.#options?.combine);
182
181
  if (previousResult !== newResult) {
183
182
  notifyManager.batch(() => {
184
183
  this.listeners.forEach((listener) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\nfunction difference<T>(array1: Array<T>, array2: Array<T>): Array<T> {\n return array1.filter((x) => !array2.includes(x))\n}\n\nfunction replaceAt<T>(array: Array<T>, index: number, value: T): Array<T> {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: Array<QueryObserverResult>) => void\n\ntype CombineFn<TCombinedResult> = (\n result: Array<QueryObserverResult>,\n) => TCombinedResult\n\nexport interface QueriesObserverOptions<\n TCombinedResult = Array<QueryObserverResult>,\n> {\n combine?: CombineFn<TCombinedResult>\n}\n\nexport class QueriesObserver<\n TCombinedResult = Array<QueryObserverResult>,\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: Array<QueryObserverResult>\n #queries: Array<QueryObserverOptions>\n #options?: QueriesObserverOptions<TCombinedResult>\n #observers: Array<QueryObserver>\n #combinedResult?: TCombinedResult\n #lastCombine?: CombineFn<TCombinedResult>\n #lastResult?: Array<QueryObserverResult>\n\n constructor(\n client: QueryClient,\n queries: Array<QueryObserverOptions<any, any, any, any, any>>,\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#options = options\n this.#queries = []\n this.#observers = []\n this.#result = []\n\n this.setQueries(queries)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: Array<QueryObserverOptions>,\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\n\n if (process.env.NODE_ENV !== 'production') {\n const queryHashes = queries.map(\n (query) => this.#client.defaultQueryOptions(query).queryHash,\n )\n if (new Set(queryHashes).size !== queryHashes.length) {\n console.warn(\n '[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior.',\n )\n }\n }\n\n notifyManager.batch(() => {\n const prevObservers = this.#observers\n\n const newObserverMatches = this.#findMatchingObservers(this.#queries)\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.#observers = newObservers\n this.#result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n\n this.#notify()\n })\n }\n\n getCurrentResult(): Array<QueryObserverResult> {\n return this.#result\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: Array<QueryObserverOptions>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): [\n rawResult: Array<QueryObserverResult>,\n combineResult: (r?: Array<QueryObserverResult>) => TCombinedResult,\n trackResult: () => Array<QueryObserverResult>,\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: Array<QueryObserverResult>) => {\n return this.#combineResult(r ?? result, combine)\n },\n () => {\n return this.#trackResult(result, queries)\n },\n ]\n }\n\n #trackResult(\n result: Array<QueryObserverResult>,\n queries: Array<QueryObserverOptions>,\n ) {\n const matches = this.#findMatchingObservers(queries)\n\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult, (accessedProp) => {\n // track property on all observers to ensure proper (synchronized) tracking (#7000)\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp)\n })\n })\n : observerResult\n })\n }\n\n #combineResult(\n input: Array<QueryObserverResult>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): TCombinedResult {\n if (combine) {\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input),\n )\n }\n\n return this.#combinedResult\n }\n return input as any\n }\n\n #findMatchingObservers(\n queries: Array<QueryObserverOptions>,\n ): Array<QueryObserverMatch> {\n const prevObserversMap = new Map(\n this.#observers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const observers: Array<QueryObserverMatch> = []\n\n queries.forEach((options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match) {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: match,\n })\n } else {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: new QueryObserver(this.#client, defaultedOptions),\n })\n }\n })\n\n return observers\n }\n\n #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result)\n this.#notify()\n }\n }\n\n #notify(): void {\n if (this.hasListeners()) {\n const previousResult = this.#combinedResult\n const newResult = this.#combineResult(\n this.#trackResult(this.#result, this.#queries),\n this.#options?.combine,\n )\n\n if (previousResult !== newResult) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result)\n })\n })\n }\n }\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\nfunction difference<T>(array1: Array<T>, array2: Array<T>): Array<T> {\n return array1.filter((x) => !array2.includes(x))\n}\n\nfunction replaceAt<T>(array: Array<T>, index: number, value: T): Array<T> {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: Array<QueryObserverResult>) => void\n\ntype CombineFn<TCombinedResult> = (\n result: Array<QueryObserverResult>,\n) => TCombinedResult\n\nexport interface QueriesObserverOptions<\n TCombinedResult = Array<QueryObserverResult>,\n> {\n combine?: CombineFn<TCombinedResult>\n}\n\nexport class QueriesObserver<\n TCombinedResult = Array<QueryObserverResult>,\n> extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result!: Array<QueryObserverResult>\n #queries: Array<QueryObserverOptions>\n #options?: QueriesObserverOptions<TCombinedResult>\n #observers: Array<QueryObserver>\n #combinedResult?: TCombinedResult\n #lastCombine?: CombineFn<TCombinedResult>\n #lastResult?: Array<QueryObserverResult>\n #observerMatches: Array<QueryObserverMatch> = []\n\n constructor(\n client: QueryClient,\n queries: Array<QueryObserverOptions<any, any, any, any, any>>,\n options?: QueriesObserverOptions<TCombinedResult>,\n ) {\n super()\n\n this.#client = client\n this.#options = options\n this.#queries = []\n this.#observers = []\n this.#result = []\n\n this.setQueries(queries)\n }\n\n protected onSubscribe(): void {\n if (this.listeners.size === 1) {\n this.#observers.forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n }\n }\n\n protected onUnsubscribe(): void {\n if (!this.listeners.size) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = new Set()\n this.#observers.forEach((observer) => {\n observer.destroy()\n })\n }\n\n setQueries(\n queries: Array<QueryObserverOptions>,\n options?: QueriesObserverOptions<TCombinedResult>,\n notifyOptions?: NotifyOptions,\n ): void {\n this.#queries = queries\n this.#options = options\n\n if (process.env.NODE_ENV !== 'production') {\n const queryHashes = queries.map(\n (query) => this.#client.defaultQueryOptions(query).queryHash,\n )\n if (new Set(queryHashes).size !== queryHashes.length) {\n console.warn(\n '[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior.',\n )\n }\n }\n\n notifyManager.batch(() => {\n const prevObservers = this.#observers\n\n const newObserverMatches = this.#findMatchingObservers(this.#queries)\n this.#observerMatches = newObserverMatches\n\n // set options for the new observers to notify of changes\n newObserverMatches.forEach((match) =>\n match.observer.setOptions(match.defaultedQueryOptions, notifyOptions),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.#observers = newObservers\n this.#result = newResult\n\n if (!this.hasListeners()) {\n return\n }\n\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\n })\n\n this.#notify()\n })\n }\n\n getCurrentResult(): Array<QueryObserverResult> {\n return this.#result\n }\n\n getQueries() {\n return this.#observers.map((observer) => observer.getCurrentQuery())\n }\n\n getObservers() {\n return this.#observers\n }\n\n getOptimisticResult(\n queries: Array<QueryObserverOptions>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): [\n rawResult: Array<QueryObserverResult>,\n combineResult: (r?: Array<QueryObserverResult>) => TCombinedResult,\n trackResult: () => Array<QueryObserverResult>,\n ] {\n const matches = this.#findMatchingObservers(queries)\n const result = matches.map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n\n return [\n result,\n (r?: Array<QueryObserverResult>) => {\n return this.#combineResult(r ?? result, combine)\n },\n () => {\n return this.#trackResult(result, matches)\n },\n ]\n }\n\n #trackResult(\n result: Array<QueryObserverResult>,\n matches: Array<QueryObserverMatch>,\n ) {\n return matches.map((match, index) => {\n const observerResult = result[index]!\n return !match.defaultedQueryOptions.notifyOnChangeProps\n ? match.observer.trackResult(observerResult, (accessedProp) => {\n // track property on all observers to ensure proper (synchronized) tracking (#7000)\n matches.forEach((m) => {\n m.observer.trackProp(accessedProp)\n })\n })\n : observerResult\n })\n }\n\n #combineResult(\n input: Array<QueryObserverResult>,\n combine: CombineFn<TCombinedResult> | undefined,\n ): TCombinedResult {\n if (combine) {\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n this.#combinedResult = replaceEqualDeep(\n this.#combinedResult,\n combine(input),\n )\n }\n\n return this.#combinedResult\n }\n return input as any\n }\n\n #findMatchingObservers(\n queries: Array<QueryObserverOptions>,\n ): Array<QueryObserverMatch> {\n const prevObserversMap = new Map(\n this.#observers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const observers: Array<QueryObserverMatch> = []\n\n queries.forEach((options) => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match) {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: match,\n })\n } else {\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer: new QueryObserver(this.#client, defaultedOptions),\n })\n }\n })\n\n return observers\n }\n\n #onUpdate(observer: QueryObserver, result: QueryObserverResult): void {\n const index = this.#observers.indexOf(observer)\n if (index !== -1) {\n this.#result = replaceAt(this.#result, index, result)\n this.#notify()\n }\n }\n\n #notify(): void {\n if (this.hasListeners()) {\n const previousResult = this.#combinedResult\n const newTracked = this.#trackResult(this.#result, this.#observerMatches)\n const newResult = this.#combineResult(newTracked, this.#options?.combine)\n\n if (previousResult !== newResult) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(this.#result)\n })\n })\n }\n }\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"mappings":"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","names":[]}
@@ -1,3 +1,3 @@
1
1
  import './removable.cjs';
2
- export { b9 as Action, b5 as FetchContext, b6 as FetchDirection, b7 as FetchMeta, b8 as FetchOptions, u as Query, b3 as QueryBehavior, t as QueryState, ba as SetStateOptions, bb as fetchState } from './hydration-De8Br-lj.cjs';
2
+ export { b9 as Action, b5 as FetchContext, b6 as FetchDirection, b7 as FetchMeta, b8 as FetchOptions, u as Query, b3 as QueryBehavior, t as QueryState, ba as SetStateOptions, bb as fetchState } from './hydration-BHYO6Wdv.cjs';
3
3
  import './subscribable.cjs';
@@ -1,3 +1,3 @@
1
1
  import './removable.js';
2
- export { b9 as Action, b5 as FetchContext, b6 as FetchDirection, b7 as FetchMeta, b8 as FetchOptions, u as Query, b3 as QueryBehavior, t as QueryState, ba as SetStateOptions, bb as fetchState } from './hydration-De1u5VYH.js';
2
+ export { b9 as Action, b5 as FetchContext, b6 as FetchDirection, b7 as FetchMeta, b8 as FetchOptions, u as Query, b3 as QueryBehavior, t as QueryState, ba as SetStateOptions, bb as fetchState } from './hydration-k2LfsAVL.js';
3
3
  import './subscribable.js';
@@ -1,3 +1,3 @@
1
- export { Q as QueryCache, a as QueryCacheNotifyEvent, bv as QueryStore } from './hydration-De8Br-lj.cjs';
1
+ export { Q as QueryCache, a as QueryCacheNotifyEvent, bv as QueryStore } from './hydration-BHYO6Wdv.cjs';
2
2
  import './subscribable.cjs';
3
3
  import './removable.cjs';
@@ -1,3 +1,3 @@
1
- export { Q as QueryCache, a as QueryCacheNotifyEvent, bv as QueryStore } from './hydration-De1u5VYH.js';
1
+ export { Q as QueryCache, a as QueryCacheNotifyEvent, bv as QueryStore } from './hydration-k2LfsAVL.js';
2
2
  import './subscribable.js';
3
3
  import './removable.js';
@@ -1,3 +1,3 @@
1
- export { b as QueryClient } from './hydration-De8Br-lj.cjs';
1
+ export { b as QueryClient } from './hydration-BHYO6Wdv.cjs';
2
2
  import './removable.cjs';
3
3
  import './subscribable.cjs';
@@ -1,3 +1,3 @@
1
- export { b as QueryClient } from './hydration-De1u5VYH.js';
1
+ export { b as QueryClient } from './hydration-k2LfsAVL.js';
2
2
  import './removable.js';
3
3
  import './subscribable.js';
@@ -1,3 +1,3 @@
1
1
  import './subscribable.cjs';
2
- export { b4 as NotifyOptions, c as QueryObserver } from './hydration-De8Br-lj.cjs';
2
+ export { b4 as NotifyOptions, c as QueryObserver } from './hydration-BHYO6Wdv.cjs';
3
3
  import './removable.cjs';
@@ -1,3 +1,3 @@
1
1
  import './subscribable.js';
2
- export { b4 as NotifyOptions, c as QueryObserver } from './hydration-De1u5VYH.js';
2
+ export { b4 as NotifyOptions, c as QueryObserver } from './hydration-k2LfsAVL.js';
3
3
  import './removable.js';
@@ -1,3 +1,3 @@
1
- export { C as CancelledError, by as RetryDelayValue, bx as RetryValue, bw as Retryer, bz as canFetch, bA as createRetryer, l as isCancelledError } from './hydration-De8Br-lj.cjs';
1
+ export { C as CancelledError, by as RetryDelayValue, bx as RetryValue, bw as Retryer, bz as canFetch, bA as createRetryer, l as isCancelledError } from './hydration-BHYO6Wdv.cjs';
2
2
  import './removable.cjs';
3
3
  import './subscribable.cjs';
@@ -1,3 +1,3 @@
1
- export { C as CancelledError, by as RetryDelayValue, bx as RetryValue, bw as Retryer, bz as canFetch, bA as createRetryer, l as isCancelledError } from './hydration-De1u5VYH.js';
1
+ export { C as CancelledError, by as RetryDelayValue, bx as RetryValue, bw as Retryer, bz as canFetch, bA as createRetryer, l as isCancelledError } from './hydration-k2LfsAVL.js';
2
2
  import './removable.js';
3
3
  import './subscribable.js';
@@ -1,3 +1,3 @@
1
- export { I as AnyDataTag, a$ as CancelOptions, J as DataTag, z as DefaultError, a_ as DefaultOptions, ad as DefaultedInfiniteQueryObserverOptions, ab as DefaultedQueryObserverOptions, aI as DefinedInfiniteQueryObserverResult, az as DefinedQueryObserverResult, P as Enabled, ag as EnsureInfiniteQueryDataOptions, af as EnsureQueryDataOptions, ah as FetchInfiniteQueryOptions, ao as FetchNextPageOptions, ap as FetchPreviousPageOptions, ae as FetchQueryOptions, ar as FetchStatus, $ as GetNextPageParamFunction, _ as GetPreviousPageParamFunction, a0 as InfiniteData, aB as InfiniteQueryObserverBaseResult, aE as InfiniteQueryObserverLoadingErrorResult, aD as InfiniteQueryObserverLoadingResult, ac as InfiniteQueryObserverOptions, aC as InfiniteQueryObserverPendingResult, aH as InfiniteQueryObserverPlaceholderResult, aF as InfiniteQueryObserverRefetchErrorResult, aJ as InfiniteQueryObserverResult, aG as InfiniteQueryObserverSuccessResult, a6 as InfiniteQueryPageParamsOptions, W as InitialDataFunction, a5 as InitialPageParam, am as InvalidateOptions, ak as InvalidateQueryFilters, aS as MutateFunction, aR as MutateOptions, aO as MutationFunction, aK as MutationKey, aN as MutationMeta, aT as MutationObserverBaseResult, aW as MutationObserverErrorResult, aU as MutationObserverIdleResult, aV as MutationObserverLoadingResult, aQ as MutationObserverOptions, aY as MutationObserverResult, aX as MutationObserverSuccessResult, aP as MutationOptions, aM as MutationScope, aL as MutationStatus, a2 as NetworkMode, N as NoInfer, b2 as NotifyEvent, b1 as NotifyEventType, a3 as NotifyOnChangeProps, O as OmitKeyof, aa as Optional, y as Override, X as PlaceholderDataFunction, Y as QueriesPlaceholderDataFunction, aZ as QueryClientConfig, K as QueryFunction, V as QueryFunctionContext, A as QueryKey, Z as QueryKeyHashFunction, a1 as QueryMeta, as as QueryObserverBaseResult, av as QueryObserverLoadingErrorResult, au as QueryObserverLoadingResult, a8 as QueryObserverOptions, at as QueryObserverPendingResult, ay as QueryObserverPlaceholderResult, aw as QueryObserverRefetchErrorResult, aA as QueryObserverResult, ax as QueryObserverSuccessResult, a4 as QueryOptions, T as QueryPersister, aq as QueryStatus, aj as RefetchOptions, al as RefetchQueryFilters, R as Register, an as ResetOptions, ai as ResultOptions, b0 as SetDataOptions, L as StaleTime, a7 as ThrowOnError, G as UnsetMarker, a9 as WithRequired, E as dataTagErrorSymbol, B as dataTagSymbol, F as unsetMarker } from './hydration-De8Br-lj.cjs';
1
+ export { I as AnyDataTag, a$ as CancelOptions, J as DataTag, z as DefaultError, a_ as DefaultOptions, ad as DefaultedInfiniteQueryObserverOptions, ab as DefaultedQueryObserverOptions, aI as DefinedInfiniteQueryObserverResult, az as DefinedQueryObserverResult, P as Enabled, ag as EnsureInfiniteQueryDataOptions, af as EnsureQueryDataOptions, ah as FetchInfiniteQueryOptions, ao as FetchNextPageOptions, ap as FetchPreviousPageOptions, ae as FetchQueryOptions, ar as FetchStatus, $ as GetNextPageParamFunction, _ as GetPreviousPageParamFunction, a0 as InfiniteData, aB as InfiniteQueryObserverBaseResult, aE as InfiniteQueryObserverLoadingErrorResult, aD as InfiniteQueryObserverLoadingResult, ac as InfiniteQueryObserverOptions, aC as InfiniteQueryObserverPendingResult, aH as InfiniteQueryObserverPlaceholderResult, aF as InfiniteQueryObserverRefetchErrorResult, aJ as InfiniteQueryObserverResult, aG as InfiniteQueryObserverSuccessResult, a6 as InfiniteQueryPageParamsOptions, W as InitialDataFunction, a5 as InitialPageParam, am as InvalidateOptions, ak as InvalidateQueryFilters, aS as MutateFunction, aR as MutateOptions, aO as MutationFunction, aK as MutationKey, aN as MutationMeta, aT as MutationObserverBaseResult, aW as MutationObserverErrorResult, aU as MutationObserverIdleResult, aV as MutationObserverLoadingResult, aQ as MutationObserverOptions, aY as MutationObserverResult, aX as MutationObserverSuccessResult, aP as MutationOptions, aM as MutationScope, aL as MutationStatus, a2 as NetworkMode, N as NoInfer, b2 as NotifyEvent, b1 as NotifyEventType, a3 as NotifyOnChangeProps, O as OmitKeyof, aa as Optional, y as Override, X as PlaceholderDataFunction, Y as QueriesPlaceholderDataFunction, aZ as QueryClientConfig, K as QueryFunction, V as QueryFunctionContext, A as QueryKey, Z as QueryKeyHashFunction, a1 as QueryMeta, as as QueryObserverBaseResult, av as QueryObserverLoadingErrorResult, au as QueryObserverLoadingResult, a8 as QueryObserverOptions, at as QueryObserverPendingResult, ay as QueryObserverPlaceholderResult, aw as QueryObserverRefetchErrorResult, aA as QueryObserverResult, ax as QueryObserverSuccessResult, a4 as QueryOptions, T as QueryPersister, aq as QueryStatus, aj as RefetchOptions, al as RefetchQueryFilters, R as Register, an as ResetOptions, ai as ResultOptions, b0 as SetDataOptions, L as StaleTime, a7 as ThrowOnError, G as UnsetMarker, a9 as WithRequired, E as dataTagErrorSymbol, B as dataTagSymbol, F as unsetMarker } from './hydration-BHYO6Wdv.cjs';
2
2
  import './removable.cjs';
3
3
  import './subscribable.cjs';
@@ -1,3 +1,3 @@
1
- export { I as AnyDataTag, a$ as CancelOptions, J as DataTag, z as DefaultError, a_ as DefaultOptions, ad as DefaultedInfiniteQueryObserverOptions, ab as DefaultedQueryObserverOptions, aI as DefinedInfiniteQueryObserverResult, az as DefinedQueryObserverResult, P as Enabled, ag as EnsureInfiniteQueryDataOptions, af as EnsureQueryDataOptions, ah as FetchInfiniteQueryOptions, ao as FetchNextPageOptions, ap as FetchPreviousPageOptions, ae as FetchQueryOptions, ar as FetchStatus, $ as GetNextPageParamFunction, _ as GetPreviousPageParamFunction, a0 as InfiniteData, aB as InfiniteQueryObserverBaseResult, aE as InfiniteQueryObserverLoadingErrorResult, aD as InfiniteQueryObserverLoadingResult, ac as InfiniteQueryObserverOptions, aC as InfiniteQueryObserverPendingResult, aH as InfiniteQueryObserverPlaceholderResult, aF as InfiniteQueryObserverRefetchErrorResult, aJ as InfiniteQueryObserverResult, aG as InfiniteQueryObserverSuccessResult, a6 as InfiniteQueryPageParamsOptions, W as InitialDataFunction, a5 as InitialPageParam, am as InvalidateOptions, ak as InvalidateQueryFilters, aS as MutateFunction, aR as MutateOptions, aO as MutationFunction, aK as MutationKey, aN as MutationMeta, aT as MutationObserverBaseResult, aW as MutationObserverErrorResult, aU as MutationObserverIdleResult, aV as MutationObserverLoadingResult, aQ as MutationObserverOptions, aY as MutationObserverResult, aX as MutationObserverSuccessResult, aP as MutationOptions, aM as MutationScope, aL as MutationStatus, a2 as NetworkMode, N as NoInfer, b2 as NotifyEvent, b1 as NotifyEventType, a3 as NotifyOnChangeProps, O as OmitKeyof, aa as Optional, y as Override, X as PlaceholderDataFunction, Y as QueriesPlaceholderDataFunction, aZ as QueryClientConfig, K as QueryFunction, V as QueryFunctionContext, A as QueryKey, Z as QueryKeyHashFunction, a1 as QueryMeta, as as QueryObserverBaseResult, av as QueryObserverLoadingErrorResult, au as QueryObserverLoadingResult, a8 as QueryObserverOptions, at as QueryObserverPendingResult, ay as QueryObserverPlaceholderResult, aw as QueryObserverRefetchErrorResult, aA as QueryObserverResult, ax as QueryObserverSuccessResult, a4 as QueryOptions, T as QueryPersister, aq as QueryStatus, aj as RefetchOptions, al as RefetchQueryFilters, R as Register, an as ResetOptions, ai as ResultOptions, b0 as SetDataOptions, L as StaleTime, a7 as ThrowOnError, G as UnsetMarker, a9 as WithRequired, E as dataTagErrorSymbol, B as dataTagSymbol, F as unsetMarker } from './hydration-De1u5VYH.js';
1
+ export { I as AnyDataTag, a$ as CancelOptions, J as DataTag, z as DefaultError, a_ as DefaultOptions, ad as DefaultedInfiniteQueryObserverOptions, ab as DefaultedQueryObserverOptions, aI as DefinedInfiniteQueryObserverResult, az as DefinedQueryObserverResult, P as Enabled, ag as EnsureInfiniteQueryDataOptions, af as EnsureQueryDataOptions, ah as FetchInfiniteQueryOptions, ao as FetchNextPageOptions, ap as FetchPreviousPageOptions, ae as FetchQueryOptions, ar as FetchStatus, $ as GetNextPageParamFunction, _ as GetPreviousPageParamFunction, a0 as InfiniteData, aB as InfiniteQueryObserverBaseResult, aE as InfiniteQueryObserverLoadingErrorResult, aD as InfiniteQueryObserverLoadingResult, ac as InfiniteQueryObserverOptions, aC as InfiniteQueryObserverPendingResult, aH as InfiniteQueryObserverPlaceholderResult, aF as InfiniteQueryObserverRefetchErrorResult, aJ as InfiniteQueryObserverResult, aG as InfiniteQueryObserverSuccessResult, a6 as InfiniteQueryPageParamsOptions, W as InitialDataFunction, a5 as InitialPageParam, am as InvalidateOptions, ak as InvalidateQueryFilters, aS as MutateFunction, aR as MutateOptions, aO as MutationFunction, aK as MutationKey, aN as MutationMeta, aT as MutationObserverBaseResult, aW as MutationObserverErrorResult, aU as MutationObserverIdleResult, aV as MutationObserverLoadingResult, aQ as MutationObserverOptions, aY as MutationObserverResult, aX as MutationObserverSuccessResult, aP as MutationOptions, aM as MutationScope, aL as MutationStatus, a2 as NetworkMode, N as NoInfer, b2 as NotifyEvent, b1 as NotifyEventType, a3 as NotifyOnChangeProps, O as OmitKeyof, aa as Optional, y as Override, X as PlaceholderDataFunction, Y as QueriesPlaceholderDataFunction, aZ as QueryClientConfig, K as QueryFunction, V as QueryFunctionContext, A as QueryKey, Z as QueryKeyHashFunction, a1 as QueryMeta, as as QueryObserverBaseResult, av as QueryObserverLoadingErrorResult, au as QueryObserverLoadingResult, a8 as QueryObserverOptions, at as QueryObserverPendingResult, ay as QueryObserverPlaceholderResult, aw as QueryObserverRefetchErrorResult, aA as QueryObserverResult, ax as QueryObserverSuccessResult, a4 as QueryOptions, T as QueryPersister, aq as QueryStatus, aj as RefetchOptions, al as RefetchQueryFilters, R as Register, an as ResetOptions, ai as ResultOptions, b0 as SetDataOptions, L as StaleTime, a7 as ThrowOnError, G as UnsetMarker, a9 as WithRequired, E as dataTagErrorSymbol, B as dataTagSymbol, F as unsetMarker } from './hydration-k2LfsAVL.js';
2
2
  import './removable.js';
3
3
  import './subscribable.js';
@@ -1,3 +1,3 @@
1
- export { g as MutationFilters, j as QueryFilters, be as QueryTypeFilter, S as SkipToken, U as Updater, bs as addToEnd, bt as addToStart, bu as ensureQueryFn, bg as functionalUpdate, h as hashKey, bl as hashQueryKeyByOptions, bo as isPlainArray, bp as isPlainObject, i as isServer, bh as isValidTimeout, k as keepPreviousData, f as matchMutation, m as matchQuery, bf as noop, bm as partialMatchKey, br as replaceData, r as replaceEqualDeep, bk as resolveEnabled, bj as resolveStaleTime, bn as shallowEqualObjects, s as skipToken, bq as sleep, bi as timeUntilStale } from './hydration-De8Br-lj.cjs';
1
+ export { g as MutationFilters, j as QueryFilters, be as QueryTypeFilter, S as SkipToken, U as Updater, bs as addToEnd, bt as addToStart, bu as ensureQueryFn, bg as functionalUpdate, h as hashKey, bl as hashQueryKeyByOptions, bo as isPlainArray, bp as isPlainObject, i as isServer, bh as isValidTimeout, k as keepPreviousData, f as matchMutation, m as matchQuery, bf as noop, bm as partialMatchKey, br as replaceData, r as replaceEqualDeep, bk as resolveEnabled, bj as resolveStaleTime, bn as shallowEqualObjects, s as skipToken, bq as sleep, bi as timeUntilStale } from './hydration-BHYO6Wdv.cjs';
2
2
  import './removable.cjs';
3
3
  import './subscribable.cjs';
@@ -1,3 +1,3 @@
1
- export { g as MutationFilters, j as QueryFilters, be as QueryTypeFilter, S as SkipToken, U as Updater, bs as addToEnd, bt as addToStart, bu as ensureQueryFn, bg as functionalUpdate, h as hashKey, bl as hashQueryKeyByOptions, bo as isPlainArray, bp as isPlainObject, i as isServer, bh as isValidTimeout, k as keepPreviousData, f as matchMutation, m as matchQuery, bf as noop, bm as partialMatchKey, br as replaceData, r as replaceEqualDeep, bk as resolveEnabled, bj as resolveStaleTime, bn as shallowEqualObjects, s as skipToken, bq as sleep, bi as timeUntilStale } from './hydration-De1u5VYH.js';
1
+ export { g as MutationFilters, j as QueryFilters, be as QueryTypeFilter, S as SkipToken, U as Updater, bs as addToEnd, bt as addToStart, bu as ensureQueryFn, bg as functionalUpdate, h as hashKey, bl as hashQueryKeyByOptions, bo as isPlainArray, bp as isPlainObject, i as isServer, bh as isValidTimeout, k as keepPreviousData, f as matchMutation, m as matchQuery, bf as noop, bm as partialMatchKey, br as replaceData, r as replaceEqualDeep, bk as resolveEnabled, bj as resolveStaleTime, bn as shallowEqualObjects, s as skipToken, bq as sleep, bi as timeUntilStale } from './hydration-k2LfsAVL.js';
2
2
  import './removable.js';
3
3
  import './subscribable.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/query-core",
3
- "version": "5.66.2",
3
+ "version": "5.66.4",
4
4
  "description": "The framework agnostic core that powers TanStack Query",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
package/src/hydration.ts CHANGED
@@ -22,6 +22,7 @@ export interface DehydrateOptions {
22
22
  serializeData?: TransformerFn
23
23
  shouldDehydrateMutation?: (mutation: Mutation) => boolean
24
24
  shouldDehydrateQuery?: (query: Query) => boolean
25
+ shouldRedactErrors?: (error: unknown) => boolean
25
26
  }
26
27
 
27
28
  export interface HydrateOptions {
@@ -70,6 +71,7 @@ function dehydrateMutation(mutation: Mutation): DehydratedMutation {
70
71
  function dehydrateQuery(
71
72
  query: Query,
72
73
  serializeData: TransformerFn,
74
+ shouldRedactErrors: (error: unknown) => boolean,
73
75
  ): DehydratedQuery {
74
76
  return {
75
77
  state: {
@@ -82,6 +84,11 @@ function dehydrateQuery(
82
84
  queryHash: query.queryHash,
83
85
  ...(query.state.status === 'pending' && {
84
86
  promise: query.promise?.then(serializeData).catch((error) => {
87
+ if (!shouldRedactErrors(error)) {
88
+ // Reject original error if it should not be redacted
89
+ return Promise.reject(error)
90
+ }
91
+ // If not in production, log original error before rejecting redacted error
85
92
  if (process.env.NODE_ENV !== 'production') {
86
93
  console.error(
87
94
  `A query that was dehydrated as pending ended up rejecting. [${query.queryHash}]: ${error}; The error will be redacted in production builds`,
@@ -102,6 +109,10 @@ export function defaultShouldDehydrateQuery(query: Query) {
102
109
  return query.state.status === 'success'
103
110
  }
104
111
 
112
+ export function defaultshouldRedactErrors(_: unknown) {
113
+ return true
114
+ }
115
+
105
116
  export function dehydrate(
106
117
  client: QueryClient,
107
118
  options: DehydrateOptions = {},
@@ -123,6 +134,11 @@ export function dehydrate(
123
134
  client.getDefaultOptions().dehydrate?.shouldDehydrateQuery ??
124
135
  defaultShouldDehydrateQuery
125
136
 
137
+ const shouldRedactErrors =
138
+ options.shouldRedactErrors ??
139
+ client.getDefaultOptions().dehydrate?.shouldRedactErrors ??
140
+ defaultshouldRedactErrors
141
+
126
142
  const serializeData =
127
143
  options.serializeData ??
128
144
  client.getDefaultOptions().dehydrate?.serializeData ??
@@ -132,7 +148,9 @@ export function dehydrate(
132
148
  .getQueryCache()
133
149
  .getAll()
134
150
  .flatMap((query) =>
135
- filterQuery(query) ? [dehydrateQuery(query, serializeData)] : [],
151
+ filterQuery(query)
152
+ ? [dehydrateQuery(query, serializeData, shouldRedactErrors)]
153
+ : [],
136
154
  )
137
155
 
138
156
  return { mutations, queries }
@@ -43,6 +43,7 @@ export class QueriesObserver<
43
43
  #combinedResult?: TCombinedResult
44
44
  #lastCombine?: CombineFn<TCombinedResult>
45
45
  #lastResult?: Array<QueryObserverResult>
46
+ #observerMatches: Array<QueryObserverMatch> = []
46
47
 
47
48
  constructor(
48
49
  client: QueryClient,
@@ -106,6 +107,7 @@ export class QueriesObserver<
106
107
  const prevObservers = this.#observers
107
108
 
108
109
  const newObserverMatches = this.#findMatchingObservers(this.#queries)
110
+ this.#observerMatches = newObserverMatches
109
111
 
110
112
  // set options for the new observers to notify of changes
111
113
  newObserverMatches.forEach((match) =>
@@ -177,17 +179,15 @@ export class QueriesObserver<
177
179
  return this.#combineResult(r ?? result, combine)
178
180
  },
179
181
  () => {
180
- return this.#trackResult(result, queries)
182
+ return this.#trackResult(result, matches)
181
183
  },
182
184
  ]
183
185
  }
184
186
 
185
187
  #trackResult(
186
188
  result: Array<QueryObserverResult>,
187
- queries: Array<QueryObserverOptions>,
189
+ matches: Array<QueryObserverMatch>,
188
190
  ) {
189
- const matches = this.#findMatchingObservers(queries)
190
-
191
191
  return matches.map((match, index) => {
192
192
  const observerResult = result[index]!
193
193
  return !match.defaultedQueryOptions.notifyOnChangeProps
@@ -263,10 +263,8 @@ export class QueriesObserver<
263
263
  #notify(): void {
264
264
  if (this.hasListeners()) {
265
265
  const previousResult = this.#combinedResult
266
- const newResult = this.#combineResult(
267
- this.#trackResult(this.#result, this.#queries),
268
- this.#options?.combine,
269
- )
266
+ const newTracked = this.#trackResult(this.#result, this.#observerMatches)
267
+ const newResult = this.#combineResult(newTracked, this.#options?.combine)
270
268
 
271
269
  if (previousResult !== newResult) {
272
270
  notifyManager.batch(() => {