@tanstack/query-core 5.0.0-alpha.6 → 5.0.0-alpha.63
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/_virtual/{_rollupPluginBabelHelpers.js → _rollupPluginBabelHelpers.legacy.cjs} +1 -1
- package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.cjs.map +1 -0
- package/build/lib/_virtual/{_rollupPluginBabelHelpers.esm.js → _rollupPluginBabelHelpers.legacy.js} +1 -1
- package/build/lib/_virtual/_rollupPluginBabelHelpers.legacy.js.map +1 -0
- package/build/lib/{focusManager.mjs → focusManager.cjs} +9 -6
- package/build/lib/{focusManager.mjs.map → focusManager.cjs.map} +1 -1
- package/build/lib/focusManager.d.ts +2 -1
- package/build/lib/focusManager.d.ts.map +1 -0
- package/build/lib/focusManager.js +20 -39
- package/build/lib/focusManager.js.map +1 -1
- package/build/lib/focusManager.legacy.cjs +90 -0
- package/build/lib/focusManager.legacy.cjs.map +1 -0
- package/build/lib/{focusManager.esm.js → focusManager.legacy.js} +4 -4
- package/build/lib/focusManager.legacy.js.map +1 -0
- package/build/lib/{hydration.mjs → hydration.cjs} +11 -20
- package/build/lib/hydration.cjs.map +1 -0
- package/build/lib/hydration.d.ts +3 -6
- package/build/lib/hydration.d.ts.map +1 -0
- package/build/lib/hydration.js +7 -28
- package/build/lib/hydration.js.map +1 -1
- package/build/lib/hydration.legacy.cjs +92 -0
- package/build/lib/hydration.legacy.cjs.map +1 -0
- package/build/lib/{hydration.esm.js → hydration.legacy.js} +6 -19
- package/build/lib/hydration.legacy.js.map +1 -0
- package/build/lib/index.cjs +40 -0
- package/build/lib/index.cjs.map +1 -0
- package/build/lib/index.d.ts +5 -3
- package/build/lib/index.d.ts.map +1 -0
- package/build/lib/index.js +13 -39
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.legacy.cjs +40 -0
- package/build/lib/index.legacy.cjs.map +1 -0
- package/build/lib/index.legacy.js +14 -0
- package/build/lib/index.legacy.js.map +1 -0
- package/build/lib/{infiniteQueryBehavior.mjs → infiniteQueryBehavior.cjs} +8 -4
- package/build/lib/{infiniteQueryBehavior.mjs.map → infiniteQueryBehavior.cjs.map} +1 -1
- package/build/lib/infiniteQueryBehavior.d.ts +1 -0
- package/build/lib/infiniteQueryBehavior.d.ts.map +1 -0
- package/build/lib/infiniteQueryBehavior.js +7 -12
- package/build/lib/infiniteQueryBehavior.js.map +1 -1
- package/build/lib/infiniteQueryBehavior.legacy.cjs +131 -0
- package/build/lib/infiniteQueryBehavior.legacy.cjs.map +1 -0
- package/build/lib/{infiniteQueryBehavior.esm.js → infiniteQueryBehavior.legacy.js} +2 -2
- package/build/lib/infiniteQueryBehavior.legacy.js.map +1 -0
- package/build/lib/{infiniteQueryObserver.mjs → infiniteQueryObserver.cjs} +11 -9
- package/build/lib/{infiniteQueryObserver.mjs.map → infiniteQueryObserver.cjs.map} +1 -1
- package/build/lib/infiniteQueryObserver.d.ts +2 -1
- package/build/lib/infiniteQueryObserver.d.ts.map +1 -0
- package/build/lib/infiniteQueryObserver.js +10 -13
- package/build/lib/infiniteQueryObserver.js.map +1 -1
- package/build/lib/infiniteQueryObserver.legacy.cjs +78 -0
- package/build/lib/infiniteQueryObserver.legacy.cjs.map +1 -0
- package/build/lib/{infiniteQueryObserver.esm.js → infiniteQueryObserver.legacy.js} +3 -3
- package/build/lib/infiniteQueryObserver.legacy.js.map +1 -0
- package/build/lib/{mutation.mjs → mutation.cjs} +13 -10
- package/build/lib/mutation.cjs.map +1 -0
- package/build/lib/mutation.d.ts +2 -1
- package/build/lib/mutation.d.ts.map +1 -0
- package/build/lib/mutation.js +107 -135
- package/build/lib/mutation.js.map +1 -1
- package/build/lib/mutation.legacy.cjs +262 -0
- package/build/lib/mutation.legacy.cjs.map +1 -0
- package/build/lib/{mutation.esm.js → mutation.legacy.js} +6 -6
- package/build/lib/mutation.legacy.js.map +1 -0
- package/build/lib/{mutationCache.mjs → mutationCache.cjs} +21 -18
- package/build/lib/mutationCache.cjs.map +1 -0
- package/build/lib/mutationCache.d.ts +3 -2
- package/build/lib/mutationCache.d.ts.map +1 -0
- package/build/lib/mutationCache.js +33 -47
- package/build/lib/mutationCache.js.map +1 -1
- package/build/lib/mutationCache.legacy.cjs +98 -0
- package/build/lib/mutationCache.legacy.cjs.map +1 -0
- package/build/lib/{mutationCache.esm.js → mutationCache.legacy.js} +11 -10
- package/build/lib/mutationCache.legacy.js.map +1 -0
- package/build/lib/{mutationObserver.mjs → mutationObserver.cjs} +13 -11
- package/build/lib/mutationObserver.cjs.map +1 -0
- package/build/lib/mutationObserver.d.ts +2 -1
- package/build/lib/mutationObserver.d.ts.map +1 -0
- package/build/lib/mutationObserver.js +59 -91
- package/build/lib/mutationObserver.js.map +1 -1
- package/build/lib/mutationObserver.legacy.cjs +128 -0
- package/build/lib/mutationObserver.legacy.cjs.map +1 -0
- package/build/lib/{mutationObserver.esm.js → mutationObserver.legacy.js} +7 -7
- package/build/lib/mutationObserver.legacy.js.map +1 -0
- package/build/lib/{notifyManager.mjs → notifyManager.cjs} +8 -5
- package/build/lib/{notifyManager.mjs.map → notifyManager.cjs.map} +1 -1
- package/build/lib/notifyManager.d.ts +4 -3
- package/build/lib/notifyManager.d.ts.map +1 -0
- package/build/lib/notifyManager.js +4 -7
- package/build/lib/notifyManager.js.map +1 -1
- package/build/lib/notifyManager.legacy.cjs +92 -0
- package/build/lib/notifyManager.legacy.cjs.map +1 -0
- package/build/lib/{notifyManager.esm.js → notifyManager.legacy.js} +2 -2
- package/build/lib/notifyManager.legacy.js.map +1 -0
- package/build/lib/{onlineManager.mjs → onlineManager.cjs} +16 -10
- package/build/lib/onlineManager.cjs.map +1 -0
- package/build/lib/onlineManager.d.ts +2 -1
- package/build/lib/onlineManager.d.ts.map +1 -0
- package/build/lib/onlineManager.js +26 -41
- package/build/lib/onlineManager.js.map +1 -1
- package/build/lib/onlineManager.legacy.cjs +94 -0
- package/build/lib/onlineManager.legacy.cjs.map +1 -0
- package/build/lib/{onlineManager.esm.js → onlineManager.legacy.js} +11 -8
- package/build/lib/onlineManager.legacy.js.map +1 -0
- package/build/lib/{queriesObserver.mjs → queriesObserver.cjs} +51 -26
- package/build/lib/queriesObserver.cjs.map +1 -0
- package/build/lib/queriesObserver.d.ts +14 -6
- package/build/lib/queriesObserver.d.ts.map +1 -0
- package/build/lib/queriesObserver.js +99 -107
- package/build/lib/queriesObserver.js.map +1 -1
- package/build/lib/queriesObserver.legacy.cjs +207 -0
- package/build/lib/queriesObserver.legacy.cjs.map +1 -0
- package/build/lib/{queriesObserver.esm.js → queriesObserver.legacy.js} +62 -22
- package/build/lib/queriesObserver.legacy.js.map +1 -0
- package/build/lib/{query.mjs → query.cjs} +22 -20
- package/build/lib/query.cjs.map +1 -0
- package/build/lib/query.d.ts +3 -2
- package/build/lib/query.d.ts.map +1 -0
- package/build/lib/query.js +173 -224
- package/build/lib/query.js.map +1 -1
- package/build/lib/query.legacy.cjs +471 -0
- package/build/lib/query.legacy.cjs.map +1 -0
- package/build/lib/{query.esm.js → query.legacy.js} +10 -10
- package/build/lib/query.legacy.js.map +1 -0
- package/build/lib/{queryCache.mjs → queryCache.cjs} +28 -23
- package/build/lib/queryCache.cjs.map +1 -0
- package/build/lib/queryCache.d.ts +3 -3
- package/build/lib/queryCache.d.ts.map +1 -0
- package/build/lib/queryCache.js +31 -37
- package/build/lib/queryCache.js.map +1 -1
- package/build/lib/queryCache.legacy.cjs +111 -0
- package/build/lib/queryCache.legacy.cjs.map +1 -0
- package/build/lib/{queryCache.esm.js → queryCache.legacy.js} +13 -12
- package/build/lib/queryCache.legacy.js.map +1 -0
- package/build/lib/{queryClient.mjs → queryClient.cjs} +50 -42
- package/build/lib/queryClient.cjs.map +1 -0
- package/build/lib/queryClient.d.ts +2 -2
- package/build/lib/queryClient.d.ts.map +1 -0
- package/build/lib/queryClient.js +98 -134
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryClient.legacy.cjs +322 -0
- package/build/lib/queryClient.legacy.cjs.map +1 -0
- package/build/lib/{queryClient.esm.js → queryClient.legacy.js} +28 -25
- package/build/lib/queryClient.legacy.js.map +1 -0
- package/build/lib/{queryObserver.mjs → queryObserver.cjs} +40 -50
- package/build/lib/queryObserver.cjs.map +1 -0
- package/build/lib/queryObserver.d.ts +6 -7
- package/build/lib/queryObserver.d.ts.map +1 -0
- package/build/lib/queryObserver.js +208 -323
- package/build/lib/queryObserver.js.map +1 -1
- package/build/lib/queryObserver.legacy.cjs +526 -0
- package/build/lib/queryObserver.legacy.cjs.map +1 -0
- package/build/lib/{queryObserver.esm.js → queryObserver.legacy.js} +71 -88
- package/build/lib/queryObserver.legacy.js.map +1 -0
- package/build/lib/{removable.mjs → removable.cjs} +7 -5
- package/build/lib/{removable.mjs.map → removable.cjs.map} +1 -1
- package/build/lib/removable.d.ts +1 -0
- package/build/lib/removable.d.ts.map +1 -0
- package/build/lib/removable.js +9 -18
- package/build/lib/removable.js.map +1 -1
- package/build/lib/removable.legacy.cjs +38 -0
- package/build/lib/removable.legacy.cjs.map +1 -0
- package/build/lib/{removable.esm.js → removable.legacy.js} +3 -3
- package/build/lib/removable.legacy.js.map +1 -0
- package/build/lib/{retryer.mjs → retryer.cjs} +15 -8
- package/build/lib/{retryer.mjs.map → retryer.cjs.map} +1 -1
- package/build/lib/retryer.d.ts +5 -4
- package/build/lib/retryer.d.ts.map +1 -0
- package/build/lib/retryer.js +21 -25
- package/build/lib/retryer.js.map +1 -1
- package/build/lib/retryer.legacy.cjs +158 -0
- package/build/lib/retryer.legacy.cjs.map +1 -0
- package/build/lib/{retryer.esm.js → retryer.legacy.js} +6 -4
- package/build/lib/retryer.legacy.js.map +1 -0
- package/build/lib/{subscribable.esm.js → subscribable.cjs} +8 -6
- package/build/lib/subscribable.cjs.map +1 -0
- package/build/lib/subscribable.d.ts +3 -2
- package/build/lib/subscribable.d.ts.map +1 -0
- package/build/lib/subscribable.js +5 -7
- package/build/lib/subscribable.js.map +1 -1
- package/build/lib/subscribable.legacy.cjs +28 -0
- package/build/lib/subscribable.legacy.cjs.map +1 -0
- package/build/lib/{subscribable.mjs → subscribable.legacy.js} +5 -5
- package/build/lib/subscribable.legacy.js.map +1 -0
- package/build/lib/tests/focusManager.test.d.ts +1 -0
- package/build/lib/tests/focusManager.test.d.ts.map +1 -0
- package/build/lib/tests/hydration.test.d.ts +1 -0
- package/build/lib/tests/hydration.test.d.ts.map +1 -0
- package/build/lib/tests/infiniteQueryBehavior.test.d.ts +1 -0
- package/build/lib/tests/infiniteQueryBehavior.test.d.ts.map +1 -0
- package/build/lib/tests/infiniteQueryObserver.test.d.ts +1 -0
- package/build/lib/tests/infiniteQueryObserver.test.d.ts.map +1 -0
- package/build/lib/tests/mutationCache.test.d.ts +1 -0
- package/build/lib/tests/mutationCache.test.d.ts.map +1 -0
- package/build/lib/tests/mutationObserver.test.d.ts +1 -0
- package/build/lib/tests/mutationObserver.test.d.ts.map +1 -0
- package/build/lib/tests/mutations.test.d.ts +1 -0
- package/build/lib/tests/mutations.test.d.ts.map +1 -0
- package/build/lib/tests/notifyManager.test.d.ts +1 -0
- package/build/lib/tests/notifyManager.test.d.ts.map +1 -0
- package/build/lib/tests/onlineManager.test.d.ts +1 -0
- package/build/lib/tests/onlineManager.test.d.ts.map +1 -0
- package/build/lib/tests/queriesObserver.test.d.ts +1 -0
- package/build/lib/tests/queriesObserver.test.d.ts.map +1 -0
- package/build/lib/tests/query.test.d.ts +1 -0
- package/build/lib/tests/query.test.d.ts.map +1 -0
- package/build/lib/tests/queryCache.test.d.ts +1 -0
- package/build/lib/tests/queryCache.test.d.ts.map +1 -0
- package/build/lib/tests/queryClient.test.d.ts +1 -0
- package/build/lib/tests/queryClient.test.d.ts.map +1 -0
- package/build/lib/tests/queryObserver.test.d.ts +1 -0
- package/build/lib/tests/queryObserver.test.d.ts.map +1 -0
- package/build/lib/tests/utils.d.ts +3 -2
- package/build/lib/tests/utils.d.ts.map +1 -0
- package/build/lib/tests/utils.test.d.ts +1 -0
- package/build/lib/tests/utils.test.d.ts.map +1 -0
- package/build/lib/types.d.ts +34 -46
- package/build/lib/types.d.ts.map +1 -0
- package/build/lib/{utils.mjs → utils.cjs} +23 -2
- package/build/lib/{utils.mjs.map → utils.cjs.map} +1 -1
- package/build/lib/utils.d.ts +4 -3
- package/build/lib/utils.d.ts.map +1 -0
- package/build/lib/utils.js +2 -23
- package/build/lib/utils.js.map +1 -1
- package/build/lib/utils.legacy.cjs +248 -0
- package/build/lib/utils.legacy.cjs.map +1 -0
- package/build/lib/{utils.esm.js → utils.legacy.js} +1 -1
- package/build/lib/utils.legacy.js.map +1 -0
- package/package.json +13 -9
- package/src/hydration.ts +18 -37
- package/src/index.ts +3 -4
- package/src/mutation.ts +1 -1
- package/src/mutationCache.ts +4 -4
- package/src/mutationObserver.ts +1 -1
- package/src/onlineManager.ts +8 -4
- package/src/queriesObserver.ts +75 -25
- package/src/query.ts +4 -4
- package/src/queryCache.ts +5 -8
- package/src/queryClient.ts +20 -20
- package/src/queryObserver.ts +47 -55
- package/src/subscribable.ts +5 -5
- package/src/tests/hydration.test.tsx +7 -3
- package/src/tests/query.test.tsx +1 -1
- package/src/tests/queryCache.test.tsx +1 -19
- package/src/tests/queryClient.test.tsx +39 -3
- package/src/tests/queryObserver.test.tsx +121 -0
- package/src/types.ts +14 -21
- package/build/lib/_virtual/_rollupPluginBabelHelpers.esm.js.map +0 -1
- package/build/lib/_virtual/_rollupPluginBabelHelpers.js.map +0 -1
- package/build/lib/focusManager.esm.js.map +0 -1
- package/build/lib/hydration.esm.js.map +0 -1
- package/build/lib/hydration.mjs.map +0 -1
- package/build/lib/index.esm.js +0 -14
- package/build/lib/index.esm.js.map +0 -1
- package/build/lib/index.mjs +0 -14
- package/build/lib/index.mjs.map +0 -1
- package/build/lib/infiniteQueryBehavior.esm.js.map +0 -1
- package/build/lib/infiniteQueryObserver.esm.js.map +0 -1
- package/build/lib/mutation.esm.js.map +0 -1
- package/build/lib/mutation.mjs.map +0 -1
- package/build/lib/mutationCache.esm.js.map +0 -1
- package/build/lib/mutationCache.mjs.map +0 -1
- package/build/lib/mutationObserver.esm.js.map +0 -1
- package/build/lib/mutationObserver.mjs.map +0 -1
- package/build/lib/notifyManager.esm.js.map +0 -1
- package/build/lib/onlineManager.esm.js.map +0 -1
- package/build/lib/onlineManager.mjs.map +0 -1
- package/build/lib/queriesObserver.esm.js.map +0 -1
- package/build/lib/queriesObserver.mjs.map +0 -1
- package/build/lib/query.esm.js.map +0 -1
- package/build/lib/query.mjs.map +0 -1
- package/build/lib/queryCache.esm.js.map +0 -1
- package/build/lib/queryCache.mjs.map +0 -1
- package/build/lib/queryClient.esm.js.map +0 -1
- package/build/lib/queryClient.mjs.map +0 -1
- package/build/lib/queryObserver.esm.js.map +0 -1
- package/build/lib/queryObserver.mjs.map +0 -1
- package/build/lib/removable.esm.js.map +0 -1
- package/build/lib/retryer.esm.js.map +0 -1
- package/build/lib/subscribable.esm.js.map +0 -1
- package/build/lib/subscribable.mjs.map +0 -1
- package/build/lib/utils.esm.js.map +0 -1
- package/build/umd/index.development.js +0 -2683
- package/build/umd/index.development.js.map +0 -1
- package/build/umd/index.production.js +0 -2
- package/build/umd/index.production.js.map +0 -1
|
@@ -113,7 +113,9 @@ describe('dehydration and rehydration', () => {
|
|
|
113
113
|
queryFn: () => fetchData('string'),
|
|
114
114
|
})
|
|
115
115
|
|
|
116
|
-
const dehydrated = dehydrate(queryClient, {
|
|
116
|
+
const dehydrated = dehydrate(queryClient, {
|
|
117
|
+
shouldDehydrateQuery: () => false,
|
|
118
|
+
})
|
|
117
119
|
|
|
118
120
|
expect(dehydrated.queries.length).toBe(0)
|
|
119
121
|
|
|
@@ -244,7 +246,7 @@ describe('dehydration and rehydration', () => {
|
|
|
244
246
|
consoleMock.mockRestore()
|
|
245
247
|
})
|
|
246
248
|
|
|
247
|
-
test('should filter queries via
|
|
249
|
+
test('should filter queries via dehydrateQuery', async () => {
|
|
248
250
|
const queryCache = new QueryCache()
|
|
249
251
|
const queryClient = createQueryClient({ queryCache })
|
|
250
252
|
await queryClient.prefetchQuery({
|
|
@@ -446,7 +448,9 @@ describe('dehydration and rehydration', () => {
|
|
|
446
448
|
).catch(() => undefined)
|
|
447
449
|
|
|
448
450
|
await sleep(1)
|
|
449
|
-
const dehydrated = dehydrate(queryClient, {
|
|
451
|
+
const dehydrated = dehydrate(queryClient, {
|
|
452
|
+
shouldDehydrateMutation: () => false,
|
|
453
|
+
})
|
|
450
454
|
|
|
451
455
|
expect(dehydrated.mutations.length).toBe(0)
|
|
452
456
|
|
package/src/tests/query.test.tsx
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { sleep, queryKey, createQueryClient } from './utils'
|
|
2
|
-
import { QueryClient } from '..'
|
|
3
|
-
import { QueryCache, QueryObserver } from '..'
|
|
2
|
+
import { QueryClient, QueryCache, QueryObserver } from '..'
|
|
4
3
|
import { waitFor } from '@testing-library/react'
|
|
5
4
|
import { vi } from 'vitest'
|
|
6
5
|
|
|
@@ -329,23 +328,6 @@ describe('queryCache', () => {
|
|
|
329
328
|
})
|
|
330
329
|
})
|
|
331
330
|
|
|
332
|
-
describe('QueryCacheConfig.createStore', () => {
|
|
333
|
-
test('should call createStore', async () => {
|
|
334
|
-
const createStore = vi.fn().mockImplementation(() => new Map())
|
|
335
|
-
new QueryCache({ createStore })
|
|
336
|
-
expect(createStore).toHaveBeenCalledWith()
|
|
337
|
-
})
|
|
338
|
-
|
|
339
|
-
test('should use created store', async () => {
|
|
340
|
-
const store = new Map()
|
|
341
|
-
const spy = vi.spyOn(store, 'get')
|
|
342
|
-
|
|
343
|
-
new QueryCache({ createStore: () => store }).get('key')
|
|
344
|
-
|
|
345
|
-
expect(spy).toHaveBeenCalledTimes(1)
|
|
346
|
-
})
|
|
347
|
-
})
|
|
348
|
-
|
|
349
331
|
describe('QueryCache.add', () => {
|
|
350
332
|
test('should not try to add a query already added to the cache', async () => {
|
|
351
333
|
const key = queryKey()
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
import { waitFor } from '@testing-library/react'
|
|
2
2
|
import '@testing-library/jest-dom'
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
sleep,
|
|
6
|
+
queryKey,
|
|
7
|
+
createQueryClient,
|
|
8
|
+
mockNavigatorOnLine,
|
|
9
|
+
} from './utils'
|
|
5
10
|
import type {
|
|
6
11
|
QueryCache,
|
|
7
12
|
QueryClient,
|
|
8
13
|
QueryFunction,
|
|
9
14
|
QueryObserverOptions,
|
|
10
15
|
} from '..'
|
|
11
|
-
import {
|
|
12
|
-
|
|
16
|
+
import {
|
|
17
|
+
MutationObserver,
|
|
18
|
+
QueryObserver,
|
|
19
|
+
focusManager,
|
|
20
|
+
onlineManager,
|
|
21
|
+
} from '..'
|
|
13
22
|
import { noop } from '../utils'
|
|
14
23
|
import { vi } from 'vitest'
|
|
15
24
|
|
|
@@ -1020,6 +1029,33 @@ describe('queryClient', () => {
|
|
|
1020
1029
|
}
|
|
1021
1030
|
expect(error).toEqual('error')
|
|
1022
1031
|
})
|
|
1032
|
+
|
|
1033
|
+
test('should resolve Promise immediately if query is paused', async () => {
|
|
1034
|
+
const key1 = queryKey()
|
|
1035
|
+
const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
|
|
1036
|
+
await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
|
|
1037
|
+
const onlineMock = mockNavigatorOnLine(false)
|
|
1038
|
+
|
|
1039
|
+
await queryClient.refetchQueries({ queryKey: key1 })
|
|
1040
|
+
|
|
1041
|
+
// if we reach this point, the test succeeds because the Promise was resolved immediately
|
|
1042
|
+
expect(queryFn1).toHaveBeenCalledTimes(1)
|
|
1043
|
+
onlineMock.mockRestore()
|
|
1044
|
+
})
|
|
1045
|
+
|
|
1046
|
+
test('should refetch if query we are offline but query networkMode is always', async () => {
|
|
1047
|
+
const key1 = queryKey()
|
|
1048
|
+
queryClient.setQueryDefaults(key1, { networkMode: 'always' })
|
|
1049
|
+
const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
|
|
1050
|
+
await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
|
|
1051
|
+
const onlineMock = mockNavigatorOnLine(false)
|
|
1052
|
+
|
|
1053
|
+
await queryClient.refetchQueries({ queryKey: key1 })
|
|
1054
|
+
|
|
1055
|
+
// initial fetch + refetch (even though we are offline)
|
|
1056
|
+
expect(queryFn1).toHaveBeenCalledTimes(2)
|
|
1057
|
+
onlineMock.mockRestore()
|
|
1058
|
+
})
|
|
1023
1059
|
})
|
|
1024
1060
|
|
|
1025
1061
|
describe('invalidateQueries', () => {
|
|
@@ -691,6 +691,127 @@ describe('queryObserver', () => {
|
|
|
691
691
|
expect(observer.getCurrentResult().isPlaceholderData).toBe(false)
|
|
692
692
|
})
|
|
693
693
|
|
|
694
|
+
test('should pass the correct previous queryKey (from prevQuery) to placeholderData function params with select', async () => {
|
|
695
|
+
const results: QueryObserverResult[] = []
|
|
696
|
+
const keys: Array<readonly unknown[] | null> = []
|
|
697
|
+
|
|
698
|
+
const key1 = queryKey()
|
|
699
|
+
const key2 = queryKey()
|
|
700
|
+
|
|
701
|
+
const data1 = { value: 'data1' }
|
|
702
|
+
const data2 = { value: 'data2' }
|
|
703
|
+
|
|
704
|
+
const observer = new QueryObserver(queryClient, {
|
|
705
|
+
queryKey: key1,
|
|
706
|
+
queryFn: () => data1,
|
|
707
|
+
placeholderData: (prev, prevQuery) => {
|
|
708
|
+
keys.push(prevQuery?.queryKey || null)
|
|
709
|
+
return prev
|
|
710
|
+
},
|
|
711
|
+
select: (data) => data.value,
|
|
712
|
+
})
|
|
713
|
+
|
|
714
|
+
const unsubscribe = observer.subscribe((result) => {
|
|
715
|
+
results.push(result)
|
|
716
|
+
})
|
|
717
|
+
|
|
718
|
+
await sleep(1)
|
|
719
|
+
|
|
720
|
+
observer.setOptions({
|
|
721
|
+
queryKey: key2,
|
|
722
|
+
queryFn: () => data2,
|
|
723
|
+
placeholderData: (prev, prevQuery) => {
|
|
724
|
+
keys.push(prevQuery?.queryKey || null)
|
|
725
|
+
return prev
|
|
726
|
+
},
|
|
727
|
+
select: (data) => data.value,
|
|
728
|
+
})
|
|
729
|
+
|
|
730
|
+
await sleep(1)
|
|
731
|
+
unsubscribe()
|
|
732
|
+
expect(results.length).toBe(4)
|
|
733
|
+
expect(keys.length).toBe(3)
|
|
734
|
+
expect(keys[0]).toBe(null) // First Query - status: 'pending', fetchStatus: 'idle'
|
|
735
|
+
expect(keys[1]).toBe(null) // First Query - status: 'pending', fetchStatus: 'fetching'
|
|
736
|
+
expect(keys[2]).toBe(key1) // Second Query - status: 'pending', fetchStatus: 'fetching'
|
|
737
|
+
|
|
738
|
+
expect(results[0]).toMatchObject({
|
|
739
|
+
data: undefined,
|
|
740
|
+
status: 'pending',
|
|
741
|
+
fetchStatus: 'fetching',
|
|
742
|
+
}) // Initial fetch
|
|
743
|
+
expect(results[1]).toMatchObject({
|
|
744
|
+
data: 'data1',
|
|
745
|
+
status: 'success',
|
|
746
|
+
fetchStatus: 'idle',
|
|
747
|
+
}) // Successful fetch
|
|
748
|
+
expect(results[2]).toMatchObject({
|
|
749
|
+
data: 'data1',
|
|
750
|
+
status: 'success',
|
|
751
|
+
fetchStatus: 'fetching',
|
|
752
|
+
}) // Fetch for new key, but using previous data as placeholder
|
|
753
|
+
expect(results[3]).toMatchObject({
|
|
754
|
+
data: 'data2',
|
|
755
|
+
status: 'success',
|
|
756
|
+
fetchStatus: 'idle',
|
|
757
|
+
}) // Successful fetch for new key
|
|
758
|
+
})
|
|
759
|
+
|
|
760
|
+
test('should pass the correct previous data to placeholderData function params when select function is used in conjunction', async () => {
|
|
761
|
+
const results: QueryObserverResult[] = []
|
|
762
|
+
|
|
763
|
+
const key1 = queryKey()
|
|
764
|
+
const key2 = queryKey()
|
|
765
|
+
|
|
766
|
+
const data1 = { value: 'data1' }
|
|
767
|
+
const data2 = { value: 'data2' }
|
|
768
|
+
|
|
769
|
+
const observer = new QueryObserver(queryClient, {
|
|
770
|
+
queryKey: key1,
|
|
771
|
+
queryFn: () => data1,
|
|
772
|
+
placeholderData: (prev) => prev,
|
|
773
|
+
select: (data) => data.value,
|
|
774
|
+
})
|
|
775
|
+
|
|
776
|
+
const unsubscribe = observer.subscribe((result) => {
|
|
777
|
+
results.push(result)
|
|
778
|
+
})
|
|
779
|
+
|
|
780
|
+
await sleep(1)
|
|
781
|
+
|
|
782
|
+
observer.setOptions({
|
|
783
|
+
queryKey: key2,
|
|
784
|
+
queryFn: () => data2,
|
|
785
|
+
placeholderData: (prev) => prev,
|
|
786
|
+
select: (data) => data.value,
|
|
787
|
+
})
|
|
788
|
+
|
|
789
|
+
await sleep(1)
|
|
790
|
+
unsubscribe()
|
|
791
|
+
|
|
792
|
+
expect(results.length).toBe(4)
|
|
793
|
+
expect(results[0]).toMatchObject({
|
|
794
|
+
data: undefined,
|
|
795
|
+
status: 'pending',
|
|
796
|
+
fetchStatus: 'fetching',
|
|
797
|
+
}) // Initial fetch
|
|
798
|
+
expect(results[1]).toMatchObject({
|
|
799
|
+
data: 'data1',
|
|
800
|
+
status: 'success',
|
|
801
|
+
fetchStatus: 'idle',
|
|
802
|
+
}) // Successful fetch
|
|
803
|
+
expect(results[2]).toMatchObject({
|
|
804
|
+
data: 'data1',
|
|
805
|
+
status: 'success',
|
|
806
|
+
fetchStatus: 'fetching',
|
|
807
|
+
}) // Fetch for new key, but using previous data as placeholder
|
|
808
|
+
expect(results[3]).toMatchObject({
|
|
809
|
+
data: 'data2',
|
|
810
|
+
status: 'success',
|
|
811
|
+
fetchStatus: 'idle',
|
|
812
|
+
}) // Successful fetch for new key
|
|
813
|
+
})
|
|
814
|
+
|
|
694
815
|
test('setOptions should notify cache listeners', async () => {
|
|
695
816
|
const key = queryKey()
|
|
696
817
|
|
package/src/types.ts
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/* istanbul ignore file */
|
|
2
2
|
|
|
3
3
|
import type { MutationState } from './mutation'
|
|
4
|
-
import type { QueryBehavior, Query } from './query'
|
|
4
|
+
import type { FetchDirection, QueryBehavior, Query } from './query'
|
|
5
5
|
import type { RetryValue, RetryDelayValue } from './retryer'
|
|
6
6
|
import type { QueryFilters, QueryTypeFilter } from './utils'
|
|
7
7
|
import type { QueryCache } from './queryCache'
|
|
8
8
|
import type { MutationCache } from './mutationCache'
|
|
9
|
-
import type { FetchDirection } from './query'
|
|
10
9
|
|
|
11
10
|
export interface Register {
|
|
12
11
|
// defaultError: Error
|
|
@@ -49,8 +48,14 @@ export type InitialDataFunction<T> = () => T | undefined
|
|
|
49
48
|
|
|
50
49
|
type NonFunctionGuard<T> = T extends Function ? never : T
|
|
51
50
|
|
|
52
|
-
export type PlaceholderDataFunction<
|
|
51
|
+
export type PlaceholderDataFunction<
|
|
52
|
+
TQueryFnData = unknown,
|
|
53
|
+
TError = DefaultError,
|
|
54
|
+
TQueryData = TQueryFnData,
|
|
55
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
56
|
+
> = (
|
|
53
57
|
previousData: TQueryData | undefined,
|
|
58
|
+
previousQuery: Query<TQueryFnData, TError, TQueryData, TQueryKey> | undefined,
|
|
54
59
|
) => TQueryData | undefined
|
|
55
60
|
|
|
56
61
|
export type QueriesPlaceholderDataFunction<TQueryData> = () =>
|
|
@@ -154,7 +159,7 @@ export interface InfiniteQueryPageParamsOptions<
|
|
|
154
159
|
getNextPageParam: GetNextPageParamFunction<TPageParam, TQueryFnData>
|
|
155
160
|
}
|
|
156
161
|
|
|
157
|
-
export type
|
|
162
|
+
export type ThrowOnError<
|
|
158
163
|
TQueryFnData,
|
|
159
164
|
TError,
|
|
160
165
|
TQueryData,
|
|
@@ -202,7 +207,7 @@ export interface QueryObserverOptions<
|
|
|
202
207
|
| ((
|
|
203
208
|
data: TData | undefined,
|
|
204
209
|
query: Query<TQueryFnData, TError, TQueryData, TQueryKey>,
|
|
205
|
-
) => number | false)
|
|
210
|
+
) => number | false | undefined)
|
|
206
211
|
/**
|
|
207
212
|
* If set to `true`, the query will continue to refetch while their tab/window is in the background.
|
|
208
213
|
* Defaults to `false`.
|
|
@@ -259,18 +264,6 @@ export interface QueryObserverOptions<
|
|
|
259
264
|
* By default, access to properties will be tracked, and the component will only re-render when one of the tracked properties change.
|
|
260
265
|
*/
|
|
261
266
|
notifyOnChangeProps?: Array<keyof InfiniteQueryObserverResult> | 'all'
|
|
262
|
-
/**
|
|
263
|
-
* This callback will fire any time the query successfully fetches new data.
|
|
264
|
-
*/
|
|
265
|
-
onSuccess?: (data: TData) => void
|
|
266
|
-
/**
|
|
267
|
-
* This callback will fire if the query encounters an error and will be passed the error.
|
|
268
|
-
*/
|
|
269
|
-
onError?: (err: TError) => void
|
|
270
|
-
/**
|
|
271
|
-
* This callback will fire any time the query is either successfully fetched or errors and be passed either the data or error.
|
|
272
|
-
*/
|
|
273
|
-
onSettled?: (data: TData | undefined, error: TError | null) => void
|
|
274
267
|
/**
|
|
275
268
|
* Whether errors should be thrown instead of setting the `error` property.
|
|
276
269
|
* If set to `true` or `suspense` is `true`, all errors will be thrown to the error boundary.
|
|
@@ -278,7 +271,7 @@ export interface QueryObserverOptions<
|
|
|
278
271
|
* If set to a function, it will be passed the error and the query, and it should return a boolean indicating whether to show the error in an error boundary (`true`) or return the error as state (`false`).
|
|
279
272
|
* Defaults to `false`.
|
|
280
273
|
*/
|
|
281
|
-
|
|
274
|
+
throwOnError?: ThrowOnError<TQueryFnData, TError, TQueryData, TQueryKey>
|
|
282
275
|
/**
|
|
283
276
|
* This option can be used to transform or select a part of the data returned by the query function.
|
|
284
277
|
*/
|
|
@@ -309,7 +302,7 @@ export type DefaultedQueryObserverOptions<
|
|
|
309
302
|
TQueryKey extends QueryKey = QueryKey,
|
|
310
303
|
> = WithRequired<
|
|
311
304
|
QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>,
|
|
312
|
-
'
|
|
305
|
+
'throwOnError' | 'refetchOnReconnect'
|
|
313
306
|
>
|
|
314
307
|
|
|
315
308
|
export interface InfiniteQueryObserverOptions<
|
|
@@ -345,7 +338,7 @@ export type DefaultedInfiniteQueryObserverOptions<
|
|
|
345
338
|
TQueryKey,
|
|
346
339
|
TPageParam
|
|
347
340
|
>,
|
|
348
|
-
'
|
|
341
|
+
'throwOnError' | 'refetchOnReconnect'
|
|
349
342
|
>
|
|
350
343
|
|
|
351
344
|
export interface FetchQueryOptions<
|
|
@@ -648,7 +641,7 @@ export interface MutationObserverOptions<
|
|
|
648
641
|
TVariables = void,
|
|
649
642
|
TContext = unknown,
|
|
650
643
|
> extends MutationOptions<TData, TError, TVariables, TContext> {
|
|
651
|
-
|
|
644
|
+
throwOnError?: boolean | ((error: TError) => boolean)
|
|
652
645
|
}
|
|
653
646
|
|
|
654
647
|
export interface MutateOptions<
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_rollupPluginBabelHelpers.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_rollupPluginBabelHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"focusManager.esm.js","sources":["../../src/focusManager.ts"],"sourcesContent":["import { Subscribable } from './subscribable'\nimport { isServer } from './utils'\n\ntype SetupFn = (\n setFocused: (focused?: boolean) => void,\n) => (() => void) | undefined\n\nexport class FocusManager extends Subscribable {\n #focused?: boolean\n #cleanup?: () => void\n\n #setup: SetupFn\n\n constructor() {\n super()\n this.#setup = (onFocus) => {\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 = () => onFocus()\n // Listen to visibilitychange\n window.addEventListener('visibilitychange', listener, false)\n\n return () => {\n // Be sure to unsubscribe if a new handler is set\n window.removeEventListener('visibilitychange', listener)\n }\n }\n return\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((focused) => {\n if (typeof focused === 'boolean') {\n this.setFocused(focused)\n } else {\n this.onFocus()\n }\n })\n }\n\n setFocused(focused?: boolean): void {\n this.#focused = focused\n\n if (focused) {\n this.onFocus()\n }\n }\n\n onFocus(): void {\n this.listeners.forEach((listener) => {\n listener()\n })\n }\n\n isFocused(): boolean {\n if (typeof this.#focused === 'boolean') {\n return this.#focused\n }\n\n // document global can be unavailable in react native\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return globalThis.document?.visibilityState !== 'hidden'\n }\n}\n\nexport const focusManager = new FocusManager()\n"],"names":["FocusManager","Subscribable","constructor","onFocus","isServer","window","addEventListener","listener","removeEventListener","onSubscribe","setEventListener","onUnsubscribe","hasListeners","undefined","setup","focused","setFocused","listeners","forEach","isFocused","globalThis","document","visibilityState","focusManager"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.esm.js","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n dehydrateMutations?: boolean\n dehydrateQueries?: boolean\n shouldDehydrateMutation?: ShouldDehydrateMutationFunction\n shouldDehydrateQuery?: ShouldDehydrateQueryFunction\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\nexport type ShouldDehydrateQueryFunction = (query: Query) => boolean\n\nexport type ShouldDehydrateMutationFunction = (mutation: Mutation) => boolean\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const mutations: DehydratedMutation[] = []\n const queries: DehydratedQuery[] = []\n\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation =\n options.shouldDehydrateMutation || defaultShouldDehydrateMutation\n\n client\n .getMutationCache()\n .getAll()\n .forEach((mutation) => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation))\n }\n })\n }\n\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery =\n options.shouldDehydrateQuery || defaultShouldDehydrateQuery\n\n client\n .getQueryCache()\n .getAll()\n .forEach((query) => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query))\n }\n })\n }\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","dehydrateQueries","shouldDehydrateQuery","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hydration.mjs","sources":["../../src/hydration.ts"],"sourcesContent":["import type { QueryClient } from './queryClient'\nimport type { Query, QueryState } from './query'\nimport type {\n MutationKey,\n MutationOptions,\n QueryKey,\n QueryOptions,\n} from './types'\nimport type { Mutation, MutationState } from './mutation'\n\n// TYPES\n\nexport interface DehydrateOptions {\n dehydrateMutations?: boolean\n dehydrateQueries?: boolean\n shouldDehydrateMutation?: ShouldDehydrateMutationFunction\n shouldDehydrateQuery?: ShouldDehydrateQueryFunction\n}\n\nexport interface HydrateOptions {\n defaultOptions?: {\n queries?: QueryOptions\n mutations?: MutationOptions\n }\n}\n\ninterface DehydratedMutation {\n mutationKey?: MutationKey\n state: MutationState\n}\n\ninterface DehydratedQuery {\n queryHash: string\n queryKey: QueryKey\n state: QueryState\n}\n\nexport interface DehydratedState {\n mutations: DehydratedMutation[]\n queries: DehydratedQuery[]\n}\n\nexport type ShouldDehydrateQueryFunction = (query: Query) => boolean\n\nexport type ShouldDehydrateMutationFunction = (mutation: Mutation) => boolean\n\n// FUNCTIONS\n\nfunction dehydrateMutation(mutation: Mutation): DehydratedMutation {\n return {\n mutationKey: mutation.options.mutationKey,\n state: mutation.state,\n }\n}\n\n// Most config is not dehydrated but instead meant to configure again when\n// consuming the de/rehydrated data, typically with useQuery on the client.\n// Sometimes it might make sense to prefetch data on the server and include\n// in the html-payload, but not consume it on the initial render.\nfunction dehydrateQuery(query: Query): DehydratedQuery {\n return {\n state: query.state,\n queryKey: query.queryKey,\n queryHash: query.queryHash,\n }\n}\n\nexport function defaultShouldDehydrateMutation(mutation: Mutation) {\n return mutation.state.isPaused\n}\n\nexport function defaultShouldDehydrateQuery(query: Query) {\n return query.state.status === 'success'\n}\n\nexport function dehydrate(\n client: QueryClient,\n options: DehydrateOptions = {},\n): DehydratedState {\n const mutations: DehydratedMutation[] = []\n const queries: DehydratedQuery[] = []\n\n if (options.dehydrateMutations !== false) {\n const shouldDehydrateMutation =\n options.shouldDehydrateMutation || defaultShouldDehydrateMutation\n\n client\n .getMutationCache()\n .getAll()\n .forEach((mutation) => {\n if (shouldDehydrateMutation(mutation)) {\n mutations.push(dehydrateMutation(mutation))\n }\n })\n }\n\n if (options.dehydrateQueries !== false) {\n const shouldDehydrateQuery =\n options.shouldDehydrateQuery || defaultShouldDehydrateQuery\n\n client\n .getQueryCache()\n .getAll()\n .forEach((query) => {\n if (shouldDehydrateQuery(query)) {\n queries.push(dehydrateQuery(query))\n }\n })\n }\n\n return { mutations, queries }\n}\n\nexport function hydrate(\n client: QueryClient,\n dehydratedState: unknown,\n options?: HydrateOptions,\n): void {\n if (typeof dehydratedState !== 'object' || dehydratedState === null) {\n return\n }\n\n const mutationCache = client.getMutationCache()\n const queryCache = client.getQueryCache()\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const mutations = (dehydratedState as DehydratedState).mutations || []\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const queries = (dehydratedState as DehydratedState).queries || []\n\n mutations.forEach((dehydratedMutation) => {\n mutationCache.build(\n client,\n {\n ...options?.defaultOptions?.mutations,\n mutationKey: dehydratedMutation.mutationKey,\n },\n dehydratedMutation.state,\n )\n })\n\n queries.forEach((dehydratedQuery) => {\n const query = queryCache.get(dehydratedQuery.queryHash)\n\n // Reset fetch status to idle in the dehydrated state to avoid\n // query being stuck in fetching state upon hydration\n const dehydratedQueryState = {\n ...dehydratedQuery.state,\n fetchStatus: 'idle' as const,\n }\n\n // Do not hydrate if an existing query exists with newer data\n if (query) {\n if (query.state.dataUpdatedAt < dehydratedQueryState.dataUpdatedAt) {\n query.setState(dehydratedQueryState)\n }\n return\n }\n\n // Restore query\n queryCache.build(\n client,\n {\n ...options?.defaultOptions?.queries,\n queryKey: dehydratedQuery.queryKey,\n queryHash: dehydratedQuery.queryHash,\n },\n dehydratedQueryState,\n )\n })\n}\n"],"names":["dehydrateMutation","mutation","mutationKey","options","state","dehydrateQuery","query","queryKey","queryHash","defaultShouldDehydrateMutation","isPaused","defaultShouldDehydrateQuery","status","dehydrate","client","mutations","queries","dehydrateMutations","shouldDehydrateMutation","getMutationCache","getAll","forEach","push","dehydrateQueries","shouldDehydrateQuery","getQueryCache","hydrate","dehydratedState","mutationCache","queryCache","dehydratedMutation","build","defaultOptions","dehydratedQuery","get","dehydratedQueryState","fetchStatus","dataUpdatedAt","setState"],"mappings":"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"}
|
package/build/lib/index.esm.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export { CancelledError, isCancelledError } from './retryer.esm.js';
|
|
2
|
-
export { QueryCache } from './queryCache.esm.js';
|
|
3
|
-
export { QueryClient } from './queryClient.esm.js';
|
|
4
|
-
export { QueryObserver } from './queryObserver.esm.js';
|
|
5
|
-
export { QueriesObserver } from './queriesObserver.esm.js';
|
|
6
|
-
export { InfiniteQueryObserver } from './infiniteQueryObserver.esm.js';
|
|
7
|
-
export { MutationCache } from './mutationCache.esm.js';
|
|
8
|
-
export { MutationObserver } from './mutationObserver.esm.js';
|
|
9
|
-
export { notifyManager } from './notifyManager.esm.js';
|
|
10
|
-
export { focusManager } from './focusManager.esm.js';
|
|
11
|
-
export { onlineManager } from './onlineManager.esm.js';
|
|
12
|
-
export { hashKey, isServer, keepPreviousData, matchQuery, replaceEqualDeep } from './utils.esm.js';
|
|
13
|
-
export { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate } from './hydration.esm.js';
|
|
14
|
-
//# sourceMappingURL=index.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
package/build/lib/index.mjs
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export { CancelledError, isCancelledError } from './retryer.mjs';
|
|
2
|
-
export { QueryCache } from './queryCache.mjs';
|
|
3
|
-
export { QueryClient } from './queryClient.mjs';
|
|
4
|
-
export { QueryObserver } from './queryObserver.mjs';
|
|
5
|
-
export { QueriesObserver } from './queriesObserver.mjs';
|
|
6
|
-
export { InfiniteQueryObserver } from './infiniteQueryObserver.mjs';
|
|
7
|
-
export { MutationCache } from './mutationCache.mjs';
|
|
8
|
-
export { MutationObserver } from './mutationObserver.mjs';
|
|
9
|
-
export { notifyManager } from './notifyManager.mjs';
|
|
10
|
-
export { focusManager } from './focusManager.mjs';
|
|
11
|
-
export { onlineManager } from './onlineManager.mjs';
|
|
12
|
-
export { hashKey, isServer, keepPreviousData, matchQuery, replaceEqualDeep } from './utils.mjs';
|
|
13
|
-
export { defaultShouldDehydrateMutation, defaultShouldDehydrateQuery, dehydrate, hydrate } from './hydration.mjs';
|
|
14
|
-
//# sourceMappingURL=index.mjs.map
|
package/build/lib/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryBehavior.esm.js","sources":["../../src/infiniteQueryBehavior.ts"],"sourcesContent":["import type { QueryBehavior } from './query'\nimport { addToEnd, addToStart } from './utils'\nimport type {\n InfiniteData,\n InfiniteQueryPageParamsOptions,\n QueryFunctionContext,\n QueryKey,\n} from './types'\n\nexport function infiniteQueryBehavior<\n TQueryFnData,\n TError,\n TData,\n>(): QueryBehavior<TQueryFnData, TError, InfiniteData<TData>> {\n return {\n onFetch: (context) => {\n context.fetchFn = async () => {\n const options = context.options as InfiniteQueryPageParamsOptions<TData>\n const direction = context.fetchOptions?.meta?.fetchMore?.direction\n const oldPages = context.state.data?.pages || []\n const oldPageParams = context.state.data?.pageParams || []\n const empty = { pages: [], pageParams: [] }\n let cancelled = false\n\n const addSignalProperty = (object: unknown) => {\n Object.defineProperty(object, 'signal', {\n enumerable: true,\n get: () => {\n if (context.signal.aborted) {\n cancelled = true\n } else {\n context.signal.addEventListener('abort', () => {\n cancelled = true\n })\n }\n return context.signal\n },\n })\n }\n\n // Get query function\n const queryFn =\n context.options.queryFn ||\n (() => Promise.reject(new Error('Missing queryFn')))\n\n // Create function to fetch a page\n const fetchPage = async (\n data: InfiniteData<unknown>,\n param: unknown,\n previous?: boolean,\n ): Promise<InfiniteData<unknown>> => {\n if (cancelled) {\n return Promise.reject()\n }\n\n if (typeof param === 'undefined' && data.pages.length) {\n return Promise.resolve(data)\n }\n\n const queryFnContext: Omit<\n QueryFunctionContext<QueryKey, unknown>,\n 'signal'\n > = {\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? 'backward' : 'forward',\n meta: context.options.meta,\n }\n\n addSignalProperty(queryFnContext)\n\n const page = await queryFn(\n queryFnContext as QueryFunctionContext<QueryKey, unknown>,\n )\n\n const { maxPages } = context.options\n const addTo = previous ? addToStart : addToEnd\n\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages),\n }\n }\n\n let result: InfiniteData<unknown>\n\n // Fetch first page?\n if (!oldPages.length) {\n result = await fetchPage(empty, options.defaultPageParam)\n }\n\n // fetch next / previous page?\n else if (direction) {\n const previous = direction === 'backward'\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams,\n }\n const param = pageParamFn(options, oldData)\n\n result = await fetchPage(oldData, param, previous)\n }\n\n // Refetch pages\n else {\n // Fetch first page\n result = await fetchPage(empty, oldPageParams[0])\n\n // Fetch remaining pages\n for (let i = 1; i < oldPages.length; i++) {\n const param = getNextPageParam(options, result)\n result = await fetchPage(result, param)\n }\n }\n\n return result\n }\n },\n }\n}\n\nfunction getNextPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n const lastIndex = pages.length - 1\n return options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams,\n )\n}\n\nfunction getPreviousPageParam(\n options: InfiniteQueryPageParamsOptions<any>,\n { pages, pageParams }: InfiniteData<unknown>,\n): unknown | undefined {\n return options.getPreviousPageParam?.(\n pages[0],\n pages,\n pageParams[0],\n pageParams,\n )\n}\n\n/**\n * Checks if there is a next page.\n */\nexport function hasNextPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data) return false\n return typeof getNextPageParam(options, data) !== 'undefined'\n}\n\n/**\n * Checks if there is a previous page.\n */\nexport function hasPreviousPage(\n options: InfiniteQueryPageParamsOptions<any, any>,\n data?: InfiniteData<unknown>,\n): boolean {\n if (!data || !options.getPreviousPageParam) return false\n return typeof getPreviousPageParam(options, data) !== 'undefined'\n}\n"],"names":["infiniteQueryBehavior","onFetch","context","fetchFn","options","direction","fetchOptions","meta","fetchMore","oldPages","state","data","pages","oldPageParams","pageParams","empty","cancelled","addSignalProperty","object","Object","defineProperty","enumerable","get","signal","aborted","addEventListener","queryFn","Promise","reject","Error","fetchPage","param","previous","length","resolve","queryFnContext","queryKey","pageParam","page","maxPages","addTo","addToStart","addToEnd","result","defaultPageParam","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","i","lastIndex","hasNextPage","hasPreviousPage"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"infiniteQueryObserver.esm.js","sources":["../../src/infiniteQueryObserver.ts"],"sourcesContent":["import type {\n DefaultedInfiniteQueryObserverOptions,\n FetchNextPageOptions,\n FetchPreviousPageOptions,\n InfiniteData,\n InfiniteQueryObserverOptions,\n InfiniteQueryObserverResult,\n QueryKey,\n DefaultError,\n} from './types'\nimport type { QueryClient } from './queryClient'\nimport type { NotifyOptions, ObserverFetchOptions } from './queryObserver'\nimport { QueryObserver } from './queryObserver'\nimport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior,\n} from './infiniteQueryBehavior'\nimport type { Query } from './query'\n\ntype InfiniteQueryObserverListener<TData, TError> = (\n result: InfiniteQueryObserverResult<TData, TError>,\n) => void\n\nexport class InfiniteQueryObserver<\n TQueryFnData = unknown,\n TError = DefaultError,\n TData = InfiniteData<TQueryFnData>,\n TQueryData = TQueryFnData,\n TQueryKey extends QueryKey = QueryKey,\n TPageParam = unknown,\n> extends QueryObserver<\n TQueryFnData,\n TError,\n TData,\n InfiniteData<TQueryData>,\n TQueryKey\n> {\n // Type override\n subscribe!: (\n listener?: InfiniteQueryObserverListener<TData, TError>,\n ) => () => void\n\n // Type override\n getCurrentResult!: () => InfiniteQueryObserverResult<TData, TError>\n\n // Type override\n protected fetch!: (\n fetchOptions: ObserverFetchOptions,\n ) => Promise<InfiniteQueryObserverResult<TData, TError>>\n\n // eslint-disable-next-line @typescript-eslint/no-useless-constructor\n constructor(\n client: QueryClient,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ) {\n super(client, options)\n }\n\n protected bindMethods(): void {\n super.bindMethods()\n this.fetchNextPage = this.fetchNextPage.bind(this)\n this.fetchPreviousPage = this.fetchPreviousPage.bind(this)\n }\n\n setOptions(\n options?: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n notifyOptions?: NotifyOptions,\n ): void {\n super.setOptions(\n {\n ...options,\n behavior: infiniteQueryBehavior(),\n },\n notifyOptions,\n )\n }\n\n getOptimisticResult(\n options: DefaultedInfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult<TData, TError> {\n options.behavior = infiniteQueryBehavior()\n return super.getOptimisticResult(options) as InfiniteQueryObserverResult<\n TData,\n TError\n >\n }\n\n fetchNextPage(\n options?: FetchNextPageOptions,\n ): Promise<InfiniteQueryObserverResult<TData, TError>> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'forward' },\n },\n })\n }\n\n fetchPreviousPage(\n options?: FetchPreviousPageOptions,\n ): Promise<InfiniteQueryObserverResult<TData, TError>> {\n return this.fetch({\n ...options,\n meta: {\n fetchMore: { direction: 'backward' },\n },\n })\n }\n\n protected createResult(\n query: Query<TQueryFnData, TError, InfiniteData<TQueryData>, TQueryKey>,\n options: InfiniteQueryObserverOptions<\n TQueryFnData,\n TError,\n TData,\n TQueryData,\n TQueryKey,\n TPageParam\n >,\n ): InfiniteQueryObserverResult<TData, TError> {\n const { state } = query\n const result = super.createResult(query, options)\n\n const { isFetching, isRefetching } = result\n\n const isFetchingNextPage =\n isFetching && state.fetchMeta?.fetchMore?.direction === 'forward'\n\n const isFetchingPreviousPage =\n isFetching && state.fetchMeta?.fetchMore?.direction === 'backward'\n\n return {\n ...result,\n fetchNextPage: this.fetchNextPage,\n fetchPreviousPage: this.fetchPreviousPage,\n hasNextPage: hasNextPage(options, state.data),\n hasPreviousPage: hasPreviousPage(options, state.data),\n isFetchingNextPage,\n isFetchingPreviousPage,\n isRefetching:\n isRefetching && !isFetchingNextPage && !isFetchingPreviousPage,\n }\n }\n}\n"],"names":["InfiniteQueryObserver","QueryObserver","constructor","client","options","bindMethods","fetchNextPage","bind","fetchPreviousPage","setOptions","notifyOptions","behavior","infiniteQueryBehavior","getOptimisticResult","fetch","meta","fetchMore","direction","createResult","query","state","result","isFetching","isRefetching","isFetchingNextPage","fetchMeta","isFetchingPreviousPage","hasNextPage","data","hasPreviousPage"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation.esm.js","sources":["../../src/mutation.ts"],"sourcesContent":["import type {\n MutationOptions,\n MutationStatus,\n MutationMeta,\n DefaultError,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport type { Retryer } from './retryer'\nimport { canFetch, createRetryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions<TData, TError, TVariables, TContext>\n defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n state?: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction<TVariables, TContext> {\n type: 'pending'\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction<TData> {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | PendingAction<TVariables, TContext>\n | PauseAction\n | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Removable {\n state: MutationState<TData, TError, TVariables, TContext>\n options!: MutationOptions<TData, TError, TVariables, TContext>\n readonly mutationId: number\n\n #observers: MutationObserver<TData, TError, TVariables, TContext>[]\n #defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n #mutationCache: MutationCache\n #retryer?: Retryer<TData>\n\n constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n super()\n\n this.mutationId = config.mutationId\n this.#defaultOptions = config.defaultOptions\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options?: MutationOptions<TData, TError, TVariables, TContext>,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver<any, any, any, any>): void {\n if (this.#observers.indexOf(observer) === -1) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver<any, any, any, any>): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise<unknown> {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise<TData> {\n const executeMutation = () => {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n })\n\n return this.#retryer.promise\n }\n\n const restored = this.state.status === 'pending'\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n })\n }\n }\n const data = await executeMutation()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n }\n }\n\n #dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n const reducer = (\n state: MutationState<TData, TError, TVariables, TContext>,\n ): MutationState<TData, TError, TVariables, TContext> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: !canFetch(this.options.networkMode),\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n"],"names":["Mutation","Removable","constructor","config","mutationId","defaultOptions","mutationCache","state","getDefaultState","setOptions","options","scheduleGc","updateGcTime","gcTime","meta","addObserver","observer","indexOf","push","clearGcTimeout","notify","type","mutation","removeObserver","filter","x","optionalRemove","length","status","remove","continue","execute","variables","executeMutation","createRetryer","fn","mutationFn","Promise","reject","Error","onFail","failureCount","error","onPause","onContinue","retry","retryDelay","networkMode","promise","restored","onMutate","context","data","onSuccess","onSettled","onError","undefined","action","reducer","failureReason","isPaused","canFetch","submittedAt","Date","now","notifyManager","batch","forEach","onMutationUpdate"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mutation.mjs","sources":["../../src/mutation.ts"],"sourcesContent":["import type {\n MutationOptions,\n MutationStatus,\n MutationMeta,\n DefaultError,\n} from './types'\nimport type { MutationCache } from './mutationCache'\nimport type { MutationObserver } from './mutationObserver'\nimport { notifyManager } from './notifyManager'\nimport { Removable } from './removable'\nimport type { Retryer } from './retryer'\nimport { canFetch, createRetryer } from './retryer'\n\n// TYPES\n\ninterface MutationConfig<TData, TError, TVariables, TContext> {\n mutationId: number\n mutationCache: MutationCache\n options: MutationOptions<TData, TError, TVariables, TContext>\n defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n state?: MutationState<TData, TError, TVariables, TContext>\n}\n\nexport interface MutationState<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> {\n context: TContext | undefined\n data: TData | undefined\n error: TError | null\n failureCount: number\n failureReason: TError | null\n isPaused: boolean\n status: MutationStatus\n variables: TVariables | undefined\n submittedAt: number\n}\n\ninterface FailedAction<TError> {\n type: 'failed'\n failureCount: number\n error: TError | null\n}\n\ninterface PendingAction<TVariables, TContext> {\n type: 'pending'\n variables?: TVariables\n context?: TContext\n}\n\ninterface SuccessAction<TData> {\n type: 'success'\n data: TData\n}\n\ninterface ErrorAction<TError> {\n type: 'error'\n error: TError\n}\n\ninterface PauseAction {\n type: 'pause'\n}\n\ninterface ContinueAction {\n type: 'continue'\n}\n\nexport type Action<TData, TError, TVariables, TContext> =\n | ContinueAction\n | ErrorAction<TError>\n | FailedAction<TError>\n | PendingAction<TVariables, TContext>\n | PauseAction\n | SuccessAction<TData>\n\n// CLASS\n\nexport class Mutation<\n TData = unknown,\n TError = DefaultError,\n TVariables = void,\n TContext = unknown,\n> extends Removable {\n state: MutationState<TData, TError, TVariables, TContext>\n options!: MutationOptions<TData, TError, TVariables, TContext>\n readonly mutationId: number\n\n #observers: MutationObserver<TData, TError, TVariables, TContext>[]\n #defaultOptions?: MutationOptions<TData, TError, TVariables, TContext>\n #mutationCache: MutationCache\n #retryer?: Retryer<TData>\n\n constructor(config: MutationConfig<TData, TError, TVariables, TContext>) {\n super()\n\n this.mutationId = config.mutationId\n this.#defaultOptions = config.defaultOptions\n this.#mutationCache = config.mutationCache\n this.#observers = []\n this.state = config.state || getDefaultState()\n\n this.setOptions(config.options)\n this.scheduleGc()\n }\n\n setOptions(\n options?: MutationOptions<TData, TError, TVariables, TContext>,\n ): void {\n this.options = { ...this.#defaultOptions, ...options }\n\n this.updateGcTime(this.options.gcTime)\n }\n\n get meta(): MutationMeta | undefined {\n return this.options.meta\n }\n\n addObserver(observer: MutationObserver<any, any, any, any>): void {\n if (this.#observers.indexOf(observer) === -1) {\n this.#observers.push(observer)\n\n // Stop the mutation from being garbage collected\n this.clearGcTimeout()\n\n this.#mutationCache.notify({\n type: 'observerAdded',\n mutation: this,\n observer,\n })\n }\n }\n\n removeObserver(observer: MutationObserver<any, any, any, any>): void {\n this.#observers = this.#observers.filter((x) => x !== observer)\n\n this.scheduleGc()\n\n this.#mutationCache.notify({\n type: 'observerRemoved',\n mutation: this,\n observer,\n })\n }\n\n protected optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === 'pending') {\n this.scheduleGc()\n } else {\n this.#mutationCache.remove(this)\n }\n }\n }\n\n continue(): Promise<unknown> {\n return (\n this.#retryer?.continue() ??\n // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables!)\n )\n }\n\n async execute(variables: TVariables): Promise<TData> {\n const executeMutation = () => {\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error('No mutationFn found'))\n }\n return this.options.mutationFn(variables)\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: 'failed', failureCount, error })\n },\n onPause: () => {\n this.#dispatch({ type: 'pause' })\n },\n onContinue: () => {\n this.#dispatch({ type: 'continue' })\n },\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n })\n\n return this.#retryer.promise\n }\n\n const restored = this.state.status === 'pending'\n\n try {\n if (!restored) {\n this.#dispatch({ type: 'pending', variables })\n // Notify cache callback\n await this.#mutationCache.config.onMutate?.(\n variables,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n const context = await this.options.onMutate?.(variables)\n if (context !== this.state.context) {\n this.#dispatch({\n type: 'pending',\n context,\n variables,\n })\n }\n }\n const data = await executeMutation()\n\n // Notify cache callback\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSuccess?.(data, variables, this.state.context)\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(data, null, variables, this.state.context)\n\n this.#dispatch({ type: 'success', data })\n return data\n } catch (error) {\n try {\n // Notify cache callback\n await this.#mutationCache.config.onError?.(\n error as any,\n variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onError?.(\n error as TError,\n variables,\n this.state.context,\n )\n\n // Notify cache callback\n await this.#mutationCache.config.onSettled?.(\n undefined,\n error as any,\n this.state.variables,\n this.state.context,\n this as Mutation<unknown, unknown, unknown, unknown>,\n )\n\n await this.options.onSettled?.(\n undefined,\n error as TError,\n variables,\n this.state.context,\n )\n throw error\n } finally {\n this.#dispatch({ type: 'error', error: error as TError })\n }\n }\n }\n\n #dispatch(action: Action<TData, TError, TVariables, TContext>): void {\n const reducer = (\n state: MutationState<TData, TError, TVariables, TContext>,\n ): MutationState<TData, TError, TVariables, TContext> => {\n switch (action.type) {\n case 'failed':\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error,\n }\n case 'pause':\n return {\n ...state,\n isPaused: true,\n }\n case 'continue':\n return {\n ...state,\n isPaused: false,\n }\n case 'pending':\n return {\n ...state,\n context: action.context,\n data: undefined,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: !canFetch(this.options.networkMode),\n status: 'pending',\n variables: action.variables,\n submittedAt: Date.now(),\n }\n case 'success':\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: 'success',\n isPaused: false,\n }\n case 'error':\n return {\n ...state,\n data: undefined,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: 'error',\n }\n }\n }\n this.state = reducer(this.state)\n\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action)\n })\n this.#mutationCache.notify({\n mutation: this,\n type: 'updated',\n action,\n })\n })\n }\n}\n\nexport function getDefaultState<\n TData,\n TError,\n TVariables,\n TContext,\n>(): MutationState<TData, TError, TVariables, TContext> {\n return {\n context: undefined,\n data: undefined,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: 'idle',\n variables: undefined,\n submittedAt: 0,\n }\n}\n"],"names":["Mutation","Removable","constructor","config","mutationId","defaultOptions","mutationCache","state","getDefaultState","setOptions","options","scheduleGc","updateGcTime","gcTime","meta","addObserver","observer","indexOf","push","clearGcTimeout","notify","type","mutation","removeObserver","filter","x","optionalRemove","length","status","remove","continue","execute","variables","executeMutation","createRetryer","fn","mutationFn","Promise","reject","Error","onFail","failureCount","error","onPause","onContinue","retry","retryDelay","networkMode","promise","restored","onMutate","context","data","onSuccess","onSettled","onError","undefined","action","reducer","failureReason","isPaused","canFetch","submittedAt","Date","now","notifyManager","batch","forEach","onMutationUpdate"],"mappings":"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"}
|