@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
package/build/lib/utils.esm.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
// TYPES
|
|
2
|
+
|
|
2
3
|
// UTILS
|
|
4
|
+
|
|
3
5
|
const isServer = typeof window === 'undefined' || 'Deno' in window;
|
|
4
6
|
function noop() {
|
|
5
7
|
return undefined;
|
|
@@ -10,66 +12,9 @@ function functionalUpdate(updater, input) {
|
|
|
10
12
|
function isValidTimeout(value) {
|
|
11
13
|
return typeof value === 'number' && value >= 0 && value !== Infinity;
|
|
12
14
|
}
|
|
13
|
-
function difference(array1, array2) {
|
|
14
|
-
return array1.filter(x => array2.indexOf(x) === -1);
|
|
15
|
-
}
|
|
16
|
-
function replaceAt(array, index, value) {
|
|
17
|
-
const copy = array.slice(0);
|
|
18
|
-
copy[index] = value;
|
|
19
|
-
return copy;
|
|
20
|
-
}
|
|
21
15
|
function timeUntilStale(updatedAt, staleTime) {
|
|
22
16
|
return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);
|
|
23
17
|
}
|
|
24
|
-
function parseQueryArgs(arg1, arg2, arg3) {
|
|
25
|
-
if (!isQueryKey(arg1)) {
|
|
26
|
-
return arg1;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (typeof arg2 === 'function') {
|
|
30
|
-
return { ...arg3,
|
|
31
|
-
queryKey: arg1,
|
|
32
|
-
queryFn: arg2
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return { ...arg2,
|
|
37
|
-
queryKey: arg1
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function parseMutationArgs(arg1, arg2, arg3) {
|
|
41
|
-
if (isQueryKey(arg1)) {
|
|
42
|
-
if (typeof arg2 === 'function') {
|
|
43
|
-
return { ...arg3,
|
|
44
|
-
mutationKey: arg1,
|
|
45
|
-
mutationFn: arg2
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return { ...arg2,
|
|
50
|
-
mutationKey: arg1
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (typeof arg1 === 'function') {
|
|
55
|
-
return { ...arg2,
|
|
56
|
-
mutationFn: arg1
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return { ...arg1
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
function parseFilterArgs(arg1, arg2, arg3) {
|
|
64
|
-
return isQueryKey(arg1) ? [{ ...arg2,
|
|
65
|
-
queryKey: arg1
|
|
66
|
-
}, arg3] : [arg1 || {}, arg2];
|
|
67
|
-
}
|
|
68
|
-
function parseMutationFilterArgs(arg1, arg2, arg3) {
|
|
69
|
-
return isQueryKey(arg1) ? [{ ...arg2,
|
|
70
|
-
mutationKey: arg1
|
|
71
|
-
}, arg3] : [arg1 || {}, arg2];
|
|
72
|
-
}
|
|
73
18
|
function matchQuery(filters, query) {
|
|
74
19
|
const {
|
|
75
20
|
type = 'all',
|
|
@@ -79,8 +24,7 @@ function matchQuery(filters, query) {
|
|
|
79
24
|
queryKey,
|
|
80
25
|
stale
|
|
81
26
|
} = filters;
|
|
82
|
-
|
|
83
|
-
if (isQueryKey(queryKey)) {
|
|
27
|
+
if (queryKey) {
|
|
84
28
|
if (exact) {
|
|
85
29
|
if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {
|
|
86
30
|
return false;
|
|
@@ -89,106 +33,86 @@ function matchQuery(filters, query) {
|
|
|
89
33
|
return false;
|
|
90
34
|
}
|
|
91
35
|
}
|
|
92
|
-
|
|
93
36
|
if (type !== 'all') {
|
|
94
37
|
const isActive = query.isActive();
|
|
95
|
-
|
|
96
38
|
if (type === 'active' && !isActive) {
|
|
97
39
|
return false;
|
|
98
40
|
}
|
|
99
|
-
|
|
100
41
|
if (type === 'inactive' && isActive) {
|
|
101
42
|
return false;
|
|
102
43
|
}
|
|
103
44
|
}
|
|
104
|
-
|
|
105
45
|
if (typeof stale === 'boolean' && query.isStale() !== stale) {
|
|
106
46
|
return false;
|
|
107
47
|
}
|
|
108
|
-
|
|
109
48
|
if (typeof fetchStatus !== 'undefined' && fetchStatus !== query.state.fetchStatus) {
|
|
110
49
|
return false;
|
|
111
50
|
}
|
|
112
|
-
|
|
113
51
|
if (predicate && !predicate(query)) {
|
|
114
52
|
return false;
|
|
115
53
|
}
|
|
116
|
-
|
|
117
54
|
return true;
|
|
118
55
|
}
|
|
119
56
|
function matchMutation(filters, mutation) {
|
|
120
57
|
const {
|
|
121
58
|
exact,
|
|
122
|
-
|
|
59
|
+
status,
|
|
123
60
|
predicate,
|
|
124
61
|
mutationKey
|
|
125
62
|
} = filters;
|
|
126
|
-
|
|
127
|
-
if (isQueryKey(mutationKey)) {
|
|
63
|
+
if (mutationKey) {
|
|
128
64
|
if (!mutation.options.mutationKey) {
|
|
129
65
|
return false;
|
|
130
66
|
}
|
|
131
|
-
|
|
132
67
|
if (exact) {
|
|
133
|
-
if (
|
|
68
|
+
if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {
|
|
134
69
|
return false;
|
|
135
70
|
}
|
|
136
71
|
} else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {
|
|
137
72
|
return false;
|
|
138
73
|
}
|
|
139
74
|
}
|
|
140
|
-
|
|
141
|
-
if (typeof fetching === 'boolean' && mutation.state.status === 'loading' !== fetching) {
|
|
75
|
+
if (status && mutation.state.status !== status) {
|
|
142
76
|
return false;
|
|
143
77
|
}
|
|
144
|
-
|
|
145
78
|
if (predicate && !predicate(mutation)) {
|
|
146
79
|
return false;
|
|
147
80
|
}
|
|
148
|
-
|
|
149
81
|
return true;
|
|
150
82
|
}
|
|
151
83
|
function hashQueryKeyByOptions(queryKey, options) {
|
|
152
|
-
const hashFn =
|
|
84
|
+
const hashFn = options?.queryKeyHashFn || hashKey;
|
|
153
85
|
return hashFn(queryKey);
|
|
154
86
|
}
|
|
87
|
+
|
|
155
88
|
/**
|
|
156
|
-
* Default query keys hash function.
|
|
89
|
+
* Default query & mutation keys hash function.
|
|
157
90
|
* Hashes the value into a stable hash.
|
|
158
91
|
*/
|
|
159
|
-
|
|
160
|
-
function hashQueryKey(queryKey) {
|
|
92
|
+
function hashKey(queryKey) {
|
|
161
93
|
return JSON.stringify(queryKey, (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {
|
|
162
94
|
result[key] = val[key];
|
|
163
95
|
return result;
|
|
164
96
|
}, {}) : val);
|
|
165
97
|
}
|
|
98
|
+
|
|
166
99
|
/**
|
|
167
100
|
* Checks if key `b` partially matches with key `a`.
|
|
168
101
|
*/
|
|
169
102
|
|
|
170
103
|
function partialMatchKey(a, b) {
|
|
171
|
-
return partialDeepEqual(a, b);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Checks if `b` partially matches with `a`.
|
|
175
|
-
*/
|
|
176
|
-
|
|
177
|
-
function partialDeepEqual(a, b) {
|
|
178
104
|
if (a === b) {
|
|
179
105
|
return true;
|
|
180
106
|
}
|
|
181
|
-
|
|
182
107
|
if (typeof a !== typeof b) {
|
|
183
108
|
return false;
|
|
184
109
|
}
|
|
185
|
-
|
|
186
110
|
if (a && b && typeof a === 'object' && typeof b === 'object') {
|
|
187
|
-
return !Object.keys(b).some(key => !
|
|
111
|
+
return !Object.keys(b).some(key => !partialMatchKey(a[key], b[key]));
|
|
188
112
|
}
|
|
189
|
-
|
|
190
113
|
return false;
|
|
191
114
|
}
|
|
115
|
+
|
|
192
116
|
/**
|
|
193
117
|
* This function returns `a` if `b` is deeply equal.
|
|
194
118
|
* If not, it will replace any deeply equal children of `b` with those of `a`.
|
|
@@ -199,122 +123,105 @@ function replaceEqualDeep(a, b) {
|
|
|
199
123
|
if (a === b) {
|
|
200
124
|
return a;
|
|
201
125
|
}
|
|
202
|
-
|
|
203
126
|
const array = isPlainArray(a) && isPlainArray(b);
|
|
204
|
-
|
|
205
127
|
if (array || isPlainObject(a) && isPlainObject(b)) {
|
|
206
128
|
const aSize = array ? a.length : Object.keys(a).length;
|
|
207
129
|
const bItems = array ? b : Object.keys(b);
|
|
208
130
|
const bSize = bItems.length;
|
|
209
131
|
const copy = array ? [] : {};
|
|
210
132
|
let equalItems = 0;
|
|
211
|
-
|
|
212
133
|
for (let i = 0; i < bSize; i++) {
|
|
213
134
|
const key = array ? i : bItems[i];
|
|
214
135
|
copy[key] = replaceEqualDeep(a[key], b[key]);
|
|
215
|
-
|
|
216
136
|
if (copy[key] === a[key]) {
|
|
217
137
|
equalItems++;
|
|
218
138
|
}
|
|
219
139
|
}
|
|
220
|
-
|
|
221
140
|
return aSize === bSize && equalItems === aSize ? a : copy;
|
|
222
141
|
}
|
|
223
|
-
|
|
224
142
|
return b;
|
|
225
143
|
}
|
|
144
|
+
|
|
226
145
|
/**
|
|
227
146
|
* Shallow compare objects. Only works with objects that always have the same properties.
|
|
228
147
|
*/
|
|
229
|
-
|
|
230
148
|
function shallowEqualObjects(a, b) {
|
|
231
149
|
if (a && !b || b && !a) {
|
|
232
150
|
return false;
|
|
233
151
|
}
|
|
234
|
-
|
|
235
152
|
for (const key in a) {
|
|
236
153
|
if (a[key] !== b[key]) {
|
|
237
154
|
return false;
|
|
238
155
|
}
|
|
239
156
|
}
|
|
240
|
-
|
|
241
157
|
return true;
|
|
242
158
|
}
|
|
243
159
|
function isPlainArray(value) {
|
|
244
160
|
return Array.isArray(value) && value.length === Object.keys(value).length;
|
|
245
|
-
}
|
|
161
|
+
}
|
|
246
162
|
|
|
163
|
+
// Copied from: https://github.com/jonschlinkert/is-plain-object
|
|
247
164
|
function isPlainObject(o) {
|
|
248
165
|
if (!hasObjectPrototype(o)) {
|
|
249
166
|
return false;
|
|
250
|
-
}
|
|
251
|
-
|
|
167
|
+
}
|
|
252
168
|
|
|
169
|
+
// If has modified constructor
|
|
253
170
|
const ctor = o.constructor;
|
|
254
|
-
|
|
255
171
|
if (typeof ctor === 'undefined') {
|
|
256
172
|
return true;
|
|
257
|
-
}
|
|
258
|
-
|
|
173
|
+
}
|
|
259
174
|
|
|
175
|
+
// If has modified prototype
|
|
260
176
|
const prot = ctor.prototype;
|
|
261
|
-
|
|
262
177
|
if (!hasObjectPrototype(prot)) {
|
|
263
178
|
return false;
|
|
264
|
-
}
|
|
265
|
-
|
|
179
|
+
}
|
|
266
180
|
|
|
181
|
+
// If constructor does not have an Object-specific method
|
|
267
182
|
if (!prot.hasOwnProperty('isPrototypeOf')) {
|
|
268
183
|
return false;
|
|
269
|
-
}
|
|
270
|
-
|
|
184
|
+
}
|
|
271
185
|
|
|
186
|
+
// Most likely a plain Object
|
|
272
187
|
return true;
|
|
273
188
|
}
|
|
274
|
-
|
|
275
189
|
function hasObjectPrototype(o) {
|
|
276
190
|
return Object.prototype.toString.call(o) === '[object Object]';
|
|
277
191
|
}
|
|
278
|
-
|
|
279
|
-
function isQueryKey(value) {
|
|
280
|
-
return Array.isArray(value);
|
|
281
|
-
}
|
|
282
|
-
function isError(value) {
|
|
283
|
-
return value instanceof Error;
|
|
284
|
-
}
|
|
285
192
|
function sleep(timeout) {
|
|
286
193
|
return new Promise(resolve => {
|
|
287
194
|
setTimeout(resolve, timeout);
|
|
288
195
|
});
|
|
289
196
|
}
|
|
197
|
+
|
|
290
198
|
/**
|
|
291
199
|
* Schedules a microtask.
|
|
292
200
|
* This can be useful to schedule state updates after rendering.
|
|
293
201
|
*/
|
|
294
|
-
|
|
295
202
|
function scheduleMicrotask(callback) {
|
|
296
203
|
sleep(0).then(callback);
|
|
297
204
|
}
|
|
298
|
-
function getAbortController() {
|
|
299
|
-
if (typeof AbortController === 'function') {
|
|
300
|
-
return new AbortController();
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
return;
|
|
304
|
-
}
|
|
305
205
|
function replaceData(prevData, data, options) {
|
|
306
|
-
|
|
307
|
-
if (options.isDataEqual != null && options.isDataEqual(prevData, data)) {
|
|
308
|
-
return prevData;
|
|
309
|
-
} else if (typeof options.structuralSharing === 'function') {
|
|
206
|
+
if (typeof options.structuralSharing === 'function') {
|
|
310
207
|
return options.structuralSharing(prevData, data);
|
|
311
208
|
} else if (options.structuralSharing !== false) {
|
|
312
209
|
// Structurally share data between prev and new data if needed
|
|
313
210
|
return replaceEqualDeep(prevData, data);
|
|
314
211
|
}
|
|
315
|
-
|
|
316
212
|
return data;
|
|
317
213
|
}
|
|
214
|
+
function keepPreviousData(previousData) {
|
|
215
|
+
return previousData;
|
|
216
|
+
}
|
|
217
|
+
function addToEnd(items, item, max = 0) {
|
|
218
|
+
const newItems = [...items, item];
|
|
219
|
+
return max && newItems.length > max ? newItems.slice(1) : newItems;
|
|
220
|
+
}
|
|
221
|
+
function addToStart(items, item, max = 0) {
|
|
222
|
+
const newItems = [item, ...items];
|
|
223
|
+
return max && newItems.length > max ? newItems.slice(0, -1) : newItems;
|
|
224
|
+
}
|
|
318
225
|
|
|
319
|
-
export {
|
|
226
|
+
export { addToEnd, addToStart, functionalUpdate, hashKey, hashQueryKeyByOptions, isPlainArray, isPlainObject, isServer, isValidTimeout, keepPreviousData, matchMutation, matchQuery, noop, partialMatchKey, replaceData, replaceEqualDeep, scheduleMicrotask, shallowEqualObjects, sleep, timeUntilStale };
|
|
320
227
|
//# sourceMappingURL=utils.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.esm.js","sources":["../../src/utils.ts"],"sourcesContent":["import type { Mutation } from './mutation'\nimport type { Query } from './query'\nimport type {\n FetchStatus,\n MutationFunction,\n MutationKey,\n MutationOptions,\n QueryFunction,\n QueryKey,\n QueryOptions,\n} from './types'\n\n// TYPES\n\nexport interface QueryFilters {\n /**\n * Filter to active queries, inactive queries or all queries\n */\n type?: QueryTypeFilter\n /**\n * Match query key exactly\n */\n exact?: boolean\n /**\n * Include queries matching this predicate function\n */\n predicate?: (query: Query) => boolean\n /**\n * Include queries matching this query key\n */\n queryKey?: QueryKey\n /**\n * Include or exclude stale queries\n */\n stale?: boolean\n /**\n * Include queries matching their fetchStatus\n */\n fetchStatus?: FetchStatus\n}\n\nexport interface MutationFilters {\n /**\n * Match mutation key exactly\n */\n exact?: boolean\n /**\n * Include mutations matching this predicate function\n */\n predicate?: (mutation: Mutation<any, any, any>) => boolean\n /**\n * Include mutations matching this mutation key\n */\n mutationKey?: MutationKey\n /**\n * Include or exclude fetching mutations\n */\n fetching?: boolean\n}\n\nexport type DataUpdateFunction<TInput, TOutput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput> =\n | TOutput\n | DataUpdateFunction<TInput, TOutput>\n\nexport type QueryTypeFilter = 'all' | 'active' | 'inactive'\n\n// UTILS\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in window\n\nexport function noop(): undefined {\n return undefined\n}\n\nexport function functionalUpdate<TInput, TOutput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as DataUpdateFunction<TInput, TOutput>)(input)\n : updater\n}\n\nexport function isValidTimeout(value: unknown): value is number {\n return typeof value === 'number' && value >= 0 && value !== Infinity\n}\n\nexport function difference<T>(array1: T[], array2: T[]): T[] {\n return array1.filter((x) => array2.indexOf(x) === -1)\n}\n\nexport function replaceAt<T>(array: T[], index: number, value: T): T[] {\n const copy = array.slice(0)\n copy[index] = value\n return copy\n}\n\nexport function timeUntilStale(updatedAt: number, staleTime?: number): number {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport function parseQueryArgs<\n TOptions extends QueryOptions<any, any, any, TQueryKey>,\n TQueryKey extends QueryKey = QueryKey,\n>(\n arg1: TQueryKey | TOptions,\n arg2?: QueryFunction<any, TQueryKey> | TOptions,\n arg3?: TOptions,\n): TOptions {\n if (!isQueryKey(arg1)) {\n return arg1 as TOptions\n }\n\n if (typeof arg2 === 'function') {\n return { ...arg3, queryKey: arg1, queryFn: arg2 } as TOptions\n }\n\n return { ...arg2, queryKey: arg1 } as TOptions\n}\n\nexport function parseMutationArgs<\n TOptions extends MutationOptions<any, any, any, any>,\n>(\n arg1: MutationKey | MutationFunction<any, any> | TOptions,\n arg2?: MutationFunction<any, any> | TOptions,\n arg3?: TOptions,\n): TOptions {\n if (isQueryKey(arg1)) {\n if (typeof arg2 === 'function') {\n return { ...arg3, mutationKey: arg1, mutationFn: arg2 } as TOptions\n }\n return { ...arg2, mutationKey: arg1 } as TOptions\n }\n\n if (typeof arg1 === 'function') {\n return { ...arg2, mutationFn: arg1 } as TOptions\n }\n\n return { ...arg1 } as TOptions\n}\n\nexport function parseFilterArgs<\n TFilters extends QueryFilters,\n TOptions = unknown,\n>(\n arg1?: QueryKey | TFilters,\n arg2?: TFilters | TOptions,\n arg3?: TOptions,\n): [TFilters, TOptions | undefined] {\n return (\n isQueryKey(arg1) ? [{ ...arg2, queryKey: arg1 }, arg3] : [arg1 || {}, arg2]\n ) as [TFilters, TOptions]\n}\n\nexport function parseMutationFilterArgs<\n TFilters extends MutationFilters,\n TOptions = unknown,\n>(\n arg1?: QueryKey | TFilters,\n arg2?: TFilters | TOptions,\n arg3?: TOptions,\n): [TFilters, TOptions | undefined] {\n return (\n isQueryKey(arg1)\n ? [{ ...arg2, mutationKey: arg1 }, arg3]\n : [arg1 || {}, arg2]\n ) as [TFilters, TOptions]\n}\n\nexport function matchQuery(\n filters: QueryFilters,\n query: Query<any, any, any, any>,\n): boolean {\n const {\n type = 'all',\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale,\n } = filters\n\n if (isQueryKey(queryKey)) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false\n }\n }\n\n if (type !== 'all') {\n const isActive = query.isActive()\n if (type === 'active' && !isActive) {\n return false\n }\n if (type === 'inactive' && isActive) {\n return false\n }\n }\n\n if (typeof stale === 'boolean' && query.isStale() !== stale) {\n return false\n }\n\n if (\n typeof fetchStatus !== 'undefined' &&\n fetchStatus !== query.state.fetchStatus\n ) {\n return false\n }\n\n if (predicate && !predicate(query)) {\n return false\n }\n\n return true\n}\n\nexport function matchMutation(\n filters: MutationFilters,\n mutation: Mutation<any, any>,\n): boolean {\n const { exact, fetching, predicate, mutationKey } = filters\n if (isQueryKey(mutationKey)) {\n if (!mutation.options.mutationKey) {\n return false\n }\n if (exact) {\n if (\n hashQueryKey(mutation.options.mutationKey) !== hashQueryKey(mutationKey)\n ) {\n return false\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false\n }\n }\n\n if (\n typeof fetching === 'boolean' &&\n (mutation.state.status === 'loading') !== fetching\n ) {\n return false\n }\n\n if (predicate && !predicate(mutation)) {\n return false\n }\n\n return true\n}\n\nexport function hashQueryKeyByOptions<TQueryKey extends QueryKey = QueryKey>(\n queryKey: TQueryKey,\n options?: QueryOptions<any, any, any, TQueryKey>,\n): string {\n const hashFn = options?.queryKeyHashFn || hashQueryKey\n return hashFn(queryKey)\n}\n\n/**\n * Default query keys hash function.\n * Hashes the value into a stable hash.\n */\nexport function hashQueryKey(queryKey: QueryKey): string {\n return JSON.stringify(queryKey, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key]\n return result\n }, {} as any)\n : val,\n )\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport function partialMatchKey(a: QueryKey, b: QueryKey): boolean {\n return partialDeepEqual(a, b)\n}\n\n/**\n * Checks if `b` partially matches with `a`.\n */\nexport function partialDeepEqual(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n return !Object.keys(b).some((key) => !partialDeepEqual(a[key], b[key]))\n }\n\n return false\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep<T>(a: unknown, b: T): T\nexport function replaceEqualDeep(a: any, b: any): any {\n if (a === b) {\n return a\n }\n\n const array = isPlainArray(a) && isPlainArray(b)\n\n if (array || (isPlainObject(a) && isPlainObject(b))) {\n const aSize = array ? a.length : Object.keys(a).length\n const bItems = array ? b : Object.keys(b)\n const bSize = bItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i]\n copy[key] = replaceEqualDeep(a[key], b[key])\n if (copy[key] === a[key]) {\n equalItems++\n }\n }\n\n return aSize === bSize && equalItems === aSize ? a : copy\n }\n\n return b\n}\n\n/**\n * Shallow compare objects. Only works with objects that always have the same properties.\n */\nexport function shallowEqualObjects<T>(a: T, b: T): boolean {\n if ((a && !b) || (b && !a)) {\n return false\n }\n\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\nexport function isPlainObject(o: any): o is Object {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has modified constructor\n const ctor = o.constructor\n if (typeof ctor === 'undefined') {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function isQueryKey(value: unknown): value is QueryKey {\n return Array.isArray(value)\n}\n\nexport function isError(value: any): value is Error {\n return value instanceof Error\n}\n\nexport function sleep(timeout: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, timeout)\n })\n}\n\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\nexport function scheduleMicrotask(callback: () => void) {\n sleep(0).then(callback)\n}\n\nexport function getAbortController(): AbortController | undefined {\n if (typeof AbortController === 'function') {\n return new AbortController()\n }\n return\n}\n\nexport function replaceData<\n TData,\n TOptions extends QueryOptions<any, any, any, any>,\n>(prevData: TData | undefined, data: TData, options: TOptions): TData {\n // Use prev data if an isDataEqual function is defined and returns `true`\n if (options.isDataEqual?.(prevData, data)) {\n return prevData as TData\n } else if (typeof options.structuralSharing === 'function') {\n return options.structuralSharing(prevData, data)\n } else if (options.structuralSharing !== false) {\n // Structurally share data between prev and new data if needed\n return replaceEqualDeep(prevData, data)\n }\n return data\n}\n"],"names":["isServer","window","noop","undefined","functionalUpdate","updater","input","isValidTimeout","value","Infinity","difference","array1","array2","filter","x","indexOf","replaceAt","array","index","copy","slice","timeUntilStale","updatedAt","staleTime","Math","max","Date","now","parseQueryArgs","arg1","arg2","arg3","isQueryKey","queryKey","queryFn","parseMutationArgs","mutationKey","mutationFn","parseFilterArgs","parseMutationFilterArgs","matchQuery","filters","query","type","exact","fetchStatus","predicate","stale","queryHash","hashQueryKeyByOptions","options","partialMatchKey","isActive","isStale","state","matchMutation","mutation","fetching","hashQueryKey","status","hashFn","queryKeyHashFn","JSON","stringify","_","val","isPlainObject","Object","keys","sort","reduce","result","key","a","b","partialDeepEqual","some","replaceEqualDeep","isPlainArray","aSize","length","bItems","bSize","equalItems","i","shallowEqualObjects","Array","isArray","o","hasObjectPrototype","ctor","constructor","prot","prototype","hasOwnProperty","toString","call","isError","Error","sleep","timeout","Promise","resolve","setTimeout","scheduleMicrotask","callback","then","getAbortController","AbortController","replaceData","prevData","data","isDataEqual","structuralSharing"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.esm.js","sources":["../../src/utils.ts"],"sourcesContent":["import type { Mutation } from './mutation'\nimport type { Query } from './query'\nimport type {\n FetchStatus,\n MutationKey,\n MutationStatus,\n QueryKey,\n QueryOptions,\n} from './types'\n\n// TYPES\n\nexport interface QueryFilters {\n /**\n * Filter to active queries, inactive queries or all queries\n */\n type?: QueryTypeFilter\n /**\n * Match query key exactly\n */\n exact?: boolean\n /**\n * Include queries matching this predicate function\n */\n predicate?: (query: Query) => boolean\n /**\n * Include queries matching this query key\n */\n queryKey?: QueryKey\n /**\n * Include or exclude stale queries\n */\n stale?: boolean\n /**\n * Include queries matching their fetchStatus\n */\n fetchStatus?: FetchStatus\n}\n\nexport interface MutationFilters {\n /**\n * Match mutation key exactly\n */\n exact?: boolean\n /**\n * Include mutations matching this predicate function\n */\n predicate?: (mutation: Mutation<any, any, any>) => boolean\n /**\n * Include mutations matching this mutation key\n */\n mutationKey?: MutationKey\n /**\n * Filter by mutation status\n */\n status?: MutationStatus\n}\n\nexport type DataUpdateFunction<TInput, TOutput> = (input: TInput) => TOutput\n\nexport type Updater<TInput, TOutput> =\n | TOutput\n | DataUpdateFunction<TInput, TOutput>\n\nexport type QueryTypeFilter = 'all' | 'active' | 'inactive'\n\n// UTILS\n\nexport const isServer = typeof window === 'undefined' || 'Deno' in window\n\nexport function noop(): undefined {\n return undefined\n}\n\nexport function functionalUpdate<TInput, TOutput>(\n updater: Updater<TInput, TOutput>,\n input: TInput,\n): TOutput {\n return typeof updater === 'function'\n ? (updater as DataUpdateFunction<TInput, TOutput>)(input)\n : updater\n}\n\nexport function isValidTimeout(value: unknown): value is number {\n return typeof value === 'number' && value >= 0 && value !== Infinity\n}\n\nexport function timeUntilStale(updatedAt: number, staleTime?: number): number {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0)\n}\n\nexport function matchQuery(\n filters: QueryFilters,\n query: Query<any, any, any, any>,\n): boolean {\n const {\n type = 'all',\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale,\n } = filters\n\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false\n }\n }\n\n if (type !== 'all') {\n const isActive = query.isActive()\n if (type === 'active' && !isActive) {\n return false\n }\n if (type === 'inactive' && isActive) {\n return false\n }\n }\n\n if (typeof stale === 'boolean' && query.isStale() !== stale) {\n return false\n }\n\n if (\n typeof fetchStatus !== 'undefined' &&\n fetchStatus !== query.state.fetchStatus\n ) {\n return false\n }\n\n if (predicate && !predicate(query)) {\n return false\n }\n\n return true\n}\n\nexport function matchMutation(\n filters: MutationFilters,\n mutation: Mutation<any, any>,\n): boolean {\n const { exact, status, predicate, mutationKey } = filters\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false\n }\n }\n\n if (status && mutation.state.status !== status) {\n return false\n }\n\n if (predicate && !predicate(mutation)) {\n return false\n }\n\n return true\n}\n\nexport function hashQueryKeyByOptions<TQueryKey extends QueryKey = QueryKey>(\n queryKey: TQueryKey,\n options?: QueryOptions<any, any, any, TQueryKey>,\n): string {\n const hashFn = options?.queryKeyHashFn || hashKey\n return hashFn(queryKey)\n}\n\n/**\n * Default query & mutation keys hash function.\n * Hashes the value into a stable hash.\n */\nexport function hashKey(queryKey: QueryKey | MutationKey): string {\n return JSON.stringify(queryKey, (_, val) =>\n isPlainObject(val)\n ? Object.keys(val)\n .sort()\n .reduce((result, key) => {\n result[key] = val[key]\n return result\n }, {} as any)\n : val,\n )\n}\n\n/**\n * Checks if key `b` partially matches with key `a`.\n */\nexport function partialMatchKey(a: QueryKey, b: QueryKey): boolean\nexport function partialMatchKey(a: any, b: any): boolean {\n if (a === b) {\n return true\n }\n\n if (typeof a !== typeof b) {\n return false\n }\n\n if (a && b && typeof a === 'object' && typeof b === 'object') {\n return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]))\n }\n\n return false\n}\n\n/**\n * This function returns `a` if `b` is deeply equal.\n * If not, it will replace any deeply equal children of `b` with those of `a`.\n * This can be used for structural sharing between JSON values for example.\n */\nexport function replaceEqualDeep<T>(a: unknown, b: T): T\nexport function replaceEqualDeep(a: any, b: any): any {\n if (a === b) {\n return a\n }\n\n const array = isPlainArray(a) && isPlainArray(b)\n\n if (array || (isPlainObject(a) && isPlainObject(b))) {\n const aSize = array ? a.length : Object.keys(a).length\n const bItems = array ? b : Object.keys(b)\n const bSize = bItems.length\n const copy: any = array ? [] : {}\n\n let equalItems = 0\n\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i]\n copy[key] = replaceEqualDeep(a[key], b[key])\n if (copy[key] === a[key]) {\n equalItems++\n }\n }\n\n return aSize === bSize && equalItems === aSize ? a : copy\n }\n\n return b\n}\n\n/**\n * Shallow compare objects. Only works with objects that always have the same properties.\n */\nexport function shallowEqualObjects<T>(a: T, b: T): boolean {\n if ((a && !b) || (b && !a)) {\n return false\n }\n\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false\n }\n }\n\n return true\n}\n\nexport function isPlainArray(value: unknown) {\n return Array.isArray(value) && value.length === Object.keys(value).length\n}\n\n// Copied from: https://github.com/jonschlinkert/is-plain-object\nexport function isPlainObject(o: any): o is Object {\n if (!hasObjectPrototype(o)) {\n return false\n }\n\n // If has modified constructor\n const ctor = o.constructor\n if (typeof ctor === 'undefined') {\n return true\n }\n\n // If has modified prototype\n const prot = ctor.prototype\n if (!hasObjectPrototype(prot)) {\n return false\n }\n\n // If constructor does not have an Object-specific method\n if (!prot.hasOwnProperty('isPrototypeOf')) {\n return false\n }\n\n // Most likely a plain Object\n return true\n}\n\nfunction hasObjectPrototype(o: any): boolean {\n return Object.prototype.toString.call(o) === '[object Object]'\n}\n\nexport function sleep(timeout: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, timeout)\n })\n}\n\n/**\n * Schedules a microtask.\n * This can be useful to schedule state updates after rendering.\n */\nexport function scheduleMicrotask(callback: () => void) {\n sleep(0).then(callback)\n}\n\nexport function replaceData<\n TData,\n TOptions extends QueryOptions<any, any, any, any>,\n>(prevData: TData | undefined, data: TData, options: TOptions): TData {\n if (typeof options.structuralSharing === 'function') {\n return options.structuralSharing(prevData, data)\n } else if (options.structuralSharing !== false) {\n // Structurally share data between prev and new data if needed\n return replaceEqualDeep(prevData, data)\n }\n return data\n}\n\nexport function keepPreviousData<T>(\n previousData: T | undefined,\n): T | undefined {\n return previousData\n}\n\nexport function addToEnd<T>(items: T[], item: T, max = 0): T[] {\n const newItems = [...items, item]\n return max && newItems.length > max ? newItems.slice(1) : newItems\n}\n\nexport function addToStart<T>(items: T[], item: T, max = 0): T[] {\n const newItems = [item, ...items]\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems\n}\n"],"names":["isServer","window","noop","undefined","functionalUpdate","updater","input","isValidTimeout","value","Infinity","timeUntilStale","updatedAt","staleTime","Math","max","Date","now","matchQuery","filters","query","type","exact","fetchStatus","predicate","queryKey","stale","queryHash","hashQueryKeyByOptions","options","partialMatchKey","isActive","isStale","state","matchMutation","mutation","status","mutationKey","hashKey","hashFn","queryKeyHashFn","JSON","stringify","_","val","isPlainObject","Object","keys","sort","reduce","result","key","a","b","some","replaceEqualDeep","array","isPlainArray","aSize","length","bItems","bSize","copy","equalItems","i","shallowEqualObjects","Array","isArray","o","hasObjectPrototype","ctor","constructor","prot","prototype","hasOwnProperty","toString","call","sleep","timeout","Promise","resolve","setTimeout","scheduleMicrotask","callback","then","replaceData","prevData","data","structuralSharing","keepPreviousData","previousData","addToEnd","items","item","newItems","slice","addToStart"],"mappings":"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"}
|