@tanstack/query-core 5.94.4 → 5.94.5

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 (295) hide show
  1. package/build/legacy/_tsup-dts-rollup.d.cts +2229 -0
  2. package/build/legacy/_tsup-dts-rollup.d.ts +2229 -0
  3. package/build/legacy/chunk-PXG64RU4.js +25 -0
  4. package/build/legacy/chunk-PXG64RU4.js.map +1 -0
  5. package/build/legacy/environmentManager.cjs +48 -0
  6. package/build/legacy/environmentManager.cjs.map +1 -0
  7. package/build/legacy/environmentManager.d.cts +2 -0
  8. package/build/legacy/environmentManager.d.ts +2 -0
  9. package/build/legacy/environmentManager.js +25 -0
  10. package/build/legacy/environmentManager.js.map +1 -0
  11. package/build/legacy/focusManager.cjs +107 -0
  12. package/build/legacy/focusManager.cjs.map +1 -0
  13. package/build/legacy/focusManager.d.cts +2 -0
  14. package/build/legacy/focusManager.d.ts +2 -0
  15. package/build/legacy/focusManager.js +80 -0
  16. package/build/legacy/focusManager.js.map +1 -0
  17. package/build/legacy/hydration.cjs +178 -0
  18. package/build/legacy/hydration.cjs.map +1 -0
  19. package/build/legacy/hydration.d.cts +7 -0
  20. package/build/legacy/hydration.d.ts +7 -0
  21. package/build/legacy/hydration.js +152 -0
  22. package/build/legacy/hydration.js.map +1 -0
  23. package/build/legacy/index.cjs +113 -0
  24. package/build/legacy/index.cjs.map +1 -0
  25. package/build/legacy/index.d.cts +142 -0
  26. package/build/legacy/index.d.ts +142 -0
  27. package/build/legacy/index.js +75 -0
  28. package/build/legacy/index.js.map +1 -0
  29. package/build/legacy/infiniteQueryBehavior.cjs +146 -0
  30. package/build/legacy/infiniteQueryBehavior.cjs.map +1 -0
  31. package/build/legacy/infiniteQueryBehavior.d.cts +3 -0
  32. package/build/legacy/infiniteQueryBehavior.d.ts +3 -0
  33. package/build/legacy/infiniteQueryBehavior.js +126 -0
  34. package/build/legacy/infiniteQueryBehavior.js.map +1 -0
  35. package/build/legacy/infiniteQueryObserver.cjs +93 -0
  36. package/build/legacy/infiniteQueryObserver.cjs.map +1 -0
  37. package/build/legacy/infiniteQueryObserver.d.cts +1 -0
  38. package/build/legacy/infiniteQueryObserver.d.ts +1 -0
  39. package/build/legacy/infiniteQueryObserver.js +74 -0
  40. package/build/legacy/infiniteQueryObserver.js.map +1 -0
  41. package/build/legacy/mutation.cjs +333 -0
  42. package/build/legacy/mutation.cjs.map +1 -0
  43. package/build/legacy/mutation.d.cts +4 -0
  44. package/build/legacy/mutation.d.ts +4 -0
  45. package/build/legacy/mutation.js +306 -0
  46. package/build/legacy/mutation.js.map +1 -0
  47. package/build/legacy/mutationCache.cjs +170 -0
  48. package/build/legacy/mutationCache.cjs.map +1 -0
  49. package/build/legacy/mutationCache.d.cts +2 -0
  50. package/build/legacy/mutationCache.d.ts +2 -0
  51. package/build/legacy/mutationCache.js +137 -0
  52. package/build/legacy/mutationCache.js.map +1 -0
  53. package/build/legacy/mutationObserver.cjs +190 -0
  54. package/build/legacy/mutationObserver.cjs.map +1 -0
  55. package/build/legacy/mutationObserver.d.cts +1 -0
  56. package/build/legacy/mutationObserver.d.ts +1 -0
  57. package/build/legacy/mutationObserver.js +164 -0
  58. package/build/legacy/mutationObserver.js.map +1 -0
  59. package/build/legacy/notifyManager.cjs +113 -0
  60. package/build/legacy/notifyManager.cjs.map +1 -0
  61. package/build/legacy/notifyManager.d.cts +3 -0
  62. package/build/legacy/notifyManager.d.ts +3 -0
  63. package/build/legacy/notifyManager.js +88 -0
  64. package/build/legacy/notifyManager.js.map +1 -0
  65. package/build/legacy/onlineManager.cjs +96 -0
  66. package/build/legacy/onlineManager.cjs.map +1 -0
  67. package/build/legacy/onlineManager.d.cts +2 -0
  68. package/build/legacy/onlineManager.d.ts +2 -0
  69. package/build/legacy/onlineManager.js +69 -0
  70. package/build/legacy/onlineManager.js.map +1 -0
  71. package/build/legacy/queriesObserver.cjs +260 -0
  72. package/build/legacy/queriesObserver.cjs.map +1 -0
  73. package/build/legacy/queriesObserver.d.cts +2 -0
  74. package/build/legacy/queriesObserver.d.ts +2 -0
  75. package/build/legacy/queriesObserver.js +234 -0
  76. package/build/legacy/queriesObserver.js.map +1 -0
  77. package/build/legacy/query.cjs +487 -0
  78. package/build/legacy/query.cjs.map +1 -0
  79. package/build/legacy/query.d.cts +10 -0
  80. package/build/legacy/query.d.ts +10 -0
  81. package/build/legacy/query.js +468 -0
  82. package/build/legacy/query.js.map +1 -0
  83. package/build/legacy/queryCache.cjs +131 -0
  84. package/build/legacy/queryCache.cjs.map +1 -0
  85. package/build/legacy/queryCache.d.cts +3 -0
  86. package/build/legacy/queryCache.d.ts +3 -0
  87. package/build/legacy/queryCache.js +105 -0
  88. package/build/legacy/queryCache.js.map +1 -0
  89. package/build/legacy/queryClient.cjs +349 -0
  90. package/build/legacy/queryClient.cjs.map +1 -0
  91. package/build/legacy/queryClient.d.cts +1 -0
  92. package/build/legacy/queryClient.d.ts +1 -0
  93. package/build/legacy/queryClient.js +324 -0
  94. package/build/legacy/queryClient.js.map +1 -0
  95. package/build/legacy/queryObserver.cjs +516 -0
  96. package/build/legacy/queryObserver.cjs.map +1 -0
  97. package/build/legacy/queryObserver.d.cts +1 -0
  98. package/build/legacy/queryObserver.d.ts +1 -0
  99. package/build/legacy/queryObserver.js +498 -0
  100. package/build/legacy/queryObserver.js.map +1 -0
  101. package/build/legacy/removable.cjs +70 -0
  102. package/build/legacy/removable.cjs.map +1 -0
  103. package/build/legacy/removable.d.cts +1 -0
  104. package/build/legacy/removable.d.ts +1 -0
  105. package/build/legacy/removable.js +44 -0
  106. package/build/legacy/removable.js.map +1 -0
  107. package/build/legacy/retryer.cjs +166 -0
  108. package/build/legacy/retryer.cjs.map +1 -0
  109. package/build/legacy/retryer.d.cts +7 -0
  110. package/build/legacy/retryer.d.ts +7 -0
  111. package/build/legacy/retryer.js +140 -0
  112. package/build/legacy/retryer.js.map +1 -0
  113. package/build/legacy/streamedQuery.cjs +80 -0
  114. package/build/legacy/streamedQuery.cjs.map +1 -0
  115. package/build/legacy/streamedQuery.d.cts +1 -0
  116. package/build/legacy/streamedQuery.d.ts +1 -0
  117. package/build/legacy/streamedQuery.js +57 -0
  118. package/build/legacy/streamedQuery.js.map +1 -0
  119. package/build/legacy/subscribable.cjs +51 -0
  120. package/build/legacy/subscribable.cjs.map +1 -0
  121. package/build/legacy/subscribable.d.cts +1 -0
  122. package/build/legacy/subscribable.d.ts +1 -0
  123. package/build/legacy/subscribable.js +28 -0
  124. package/build/legacy/subscribable.js.map +1 -0
  125. package/build/legacy/thenable.cjs +76 -0
  126. package/build/legacy/thenable.cjs.map +1 -0
  127. package/build/legacy/thenable.d.cts +6 -0
  128. package/build/legacy/thenable.d.ts +6 -0
  129. package/build/legacy/thenable.js +52 -0
  130. package/build/legacy/thenable.js.map +1 -0
  131. package/build/legacy/timeoutManager.cjs +110 -0
  132. package/build/legacy/timeoutManager.cjs.map +1 -0
  133. package/build/legacy/timeoutManager.d.cts +7 -0
  134. package/build/legacy/timeoutManager.d.ts +7 -0
  135. package/build/legacy/timeoutManager.js +81 -0
  136. package/build/legacy/timeoutManager.js.map +1 -0
  137. package/build/legacy/types.cjs +37 -0
  138. package/build/legacy/types.cjs.map +1 -0
  139. package/build/legacy/types.d.cts +95 -0
  140. package/build/legacy/types.d.ts +95 -0
  141. package/build/legacy/types.js +12 -0
  142. package/build/legacy/types.js.map +1 -0
  143. package/build/legacy/utils.cjs +330 -0
  144. package/build/legacy/utils.cjs.map +1 -0
  145. package/build/legacy/utils.d.cts +30 -0
  146. package/build/legacy/utils.d.ts +30 -0
  147. package/build/legacy/utils.js +283 -0
  148. package/build/legacy/utils.js.map +1 -0
  149. package/build/modern/_tsup-dts-rollup.d.cts +2229 -0
  150. package/build/modern/_tsup-dts-rollup.d.ts +2229 -0
  151. package/build/modern/environmentManager.cjs +48 -0
  152. package/build/modern/environmentManager.cjs.map +1 -0
  153. package/build/modern/environmentManager.d.cts +2 -0
  154. package/build/modern/environmentManager.d.ts +2 -0
  155. package/build/modern/environmentManager.js +23 -0
  156. package/build/modern/environmentManager.js.map +1 -0
  157. package/build/modern/focusManager.cjs +93 -0
  158. package/build/modern/focusManager.cjs.map +1 -0
  159. package/build/modern/focusManager.d.cts +2 -0
  160. package/build/modern/focusManager.d.ts +2 -0
  161. package/build/modern/focusManager.js +67 -0
  162. package/build/modern/focusManager.js.map +1 -0
  163. package/build/modern/hydration.cjs +173 -0
  164. package/build/modern/hydration.cjs.map +1 -0
  165. package/build/modern/hydration.d.cts +7 -0
  166. package/build/modern/hydration.d.ts +7 -0
  167. package/build/modern/hydration.js +145 -0
  168. package/build/modern/hydration.js.map +1 -0
  169. package/build/modern/index.cjs +113 -0
  170. package/build/modern/index.cjs.map +1 -0
  171. package/build/modern/index.d.cts +142 -0
  172. package/build/modern/index.d.ts +142 -0
  173. package/build/modern/index.js +73 -0
  174. package/build/modern/index.js.map +1 -0
  175. package/build/modern/infiniteQueryBehavior.cjs +142 -0
  176. package/build/modern/infiniteQueryBehavior.cjs.map +1 -0
  177. package/build/modern/infiniteQueryBehavior.d.cts +3 -0
  178. package/build/modern/infiniteQueryBehavior.d.ts +3 -0
  179. package/build/modern/infiniteQueryBehavior.js +120 -0
  180. package/build/modern/infiniteQueryBehavior.js.map +1 -0
  181. package/build/modern/infiniteQueryObserver.cjs +92 -0
  182. package/build/modern/infiniteQueryObserver.cjs.map +1 -0
  183. package/build/modern/infiniteQueryObserver.d.cts +1 -0
  184. package/build/modern/infiniteQueryObserver.d.ts +1 -0
  185. package/build/modern/infiniteQueryObserver.js +71 -0
  186. package/build/modern/infiniteQueryObserver.js.map +1 -0
  187. package/build/modern/mutation.cjs +307 -0
  188. package/build/modern/mutation.cjs.map +1 -0
  189. package/build/modern/mutation.d.cts +4 -0
  190. package/build/modern/mutation.d.ts +4 -0
  191. package/build/modern/mutation.js +281 -0
  192. package/build/modern/mutation.js.map +1 -0
  193. package/build/modern/mutationCache.cjs +149 -0
  194. package/build/modern/mutationCache.cjs.map +1 -0
  195. package/build/modern/mutationCache.d.cts +2 -0
  196. package/build/modern/mutationCache.d.ts +2 -0
  197. package/build/modern/mutationCache.js +124 -0
  198. package/build/modern/mutationCache.js.map +1 -0
  199. package/build/modern/mutationObserver.cjs +165 -0
  200. package/build/modern/mutationObserver.cjs.map +1 -0
  201. package/build/modern/mutationObserver.d.cts +1 -0
  202. package/build/modern/mutationObserver.d.ts +1 -0
  203. package/build/modern/mutationObserver.js +140 -0
  204. package/build/modern/mutationObserver.js.map +1 -0
  205. package/build/modern/notifyManager.cjs +113 -0
  206. package/build/modern/notifyManager.cjs.map +1 -0
  207. package/build/modern/notifyManager.d.cts +3 -0
  208. package/build/modern/notifyManager.d.ts +3 -0
  209. package/build/modern/notifyManager.js +86 -0
  210. package/build/modern/notifyManager.js.map +1 -0
  211. package/build/modern/onlineManager.cjs +83 -0
  212. package/build/modern/onlineManager.cjs.map +1 -0
  213. package/build/modern/onlineManager.d.cts +2 -0
  214. package/build/modern/onlineManager.d.ts +2 -0
  215. package/build/modern/onlineManager.js +57 -0
  216. package/build/modern/onlineManager.js.map +1 -0
  217. package/build/modern/queriesObserver.cjs +237 -0
  218. package/build/modern/queriesObserver.cjs.map +1 -0
  219. package/build/modern/queriesObserver.d.cts +2 -0
  220. package/build/modern/queriesObserver.d.ts +2 -0
  221. package/build/modern/queriesObserver.js +212 -0
  222. package/build/modern/queriesObserver.js.map +1 -0
  223. package/build/modern/query.cjs +461 -0
  224. package/build/modern/query.cjs.map +1 -0
  225. package/build/modern/query.d.cts +10 -0
  226. package/build/modern/query.d.ts +10 -0
  227. package/build/modern/query.js +443 -0
  228. package/build/modern/query.js.map +1 -0
  229. package/build/modern/queryCache.cjs +122 -0
  230. package/build/modern/queryCache.cjs.map +1 -0
  231. package/build/modern/queryCache.d.cts +3 -0
  232. package/build/modern/queryCache.d.ts +3 -0
  233. package/build/modern/queryCache.js +97 -0
  234. package/build/modern/queryCache.js.map +1 -0
  235. package/build/modern/queryClient.cjs +322 -0
  236. package/build/modern/queryClient.cjs.map +1 -0
  237. package/build/modern/queryClient.d.cts +1 -0
  238. package/build/modern/queryClient.d.ts +1 -0
  239. package/build/modern/queryClient.js +305 -0
  240. package/build/modern/queryClient.js.map +1 -0
  241. package/build/modern/queryObserver.cjs +489 -0
  242. package/build/modern/queryObserver.cjs.map +1 -0
  243. package/build/modern/queryObserver.d.cts +1 -0
  244. package/build/modern/queryObserver.d.ts +1 -0
  245. package/build/modern/queryObserver.js +472 -0
  246. package/build/modern/queryObserver.js.map +1 -0
  247. package/build/modern/removable.cjs +59 -0
  248. package/build/modern/removable.cjs.map +1 -0
  249. package/build/modern/removable.d.cts +1 -0
  250. package/build/modern/removable.d.ts +1 -0
  251. package/build/modern/removable.js +34 -0
  252. package/build/modern/removable.js.map +1 -0
  253. package/build/modern/retryer.cjs +162 -0
  254. package/build/modern/retryer.cjs.map +1 -0
  255. package/build/modern/retryer.d.cts +7 -0
  256. package/build/modern/retryer.d.ts +7 -0
  257. package/build/modern/retryer.js +134 -0
  258. package/build/modern/retryer.js.map +1 -0
  259. package/build/modern/streamedQuery.cjs +80 -0
  260. package/build/modern/streamedQuery.cjs.map +1 -0
  261. package/build/modern/streamedQuery.d.cts +1 -0
  262. package/build/modern/streamedQuery.d.ts +1 -0
  263. package/build/modern/streamedQuery.js +55 -0
  264. package/build/modern/streamedQuery.js.map +1 -0
  265. package/build/modern/subscribable.cjs +51 -0
  266. package/build/modern/subscribable.cjs.map +1 -0
  267. package/build/modern/subscribable.d.cts +1 -0
  268. package/build/modern/subscribable.d.ts +1 -0
  269. package/build/modern/subscribable.js +26 -0
  270. package/build/modern/subscribable.js.map +1 -0
  271. package/build/modern/thenable.cjs +75 -0
  272. package/build/modern/thenable.cjs.map +1 -0
  273. package/build/modern/thenable.d.cts +6 -0
  274. package/build/modern/thenable.d.ts +6 -0
  275. package/build/modern/thenable.js +49 -0
  276. package/build/modern/thenable.js.map +1 -0
  277. package/build/modern/timeoutManager.cjs +98 -0
  278. package/build/modern/timeoutManager.cjs.map +1 -0
  279. package/build/modern/timeoutManager.d.cts +7 -0
  280. package/build/modern/timeoutManager.d.ts +7 -0
  281. package/build/modern/timeoutManager.js +70 -0
  282. package/build/modern/timeoutManager.js.map +1 -0
  283. package/build/modern/types.cjs +37 -0
  284. package/build/modern/types.cjs.map +1 -0
  285. package/build/modern/types.d.cts +95 -0
  286. package/build/modern/types.d.ts +95 -0
  287. package/build/modern/types.js +10 -0
  288. package/build/modern/types.js.map +1 -0
  289. package/build/modern/utils.cjs +330 -0
  290. package/build/modern/utils.cjs.map +1 -0
  291. package/build/modern/utils.d.cts +30 -0
  292. package/build/modern/utils.d.ts +30 -0
  293. package/build/modern/utils.js +281 -0
  294. package/build/modern/utils.js.map +1 -0
  295. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep, shallowEqualObjects } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\n\nfunction difference<T>(array1: Array<T>, array2: Array<T>): Array<T> {\n const excludeSet = new Set(array2)\n return array1.filter((x) => !excludeSet.has(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 #lastQueryHashes?: Array<string>\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 ): 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),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasLengthChange = prevObservers.length !== newObservers.length\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n const hasStructuralChange = hasLengthChange || hasIndexChange\n\n const hasResultChange = hasStructuralChange\n ? true\n : newResult.some((result, index) => {\n const prev = this.#result[index]\n return !prev || !shallowEqualObjects(result, prev)\n })\n\n if (!hasStructuralChange && !hasResultChange) return\n\n if (hasStructuralChange) {\n this.#observerMatches = newObserverMatches\n this.#observers = newObservers\n }\n\n this.#result = newResult\n\n if (!this.hasListeners()) return\n\n if (hasStructuralChange) {\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\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 const queryHashes = matches.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n\n return [\n result,\n (r?: Array<QueryObserverResult>) => {\n return this.#combineResult(r ?? result, combine, queryHashes)\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 queryHashes?: Array<string>,\n ): TCombinedResult {\n if (combine) {\n const lastHashes = this.#lastQueryHashes\n const queryHashesChanged =\n queryHashes !== undefined &&\n lastHashes !== undefined &&\n (lastHashes.length !== queryHashes.length ||\n queryHashes.some((hash, i) => hash !== lastHashes[i]))\n\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n queryHashesChanged ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n\n if (queryHashes !== undefined) {\n this.#lastQueryHashes = queryHashes\n }\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<string, Array<QueryObserver>>()\n\n this.#observers.forEach((observer) => {\n const key = observer.options.queryHash\n if (!key) return\n\n const previousObservers = prevObserversMap.get(key)\n\n if (previousObservers) {\n previousObservers.push(observer)\n } else {\n prevObserversMap.set(key, [observer])\n }\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)?.shift()\n const observer =\n match ?? new QueryObserver(this.#client, defaultedOptions)\n\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer,\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":[]}
@@ -0,0 +1,2 @@
1
+ export { QueriesObserverOptions_alias_1 as QueriesObserverOptions } from './_tsup-dts-rollup.cjs';
2
+ export { QueriesObserver_alias_1 as QueriesObserver } from './_tsup-dts-rollup.cjs';
@@ -0,0 +1,2 @@
1
+ export { QueriesObserverOptions_alias_1 as QueriesObserverOptions } from './_tsup-dts-rollup.js';
2
+ export { QueriesObserver_alias_1 as QueriesObserver } from './_tsup-dts-rollup.js';
@@ -0,0 +1,212 @@
1
+ // src/queriesObserver.ts
2
+ import { notifyManager } from "./notifyManager.js";
3
+ import { QueryObserver } from "./queryObserver.js";
4
+ import { Subscribable } from "./subscribable.js";
5
+ import { replaceEqualDeep, shallowEqualObjects } from "./utils.js";
6
+ function difference(array1, array2) {
7
+ const excludeSet = new Set(array2);
8
+ return array1.filter((x) => !excludeSet.has(x));
9
+ }
10
+ function replaceAt(array, index, value) {
11
+ const copy = array.slice(0);
12
+ copy[index] = value;
13
+ return copy;
14
+ }
15
+ var QueriesObserver = class extends Subscribable {
16
+ #client;
17
+ #result;
18
+ #queries;
19
+ #options;
20
+ #observers;
21
+ #combinedResult;
22
+ #lastCombine;
23
+ #lastResult;
24
+ #lastQueryHashes;
25
+ #observerMatches = [];
26
+ constructor(client, queries, options) {
27
+ super();
28
+ this.#client = client;
29
+ this.#options = options;
30
+ this.#queries = [];
31
+ this.#observers = [];
32
+ this.#result = [];
33
+ this.setQueries(queries);
34
+ }
35
+ onSubscribe() {
36
+ if (this.listeners.size === 1) {
37
+ this.#observers.forEach((observer) => {
38
+ observer.subscribe((result) => {
39
+ this.#onUpdate(observer, result);
40
+ });
41
+ });
42
+ }
43
+ }
44
+ onUnsubscribe() {
45
+ if (!this.listeners.size) {
46
+ this.destroy();
47
+ }
48
+ }
49
+ destroy() {
50
+ this.listeners = /* @__PURE__ */ new Set();
51
+ this.#observers.forEach((observer) => {
52
+ observer.destroy();
53
+ });
54
+ }
55
+ setQueries(queries, options) {
56
+ this.#queries = queries;
57
+ this.#options = options;
58
+ if (process.env.NODE_ENV !== "production") {
59
+ const queryHashes = queries.map(
60
+ (query) => this.#client.defaultQueryOptions(query).queryHash
61
+ );
62
+ if (new Set(queryHashes).size !== queryHashes.length) {
63
+ console.warn(
64
+ "[QueriesObserver]: Duplicate Queries found. This might result in unexpected behavior."
65
+ );
66
+ }
67
+ }
68
+ notifyManager.batch(() => {
69
+ const prevObservers = this.#observers;
70
+ const newObserverMatches = this.#findMatchingObservers(this.#queries);
71
+ newObserverMatches.forEach(
72
+ (match) => match.observer.setOptions(match.defaultedQueryOptions)
73
+ );
74
+ const newObservers = newObserverMatches.map((match) => match.observer);
75
+ const newResult = newObservers.map(
76
+ (observer) => observer.getCurrentResult()
77
+ );
78
+ const hasLengthChange = prevObservers.length !== newObservers.length;
79
+ const hasIndexChange = newObservers.some(
80
+ (observer, index) => observer !== prevObservers[index]
81
+ );
82
+ const hasStructuralChange = hasLengthChange || hasIndexChange;
83
+ const hasResultChange = hasStructuralChange ? true : newResult.some((result, index) => {
84
+ const prev = this.#result[index];
85
+ return !prev || !shallowEqualObjects(result, prev);
86
+ });
87
+ if (!hasStructuralChange && !hasResultChange) return;
88
+ if (hasStructuralChange) {
89
+ this.#observerMatches = newObserverMatches;
90
+ this.#observers = newObservers;
91
+ }
92
+ this.#result = newResult;
93
+ if (!this.hasListeners()) return;
94
+ if (hasStructuralChange) {
95
+ difference(prevObservers, newObservers).forEach((observer) => {
96
+ observer.destroy();
97
+ });
98
+ difference(newObservers, prevObservers).forEach((observer) => {
99
+ observer.subscribe((result) => {
100
+ this.#onUpdate(observer, result);
101
+ });
102
+ });
103
+ }
104
+ this.#notify();
105
+ });
106
+ }
107
+ getCurrentResult() {
108
+ return this.#result;
109
+ }
110
+ getQueries() {
111
+ return this.#observers.map((observer) => observer.getCurrentQuery());
112
+ }
113
+ getObservers() {
114
+ return this.#observers;
115
+ }
116
+ getOptimisticResult(queries, combine) {
117
+ const matches = this.#findMatchingObservers(queries);
118
+ const result = matches.map(
119
+ (match) => match.observer.getOptimisticResult(match.defaultedQueryOptions)
120
+ );
121
+ const queryHashes = matches.map(
122
+ (match) => match.defaultedQueryOptions.queryHash
123
+ );
124
+ return [
125
+ result,
126
+ (r) => {
127
+ return this.#combineResult(r ?? result, combine, queryHashes);
128
+ },
129
+ () => {
130
+ return this.#trackResult(result, matches);
131
+ }
132
+ ];
133
+ }
134
+ #trackResult(result, matches) {
135
+ return matches.map((match, index) => {
136
+ const observerResult = result[index];
137
+ return !match.defaultedQueryOptions.notifyOnChangeProps ? match.observer.trackResult(observerResult, (accessedProp) => {
138
+ matches.forEach((m) => {
139
+ m.observer.trackProp(accessedProp);
140
+ });
141
+ }) : observerResult;
142
+ });
143
+ }
144
+ #combineResult(input, combine, queryHashes) {
145
+ if (combine) {
146
+ const lastHashes = this.#lastQueryHashes;
147
+ const queryHashesChanged = queryHashes !== void 0 && lastHashes !== void 0 && (lastHashes.length !== queryHashes.length || queryHashes.some((hash, i) => hash !== lastHashes[i]));
148
+ if (!this.#combinedResult || this.#result !== this.#lastResult || queryHashesChanged || combine !== this.#lastCombine) {
149
+ this.#lastCombine = combine;
150
+ this.#lastResult = this.#result;
151
+ if (queryHashes !== void 0) {
152
+ this.#lastQueryHashes = queryHashes;
153
+ }
154
+ this.#combinedResult = replaceEqualDeep(
155
+ this.#combinedResult,
156
+ combine(input)
157
+ );
158
+ }
159
+ return this.#combinedResult;
160
+ }
161
+ return input;
162
+ }
163
+ #findMatchingObservers(queries) {
164
+ const prevObserversMap = /* @__PURE__ */ new Map();
165
+ this.#observers.forEach((observer) => {
166
+ const key = observer.options.queryHash;
167
+ if (!key) return;
168
+ const previousObservers = prevObserversMap.get(key);
169
+ if (previousObservers) {
170
+ previousObservers.push(observer);
171
+ } else {
172
+ prevObserversMap.set(key, [observer]);
173
+ }
174
+ });
175
+ const observers = [];
176
+ queries.forEach((options) => {
177
+ const defaultedOptions = this.#client.defaultQueryOptions(options);
178
+ const match = prevObserversMap.get(defaultedOptions.queryHash)?.shift();
179
+ const observer = match ?? new QueryObserver(this.#client, defaultedOptions);
180
+ observers.push({
181
+ defaultedQueryOptions: defaultedOptions,
182
+ observer
183
+ });
184
+ });
185
+ return observers;
186
+ }
187
+ #onUpdate(observer, result) {
188
+ const index = this.#observers.indexOf(observer);
189
+ if (index !== -1) {
190
+ this.#result = replaceAt(this.#result, index, result);
191
+ this.#notify();
192
+ }
193
+ }
194
+ #notify() {
195
+ if (this.hasListeners()) {
196
+ const previousResult = this.#combinedResult;
197
+ const newTracked = this.#trackResult(this.#result, this.#observerMatches);
198
+ const newResult = this.#combineResult(newTracked, this.#options?.combine);
199
+ if (previousResult !== newResult) {
200
+ notifyManager.batch(() => {
201
+ this.listeners.forEach((listener) => {
202
+ listener(this.#result);
203
+ });
204
+ });
205
+ }
206
+ }
207
+ }
208
+ };
209
+ export {
210
+ QueriesObserver
211
+ };
212
+ //# sourceMappingURL=queriesObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport { replaceEqualDeep, shallowEqualObjects } from './utils'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\n\nfunction difference<T>(array1: Array<T>, array2: Array<T>): Array<T> {\n const excludeSet = new Set(array2)\n return array1.filter((x) => !excludeSet.has(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 #lastQueryHashes?: Array<string>\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 ): 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),\n )\n\n const newObservers = newObserverMatches.map((match) => match.observer)\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasLengthChange = prevObservers.length !== newObservers.length\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n const hasStructuralChange = hasLengthChange || hasIndexChange\n\n const hasResultChange = hasStructuralChange\n ? true\n : newResult.some((result, index) => {\n const prev = this.#result[index]\n return !prev || !shallowEqualObjects(result, prev)\n })\n\n if (!hasStructuralChange && !hasResultChange) return\n\n if (hasStructuralChange) {\n this.#observerMatches = newObserverMatches\n this.#observers = newObservers\n }\n\n this.#result = newResult\n\n if (!this.hasListeners()) return\n\n if (hasStructuralChange) {\n difference(prevObservers, newObservers).forEach((observer) => {\n observer.destroy()\n })\n difference(newObservers, prevObservers).forEach((observer) => {\n observer.subscribe((result) => {\n this.#onUpdate(observer, result)\n })\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 const queryHashes = matches.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n\n return [\n result,\n (r?: Array<QueryObserverResult>) => {\n return this.#combineResult(r ?? result, combine, queryHashes)\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 queryHashes?: Array<string>,\n ): TCombinedResult {\n if (combine) {\n const lastHashes = this.#lastQueryHashes\n const queryHashesChanged =\n queryHashes !== undefined &&\n lastHashes !== undefined &&\n (lastHashes.length !== queryHashes.length ||\n queryHashes.some((hash, i) => hash !== lastHashes[i]))\n\n if (\n !this.#combinedResult ||\n this.#result !== this.#lastResult ||\n queryHashesChanged ||\n combine !== this.#lastCombine\n ) {\n this.#lastCombine = combine\n this.#lastResult = this.#result\n\n if (queryHashes !== undefined) {\n this.#lastQueryHashes = queryHashes\n }\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<string, Array<QueryObserver>>()\n\n this.#observers.forEach((observer) => {\n const key = observer.options.queryHash\n if (!key) return\n\n const previousObservers = prevObserversMap.get(key)\n\n if (previousObservers) {\n previousObservers.push(observer)\n } else {\n prevObserversMap.set(key, [observer])\n }\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)?.shift()\n const observer =\n match ?? new QueryObserver(this.#client, defaultedOptions)\n\n observers.push({\n defaultedQueryOptions: defaultedOptions,\n observer,\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":[]}