@tanstack/query-core 4.36.1 → 4.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (181) hide show
  1. package/build/lib/queryCache.d.ts +14 -4
  2. package/build/lib/queryClient.d.ts +83 -20
  3. package/build/lib/tests/queryClient.types.test.d.ts +2 -0
  4. package/build/lib/tests/utils.d.ts +1 -0
  5. package/build/lib/types.d.ts +8 -0
  6. package/package.json +2 -9
  7. package/src/mutationObserver.ts +3 -1
  8. package/src/queryCache.ts +37 -6
  9. package/src/queryClient.ts +202 -37
  10. package/src/tests/mutations.test.tsx +8 -0
  11. package/src/tests/queryClient.types.test.tsx +13 -0
  12. package/src/tests/utils.ts +2 -0
  13. package/src/types.ts +20 -0
  14. package/build/lib/focusManager.d.ts.map +0 -1
  15. package/build/lib/focusManager.esm.js +0 -91
  16. package/build/lib/focusManager.esm.js.map +0 -1
  17. package/build/lib/focusManager.js +0 -96
  18. package/build/lib/focusManager.js.map +0 -1
  19. package/build/lib/focusManager.mjs +0 -91
  20. package/build/lib/focusManager.mjs.map +0 -1
  21. package/build/lib/hydration.d.ts.map +0 -1
  22. package/build/lib/hydration.esm.js +0 -109
  23. package/build/lib/hydration.esm.js.map +0 -1
  24. package/build/lib/hydration.js +0 -116
  25. package/build/lib/hydration.js.map +0 -1
  26. package/build/lib/hydration.mjs +0 -109
  27. package/build/lib/hydration.mjs.map +0 -1
  28. package/build/lib/index.d.ts.map +0 -1
  29. package/build/lib/index.esm.js +0 -15
  30. package/build/lib/index.esm.js.map +0 -1
  31. package/build/lib/index.js +0 -48
  32. package/build/lib/index.js.map +0 -1
  33. package/build/lib/index.mjs +0 -15
  34. package/build/lib/index.mjs.map +0 -1
  35. package/build/lib/infiniteQueryBehavior.d.ts.map +0 -1
  36. package/build/lib/infiniteQueryBehavior.esm.js +0 -146
  37. package/build/lib/infiniteQueryBehavior.esm.js.map +0 -1
  38. package/build/lib/infiniteQueryBehavior.js +0 -154
  39. package/build/lib/infiniteQueryBehavior.js.map +0 -1
  40. package/build/lib/infiniteQueryBehavior.mjs +0 -146
  41. package/build/lib/infiniteQueryBehavior.mjs.map +0 -1
  42. package/build/lib/infiniteQueryObserver.d.ts.map +0 -1
  43. package/build/lib/infiniteQueryObserver.esm.js +0 -85
  44. package/build/lib/infiniteQueryObserver.esm.js.map +0 -1
  45. package/build/lib/infiniteQueryObserver.js +0 -89
  46. package/build/lib/infiniteQueryObserver.js.map +0 -1
  47. package/build/lib/infiniteQueryObserver.mjs +0 -85
  48. package/build/lib/infiniteQueryObserver.mjs.map +0 -1
  49. package/build/lib/logger.d.ts.map +0 -1
  50. package/build/lib/logger.esm.js +0 -4
  51. package/build/lib/logger.esm.js.map +0 -1
  52. package/build/lib/logger.js +0 -8
  53. package/build/lib/logger.js.map +0 -1
  54. package/build/lib/logger.mjs +0 -4
  55. package/build/lib/logger.mjs.map +0 -1
  56. package/build/lib/logger.native.d.ts.map +0 -1
  57. package/build/lib/logger.native.esm.js +0 -12
  58. package/build/lib/logger.native.esm.js.map +0 -1
  59. package/build/lib/logger.native.js +0 -16
  60. package/build/lib/logger.native.js.map +0 -1
  61. package/build/lib/logger.native.mjs +0 -12
  62. package/build/lib/logger.native.mjs.map +0 -1
  63. package/build/lib/mutation.d.ts.map +0 -1
  64. package/build/lib/mutation.esm.js +0 -261
  65. package/build/lib/mutation.esm.js.map +0 -1
  66. package/build/lib/mutation.js +0 -266
  67. package/build/lib/mutation.js.map +0 -1
  68. package/build/lib/mutation.mjs +0 -261
  69. package/build/lib/mutation.mjs.map +0 -1
  70. package/build/lib/mutationCache.d.ts.map +0 -1
  71. package/build/lib/mutationCache.esm.js +0 -93
  72. package/build/lib/mutationCache.esm.js.map +0 -1
  73. package/build/lib/mutationCache.js +0 -97
  74. package/build/lib/mutationCache.js.map +0 -1
  75. package/build/lib/mutationCache.mjs +0 -93
  76. package/build/lib/mutationCache.mjs.map +0 -1
  77. package/build/lib/mutationObserver.d.ts.map +0 -1
  78. package/build/lib/mutationObserver.esm.js +0 -132
  79. package/build/lib/mutationObserver.esm.js.map +0 -1
  80. package/build/lib/mutationObserver.js +0 -136
  81. package/build/lib/mutationObserver.js.map +0 -1
  82. package/build/lib/mutationObserver.mjs +0 -132
  83. package/build/lib/mutationObserver.mjs.map +0 -1
  84. package/build/lib/notifyManager.d.ts.map +0 -1
  85. package/build/lib/notifyManager.esm.js +0 -99
  86. package/build/lib/notifyManager.esm.js.map +0 -1
  87. package/build/lib/notifyManager.js +0 -104
  88. package/build/lib/notifyManager.js.map +0 -1
  89. package/build/lib/notifyManager.mjs +0 -99
  90. package/build/lib/notifyManager.mjs.map +0 -1
  91. package/build/lib/onlineManager.d.ts.map +0 -1
  92. package/build/lib/onlineManager.esm.js +0 -93
  93. package/build/lib/onlineManager.esm.js.map +0 -1
  94. package/build/lib/onlineManager.js +0 -98
  95. package/build/lib/onlineManager.js.map +0 -1
  96. package/build/lib/onlineManager.mjs +0 -93
  97. package/build/lib/onlineManager.mjs.map +0 -1
  98. package/build/lib/queriesObserver.d.ts.map +0 -1
  99. package/build/lib/queriesObserver.esm.js +0 -168
  100. package/build/lib/queriesObserver.esm.js.map +0 -1
  101. package/build/lib/queriesObserver.js +0 -172
  102. package/build/lib/queriesObserver.js.map +0 -1
  103. package/build/lib/queriesObserver.mjs +0 -168
  104. package/build/lib/queriesObserver.mjs.map +0 -1
  105. package/build/lib/query.d.ts.map +0 -1
  106. package/build/lib/query.esm.js +0 -475
  107. package/build/lib/query.esm.js.map +0 -1
  108. package/build/lib/query.js +0 -479
  109. package/build/lib/query.js.map +0 -1
  110. package/build/lib/query.mjs +0 -475
  111. package/build/lib/query.mjs.map +0 -1
  112. package/build/lib/queryCache.d.ts.map +0 -1
  113. package/build/lib/queryCache.esm.js +0 -127
  114. package/build/lib/queryCache.esm.js.map +0 -1
  115. package/build/lib/queryCache.js +0 -131
  116. package/build/lib/queryCache.js.map +0 -1
  117. package/build/lib/queryCache.mjs +0 -127
  118. package/build/lib/queryCache.mjs.map +0 -1
  119. package/build/lib/queryClient.d.ts.map +0 -1
  120. package/build/lib/queryClient.esm.js +0 -356
  121. package/build/lib/queryClient.esm.js.map +0 -1
  122. package/build/lib/queryClient.js +0 -360
  123. package/build/lib/queryClient.js.map +0 -1
  124. package/build/lib/queryClient.mjs +0 -356
  125. package/build/lib/queryClient.mjs.map +0 -1
  126. package/build/lib/queryObserver.d.ts.map +0 -1
  127. package/build/lib/queryObserver.esm.js +0 -580
  128. package/build/lib/queryObserver.esm.js.map +0 -1
  129. package/build/lib/queryObserver.js +0 -584
  130. package/build/lib/queryObserver.js.map +0 -1
  131. package/build/lib/queryObserver.mjs +0 -580
  132. package/build/lib/queryObserver.mjs.map +0 -1
  133. package/build/lib/removable.d.ts.map +0 -1
  134. package/build/lib/removable.esm.js +0 -33
  135. package/build/lib/removable.esm.js.map +0 -1
  136. package/build/lib/removable.js +0 -37
  137. package/build/lib/removable.js.map +0 -1
  138. package/build/lib/removable.mjs +0 -33
  139. package/build/lib/removable.mjs.map +0 -1
  140. package/build/lib/retryer.d.ts.map +0 -1
  141. package/build/lib/retryer.esm.js +0 -167
  142. package/build/lib/retryer.esm.js.map +0 -1
  143. package/build/lib/retryer.js +0 -174
  144. package/build/lib/retryer.js.map +0 -1
  145. package/build/lib/retryer.mjs +0 -167
  146. package/build/lib/retryer.mjs.map +0 -1
  147. package/build/lib/subscribable.d.ts.map +0 -1
  148. package/build/lib/subscribable.esm.js +0 -32
  149. package/build/lib/subscribable.esm.js.map +0 -1
  150. package/build/lib/subscribable.js +0 -36
  151. package/build/lib/subscribable.js.map +0 -1
  152. package/build/lib/subscribable.mjs +0 -32
  153. package/build/lib/subscribable.mjs.map +0 -1
  154. package/build/lib/tests/focusManager.test.d.ts.map +0 -1
  155. package/build/lib/tests/hydration.test.d.ts.map +0 -1
  156. package/build/lib/tests/infiniteQueryBehavior.test.d.ts.map +0 -1
  157. package/build/lib/tests/infiniteQueryObserver.test.d.ts.map +0 -1
  158. package/build/lib/tests/mutationCache.test.d.ts.map +0 -1
  159. package/build/lib/tests/mutationObserver.test.d.ts.map +0 -1
  160. package/build/lib/tests/mutations.test.d.ts.map +0 -1
  161. package/build/lib/tests/notifyManager.test.d.ts.map +0 -1
  162. package/build/lib/tests/onlineManager.test.d.ts.map +0 -1
  163. package/build/lib/tests/queriesObserver.test.d.ts.map +0 -1
  164. package/build/lib/tests/query.test.d.ts.map +0 -1
  165. package/build/lib/tests/queryCache.test.d.ts.map +0 -1
  166. package/build/lib/tests/queryClient.test.d.ts.map +0 -1
  167. package/build/lib/tests/queryObserver.test.d.ts.map +0 -1
  168. package/build/lib/tests/utils.d.ts.map +0 -1
  169. package/build/lib/tests/utils.test.d.ts.map +0 -1
  170. package/build/lib/types.d.ts.map +0 -1
  171. package/build/lib/utils.d.ts.map +0 -1
  172. package/build/lib/utils.esm.js +0 -320
  173. package/build/lib/utils.esm.js.map +0 -1
  174. package/build/lib/utils.js +0 -350
  175. package/build/lib/utils.js.map +0 -1
  176. package/build/lib/utils.mjs +0 -320
  177. package/build/lib/utils.mjs.map +0 -1
  178. package/build/umd/index.development.js +0 -3307
  179. package/build/umd/index.development.js.map +0 -1
  180. package/build/umd/index.production.js +0 -2
  181. package/build/umd/index.production.js.map +0 -1
@@ -1,168 +0,0 @@
1
- import { difference, replaceAt } from './utils.esm.js';
2
- import { notifyManager } from './notifyManager.esm.js';
3
- import { QueryObserver } from './queryObserver.esm.js';
4
- import { Subscribable } from './subscribable.esm.js';
5
-
6
- class QueriesObserver extends Subscribable {
7
- constructor(client, queries) {
8
- super();
9
- this.client = client;
10
- this.queries = [];
11
- this.result = [];
12
- this.observers = [];
13
- this.observersMap = {};
14
-
15
- if (queries) {
16
- this.setQueries(queries);
17
- }
18
- }
19
-
20
- onSubscribe() {
21
- if (this.listeners.size === 1) {
22
- this.observers.forEach(observer => {
23
- observer.subscribe(result => {
24
- this.onUpdate(observer, result);
25
- });
26
- });
27
- }
28
- }
29
-
30
- onUnsubscribe() {
31
- if (!this.listeners.size) {
32
- this.destroy();
33
- }
34
- }
35
-
36
- destroy() {
37
- this.listeners = new Set();
38
- this.observers.forEach(observer => {
39
- observer.destroy();
40
- });
41
- }
42
-
43
- setQueries(queries, notifyOptions) {
44
- this.queries = queries;
45
- notifyManager.batch(() => {
46
- const prevObservers = this.observers;
47
- const newObserverMatches = this.findMatchingObservers(this.queries); // set options for the new observers to notify of changes
48
-
49
- newObserverMatches.forEach(match => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions));
50
- const newObservers = newObserverMatches.map(match => match.observer);
51
- const newObserversMap = Object.fromEntries(newObservers.map(observer => [observer.options.queryHash, observer]));
52
- const newResult = newObservers.map(observer => observer.getCurrentResult());
53
- const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]);
54
-
55
- if (prevObservers.length === newObservers.length && !hasIndexChange) {
56
- return;
57
- }
58
-
59
- this.observers = newObservers;
60
- this.observersMap = newObserversMap;
61
- this.result = newResult;
62
-
63
- if (!this.hasListeners()) {
64
- return;
65
- }
66
-
67
- difference(prevObservers, newObservers).forEach(observer => {
68
- observer.destroy();
69
- });
70
- difference(newObservers, prevObservers).forEach(observer => {
71
- observer.subscribe(result => {
72
- this.onUpdate(observer, result);
73
- });
74
- });
75
- this.notify();
76
- });
77
- }
78
-
79
- getCurrentResult() {
80
- return this.result;
81
- }
82
-
83
- getQueries() {
84
- return this.observers.map(observer => observer.getCurrentQuery());
85
- }
86
-
87
- getObservers() {
88
- return this.observers;
89
- }
90
-
91
- getOptimisticResult(queries) {
92
- return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
93
- }
94
-
95
- findMatchingObservers(queries) {
96
- const prevObservers = this.observers;
97
- const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
98
- const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
99
- const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
100
- const match = prevObserversMap.get(defaultedOptions.queryHash);
101
-
102
- if (match != null) {
103
- return [{
104
- defaultedQueryOptions: defaultedOptions,
105
- observer: match
106
- }];
107
- }
108
-
109
- return [];
110
- });
111
- const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
112
- const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
113
- const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
114
- const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
115
-
116
- const getObserver = options => {
117
- const defaultedOptions = this.client.defaultQueryOptions(options);
118
- const currentObserver = this.observersMap[defaultedOptions.queryHash];
119
- return currentObserver != null ? currentObserver : new QueryObserver(this.client, defaultedOptions);
120
- };
121
-
122
- const newOrReusedObservers = unmatchedQueries.map((options, index) => {
123
- if (options.keepPreviousData) {
124
- // return previous data from one of the observers that no longer match
125
- const previouslyUsedObserver = unmatchedObservers[index];
126
-
127
- if (previouslyUsedObserver !== undefined) {
128
- return {
129
- defaultedQueryOptions: options,
130
- observer: previouslyUsedObserver
131
- };
132
- }
133
- }
134
-
135
- return {
136
- defaultedQueryOptions: options,
137
- observer: getObserver(options)
138
- };
139
- });
140
-
141
- const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);
142
-
143
- return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);
144
- }
145
-
146
- onUpdate(observer, result) {
147
- const index = this.observers.indexOf(observer);
148
-
149
- if (index !== -1) {
150
- this.result = replaceAt(this.result, index, result);
151
- this.notify();
152
- }
153
- }
154
-
155
- notify() {
156
- notifyManager.batch(() => {
157
- this.listeners.forEach(({
158
- listener
159
- }) => {
160
- listener(this.result);
161
- });
162
- });
163
- }
164
-
165
- }
166
-
167
- export { QueriesObserver };
168
- //# sourceMappingURL=queriesObserver.esm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\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: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\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 newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\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(): 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(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const matchingObserversSet = new Set(\n matchingObservers.map((match) => match.observer),\n )\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) => !matchingObserversSet.has(prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private 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 private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach(({ listener }) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","length","hasListeners","difference","notify","getQueries","getCurrentQuery","getObservers","getOptimisticResult","prevObserversMap","Map","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","filter","has","matchingObserversSet","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
@@ -1,172 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var utils = require('./utils.js');
6
- var notifyManager = require('./notifyManager.js');
7
- var queryObserver = require('./queryObserver.js');
8
- var subscribable = require('./subscribable.js');
9
-
10
- class QueriesObserver extends subscribable.Subscribable {
11
- constructor(client, queries) {
12
- super();
13
- this.client = client;
14
- this.queries = [];
15
- this.result = [];
16
- this.observers = [];
17
- this.observersMap = {};
18
-
19
- if (queries) {
20
- this.setQueries(queries);
21
- }
22
- }
23
-
24
- onSubscribe() {
25
- if (this.listeners.size === 1) {
26
- this.observers.forEach(observer => {
27
- observer.subscribe(result => {
28
- this.onUpdate(observer, result);
29
- });
30
- });
31
- }
32
- }
33
-
34
- onUnsubscribe() {
35
- if (!this.listeners.size) {
36
- this.destroy();
37
- }
38
- }
39
-
40
- destroy() {
41
- this.listeners = new Set();
42
- this.observers.forEach(observer => {
43
- observer.destroy();
44
- });
45
- }
46
-
47
- setQueries(queries, notifyOptions) {
48
- this.queries = queries;
49
- notifyManager.notifyManager.batch(() => {
50
- const prevObservers = this.observers;
51
- const newObserverMatches = this.findMatchingObservers(this.queries); // set options for the new observers to notify of changes
52
-
53
- newObserverMatches.forEach(match => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions));
54
- const newObservers = newObserverMatches.map(match => match.observer);
55
- const newObserversMap = Object.fromEntries(newObservers.map(observer => [observer.options.queryHash, observer]));
56
- const newResult = newObservers.map(observer => observer.getCurrentResult());
57
- const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]);
58
-
59
- if (prevObservers.length === newObservers.length && !hasIndexChange) {
60
- return;
61
- }
62
-
63
- this.observers = newObservers;
64
- this.observersMap = newObserversMap;
65
- this.result = newResult;
66
-
67
- if (!this.hasListeners()) {
68
- return;
69
- }
70
-
71
- utils.difference(prevObservers, newObservers).forEach(observer => {
72
- observer.destroy();
73
- });
74
- utils.difference(newObservers, prevObservers).forEach(observer => {
75
- observer.subscribe(result => {
76
- this.onUpdate(observer, result);
77
- });
78
- });
79
- this.notify();
80
- });
81
- }
82
-
83
- getCurrentResult() {
84
- return this.result;
85
- }
86
-
87
- getQueries() {
88
- return this.observers.map(observer => observer.getCurrentQuery());
89
- }
90
-
91
- getObservers() {
92
- return this.observers;
93
- }
94
-
95
- getOptimisticResult(queries) {
96
- return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
97
- }
98
-
99
- findMatchingObservers(queries) {
100
- const prevObservers = this.observers;
101
- const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
102
- const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
103
- const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
104
- const match = prevObserversMap.get(defaultedOptions.queryHash);
105
-
106
- if (match != null) {
107
- return [{
108
- defaultedQueryOptions: defaultedOptions,
109
- observer: match
110
- }];
111
- }
112
-
113
- return [];
114
- });
115
- const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
116
- const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
117
- const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
118
- const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
119
-
120
- const getObserver = options => {
121
- const defaultedOptions = this.client.defaultQueryOptions(options);
122
- const currentObserver = this.observersMap[defaultedOptions.queryHash];
123
- return currentObserver != null ? currentObserver : new queryObserver.QueryObserver(this.client, defaultedOptions);
124
- };
125
-
126
- const newOrReusedObservers = unmatchedQueries.map((options, index) => {
127
- if (options.keepPreviousData) {
128
- // return previous data from one of the observers that no longer match
129
- const previouslyUsedObserver = unmatchedObservers[index];
130
-
131
- if (previouslyUsedObserver !== undefined) {
132
- return {
133
- defaultedQueryOptions: options,
134
- observer: previouslyUsedObserver
135
- };
136
- }
137
- }
138
-
139
- return {
140
- defaultedQueryOptions: options,
141
- observer: getObserver(options)
142
- };
143
- });
144
-
145
- const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);
146
-
147
- return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);
148
- }
149
-
150
- onUpdate(observer, result) {
151
- const index = this.observers.indexOf(observer);
152
-
153
- if (index !== -1) {
154
- this.result = utils.replaceAt(this.result, index, result);
155
- this.notify();
156
- }
157
- }
158
-
159
- notify() {
160
- notifyManager.notifyManager.batch(() => {
161
- this.listeners.forEach(({
162
- listener
163
- }) => {
164
- listener(this.result);
165
- });
166
- });
167
- }
168
-
169
- }
170
-
171
- exports.QueriesObserver = QueriesObserver;
172
- //# sourceMappingURL=queriesObserver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queriesObserver.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\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: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\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 newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\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(): 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(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const matchingObserversSet = new Set(\n matchingObservers.map((match) => match.observer),\n )\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) => !matchingObserversSet.has(prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private 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 private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach(({ listener }) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","length","hasListeners","difference","notify","getQueries","getCurrentQuery","getObservers","getOptimisticResult","prevObserversMap","Map","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","filter","has","matchingObserversSet","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- import { difference, replaceAt } from './utils.mjs';
2
- import { notifyManager } from './notifyManager.mjs';
3
- import { QueryObserver } from './queryObserver.mjs';
4
- import { Subscribable } from './subscribable.mjs';
5
-
6
- class QueriesObserver extends Subscribable {
7
- constructor(client, queries) {
8
- super();
9
- this.client = client;
10
- this.queries = [];
11
- this.result = [];
12
- this.observers = [];
13
- this.observersMap = {};
14
-
15
- if (queries) {
16
- this.setQueries(queries);
17
- }
18
- }
19
-
20
- onSubscribe() {
21
- if (this.listeners.size === 1) {
22
- this.observers.forEach(observer => {
23
- observer.subscribe(result => {
24
- this.onUpdate(observer, result);
25
- });
26
- });
27
- }
28
- }
29
-
30
- onUnsubscribe() {
31
- if (!this.listeners.size) {
32
- this.destroy();
33
- }
34
- }
35
-
36
- destroy() {
37
- this.listeners = new Set();
38
- this.observers.forEach(observer => {
39
- observer.destroy();
40
- });
41
- }
42
-
43
- setQueries(queries, notifyOptions) {
44
- this.queries = queries;
45
- notifyManager.batch(() => {
46
- const prevObservers = this.observers;
47
- const newObserverMatches = this.findMatchingObservers(this.queries); // set options for the new observers to notify of changes
48
-
49
- newObserverMatches.forEach(match => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions));
50
- const newObservers = newObserverMatches.map(match => match.observer);
51
- const newObserversMap = Object.fromEntries(newObservers.map(observer => [observer.options.queryHash, observer]));
52
- const newResult = newObservers.map(observer => observer.getCurrentResult());
53
- const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]);
54
-
55
- if (prevObservers.length === newObservers.length && !hasIndexChange) {
56
- return;
57
- }
58
-
59
- this.observers = newObservers;
60
- this.observersMap = newObserversMap;
61
- this.result = newResult;
62
-
63
- if (!this.hasListeners()) {
64
- return;
65
- }
66
-
67
- difference(prevObservers, newObservers).forEach(observer => {
68
- observer.destroy();
69
- });
70
- difference(newObservers, prevObservers).forEach(observer => {
71
- observer.subscribe(result => {
72
- this.onUpdate(observer, result);
73
- });
74
- });
75
- this.notify();
76
- });
77
- }
78
-
79
- getCurrentResult() {
80
- return this.result;
81
- }
82
-
83
- getQueries() {
84
- return this.observers.map(observer => observer.getCurrentQuery());
85
- }
86
-
87
- getObservers() {
88
- return this.observers;
89
- }
90
-
91
- getOptimisticResult(queries) {
92
- return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
93
- }
94
-
95
- findMatchingObservers(queries) {
96
- const prevObservers = this.observers;
97
- const prevObserversMap = new Map(prevObservers.map(observer => [observer.options.queryHash, observer]));
98
- const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
99
- const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
100
- const match = prevObserversMap.get(defaultedOptions.queryHash);
101
-
102
- if (match != null) {
103
- return [{
104
- defaultedQueryOptions: defaultedOptions,
105
- observer: match
106
- }];
107
- }
108
-
109
- return [];
110
- });
111
- const matchedQueryHashes = new Set(matchingObservers.map(match => match.defaultedQueryOptions.queryHash));
112
- const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.has(defaultedOptions.queryHash));
113
- const matchingObserversSet = new Set(matchingObservers.map(match => match.observer));
114
- const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObserversSet.has(prevObserver));
115
-
116
- const getObserver = options => {
117
- const defaultedOptions = this.client.defaultQueryOptions(options);
118
- const currentObserver = this.observersMap[defaultedOptions.queryHash];
119
- return currentObserver != null ? currentObserver : new QueryObserver(this.client, defaultedOptions);
120
- };
121
-
122
- const newOrReusedObservers = unmatchedQueries.map((options, index) => {
123
- if (options.keepPreviousData) {
124
- // return previous data from one of the observers that no longer match
125
- const previouslyUsedObserver = unmatchedObservers[index];
126
-
127
- if (previouslyUsedObserver !== undefined) {
128
- return {
129
- defaultedQueryOptions: options,
130
- observer: previouslyUsedObserver
131
- };
132
- }
133
- }
134
-
135
- return {
136
- defaultedQueryOptions: options,
137
- observer: getObserver(options)
138
- };
139
- });
140
-
141
- const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);
142
-
143
- return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);
144
- }
145
-
146
- onUpdate(observer, result) {
147
- const index = this.observers.indexOf(observer);
148
-
149
- if (index !== -1) {
150
- this.result = replaceAt(this.result, index, result);
151
- this.notify();
152
- }
153
- }
154
-
155
- notify() {
156
- notifyManager.batch(() => {
157
- this.listeners.forEach(({
158
- listener
159
- }) => {
160
- listener(this.result);
161
- });
162
- });
163
- }
164
-
165
- }
166
-
167
- export { QueriesObserver };
168
- //# sourceMappingURL=queriesObserver.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queriesObserver.mjs","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\nimport type {\n DefaultedQueryObserverOptions,\n QueryObserverOptions,\n QueryObserverResult,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n private client: QueryClient\n private result: QueryObserverResult[]\n private queries: QueryObserverOptions[]\n private observers: QueryObserver[]\n private observersMap: Record<string, QueryObserver>\n\n constructor(client: QueryClient, queries?: QueryObserverOptions[]) {\n super()\n\n this.client = client\n this.queries = []\n this.result = []\n this.observers = []\n this.observersMap = {}\n\n if (queries) {\n this.setQueries(queries)\n }\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: QueryObserverOptions[],\n notifyOptions?: NotifyOptions,\n ): void {\n this.queries = queries\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 newObserversMap = Object.fromEntries(\n newObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n const newResult = newObservers.map((observer) =>\n observer.getCurrentResult(),\n )\n\n const hasIndexChange = newObservers.some(\n (observer, index) => observer !== prevObservers[index],\n )\n if (prevObservers.length === newObservers.length && !hasIndexChange) {\n return\n }\n\n this.observers = newObservers\n this.observersMap = newObserversMap\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(): 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(queries: QueryObserverOptions[]): QueryObserverResult[] {\n return this.findMatchingObservers(queries).map((match) =>\n match.observer.getOptimisticResult(match.defaultedQueryOptions),\n )\n }\n\n private findMatchingObservers(\n queries: QueryObserverOptions[],\n ): QueryObserverMatch[] {\n const prevObservers = this.observers\n const prevObserversMap = new Map(\n prevObservers.map((observer) => [observer.options.queryHash, observer]),\n )\n\n const defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObserversMap.get(defaultedOptions.queryHash)\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = new Set(\n matchingObservers.map((match) => match.defaultedQueryOptions.queryHash),\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) => !matchedQueryHashes.has(defaultedOptions.queryHash),\n )\n\n const matchingObserversSet = new Set(\n matchingObservers.map((match) => match.observer),\n )\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) => !matchingObserversSet.has(prevObserver),\n )\n\n const getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.client.defaultQueryOptions(options)\n const currentObserver = this.observersMap[defaultedOptions.queryHash!]\n return currentObserver ?? new QueryObserver(this.client, defaultedOptions)\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options, index) => {\n if (options.keepPreviousData) {\n // return previous data from one of the observers that no longer match\n const previouslyUsedObserver = unmatchedObservers[index]\n if (previouslyUsedObserver !== undefined) {\n return {\n defaultedQueryOptions: options,\n observer: previouslyUsedObserver,\n }\n }\n }\n return {\n defaultedQueryOptions: options,\n observer: getObserver(options),\n }\n },\n )\n\n const sortMatchesByOrderOfQueries = (\n a: QueryObserverMatch,\n b: QueryObserverMatch,\n ): number =>\n defaultedQueryOptions.indexOf(a.defaultedQueryOptions) -\n defaultedQueryOptions.indexOf(b.defaultedQueryOptions)\n\n return matchingObservers\n .concat(newOrReusedObservers)\n .sort(sortMatchesByOrderOfQueries)\n }\n\n private 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 private notify(): void {\n notifyManager.batch(() => {\n this.listeners.forEach(({ listener }) => {\n listener(this.result)\n })\n })\n }\n}\n\ntype QueryObserverMatch = {\n defaultedQueryOptions: DefaultedQueryObserverOptions\n observer: QueryObserver\n}\n"],"names":["QueriesObserver","Subscribable","constructor","client","queries","result","observers","observersMap","setQueries","onSubscribe","listeners","size","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","Set","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","length","hasListeners","difference","notify","getQueries","getCurrentQuery","getObservers","getOptimisticResult","prevObserversMap","Map","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","get","matchedQueryHashes","unmatchedQueries","filter","has","matchingObserversSet","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}