@tanstack/query-core 4.24.10 → 5.0.0-alpha.1
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.d.ts +1 -3
- package/build/lib/focusManager.esm.js +19 -36
- package/build/lib/focusManager.esm.js.map +1 -1
- package/build/lib/focusManager.js +19 -38
- package/build/lib/focusManager.js.map +1 -1
- package/build/lib/focusManager.mjs +19 -36
- package/build/lib/focusManager.mjs.map +1 -1
- package/build/lib/hydration.esm.js +21 -23
- package/build/lib/hydration.esm.js.map +1 -1
- package/build/lib/hydration.js +21 -25
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/hydration.mjs +21 -23
- package/build/lib/hydration.mjs.map +1 -1
- package/build/lib/index.d.ts +1 -2
- package/build/lib/index.esm.js +1 -1
- package/build/lib/index.js +2 -8
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -1
- package/build/lib/infiniteQueryBehavior.d.ts +3 -7
- package/build/lib/infiniteQueryBehavior.esm.js +52 -75
- package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.js +50 -77
- package/build/lib/infiniteQueryBehavior.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.mjs +52 -75
- package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
- package/build/lib/infiniteQueryObserver.d.ts +4 -4
- package/build/lib/infiniteQueryObserver.esm.js +18 -26
- package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
- package/build/lib/infiniteQueryObserver.js +18 -28
- package/build/lib/infiniteQueryObserver.js.map +1 -1
- package/build/lib/infiniteQueryObserver.mjs +18 -26
- package/build/lib/infiniteQueryObserver.mjs.map +1 -1
- package/build/lib/mutation.d.ts +11 -22
- package/build/lib/mutation.esm.js +73 -105
- package/build/lib/mutation.esm.js.map +1 -1
- package/build/lib/mutation.js +73 -107
- package/build/lib/mutation.js.map +1 -1
- package/build/lib/mutation.mjs +73 -105
- package/build/lib/mutation.mjs.map +1 -1
- package/build/lib/mutationCache.d.ts +4 -6
- package/build/lib/mutationCache.esm.js +23 -32
- package/build/lib/mutationCache.esm.js.map +1 -1
- package/build/lib/mutationCache.js +23 -34
- package/build/lib/mutationCache.js.map +1 -1
- package/build/lib/mutationCache.mjs +23 -32
- package/build/lib/mutationCache.mjs.map +1 -1
- package/build/lib/mutationObserver.d.ts +4 -9
- package/build/lib/mutationObserver.esm.js +42 -73
- package/build/lib/mutationObserver.esm.js.map +1 -1
- package/build/lib/mutationObserver.js +42 -75
- package/build/lib/mutationObserver.js.map +1 -1
- package/build/lib/mutationObserver.mjs +42 -73
- package/build/lib/mutationObserver.mjs.map +1 -1
- package/build/lib/notifyManager.esm.js +7 -17
- package/build/lib/notifyManager.esm.js.map +1 -1
- package/build/lib/notifyManager.js +7 -19
- package/build/lib/notifyManager.js.map +1 -1
- package/build/lib/notifyManager.mjs +7 -17
- package/build/lib/notifyManager.mjs.map +1 -1
- package/build/lib/onlineManager.d.ts +1 -3
- package/build/lib/onlineManager.esm.js +16 -30
- package/build/lib/onlineManager.esm.js.map +1 -1
- package/build/lib/onlineManager.js +16 -32
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/onlineManager.mjs +16 -30
- package/build/lib/onlineManager.mjs.map +1 -1
- package/build/lib/queriesObserver.d.ts +3 -10
- package/build/lib/queriesObserver.esm.js +47 -71
- package/build/lib/queriesObserver.esm.js.map +1 -1
- package/build/lib/queriesObserver.js +49 -75
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/queriesObserver.mjs +47 -71
- package/build/lib/queriesObserver.mjs.map +1 -1
- package/build/lib/query.d.ts +14 -21
- package/build/lib/query.esm.js +140 -194
- package/build/lib/query.esm.js.map +1 -1
- package/build/lib/query.js +139 -195
- package/build/lib/query.js.map +1 -1
- package/build/lib/query.mjs +140 -194
- package/build/lib/query.mjs.map +1 -1
- package/build/lib/queryCache.d.ts +12 -7
- package/build/lib/queryCache.esm.js +21 -45
- package/build/lib/queryCache.esm.js.map +1 -1
- package/build/lib/queryCache.js +20 -46
- package/build/lib/queryCache.js.map +1 -1
- package/build/lib/queryCache.mjs +21 -45
- package/build/lib/queryCache.mjs.map +1 -1
- package/build/lib/queryClient.d.ts +18 -46
- package/build/lib/queryClient.esm.js +137 -216
- package/build/lib/queryClient.esm.js.map +1 -1
- package/build/lib/queryClient.js +136 -217
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryClient.mjs +137 -216
- package/build/lib/queryClient.mjs.map +1 -1
- package/build/lib/queryObserver.d.ts +4 -29
- package/build/lib/queryObserver.esm.js +176 -258
- package/build/lib/queryObserver.esm.js.map +1 -1
- package/build/lib/queryObserver.js +176 -260
- package/build/lib/queryObserver.js.map +1 -1
- package/build/lib/queryObserver.mjs +176 -258
- package/build/lib/queryObserver.mjs.map +1 -1
- package/build/lib/removable.d.ts +3 -3
- package/build/lib/removable.esm.js +10 -14
- package/build/lib/removable.esm.js.map +1 -1
- package/build/lib/removable.js +10 -16
- package/build/lib/removable.js.map +1 -1
- package/build/lib/removable.mjs +10 -14
- package/build/lib/removable.mjs.map +1 -1
- package/build/lib/retryer.d.ts +5 -5
- package/build/lib/retryer.esm.js +27 -44
- package/build/lib/retryer.esm.js.map +1 -1
- package/build/lib/retryer.js +27 -46
- package/build/lib/retryer.js.map +1 -1
- package/build/lib/retryer.mjs +27 -44
- package/build/lib/retryer.mjs.map +1 -1
- package/build/lib/subscribable.esm.js +4 -7
- package/build/lib/subscribable.esm.js.map +1 -1
- package/build/lib/subscribable.js +4 -9
- package/build/lib/subscribable.js.map +1 -1
- package/build/lib/subscribable.mjs +4 -7
- package/build/lib/subscribable.mjs.map +1 -1
- package/build/lib/tests/utils.d.ts +3 -12
- package/build/lib/types.d.ts +111 -99
- package/build/lib/utils.d.ts +8 -18
- package/build/lib/utils.esm.js +39 -132
- package/build/lib/utils.esm.js.map +1 -1
- package/build/lib/utils.js +42 -144
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.mjs +39 -132
- package/build/lib/utils.mjs.map +1 -1
- package/build/umd/index.development.js +867 -1399
- 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 +1 -1
- package/src/focusManager.ts +17 -24
- package/src/index.ts +1 -11
- package/src/infiniteQueryBehavior.ts +54 -94
- package/src/infiniteQueryObserver.ts +10 -12
- package/src/mutation.ts +68 -92
- package/src/mutationCache.ts +27 -27
- package/src/mutationObserver.ts +58 -97
- package/src/onlineManager.ts +14 -14
- package/src/queriesObserver.ts +50 -54
- package/src/query.ts +107 -111
- package/src/queryCache.ts +42 -41
- package/src/queryClient.ts +155 -434
- package/src/queryObserver.ts +155 -192
- package/src/removable.ts +13 -13
- package/src/retryer.ts +5 -5
- package/src/subscribable.ts +1 -1
- package/src/tests/focusManager.test.tsx +25 -25
- package/src/tests/hydration.test.tsx +167 -81
- package/src/tests/infiniteQueryBehavior.test.tsx +209 -17
- package/src/tests/infiniteQueryObserver.test.tsx +6 -2
- package/src/tests/mutationCache.test.tsx +127 -127
- package/src/tests/mutationObserver.test.tsx +1 -31
- package/src/tests/mutations.test.tsx +62 -43
- package/src/tests/onlineManager.test.tsx +12 -4
- package/src/tests/queriesObserver.test.tsx +41 -77
- package/src/tests/query.test.tsx +175 -243
- package/src/tests/queryCache.test.tsx +170 -93
- package/src/tests/queryClient.test.tsx +229 -378
- package/src/tests/queryObserver.test.tsx +23 -147
- package/src/tests/utils.test.tsx +84 -29
- package/src/tests/utils.ts +9 -18
- package/src/types.ts +187 -140
- package/src/utils.ts +31 -124
- package/build/lib/logger.d.ts +0 -8
- package/build/lib/logger.esm.js +0 -4
- package/build/lib/logger.esm.js.map +0 -1
- package/build/lib/logger.js +0 -8
- package/build/lib/logger.js.map +0 -1
- package/build/lib/logger.mjs +0 -4
- package/build/lib/logger.mjs.map +0 -1
- package/build/lib/logger.native.d.ts +0 -6
- package/build/lib/logger.native.esm.js +0 -12
- package/build/lib/logger.native.esm.js.map +0 -1
- package/build/lib/logger.native.js +0 -16
- package/build/lib/logger.native.js.map +0 -1
- package/build/lib/logger.native.mjs +0 -12
- package/build/lib/logger.native.mjs.map +0 -1
- package/src/logger.native.ts +0 -11
- package/src/logger.ts +0 -9
|
@@ -1,163 +1,139 @@
|
|
|
1
|
-
import { difference, replaceAt } from './utils.mjs';
|
|
2
1
|
import { notifyManager } from './notifyManager.mjs';
|
|
3
2
|
import { QueryObserver } from './queryObserver.mjs';
|
|
4
3
|
import { Subscribable } from './subscribable.mjs';
|
|
5
4
|
|
|
5
|
+
function difference(array1, array2) {
|
|
6
|
+
return array1.filter(x => array2.indexOf(x) === -1);
|
|
7
|
+
}
|
|
8
|
+
function replaceAt(array, index, value) {
|
|
9
|
+
const copy = array.slice(0);
|
|
10
|
+
copy[index] = value;
|
|
11
|
+
return copy;
|
|
12
|
+
}
|
|
6
13
|
class QueriesObserver extends Subscribable {
|
|
14
|
+
#client;
|
|
15
|
+
#result;
|
|
16
|
+
#queries;
|
|
17
|
+
#observers;
|
|
18
|
+
#observersMap;
|
|
7
19
|
constructor(client, queries) {
|
|
8
20
|
super();
|
|
9
|
-
this
|
|
10
|
-
this
|
|
11
|
-
this
|
|
12
|
-
this
|
|
13
|
-
this
|
|
14
|
-
|
|
21
|
+
this.#client = client;
|
|
22
|
+
this.#queries = [];
|
|
23
|
+
this.#result = [];
|
|
24
|
+
this.#observers = [];
|
|
25
|
+
this.#observersMap = {};
|
|
15
26
|
if (queries) {
|
|
16
27
|
this.setQueries(queries);
|
|
17
28
|
}
|
|
18
29
|
}
|
|
19
|
-
|
|
20
30
|
onSubscribe() {
|
|
21
31
|
if (this.listeners.length === 1) {
|
|
22
|
-
this
|
|
32
|
+
this.#observers.forEach(observer => {
|
|
23
33
|
observer.subscribe(result => {
|
|
24
|
-
this
|
|
34
|
+
this.#onUpdate(observer, result);
|
|
25
35
|
});
|
|
26
36
|
});
|
|
27
37
|
}
|
|
28
38
|
}
|
|
29
|
-
|
|
30
39
|
onUnsubscribe() {
|
|
31
40
|
if (!this.listeners.length) {
|
|
32
41
|
this.destroy();
|
|
33
42
|
}
|
|
34
43
|
}
|
|
35
|
-
|
|
36
44
|
destroy() {
|
|
37
45
|
this.listeners = [];
|
|
38
|
-
this
|
|
46
|
+
this.#observers.forEach(observer => {
|
|
39
47
|
observer.destroy();
|
|
40
48
|
});
|
|
41
49
|
}
|
|
42
|
-
|
|
43
50
|
setQueries(queries, notifyOptions) {
|
|
44
|
-
this
|
|
51
|
+
this.#queries = queries;
|
|
45
52
|
notifyManager.batch(() => {
|
|
46
|
-
const prevObservers = this
|
|
47
|
-
const newObserverMatches = this
|
|
53
|
+
const prevObservers = this.#observers;
|
|
54
|
+
const newObserverMatches = this.#findMatchingObservers(this.#queries);
|
|
48
55
|
|
|
56
|
+
// set options for the new observers to notify of changes
|
|
49
57
|
newObserverMatches.forEach(match => match.observer.setOptions(match.defaultedQueryOptions, notifyOptions));
|
|
50
58
|
const newObservers = newObserverMatches.map(match => match.observer);
|
|
51
59
|
const newObserversMap = Object.fromEntries(newObservers.map(observer => [observer.options.queryHash, observer]));
|
|
52
60
|
const newResult = newObservers.map(observer => observer.getCurrentResult());
|
|
53
61
|
const hasIndexChange = newObservers.some((observer, index) => observer !== prevObservers[index]);
|
|
54
|
-
|
|
55
62
|
if (prevObservers.length === newObservers.length && !hasIndexChange) {
|
|
56
63
|
return;
|
|
57
64
|
}
|
|
58
|
-
|
|
59
|
-
this
|
|
60
|
-
this
|
|
61
|
-
this.result = newResult;
|
|
62
|
-
|
|
65
|
+
this.#observers = newObservers;
|
|
66
|
+
this.#observersMap = newObserversMap;
|
|
67
|
+
this.#result = newResult;
|
|
63
68
|
if (!this.hasListeners()) {
|
|
64
69
|
return;
|
|
65
70
|
}
|
|
66
|
-
|
|
67
71
|
difference(prevObservers, newObservers).forEach(observer => {
|
|
68
72
|
observer.destroy();
|
|
69
73
|
});
|
|
70
74
|
difference(newObservers, prevObservers).forEach(observer => {
|
|
71
75
|
observer.subscribe(result => {
|
|
72
|
-
this
|
|
76
|
+
this.#onUpdate(observer, result);
|
|
73
77
|
});
|
|
74
78
|
});
|
|
75
|
-
this
|
|
79
|
+
this.#notify();
|
|
76
80
|
});
|
|
77
81
|
}
|
|
78
|
-
|
|
79
82
|
getCurrentResult() {
|
|
80
|
-
return this
|
|
83
|
+
return this.#result;
|
|
81
84
|
}
|
|
82
|
-
|
|
83
85
|
getQueries() {
|
|
84
|
-
return this
|
|
86
|
+
return this.#observers.map(observer => observer.getCurrentQuery());
|
|
85
87
|
}
|
|
86
|
-
|
|
87
88
|
getObservers() {
|
|
88
|
-
return this
|
|
89
|
+
return this.#observers;
|
|
89
90
|
}
|
|
90
|
-
|
|
91
91
|
getOptimisticResult(queries) {
|
|
92
|
-
return this
|
|
92
|
+
return this.#findMatchingObservers(queries).map(match => match.observer.getOptimisticResult(match.defaultedQueryOptions));
|
|
93
93
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
const defaultedQueryOptions = queries.map(options => this.client.defaultQueryOptions(options));
|
|
94
|
+
#findMatchingObservers(queries) {
|
|
95
|
+
const prevObservers = this.#observers;
|
|
96
|
+
const defaultedQueryOptions = queries.map(options => this.#client.defaultQueryOptions(options));
|
|
98
97
|
const matchingObservers = defaultedQueryOptions.flatMap(defaultedOptions => {
|
|
99
98
|
const match = prevObservers.find(observer => observer.options.queryHash === defaultedOptions.queryHash);
|
|
100
|
-
|
|
101
99
|
if (match != null) {
|
|
102
100
|
return [{
|
|
103
101
|
defaultedQueryOptions: defaultedOptions,
|
|
104
102
|
observer: match
|
|
105
103
|
}];
|
|
106
104
|
}
|
|
107
|
-
|
|
108
105
|
return [];
|
|
109
106
|
});
|
|
110
107
|
const matchedQueryHashes = matchingObservers.map(match => match.defaultedQueryOptions.queryHash);
|
|
111
108
|
const unmatchedQueries = defaultedQueryOptions.filter(defaultedOptions => !matchedQueryHashes.includes(defaultedOptions.queryHash));
|
|
112
|
-
const unmatchedObservers = prevObservers.filter(prevObserver => !matchingObservers.some(match => match.observer === prevObserver));
|
|
113
|
-
|
|
114
109
|
const getObserver = options => {
|
|
115
|
-
const defaultedOptions = this
|
|
116
|
-
const currentObserver = this
|
|
117
|
-
return currentObserver
|
|
110
|
+
const defaultedOptions = this.#client.defaultQueryOptions(options);
|
|
111
|
+
const currentObserver = this.#observersMap[defaultedOptions.queryHash];
|
|
112
|
+
return currentObserver ?? new QueryObserver(this.#client, defaultedOptions);
|
|
118
113
|
};
|
|
119
|
-
|
|
120
|
-
const newOrReusedObservers = unmatchedQueries.map((options, index) => {
|
|
121
|
-
if (options.keepPreviousData) {
|
|
122
|
-
// return previous data from one of the observers that no longer match
|
|
123
|
-
const previouslyUsedObserver = unmatchedObservers[index];
|
|
124
|
-
|
|
125
|
-
if (previouslyUsedObserver !== undefined) {
|
|
126
|
-
return {
|
|
127
|
-
defaultedQueryOptions: options,
|
|
128
|
-
observer: previouslyUsedObserver
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
114
|
+
const newOrReusedObservers = unmatchedQueries.map(options => {
|
|
133
115
|
return {
|
|
134
116
|
defaultedQueryOptions: options,
|
|
135
117
|
observer: getObserver(options)
|
|
136
118
|
};
|
|
137
119
|
});
|
|
138
|
-
|
|
139
120
|
const sortMatchesByOrderOfQueries = (a, b) => defaultedQueryOptions.indexOf(a.defaultedQueryOptions) - defaultedQueryOptions.indexOf(b.defaultedQueryOptions);
|
|
140
|
-
|
|
141
121
|
return matchingObservers.concat(newOrReusedObservers).sort(sortMatchesByOrderOfQueries);
|
|
142
122
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const index = this.observers.indexOf(observer);
|
|
146
|
-
|
|
123
|
+
#onUpdate(observer, result) {
|
|
124
|
+
const index = this.#observers.indexOf(observer);
|
|
147
125
|
if (index !== -1) {
|
|
148
|
-
this
|
|
149
|
-
this
|
|
126
|
+
this.#result = replaceAt(this.#result, index, result);
|
|
127
|
+
this.#notify();
|
|
150
128
|
}
|
|
151
129
|
}
|
|
152
|
-
|
|
153
|
-
notify() {
|
|
130
|
+
#notify() {
|
|
154
131
|
notifyManager.batch(() => {
|
|
155
132
|
this.listeners.forEach(listener => {
|
|
156
|
-
listener(this
|
|
133
|
+
listener(this.#result);
|
|
157
134
|
});
|
|
158
135
|
});
|
|
159
136
|
}
|
|
160
|
-
|
|
161
137
|
}
|
|
162
138
|
|
|
163
139
|
export { QueriesObserver };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queriesObserver.mjs","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 type { NotifyOptions } from './queryObserver'\nimport { 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 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 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","getQueries","getCurrentQuery","getObservers","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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"}
|
|
1
|
+
{"version":3,"file":"queriesObserver.mjs","sources":["../../src/queriesObserver.ts"],"sourcesContent":["import { notifyManager } from './notifyManager'\nimport type {\n QueryObserverOptions,\n QueryObserverResult,\n DefaultedQueryObserverOptions,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport { Subscribable } from './subscribable'\n\nfunction difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nfunction replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\ntype QueriesObserverListener = (result: QueryObserverResult[]) => void\n\nexport class QueriesObserver extends Subscribable<QueriesObserverListener> {\n #client: QueryClient\n #result: QueryObserverResult[]\n #queries: QueryObserverOptions[]\n #observers: QueryObserver[]\n #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 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 #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 getObserver = (options: QueryObserverOptions): QueryObserver => {\n const defaultedOptions = this.#client.defaultQueryOptions(options)\n const currentObserver = this.#observersMap[defaultedOptions.queryHash!]\n return (\n currentObserver ?? new QueryObserver(this.#client, defaultedOptions)\n )\n }\n\n const newOrReusedObservers: QueryObserverMatch[] = unmatchedQueries.map(\n (options) => {\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 #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 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":["difference","array1","array2","filter","x","indexOf","replaceAt","array","index","value","copy","slice","QueriesObserver","Subscribable","constructor","client","queries","setQueries","onSubscribe","listeners","length","forEach","observer","subscribe","result","onUnsubscribe","destroy","notifyOptions","notifyManager","batch","prevObservers","newObserverMatches","match","setOptions","defaultedQueryOptions","newObservers","map","newObserversMap","Object","fromEntries","options","queryHash","newResult","getCurrentResult","hasIndexChange","some","hasListeners","getQueries","getCurrentQuery","getObservers","getOptimisticResult","defaultQueryOptions","matchingObservers","flatMap","defaultedOptions","find","matchedQueryHashes","unmatchedQueries","includes","getObserver","currentObserver","QueryObserver","newOrReusedObservers","sortMatchesByOrderOfQueries","a","b","concat","sort","listener"],"mappings":";;;;AAWA,SAASA,UAAU,CAAIC,MAAW,EAAEC,MAAW,EAAO;AACpD,EAAA,OAAOD,MAAM,CAACE,MAAM,CAAEC,CAAC,IAAKF,MAAM,CAACG,OAAO,CAACD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AACvD,CAAA;AAEA,SAASE,SAAS,CAAIC,KAAU,EAAEC,KAAa,EAAEC,KAAQ,EAAO;AAC9D,EAAA,MAAMC,IAAI,GAAGH,KAAK,CAACI,KAAK,CAAC,CAAC,CAAC,CAAA;AAC3BD,EAAAA,IAAI,CAACF,KAAK,CAAC,GAAGC,KAAK,CAAA;AACnB,EAAA,OAAOC,IAAI,CAAA;AACb,CAAA;AAIO,MAAME,eAAe,SAASC,YAAY,CAA0B;AACzE,EAAA,OAAO,CAAA;AACP,EAAA,OAAO,CAAA;AACP,EAAA,QAAQ,CAAA;AACR,EAAA,UAAU,CAAA;AACV,EAAA,aAAa,CAAA;AAEbC,EAAAA,WAAW,CAACC,MAAmB,EAAEC,OAAgC,EAAE;AACjE,IAAA,KAAK,EAAE,CAAA;AAEP,IAAA,IAAI,CAAC,OAAO,GAAGD,MAAM,CAAA;AACrB,IAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;AAClB,IAAA,IAAI,CAAC,OAAO,GAAG,EAAE,CAAA;AACjB,IAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;AACpB,IAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;AAEvB,IAAA,IAAIC,OAAO,EAAE;AACX,MAAA,IAAI,CAACC,UAAU,CAACD,OAAO,CAAC,CAAA;AAC1B,KAAA;AACF,GAAA;AAEUE,EAAAA,WAAW,GAAS;AAC5B,IAAA,IAAI,IAAI,CAACC,SAAS,CAACC,MAAM,KAAK,CAAC,EAAE;AAC/B,MAAA,IAAI,CAAC,UAAU,CAACC,OAAO,CAAEC,QAAQ,IAAK;AACpCA,QAAAA,QAAQ,CAACC,SAAS,CAAEC,MAAM,IAAK;AAC7B,UAAA,IAAI,CAAC,SAAS,CAACF,QAAQ,EAAEE,MAAM,CAAC,CAAA;AAClC,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;AACJ,KAAA;AACF,GAAA;AAEUC,EAAAA,aAAa,GAAS;AAC9B,IAAA,IAAI,CAAC,IAAI,CAACN,SAAS,CAACC,MAAM,EAAE;MAC1B,IAAI,CAACM,OAAO,EAAE,CAAA;AAChB,KAAA;AACF,GAAA;AAEAA,EAAAA,OAAO,GAAS;IACd,IAAI,CAACP,SAAS,GAAG,EAAE,CAAA;AACnB,IAAA,IAAI,CAAC,UAAU,CAACE,OAAO,CAAEC,QAAQ,IAAK;MACpCA,QAAQ,CAACI,OAAO,EAAE,CAAA;AACpB,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAT,EAAAA,UAAU,CACRD,OAA+B,EAC/BW,aAA6B,EACvB;AACN,IAAA,IAAI,CAAC,QAAQ,GAAGX,OAAO,CAAA;IAEvBY,aAAa,CAACC,KAAK,CAAC,MAAM;AACxB,MAAA,MAAMC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAA;MAErC,MAAMC,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;;AAErE;AACAA,MAAAA,kBAAkB,CAACV,OAAO,CAAEW,KAAK,IAC/BA,KAAK,CAACV,QAAQ,CAACW,UAAU,CAACD,KAAK,CAACE,qBAAqB,EAAEP,aAAa,CAAC,CACtE,CAAA;MAED,MAAMQ,YAAY,GAAGJ,kBAAkB,CAACK,GAAG,CAAEJ,KAAK,IAAKA,KAAK,CAACV,QAAQ,CAAC,CAAA;MACtE,MAAMe,eAAe,GAAGC,MAAM,CAACC,WAAW,CACxCJ,YAAY,CAACC,GAAG,CAAEd,QAAQ,IAAK,CAACA,QAAQ,CAACkB,OAAO,CAACC,SAAS,EAAEnB,QAAQ,CAAC,CAAC,CACvE,CAAA;AACD,MAAA,MAAMoB,SAAS,GAAGP,YAAY,CAACC,GAAG,CAAEd,QAAQ,IAC1CA,QAAQ,CAACqB,gBAAgB,EAAE,CAC5B,CAAA;AAED,MAAA,MAAMC,cAAc,GAAGT,YAAY,CAACU,IAAI,CACtC,CAACvB,QAAQ,EAAEd,KAAK,KAAKc,QAAQ,KAAKQ,aAAa,CAACtB,KAAK,CAAC,CACvD,CAAA;MACD,IAAIsB,aAAa,CAACV,MAAM,KAAKe,YAAY,CAACf,MAAM,IAAI,CAACwB,cAAc,EAAE;AACnE,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAI,CAAC,UAAU,GAAGT,YAAY,CAAA;AAC9B,MAAA,IAAI,CAAC,aAAa,GAAGE,eAAe,CAAA;AACpC,MAAA,IAAI,CAAC,OAAO,GAAGK,SAAS,CAAA;AAExB,MAAA,IAAI,CAAC,IAAI,CAACI,YAAY,EAAE,EAAE;AACxB,QAAA,OAAA;AACF,OAAA;MAEA9C,UAAU,CAAC8B,aAAa,EAAEK,YAAY,CAAC,CAACd,OAAO,CAAEC,QAAQ,IAAK;QAC5DA,QAAQ,CAACI,OAAO,EAAE,CAAA;AACpB,OAAC,CAAC,CAAA;MAEF1B,UAAU,CAACmC,YAAY,EAAEL,aAAa,CAAC,CAACT,OAAO,CAAEC,QAAQ,IAAK;AAC5DA,QAAAA,QAAQ,CAACC,SAAS,CAAEC,MAAM,IAAK;AAC7B,UAAA,IAAI,CAAC,SAAS,CAACF,QAAQ,EAAEE,MAAM,CAAC,CAAA;AAClC,SAAC,CAAC,CAAA;AACJ,OAAC,CAAC,CAAA;MAEF,IAAI,CAAC,OAAO,EAAE,CAAA;AAChB,KAAC,CAAC,CAAA;AACJ,GAAA;AAEAmB,EAAAA,gBAAgB,GAA0B;IACxC,OAAO,IAAI,CAAC,OAAO,CAAA;AACrB,GAAA;AAEAI,EAAAA,UAAU,GAAG;AACX,IAAA,OAAO,IAAI,CAAC,UAAU,CAACX,GAAG,CAAEd,QAAQ,IAAKA,QAAQ,CAAC0B,eAAe,EAAE,CAAC,CAAA;AACtE,GAAA;AAEAC,EAAAA,YAAY,GAAG;IACb,OAAO,IAAI,CAAC,UAAU,CAAA;AACxB,GAAA;EAEAC,mBAAmB,CAAClC,OAA+B,EAAyB;IAC1E,OAAO,IAAI,CAAC,sBAAsB,CAACA,OAAO,CAAC,CAACoB,GAAG,CAAEJ,KAAK,IACpDA,KAAK,CAACV,QAAQ,CAAC4B,mBAAmB,CAAClB,KAAK,CAACE,qBAAqB,CAAC,CAChE,CAAA;AACH,GAAA;EAEA,sBAAsB,CACpBlB,OAA+B,EACT;AACtB,IAAA,MAAMc,aAAa,GAAG,IAAI,CAAC,UAAU,CAAA;AACrC,IAAA,MAAMI,qBAAqB,GAAGlB,OAAO,CAACoB,GAAG,CAAEI,OAAO,IAChD,IAAI,CAAC,OAAO,CAACW,mBAAmB,CAACX,OAAO,CAAC,CAC1C,CAAA;AAED,IAAA,MAAMY,iBAAuC,GAC3ClB,qBAAqB,CAACmB,OAAO,CAAEC,gBAAgB,IAAK;AAClD,MAAA,MAAMtB,KAAK,GAAGF,aAAa,CAACyB,IAAI,CAC7BjC,QAAQ,IACPA,QAAQ,CAACkB,OAAO,CAACC,SAAS,KAAKa,gBAAgB,CAACb,SAAS,CAC5D,CAAA;MACD,IAAIT,KAAK,IAAI,IAAI,EAAE;AACjB,QAAA,OAAO,CAAC;AAAEE,UAAAA,qBAAqB,EAAEoB,gBAAgB;AAAEhC,UAAAA,QAAQ,EAAEU,KAAAA;AAAM,SAAC,CAAC,CAAA;AACvE,OAAA;AACA,MAAA,OAAO,EAAE,CAAA;AACX,KAAC,CAAC,CAAA;AAEJ,IAAA,MAAMwB,kBAAkB,GAAGJ,iBAAiB,CAAChB,GAAG,CAC7CJ,KAAK,IAAKA,KAAK,CAACE,qBAAqB,CAACO,SAAS,CACjD,CAAA;AACD,IAAA,MAAMgB,gBAAgB,GAAGvB,qBAAqB,CAAC/B,MAAM,CAClDmD,gBAAgB,IACf,CAACE,kBAAkB,CAACE,QAAQ,CAACJ,gBAAgB,CAACb,SAAS,CAAC,CAC3D,CAAA;IAED,MAAMkB,WAAW,GAAInB,OAA6B,IAAoB;MACpE,MAAMc,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAACH,mBAAmB,CAACX,OAAO,CAAC,CAAA;MAClE,MAAMoB,eAAe,GAAG,IAAI,CAAC,aAAa,CAACN,gBAAgB,CAACb,SAAS,CAAE,CAAA;MACvE,OACEmB,eAAe,IAAI,IAAIC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAEP,gBAAgB,CAAC,CAAA;KAEvE,CAAA;AAED,IAAA,MAAMQ,oBAA0C,GAAGL,gBAAgB,CAACrB,GAAG,CACpEI,OAAO,IAAK;MACX,OAAO;AACLN,QAAAA,qBAAqB,EAAEM,OAAO;QAC9BlB,QAAQ,EAAEqC,WAAW,CAACnB,OAAO,CAAA;OAC9B,CAAA;AACH,KAAC,CACF,CAAA;IAED,MAAMuB,2BAA2B,GAAG,CAClCC,CAAqB,EACrBC,CAAqB,KAErB/B,qBAAqB,CAAC7B,OAAO,CAAC2D,CAAC,CAAC9B,qBAAqB,CAAC,GACtDA,qBAAqB,CAAC7B,OAAO,CAAC4D,CAAC,CAAC/B,qBAAqB,CAAC,CAAA;IAExD,OAAOkB,iBAAiB,CACrBc,MAAM,CAACJ,oBAAoB,CAAC,CAC5BK,IAAI,CAACJ,2BAA2B,CAAC,CAAA;AACtC,GAAA;AAEA,EAAA,SAAS,CAACzC,QAAuB,EAAEE,MAA2B,EAAQ;IACpE,MAAMhB,KAAK,GAAG,IAAI,CAAC,UAAU,CAACH,OAAO,CAACiB,QAAQ,CAAC,CAAA;AAC/C,IAAA,IAAId,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,MAAA,IAAI,CAAC,OAAO,GAAGF,SAAS,CAAC,IAAI,CAAC,OAAO,EAAEE,KAAK,EAAEgB,MAAM,CAAC,CAAA;MACrD,IAAI,CAAC,OAAO,EAAE,CAAA;AAChB,KAAA;AACF,GAAA;AAEA,EAAA,OAAO,GAAS;IACdI,aAAa,CAACC,KAAK,CAAC,MAAM;AACxB,MAAA,IAAI,CAACV,SAAS,CAACE,OAAO,CAAE+C,QAAQ,IAAK;AACnCA,QAAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACxB,OAAC,CAAC,CAAA;AACJ,KAAC,CAAC,CAAA;AACJ,GAAA;AACF;;;;"}
|
package/build/lib/query.d.ts
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import type { QueryKey, QueryOptions, QueryStatus, QueryMeta, CancelOptions, SetDataOptions, FetchStatus } from './types';
|
|
1
|
+
import type { QueryKey, QueryOptions, QueryStatus, QueryMeta, CancelOptions, SetDataOptions, FetchStatus, RegisteredError } from './types';
|
|
2
2
|
import type { QueryCache } from './queryCache';
|
|
3
3
|
import type { QueryObserver } from './queryObserver';
|
|
4
|
-
import type { Logger } from './logger';
|
|
5
4
|
import { Removable } from './removable';
|
|
6
5
|
interface QueryConfig<TQueryFnData, TError, TData, TQueryKey extends QueryKey = QueryKey> {
|
|
7
6
|
cache: QueryCache;
|
|
8
7
|
queryKey: TQueryKey;
|
|
9
8
|
queryHash: string;
|
|
10
|
-
logger?: Logger;
|
|
11
9
|
options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>;
|
|
12
10
|
defaultOptions?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>;
|
|
13
11
|
state?: QueryState<TData, TError>;
|
|
14
12
|
}
|
|
15
|
-
export interface QueryState<TData = unknown, TError =
|
|
13
|
+
export interface QueryState<TData = unknown, TError = RegisteredError> {
|
|
16
14
|
data: TData | undefined;
|
|
17
15
|
dataUpdateCount: number;
|
|
18
16
|
dataUpdatedAt: number;
|
|
@@ -21,7 +19,7 @@ export interface QueryState<TData = unknown, TError = unknown> {
|
|
|
21
19
|
errorUpdatedAt: number;
|
|
22
20
|
fetchFailureCount: number;
|
|
23
21
|
fetchFailureReason: TError | null;
|
|
24
|
-
fetchMeta:
|
|
22
|
+
fetchMeta: FetchMeta | null;
|
|
25
23
|
isInvalidated: boolean;
|
|
26
24
|
status: QueryStatus;
|
|
27
25
|
fetchStatus: FetchStatus;
|
|
@@ -29,17 +27,22 @@ export interface QueryState<TData = unknown, TError = unknown> {
|
|
|
29
27
|
export interface FetchContext<TQueryFnData, TError, TData, TQueryKey extends QueryKey = QueryKey> {
|
|
30
28
|
fetchFn: () => unknown | Promise<unknown>;
|
|
31
29
|
fetchOptions?: FetchOptions;
|
|
32
|
-
signal
|
|
30
|
+
signal: AbortSignal;
|
|
33
31
|
options: QueryOptions<TQueryFnData, TError, TData, any>;
|
|
34
32
|
queryKey: TQueryKey;
|
|
35
33
|
state: QueryState<TData, TError>;
|
|
36
34
|
}
|
|
37
|
-
export interface QueryBehavior<TQueryFnData = unknown, TError =
|
|
35
|
+
export interface QueryBehavior<TQueryFnData = unknown, TError = RegisteredError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> {
|
|
38
36
|
onFetch: (context: FetchContext<TQueryFnData, TError, TData, TQueryKey>) => void;
|
|
39
37
|
}
|
|
38
|
+
export interface FetchMeta {
|
|
39
|
+
fetchMore?: {
|
|
40
|
+
direction: 'forward' | 'backward';
|
|
41
|
+
};
|
|
42
|
+
}
|
|
40
43
|
export interface FetchOptions {
|
|
41
44
|
cancelRefetch?: boolean;
|
|
42
|
-
meta?:
|
|
45
|
+
meta?: FetchMeta;
|
|
43
46
|
}
|
|
44
47
|
interface FailedAction<TError> {
|
|
45
48
|
type: 'failed';
|
|
@@ -48,7 +51,7 @@ interface FailedAction<TError> {
|
|
|
48
51
|
}
|
|
49
52
|
interface FetchAction {
|
|
50
53
|
type: 'fetch';
|
|
51
|
-
meta?:
|
|
54
|
+
meta?: FetchMeta;
|
|
52
55
|
}
|
|
53
56
|
interface SuccessAction<TData> {
|
|
54
57
|
data: TData | undefined;
|
|
@@ -78,24 +81,15 @@ export declare type Action<TData, TError> = ContinueAction | ErrorAction<TError>
|
|
|
78
81
|
export interface SetStateOptions {
|
|
79
82
|
meta?: any;
|
|
80
83
|
}
|
|
81
|
-
export declare class Query<TQueryFnData = unknown, TError =
|
|
84
|
+
export declare class Query<TQueryFnData = unknown, TError = RegisteredError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends Removable {
|
|
85
|
+
#private;
|
|
82
86
|
queryKey: TQueryKey;
|
|
83
87
|
queryHash: string;
|
|
84
88
|
options: QueryOptions<TQueryFnData, TError, TData, TQueryKey>;
|
|
85
|
-
initialState: QueryState<TData, TError>;
|
|
86
|
-
revertState?: QueryState<TData, TError>;
|
|
87
89
|
state: QueryState<TData, TError>;
|
|
88
90
|
isFetchingOptimistic?: boolean;
|
|
89
|
-
private cache;
|
|
90
|
-
private logger;
|
|
91
|
-
private promise?;
|
|
92
|
-
private retryer?;
|
|
93
|
-
private observers;
|
|
94
|
-
private defaultOptions?;
|
|
95
|
-
private abortSignalConsumed;
|
|
96
91
|
constructor(config: QueryConfig<TQueryFnData, TError, TData, TQueryKey>);
|
|
97
92
|
get meta(): QueryMeta | undefined;
|
|
98
|
-
private setOptions;
|
|
99
93
|
protected optionalRemove(): void;
|
|
100
94
|
setData(newData: TData, options?: SetDataOptions & {
|
|
101
95
|
manual: boolean;
|
|
@@ -115,6 +109,5 @@ export declare class Query<TQueryFnData = unknown, TError = unknown, TData = TQu
|
|
|
115
109
|
getObserversCount(): number;
|
|
116
110
|
invalidate(): void;
|
|
117
111
|
fetch(options?: QueryOptions<TQueryFnData, TError, TData, TQueryKey>, fetchOptions?: FetchOptions): Promise<TData>;
|
|
118
|
-
private dispatch;
|
|
119
112
|
}
|
|
120
113
|
export {};
|