@tanstack/query-core 4.3.4 → 4.3.7
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.
- package/build/lib/focusManager.esm.js +86 -0
- package/build/lib/focusManager.esm.js.map +1 -0
- package/build/lib/hydration.esm.js +97 -0
- package/build/lib/hydration.esm.js.map +1 -0
- package/build/lib/index.d.ts +1 -1
- package/build/lib/index.esm.js +14 -0
- package/build/lib/index.esm.js.map +1 -0
- package/build/lib/index.js +1 -0
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -1
- package/build/lib/infiniteQueryBehavior.esm.js +142 -0
- package/build/lib/infiniteQueryBehavior.esm.js.map +1 -0
- package/build/lib/infiniteQueryObserver.esm.js +78 -0
- package/build/lib/infiniteQueryObserver.esm.js.map +1 -0
- package/build/lib/logger.esm.js +4 -0
- package/build/lib/logger.esm.js.map +1 -0
- package/build/lib/logger.native.esm.js +12 -0
- package/build/lib/logger.native.esm.js.map +1 -0
- package/build/lib/mutation.esm.js +243 -0
- package/build/lib/mutation.esm.js.map +1 -0
- package/build/lib/mutationCache.esm.js +85 -0
- package/build/lib/mutationCache.esm.js.map +1 -0
- package/build/lib/mutationObserver.esm.js +126 -0
- package/build/lib/mutationObserver.esm.js.map +1 -0
- package/build/lib/notifyManager.esm.js +99 -0
- package/build/lib/notifyManager.esm.js.map +1 -0
- package/build/lib/onlineManager.esm.js +85 -0
- package/build/lib/onlineManager.esm.js.map +1 -0
- package/build/lib/queriesObserver.esm.js +156 -0
- package/build/lib/queriesObserver.esm.js.map +1 -0
- package/build/lib/query.esm.js +460 -0
- package/build/lib/query.esm.js.map +1 -0
- package/build/lib/queryCache.esm.js +126 -0
- package/build/lib/queryCache.esm.js.map +1 -0
- package/build/lib/queryClient.esm.js +339 -0
- package/build/lib/queryClient.esm.js.map +1 -0
- package/build/lib/queryObserver.esm.js +515 -0
- package/build/lib/queryObserver.esm.js.map +1 -0
- package/build/lib/removable.esm.js +33 -0
- package/build/lib/removable.esm.js.map +1 -0
- package/build/lib/retryer.esm.js +160 -0
- package/build/lib/retryer.esm.js.map +1 -0
- package/build/lib/subscribable.esm.js +29 -0
- package/build/lib/subscribable.esm.js.map +1 -0
- package/build/lib/tests/focusManager.test.d.ts +1 -0
- package/build/lib/tests/hydration.test.d.ts +1 -0
- package/build/lib/tests/infiniteQueryBehavior.test.d.ts +1 -0
- package/build/lib/tests/infiniteQueryObserver.test.d.ts +1 -0
- package/build/lib/tests/mutationCache.test.d.ts +1 -0
- package/build/lib/tests/mutationObserver.test.d.ts +1 -0
- package/build/lib/tests/mutations.test.d.ts +1 -0
- package/build/lib/tests/notifyManager.test.d.ts +1 -0
- package/build/lib/tests/onlineManager.test.d.ts +1 -0
- package/build/lib/tests/queriesObserver.test.d.ts +1 -0
- package/build/lib/tests/query.test.d.ts +1 -0
- package/build/lib/tests/queryCache.test.d.ts +1 -0
- package/build/lib/tests/queryClient.test.d.ts +1 -0
- package/build/lib/tests/queryObserver.test.d.ts +1 -0
- package/build/lib/tests/utils.d.ts +24 -0
- package/build/lib/tests/utils.test.d.ts +1 -0
- package/build/lib/utils.esm.js +318 -0
- package/build/lib/utils.esm.js.map +1 -0
- package/build/umd/index.development.js +1 -0
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +1 -0
- package/src/tests/focusManager.test.tsx +1 -1
- package/src/tests/hydration.test.tsx +1 -1
- package/src/tests/infiniteQueryBehavior.test.tsx +1 -1
- package/src/tests/infiniteQueryObserver.test.tsx +1 -1
- package/src/tests/mutationCache.test.tsx +1 -6
- package/src/tests/mutationObserver.test.tsx +1 -1
- package/src/tests/mutations.test.tsx +1 -6
- package/src/tests/notifyManager.test.tsx +1 -1
- package/src/tests/onlineManager.test.tsx +1 -1
- package/src/tests/queriesObserver.test.tsx +1 -6
- package/src/tests/query.test.tsx +1 -1
- package/src/tests/queryCache.test.tsx +1 -1
- package/src/tests/queryClient.test.tsx +1 -6
- package/src/tests/queryObserver.test.tsx +1 -1
- package/src/tests/utils.test.tsx +1 -1
- package/src/tests/utils.ts +78 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Subscribable } from './subscribable.esm.js';
|
|
2
|
+
import { isServer } from './utils.esm.js';
|
|
3
|
+
|
|
4
|
+
class OnlineManager extends Subscribable {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
|
|
8
|
+
this.setup = onOnline => {
|
|
9
|
+
// addEventListener does not exist in React Native, but window does
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
11
|
+
if (!isServer && window.addEventListener) {
|
|
12
|
+
const listener = () => onOnline(); // Listen to online
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
window.addEventListener('online', listener, false);
|
|
16
|
+
window.addEventListener('offline', listener, false);
|
|
17
|
+
return () => {
|
|
18
|
+
// Be sure to unsubscribe if a new handler is set
|
|
19
|
+
window.removeEventListener('online', listener);
|
|
20
|
+
window.removeEventListener('offline', listener);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
onSubscribe() {
|
|
27
|
+
if (!this.cleanup) {
|
|
28
|
+
this.setEventListener(this.setup);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
onUnsubscribe() {
|
|
33
|
+
if (!this.hasListeners()) {
|
|
34
|
+
var _this$cleanup;
|
|
35
|
+
|
|
36
|
+
(_this$cleanup = this.cleanup) == null ? void 0 : _this$cleanup.call(this);
|
|
37
|
+
this.cleanup = undefined;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
setEventListener(setup) {
|
|
42
|
+
var _this$cleanup2;
|
|
43
|
+
|
|
44
|
+
this.setup = setup;
|
|
45
|
+
(_this$cleanup2 = this.cleanup) == null ? void 0 : _this$cleanup2.call(this);
|
|
46
|
+
this.cleanup = setup(online => {
|
|
47
|
+
if (typeof online === 'boolean') {
|
|
48
|
+
this.setOnline(online);
|
|
49
|
+
} else {
|
|
50
|
+
this.onOnline();
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
setOnline(online) {
|
|
56
|
+
this.online = online;
|
|
57
|
+
|
|
58
|
+
if (online) {
|
|
59
|
+
this.onOnline();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
onOnline() {
|
|
64
|
+
this.listeners.forEach(listener => {
|
|
65
|
+
listener();
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
isOnline() {
|
|
70
|
+
if (typeof this.online === 'boolean') {
|
|
71
|
+
return this.online;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (typeof navigator === 'undefined' || typeof navigator.onLine === 'undefined') {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return navigator.onLine;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
const onlineManager = new OnlineManager();
|
|
83
|
+
|
|
84
|
+
export { OnlineManager, onlineManager };
|
|
85
|
+
//# sourceMappingURL=onlineManager.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onlineManager.esm.js","sources":["../../src/onlineManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setOnline: (online?: boolean) => void,\n) => (() => void) | undefined\n\nexport class OnlineManager extends Subscribable {\n private online?: boolean\n private cleanup?: () => void\n\n private setup: SetupFn\n\n constructor() {\n super()\n this.setup = (onOnline) => {\n // addEventListener does not exist in React Native, but window does\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!isServer && window.addEventListener) {\n const listener = () => onOnline()\n // Listen to online\n window.addEventListener('online', listener, false)\n window.addEventListener('offline', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('online', listener)\n window.removeEventListener('offline', listener)\n }\n }\n }\n }\n\n protected onSubscribe(): void {\n if (!this.cleanup) {\n this.setEventListener(this.setup)\n }\n }\n\n protected onUnsubscribe() {\n if (!this.hasListeners()) {\n this.cleanup?.()\n this.cleanup = undefined\n }\n }\n\n setEventListener(setup: SetupFn): void {\n this.setup = setup\n this.cleanup?.()\n this.cleanup = setup((online?: boolean) => {\n if (typeof online === 'boolean') {\n this.setOnline(online)\n } else {\n this.onOnline()\n }\n })\n }\n\n setOnline(online?: boolean): void {\n this.online = online\n\n if (online) {\n this.onOnline()\n }\n }\n\n onOnline(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isOnline(): boolean {\n if (typeof this.online === 'boolean') {\n return this.online\n }\n\n if (\n typeof navigator === 'undefined' ||\n typeof navigator.onLine === 'undefined'\n ) {\n return true\n }\n\n return navigator.onLine\n }\n}\n\nexport const onlineManager = new OnlineManager()\n"],"names":["OnlineManager","Subscribable","constructor","setup","onOnline","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","cleanup","setEventListener","onUnsubscribe","hasListeners","undefined","online","setOnline","listeners","forEach","isOnline","navigator","onLine","onlineManager"],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
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.length === 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.length) {
|
|
32
|
+
this.destroy();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
destroy() {
|
|
37
|
+
this.listeners = [];
|
|
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
|
+
getOptimisticResult(queries) {
|
|
84
|
+
return this.findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
findMatchingObservers(queries) {
|
|
88
|
+
const prevObservers = this.observers;
|
|
89
|
+
const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
|
|
90
|
+
const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
|
|
91
|
+
const match = prevObservers.find(observer => observer.options.queryHash === defaultedOptions.queryHash);
|
|
92
|
+
|
|
93
|
+
if (match != null) {
|
|
94
|
+
return [{
|
|
95
|
+
defaultedQueryOptions: defaultedOptions,
|
|
96
|
+
observer: match
|
|
97
|
+
}];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return [];
|
|
101
|
+
});
|
|
102
|
+
const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
|
|
103
|
+
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.includes(defaultedOptions.queryHash));
|
|
104
|
+
const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObservers.some(match => match.observer === prevObserver));
|
|
105
|
+
|
|
106
|
+
const getObserver = options => {
|
|
107
|
+
const defaultedOptions = this.client.defaultQueryOptions(options);
|
|
108
|
+
const currentObserver = this.observersMap[defaultedOptions.queryHash];
|
|
109
|
+
return currentObserver != null ? currentObserver : new QueryObserver(this.client, defaultedOptions);
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
const newOrReusedObservers = unmatchedQueries.map((options, index) => {
|
|
113
|
+
if (options.keepPreviousData) {
|
|
114
|
+
// return previous data from one of the observers that no longer match
|
|
115
|
+
const previouslyUsedObserver = unmatchedObservers[index];
|
|
116
|
+
|
|
117
|
+
if (previouslyUsedObserver !== undefined) {
|
|
118
|
+
return {
|
|
119
|
+
defaultedQueryOptions: options,
|
|
120
|
+
observer: previouslyUsedObserver
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
defaultedQueryOptions: options,
|
|
127
|
+
observer: getObserver(options)
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);
|
|
132
|
+
|
|
133
|
+
return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
onUpdate(observer, result) {
|
|
137
|
+
const index = this.observers.indexOf(observer);
|
|
138
|
+
|
|
139
|
+
if (index !== -1) {
|
|
140
|
+
this.result = replaceAt(this.result, index, result);
|
|
141
|
+
this.notify();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
notify() {
|
|
146
|
+
notifyManager.batch(() => {
|
|
147
|
+
this.listeners.forEach(listener => {
|
|
148
|
+
listener(this.result);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export { QueriesObserver };
|
|
156
|
+
//# sourceMappingURL=queriesObserver.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queriesObserver.esm.js","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { difference, replaceAt } from './utils'\nimport { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport { NotifyOptions, QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\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.length === 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.length) {\n this.destroy()\n }\n }\n\n destroy(): void {\n this.listeners = []\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 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 defaultedQueryOptions = queries.map((options) =>\n this.client.defaultQueryOptions(options),\n )\n\n const matchingObservers: QueryObserverMatch[] =\n defaultedQueryOptions.flatMap((defaultedOptions) => {\n const match = prevObservers.find(\n (observer) =>\n observer.options.queryHash === defaultedOptions.queryHash,\n )\n if (match != null) {\n return [{ defaultedQueryOptions: defaultedOptions, observer: match }]\n }\n return []\n })\n\n const matchedQueryHashes = matchingObservers.map(\n (match) => match.defaultedQueryOptions.queryHash,\n )\n const unmatchedQueries = defaultedQueryOptions.filter(\n (defaultedOptions) =>\n !matchedQueryHashes.includes(defaultedOptions.queryHash),\n )\n\n const unmatchedObservers = prevObservers.filter(\n (prevObserver) =>\n !matchingObservers.some((match) => match.observer === 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","length","forEach","observer","subscribe","onUpdate","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","findMatchingObservers","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","index","hasListeners","difference","notify","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","filter","includes","unmatchedObservers","prevObserver","getObserver","currentObserver","QueryObserver","newOrReusedObservers","keepPreviousData","previouslyUsedObserver","undefined","sortMatchesByOrderOfQueries","a","b","indexOf","concat","sort","replaceAt","listener"],"mappings":"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"}
|