@suspensive/react-query-4 3.2.2 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SuspenseQueries.cjs +1 -33
- package/dist/SuspenseQueries.cjs.map +1 -1
- package/dist/SuspenseQueries.d.cts +1 -4
- package/dist/SuspenseQueries.d.ts +1 -4
- package/dist/SuspenseQueries.js +1 -2
- package/dist/SuspenseQuery.cjs +1 -28
- package/dist/SuspenseQuery.cjs.map +1 -1
- package/dist/SuspenseQuery.d.cts +1 -3
- package/dist/SuspenseQuery.d.ts +1 -3
- package/dist/SuspenseQuery.js +1 -2
- package/dist/{chunk-MMV3JWIQ.js → chunk-7AETAPCD.js} +2 -4
- package/dist/chunk-7AETAPCD.js.map +1 -0
- package/dist/{chunk-3OKEPIW3.js → chunk-CCIJG25S.js} +1 -1
- package/dist/chunk-CCIJG25S.js.map +1 -0
- package/dist/{chunk-D5FKB2PY.js → chunk-QYGYB5UC.js} +4 -4
- package/dist/chunk-QYGYB5UC.js.map +1 -0
- package/dist/chunk-WCKC4M3O.js +12 -0
- package/dist/chunk-WCKC4M3O.js.map +1 -0
- package/dist/chunk-YFVQ7O2B.js +12 -0
- package/dist/chunk-YFVQ7O2B.js.map +1 -0
- package/dist/chunk-Z4ML33QN.js +10 -0
- package/dist/chunk-Z4ML33QN.js.map +1 -0
- package/dist/index.cjs +20 -36
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -10
- package/dist/infiniteQueryOptions.cjs.map +1 -1
- package/dist/infiniteQueryOptions.d.cts +6 -0
- package/dist/infiniteQueryOptions.d.ts +6 -0
- package/dist/infiniteQueryOptions.js +1 -1
- package/dist/queryOptions.cjs +2 -3
- package/dist/queryOptions.cjs.map +1 -1
- package/dist/queryOptions.d.cts +15 -7
- package/dist/queryOptions.d.ts +15 -7
- package/dist/queryOptions.js +1 -1
- package/dist/useSuspenseQueries.cjs +1 -28
- package/dist/useSuspenseQueries.cjs.map +1 -1
- package/dist/useSuspenseQueries.d.cts +25 -46
- package/dist/useSuspenseQueries.d.ts +25 -46
- package/dist/useSuspenseQueries.js +1 -1
- package/dist/useSuspenseQuery.cjs +1 -25
- package/dist/useSuspenseQuery.cjs.map +1 -1
- package/dist/useSuspenseQuery.d.cts +29 -10
- package/dist/useSuspenseQuery.d.ts +29 -10
- package/dist/useSuspenseQuery.js +1 -1
- package/package.json +5 -5
- package/src/PrefetchQuery.test-d.tsx +1 -1
- package/src/SuspenseQueries.test-d.tsx +1 -3
- package/src/SuspenseQueries.tsx +1 -1
- package/src/SuspenseQuery.test-d.tsx +5 -6
- package/src/SuspenseQuery.tsx +6 -2
- package/src/infiniteQueryOptions.ts +6 -0
- package/src/queryOptions.test-d.tsx +25 -15
- package/src/queryOptions.ts +15 -26
- package/src/usePrefetchQuery.test-d.tsx +1 -1
- package/src/useSuspenseQueries.test-d.ts +4 -6
- package/src/useSuspenseQueries.ts +29 -114
- package/src/useSuspenseQuery.test-d.ts +5 -6
- package/src/useSuspenseQuery.ts +33 -32
- package/dist/chunk-3E4WCXHQ.js +0 -21
- package/dist/chunk-3E4WCXHQ.js.map +0 -1
- package/dist/chunk-3OKEPIW3.js.map +0 -1
- package/dist/chunk-D5FKB2PY.js.map +0 -1
- package/dist/chunk-MMV3JWIQ.js.map +0 -1
- package/dist/chunk-NIWB6JKL.js +0 -24
- package/dist/chunk-NIWB6JKL.js.map +0 -1
- package/dist/chunk-UVSCLLGR.js +0 -11
- package/dist/chunk-UVSCLLGR.js.map +0 -1
|
@@ -1,15 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { O as OmitKeyof } from './OmitKeyof-CFsZLI4k.js';
|
|
1
|
+
import { useSuspenseQuery as useSuspenseQuery$1, UseSuspenseQueryOptions as UseSuspenseQueryOptions$1, UseSuspenseQueryResult as UseSuspenseQueryResult$1 } from '@tanstack/react-query';
|
|
3
2
|
|
|
4
|
-
interface UseSuspenseQueryResult<TData = unknown, TError = unknown> extends OmitKeyof<UseQueryResult<TData, TError>, keyof Pick<UseQueryResult, 'isPlaceholderData'>> {
|
|
5
|
-
data: TData;
|
|
6
|
-
status: 'success';
|
|
7
|
-
}
|
|
8
|
-
type UseSuspenseQueryOptions<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> = OmitKeyof<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'suspense' | 'useErrorBoundary' | 'enabled' | 'placeholderData' | 'networkMode'>;
|
|
9
3
|
/**
|
|
10
|
-
* This
|
|
11
|
-
* @
|
|
4
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
5
|
+
* @deprecated Use `UseSuspenseQueryOptions` from \@tanstack/react-query@^4.40.0
|
|
6
|
+
* @example
|
|
7
|
+
* ```diff
|
|
8
|
+
* - import type { UseSuspenseQueryOptions } from '@suspensive/react-query'
|
|
9
|
+
* + import type { UseSuspenseQueryOptions } from '@tanstack/react-query'
|
|
10
|
+
* ```
|
|
12
11
|
*/
|
|
13
|
-
|
|
12
|
+
type UseSuspenseQueryOptions = UseSuspenseQueryOptions$1;
|
|
13
|
+
/**
|
|
14
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
15
|
+
* @deprecated Use `UseSuspenseQueryResult` from \@tanstack/react-query@^4.40.0
|
|
16
|
+
* @example
|
|
17
|
+
* ```diff
|
|
18
|
+
* - import type { UseSuspenseQueryResult } from '@suspensive/react-query'
|
|
19
|
+
* + import type { UseSuspenseQueryResult } from '@tanstack/react-query'
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
type UseSuspenseQueryResult = UseSuspenseQueryResult$1;
|
|
23
|
+
/**
|
|
24
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
25
|
+
* @deprecated Use `useSuspenseQuery` from \@tanstack/react-query@^4.40.0
|
|
26
|
+
* @example
|
|
27
|
+
* ```diff
|
|
28
|
+
* - import { useSuspenseQuery } from '@suspensive/react-query'
|
|
29
|
+
* + import { useSuspenseQuery } from '@tanstack/react-query'
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
declare const useSuspenseQuery: typeof useSuspenseQuery$1;
|
|
14
33
|
|
|
15
34
|
export { type UseSuspenseQueryOptions, type UseSuspenseQueryResult, useSuspenseQuery };
|
package/dist/useSuspenseQuery.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@suspensive/react-query-4",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.3.0",
|
|
4
4
|
"description": "Suspensive interfaces for @tanstack/react-query@4",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"suspensive",
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"src"
|
|
40
40
|
],
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@tanstack/react-query": "
|
|
43
|
-
"@types/react": "^19.1.
|
|
42
|
+
"@tanstack/react-query": "4.40.0",
|
|
43
|
+
"@types/react": "^19.1.6",
|
|
44
44
|
"react": "^19.1.0",
|
|
45
45
|
"@suspensive/eslint-config": "0.0.1",
|
|
46
46
|
"@suspensive/tsconfig": "0.0.0-development",
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
"ci:attw": "attw --pack",
|
|
59
59
|
"ci:eslint": "eslint \"**/*.{ts,tsx,cts,mts}\"",
|
|
60
60
|
"ci:publint": "publint --strict",
|
|
61
|
-
"ci:test": "vitest run
|
|
61
|
+
"ci:test": "vitest run",
|
|
62
62
|
"ci:type": "tsc --noEmit",
|
|
63
63
|
"clean": "rimraf ./dist ./coverage ./node_modules",
|
|
64
|
-
"test:ui": "vitest --ui
|
|
64
|
+
"test:ui": "vitest --ui"
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { queryOptions } from '@tanstack/react-query'
|
|
1
2
|
import type { ReactNode } from 'react'
|
|
2
3
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
3
4
|
import { PrefetchQuery } from './PrefetchQuery'
|
|
4
|
-
import { queryOptions } from './queryOptions'
|
|
5
5
|
import { queryFn, queryKey } from './test-utils'
|
|
6
6
|
|
|
7
7
|
describe('<PrefetchQuery/>', () => {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { type UseSuspenseQueryResult, queryOptions } from '@tanstack/react-query'
|
|
1
2
|
import type { ReactNode } from 'react'
|
|
2
3
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
3
|
-
import { queryOptions } from './queryOptions'
|
|
4
4
|
import { SuspenseQueries } from './SuspenseQueries'
|
|
5
5
|
import { queryFn, queryKey } from './test-utils'
|
|
6
|
-
import type { UseSuspenseQueryResult } from './useSuspenseQuery'
|
|
7
6
|
|
|
8
7
|
describe('<SuspenseQueries/>', () => {
|
|
9
8
|
it('type check', () => {
|
|
@@ -27,7 +26,6 @@ describe('<SuspenseQueries/>', () => {
|
|
|
27
26
|
<SuspenseQueries queries={[{ queryKey, queryFn }, queryOptions({ queryKey, queryFn })]}>
|
|
28
27
|
{([
|
|
29
28
|
query1,
|
|
30
|
-
|
|
31
29
|
query2,
|
|
32
30
|
// @ts-expect-error Tuple type '[UseSuspenseQueryResult<{ text: string; }, unknown>]' of length '1' has no element at index '2'.
|
|
33
31
|
query3,
|
package/src/SuspenseQueries.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { type SuspenseQueriesOptions, type SuspenseQueriesResults, useSuspenseQueries } from '@tanstack/react-query'
|
|
1
2
|
import type { ReactNode } from 'react'
|
|
2
|
-
import { type SuspenseQueriesOptions, type SuspenseQueriesResults, useSuspenseQueries } from './useSuspenseQueries'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* We provide these components to clearly express what causes suspense at the same depth.
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { type UseSuspenseQueryResult, queryOptions } from '@tanstack/react-query'
|
|
1
2
|
import type { ReactNode } from 'react'
|
|
2
3
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
3
|
-
import { queryOptions } from './queryOptions'
|
|
4
4
|
import { SuspenseQuery } from './SuspenseQuery'
|
|
5
5
|
import { queryFn, queryKey } from './test-utils'
|
|
6
|
-
import type { UseSuspenseQueryResult } from './useSuspenseQuery'
|
|
7
6
|
|
|
8
7
|
describe('<SuspenseQuery/>', () => {
|
|
9
8
|
it('type check', () => {
|
|
@@ -72,7 +71,7 @@ describe('<SuspenseQuery/>', () => {
|
|
|
72
71
|
{(query) => {
|
|
73
72
|
expectTypeOf(query).toEqualTypeOf<UseSuspenseQueryResult<{ text: string }>>()
|
|
74
73
|
expectTypeOf(query.data).toEqualTypeOf<{ text: string }>()
|
|
75
|
-
expectTypeOf(query.status).toEqualTypeOf<'success'>()
|
|
74
|
+
expectTypeOf(query.status).toEqualTypeOf<'success' | 'error'>()
|
|
76
75
|
return <></>
|
|
77
76
|
}}
|
|
78
77
|
</SuspenseQuery>
|
|
@@ -82,7 +81,7 @@ describe('<SuspenseQuery/>', () => {
|
|
|
82
81
|
{(selectedQuery) => {
|
|
83
82
|
expectTypeOf(selectedQuery).toEqualTypeOf<UseSuspenseQueryResult<string>>()
|
|
84
83
|
expectTypeOf(selectedQuery.data).toEqualTypeOf<string>()
|
|
85
|
-
expectTypeOf(selectedQuery.status).toEqualTypeOf<'success'>()
|
|
84
|
+
expectTypeOf(selectedQuery.status).toEqualTypeOf<'error' | 'success'>()
|
|
86
85
|
return <></>
|
|
87
86
|
}}
|
|
88
87
|
</SuspenseQuery>
|
|
@@ -98,7 +97,7 @@ describe('<SuspenseQuery/>', () => {
|
|
|
98
97
|
{(query) => {
|
|
99
98
|
expectTypeOf(query).toEqualTypeOf<UseSuspenseQueryResult<{ text: string }>>()
|
|
100
99
|
expectTypeOf(query.data).toEqualTypeOf<{ text: string }>()
|
|
101
|
-
expectTypeOf(query.status).toEqualTypeOf<'success'>()
|
|
100
|
+
expectTypeOf(query.status).toEqualTypeOf<'error' | 'success'>()
|
|
102
101
|
return <></>
|
|
103
102
|
}}
|
|
104
103
|
</SuspenseQuery>
|
|
@@ -108,7 +107,7 @@ describe('<SuspenseQuery/>', () => {
|
|
|
108
107
|
{(selectedQuery) => {
|
|
109
108
|
expectTypeOf(selectedQuery).toEqualTypeOf<UseSuspenseQueryResult<string>>()
|
|
110
109
|
expectTypeOf(selectedQuery.data).toEqualTypeOf<string>()
|
|
111
|
-
expectTypeOf(selectedQuery.status).toEqualTypeOf<'success'>()
|
|
110
|
+
expectTypeOf(selectedQuery.status).toEqualTypeOf<'error' | 'success'>()
|
|
112
111
|
return <></>
|
|
113
112
|
}}
|
|
114
113
|
</SuspenseQuery>
|
package/src/SuspenseQuery.tsx
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
|
+
type QueryKey,
|
|
3
|
+
type UseSuspenseQueryOptions,
|
|
4
|
+
type UseSuspenseQueryResult,
|
|
5
|
+
useSuspenseQuery,
|
|
6
|
+
} from '@tanstack/react-query'
|
|
2
7
|
import type { ReactNode } from 'react'
|
|
3
|
-
import { type UseSuspenseQueryOptions, type UseSuspenseQueryResult, useSuspenseQuery } from './useSuspenseQuery'
|
|
4
8
|
|
|
5
9
|
/**
|
|
6
10
|
* We provide these components to clearly express what causes suspense at the same depth.
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { InfiniteData, QueryKey, UseInfiniteQueryOptions } from '@tanstack/react-query'
|
|
2
2
|
import type { OmitKeyof, RequiredKeyof } from './utility-types'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated There is no `SelectedInfiniteOptions` in \@tanstack/react-query@^4.40.0.
|
|
6
|
+
*/
|
|
4
7
|
export type SelectedInfiniteOptions<
|
|
5
8
|
TQueryFnData,
|
|
6
9
|
TError = unknown,
|
|
@@ -27,6 +30,9 @@ export type SelectedInfiniteOptions<
|
|
|
27
30
|
select: (data: InfiniteData<TQueryFnData>) => InfiniteData<TData>
|
|
28
31
|
}
|
|
29
32
|
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated There is no `UnSelectedInfiniteOptions` in \@tanstack/react-query@^4.40.0.
|
|
35
|
+
*/
|
|
30
36
|
export type UnSelectedInfiniteOptions<
|
|
31
37
|
TQueryFnData,
|
|
32
38
|
TError = unknown,
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
type UseQueryResult,
|
|
3
|
+
type UseSuspenseQueryResult,
|
|
4
|
+
queryOptions,
|
|
5
|
+
useQueries,
|
|
6
|
+
useQuery,
|
|
7
|
+
useQueryClient,
|
|
8
|
+
useSuspenseQueries,
|
|
9
|
+
useSuspenseQuery,
|
|
10
|
+
} from '@tanstack/react-query'
|
|
2
11
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
3
|
-
import { queryOptions } from './queryOptions'
|
|
4
12
|
import { SuspenseQuery } from './SuspenseQuery'
|
|
5
13
|
import { queryKey } from './test-utils'
|
|
6
14
|
import { usePrefetchQuery } from './usePrefetchQuery'
|
|
7
|
-
import { useSuspenseQueries } from './useSuspenseQueries'
|
|
8
|
-
import { type UseSuspenseQueryResult, useSuspenseQuery } from './useSuspenseQuery'
|
|
9
15
|
|
|
10
16
|
const query = {
|
|
11
17
|
options1: () =>
|
|
@@ -58,26 +64,30 @@ describe('queryOptions', () => {
|
|
|
58
64
|
))()
|
|
59
65
|
})
|
|
60
66
|
it('should be used with useQueries', () => {
|
|
61
|
-
const [
|
|
67
|
+
const [
|
|
68
|
+
query1,
|
|
69
|
+
query2,
|
|
70
|
+
// query3
|
|
71
|
+
] = useQueries({
|
|
62
72
|
queries: [
|
|
63
73
|
query.options1(),
|
|
64
74
|
{ ...query.options2() },
|
|
65
|
-
queryOptions({
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
}),
|
|
75
|
+
// queryOptions({
|
|
76
|
+
// queryKey: [...queryKey, 4] as const,
|
|
77
|
+
// queryFn: () => Promise.resolve({ field: 'success' }),
|
|
78
|
+
// select: (data) => {
|
|
79
|
+
// expectTypeOf(data).toEqualTypeOf<{ field: string }>()
|
|
80
|
+
// return data.field
|
|
81
|
+
// },
|
|
82
|
+
// }),
|
|
73
83
|
],
|
|
74
84
|
})
|
|
75
85
|
expectTypeOf(query1).toEqualTypeOf<UseQueryResult<{ field: string }>>()
|
|
76
86
|
expectTypeOf(query1.data).toEqualTypeOf<{ field: string } | undefined>()
|
|
77
87
|
expectTypeOf(query2).toEqualTypeOf<UseQueryResult<{ field: string }>>()
|
|
78
88
|
expectTypeOf(query2.data).toEqualTypeOf<{ field: string } | undefined>()
|
|
79
|
-
expectTypeOf(query3).toEqualTypeOf<UseQueryResult<string>>()
|
|
80
|
-
expectTypeOf(query3.data).toEqualTypeOf<string | undefined>()
|
|
89
|
+
// expectTypeOf(query3).toEqualTypeOf<UseQueryResult<string>>()
|
|
90
|
+
// expectTypeOf(query3.data).toEqualTypeOf<string | undefined>()
|
|
81
91
|
})
|
|
82
92
|
it('should be used with useSuspenseQueries', () => {
|
|
83
93
|
const [query1, query2, query3] = useSuspenseQueries({
|
package/src/queryOptions.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type QueryKey, type UseQueryOptions, queryOptions as original_queryOptions } from '@tanstack/react-query'
|
|
2
2
|
import type { OmitKeyof, RequiredKeyof } from './utility-types'
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated There is no `SelectedQueryOptions` in \@tanstack/react-query@^4.40.0.
|
|
6
|
+
*/
|
|
4
7
|
export type SelectedQueryOptions<
|
|
5
8
|
TQueryFnData = unknown,
|
|
6
9
|
TError = unknown,
|
|
@@ -29,6 +32,9 @@ export type SelectedQueryOptions<
|
|
|
29
32
|
select: (data: TQueryFnData) => TData
|
|
30
33
|
}
|
|
31
34
|
|
|
35
|
+
/**
|
|
36
|
+
* @deprecated There is no `UnSelectedQueryOptions` in \@tanstack/react-query@^4.40.0.
|
|
37
|
+
*/
|
|
32
38
|
export type UnSelectedQueryOptions<
|
|
33
39
|
TQueryFnData = unknown,
|
|
34
40
|
TError = unknown,
|
|
@@ -58,29 +64,12 @@ export type UnSelectedQueryOptions<
|
|
|
58
64
|
}
|
|
59
65
|
|
|
60
66
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
67
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
68
|
+
* @deprecated Use `queryOptions` from \@tanstack/react-query@^4.40.0
|
|
69
|
+
* @example
|
|
70
|
+
* ```diff
|
|
71
|
+
* - import { queryOptions } from '@suspensive/react-query'
|
|
72
|
+
* + import { queryOptions } from '@tanstack/react-query'
|
|
73
|
+
* ```
|
|
65
74
|
*/
|
|
66
|
-
export
|
|
67
|
-
TQueryFnData = unknown,
|
|
68
|
-
TError = unknown,
|
|
69
|
-
TData = TQueryFnData,
|
|
70
|
-
TQueryKey extends QueryKey = QueryKey,
|
|
71
|
-
>(
|
|
72
|
-
options: SelectedQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
73
|
-
): SelectedQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
74
|
-
|
|
75
|
-
export function queryOptions<
|
|
76
|
-
TQueryFnData = unknown,
|
|
77
|
-
TError = unknown,
|
|
78
|
-
TData = TQueryFnData,
|
|
79
|
-
TQueryKey extends QueryKey = QueryKey,
|
|
80
|
-
>(
|
|
81
|
-
options: UnSelectedQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
82
|
-
): UnSelectedQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
83
|
-
|
|
84
|
-
export function queryOptions(options: unknown) {
|
|
85
|
-
return options
|
|
86
|
-
}
|
|
75
|
+
export const queryOptions = original_queryOptions
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
+
import { type UseSuspenseQueryResult, queryOptions, useSuspenseQueries } from '@tanstack/react-query'
|
|
1
2
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
2
|
-
import { queryOptions } from './queryOptions'
|
|
3
3
|
import { queryFn, queryKey, select } from './test-utils'
|
|
4
|
-
import { useSuspenseQueries } from './useSuspenseQueries'
|
|
5
|
-
import type { UseSuspenseQueryResult } from './useSuspenseQuery'
|
|
6
4
|
|
|
7
5
|
describe('useSuspenseQueries', () => {
|
|
8
6
|
it('type check', () => {
|
|
@@ -66,15 +64,15 @@ describe('useSuspenseQueries', () => {
|
|
|
66
64
|
})
|
|
67
65
|
|
|
68
66
|
expectTypeOf(query).toEqualTypeOf<UseSuspenseQueryResult<{ text: string }>>()
|
|
69
|
-
expectTypeOf(query.status).toEqualTypeOf
|
|
67
|
+
expectTypeOf(query.status).toEqualTypeOf<'error' | 'success'>()
|
|
70
68
|
expectTypeOf(query.data).toEqualTypeOf<{ text: string }>()
|
|
71
69
|
|
|
72
70
|
expectTypeOf(selectedQuery).toEqualTypeOf<UseSuspenseQueryResult<string>>()
|
|
73
|
-
expectTypeOf(selectedQuery.status).toEqualTypeOf
|
|
71
|
+
expectTypeOf(selectedQuery.status).toEqualTypeOf<'error' | 'success'>()
|
|
74
72
|
expectTypeOf(selectedQuery.data).toEqualTypeOf<string>()
|
|
75
73
|
|
|
76
74
|
expectTypeOf(selectedQueryByQueryOptions).toEqualTypeOf<UseSuspenseQueryResult<string>>()
|
|
77
|
-
expectTypeOf(selectedQueryByQueryOptions.status).toEqualTypeOf
|
|
75
|
+
expectTypeOf(selectedQueryByQueryOptions.status).toEqualTypeOf<'error' | 'success'>()
|
|
78
76
|
expectTypeOf(selectedQueryByQueryOptions.data).toEqualTypeOf<string>()
|
|
79
77
|
})
|
|
80
78
|
})
|
|
@@ -1,131 +1,46 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
type GetSuspenseOptions<T> =
|
|
8
|
-
// Part 1: responsible for applying explicit type parameter to function arguments, if object { queryFnData: TQueryFnData, error: TError, data: TData }
|
|
9
|
-
T extends {
|
|
10
|
-
queryFnData: infer TQueryFnData
|
|
11
|
-
error?: infer TError
|
|
12
|
-
data: infer TData
|
|
13
|
-
}
|
|
14
|
-
? UseSuspenseQueryOptions<TQueryFnData, TError, TData>
|
|
15
|
-
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
|
|
16
|
-
? UseSuspenseQueryOptions<TQueryFnData, TError>
|
|
17
|
-
: T extends { data: infer TData; error?: infer TError }
|
|
18
|
-
? UseSuspenseQueryOptions<unknown, TError, TData>
|
|
19
|
-
: // Part 2: responsible for applying explicit type parameter to function arguments, if tuple [TQueryFnData, TError, TData]
|
|
20
|
-
T extends [infer TQueryFnData, infer TError, infer TData]
|
|
21
|
-
? UseSuspenseQueryOptions<TQueryFnData, TError, TData>
|
|
22
|
-
: T extends [infer TQueryFnData, infer TError]
|
|
23
|
-
? UseSuspenseQueryOptions<TQueryFnData, TError>
|
|
24
|
-
: T extends [infer TQueryFnData]
|
|
25
|
-
? UseSuspenseQueryOptions<TQueryFnData>
|
|
26
|
-
: // Part 3: responsible for inferring and enforcing type if no explicit parameter was provided
|
|
27
|
-
T extends {
|
|
28
|
-
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
29
|
-
select?: (data: any) => infer TData
|
|
30
|
-
}
|
|
31
|
-
? UseSuspenseQueryOptions<TQueryFnData, unknown, TData, TQueryKey>
|
|
32
|
-
: T extends {
|
|
33
|
-
queryFn?: QueryFunction<infer TQueryFnData, infer TQueryKey>
|
|
34
|
-
}
|
|
35
|
-
? UseSuspenseQueryOptions<TQueryFnData, unknown, TQueryFnData, TQueryKey>
|
|
36
|
-
: // Fallback
|
|
37
|
-
UseSuspenseQueryOptions
|
|
38
|
-
|
|
39
|
-
type GetSuspenseResults<T> =
|
|
40
|
-
// Part 1: responsible for mapping explicit type parameter to function result, if object
|
|
41
|
-
T extends { queryFnData: any; error?: infer TError; data: infer TData }
|
|
42
|
-
? UseSuspenseQueryResult<TData, TError>
|
|
43
|
-
: T extends { queryFnData: infer TQueryFnData; error?: infer TError }
|
|
44
|
-
? UseSuspenseQueryResult<TQueryFnData, TError>
|
|
45
|
-
: T extends { data: infer TData; error?: infer TError }
|
|
46
|
-
? UseSuspenseQueryResult<TData, TError>
|
|
47
|
-
: // Part 2: responsible for mapping explicit type parameter to function result, if tuple
|
|
48
|
-
T extends [any, infer TError, infer TData]
|
|
49
|
-
? UseSuspenseQueryResult<TData, TError>
|
|
50
|
-
: T extends [infer TQueryFnData, infer TError]
|
|
51
|
-
? UseSuspenseQueryResult<TQueryFnData, TError>
|
|
52
|
-
: T extends [infer TQueryFnData]
|
|
53
|
-
? UseSuspenseQueryResult<TQueryFnData>
|
|
54
|
-
: // Part 3: responsible for mapping inferred type to results, if no explicit parameter was provided
|
|
55
|
-
T extends {
|
|
56
|
-
queryFn?: QueryFunction<infer TQueryFnData, any>
|
|
57
|
-
select?: (data: any) => infer TData
|
|
58
|
-
}
|
|
59
|
-
? UseSuspenseQueryResult<unknown extends TData ? TQueryFnData : TData>
|
|
60
|
-
: T extends {
|
|
61
|
-
queryFn?: QueryFunction<infer TQueryFnData, any>
|
|
62
|
-
}
|
|
63
|
-
? UseSuspenseQueryResult<TQueryFnData>
|
|
64
|
-
: // Fallback
|
|
65
|
-
UseSuspenseQueryResult
|
|
1
|
+
import {
|
|
2
|
+
type SuspenseQueriesOptions as original_SuspenseQueriesOptions,
|
|
3
|
+
type SuspenseQueriesResults as original_SuspenseQueriesResults,
|
|
4
|
+
useSuspenseQueries as original_useSuspenseQueries,
|
|
5
|
+
} from '@tanstack/react-query'
|
|
66
6
|
|
|
67
7
|
/**
|
|
68
|
-
*
|
|
8
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
9
|
+
* @deprecated Use `SuspenseQueriesOptions` from \@tanstack/react-query@^4.40.0
|
|
10
|
+
* @example
|
|
11
|
+
* ```diff
|
|
12
|
+
* - import type { SuspenseQueriesOptions } from '@suspensive/react-query'
|
|
13
|
+
* + import type { SuspenseQueriesOptions } from '@tanstack/react-query'
|
|
14
|
+
* ```
|
|
69
15
|
*/
|
|
70
16
|
export type SuspenseQueriesOptions<
|
|
71
17
|
T extends Array<any>,
|
|
72
18
|
TResult extends Array<any> = [],
|
|
73
19
|
TDepth extends ReadonlyArray<number> = [],
|
|
74
|
-
> =
|
|
75
|
-
? Array<UseSuspenseQueryOptions>
|
|
76
|
-
: T extends []
|
|
77
|
-
? []
|
|
78
|
-
: T extends [infer Head]
|
|
79
|
-
? [...TResult, GetSuspenseOptions<Head>]
|
|
80
|
-
: T extends [infer Head, ...infer Tail]
|
|
81
|
-
? SuspenseQueriesOptions<[...Tail], [...TResult, GetSuspenseOptions<Head>], [...TDepth, 1]>
|
|
82
|
-
: Array<unknown> extends T
|
|
83
|
-
? T
|
|
84
|
-
: // If T is *some* array but we couldn't assign unknown[] to it, then it must hold some known/homogenous type!
|
|
85
|
-
// use this to infer the param types in the case of Array.map() argument
|
|
86
|
-
T extends Array<UseSuspenseQueryOptions<infer TQueryFnData, infer TError, infer TData, infer TQueryKey>>
|
|
87
|
-
? Array<UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>
|
|
88
|
-
: // Fallback
|
|
89
|
-
Array<UseSuspenseQueryOptions>
|
|
20
|
+
> = original_SuspenseQueriesOptions<T, TResult, TDepth>
|
|
90
21
|
|
|
91
22
|
/**
|
|
92
|
-
*
|
|
23
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
24
|
+
* @deprecated Use `SuspenseQueriesResults` from \@tanstack/react-query@^4.40.0
|
|
25
|
+
* @example
|
|
26
|
+
* ```diff
|
|
27
|
+
* - import type { SuspenseQueriesResults } from '@suspensive/react-query'
|
|
28
|
+
* + import type { SuspenseQueriesResults } from '@tanstack/react-query'
|
|
29
|
+
* ```
|
|
93
30
|
*/
|
|
94
31
|
export type SuspenseQueriesResults<
|
|
95
32
|
T extends Array<any>,
|
|
96
33
|
TResult extends Array<any> = [],
|
|
97
34
|
TDepth extends ReadonlyArray<number> = [],
|
|
98
|
-
> =
|
|
99
|
-
? Array<UseSuspenseQueryResult>
|
|
100
|
-
: T extends []
|
|
101
|
-
? []
|
|
102
|
-
: T extends [infer Head]
|
|
103
|
-
? [...TResult, GetSuspenseResults<Head>]
|
|
104
|
-
: T extends [infer Head, ...infer Tail]
|
|
105
|
-
? SuspenseQueriesResults<[...Tail], [...TResult, GetSuspenseResults<Head>], [...TDepth, 1]>
|
|
106
|
-
: T extends Array<UseSuspenseQueryOptions<infer TQueryFnData, infer TError, infer TData, any>>
|
|
107
|
-
? // Dynamic-size (homogenous) UseQueryOptions array: map directly to array of results
|
|
108
|
-
Array<UseSuspenseQueryResult<unknown extends TData ? TQueryFnData : TData, TError>>
|
|
109
|
-
: // Fallback
|
|
110
|
-
Array<UseSuspenseQueryResult>
|
|
35
|
+
> = original_SuspenseQueriesResults<T, TResult, TDepth>
|
|
111
36
|
|
|
112
37
|
/**
|
|
113
|
-
* This
|
|
114
|
-
* @
|
|
38
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
39
|
+
* @deprecated Use `useSuspenseQueries` from \@tanstack/react-query@^4.40.0
|
|
40
|
+
* @example
|
|
41
|
+
* ```diff
|
|
42
|
+
* - import { useSuspenseQueries } from '@suspensive/react-query'
|
|
43
|
+
* + import { useSuspenseQueries } from '@tanstack/react-query'
|
|
44
|
+
* ```
|
|
115
45
|
*/
|
|
116
|
-
export
|
|
117
|
-
queries,
|
|
118
|
-
context,
|
|
119
|
-
}: {
|
|
120
|
-
queries: readonly [...SuspenseQueriesOptions<T>]
|
|
121
|
-
context?: UseQueryOptions['context']
|
|
122
|
-
}): SuspenseQueriesResults<T> {
|
|
123
|
-
return useQueries({
|
|
124
|
-
queries: queries.map((query: typeof queries) => ({
|
|
125
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-spread
|
|
126
|
-
...query,
|
|
127
|
-
suspense: true,
|
|
128
|
-
})),
|
|
129
|
-
context,
|
|
130
|
-
}) as SuspenseQueriesResults<T>
|
|
131
|
-
}
|
|
46
|
+
export const useSuspenseQueries = original_useSuspenseQueries
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import { type UseSuspenseQueryResult, queryOptions, useSuspenseQuery } from '@tanstack/react-query'
|
|
1
2
|
import { describe, expectTypeOf, it } from 'vitest'
|
|
2
|
-
import { queryOptions } from './queryOptions'
|
|
3
3
|
import { queryFn, queryKey } from './test-utils'
|
|
4
|
-
import { type UseSuspenseQueryResult, useSuspenseQuery } from './useSuspenseQuery'
|
|
5
4
|
|
|
6
5
|
describe('useSuspenseQuery', () => {
|
|
7
6
|
it('type check', () => {
|
|
@@ -47,12 +46,12 @@ describe('useSuspenseQuery', () => {
|
|
|
47
46
|
const result = useSuspenseQuery({ queryKey, queryFn })
|
|
48
47
|
expectTypeOf(result).toEqualTypeOf<UseSuspenseQueryResult<{ text: string }>>()
|
|
49
48
|
expectTypeOf(result.data).toEqualTypeOf<{ text: string }>()
|
|
50
|
-
expectTypeOf(result.status).toEqualTypeOf<'success'>()
|
|
49
|
+
expectTypeOf(result.status).toEqualTypeOf<'error' | 'success'>()
|
|
51
50
|
|
|
52
51
|
const selectedResult = useSuspenseQuery({ queryKey, queryFn, select: (data) => data.text })
|
|
53
52
|
expectTypeOf(selectedResult).toEqualTypeOf<UseSuspenseQueryResult<string>>()
|
|
54
53
|
expectTypeOf(selectedResult.data).toEqualTypeOf<string>()
|
|
55
|
-
expectTypeOf(selectedResult.status).toEqualTypeOf<'success'>()
|
|
54
|
+
expectTypeOf(selectedResult.status).toEqualTypeOf<'error' | 'success'>()
|
|
56
55
|
|
|
57
56
|
const options = queryOptions({
|
|
58
57
|
queryKey,
|
|
@@ -62,7 +61,7 @@ describe('useSuspenseQuery', () => {
|
|
|
62
61
|
const resultWithOptions = useSuspenseQuery(options)
|
|
63
62
|
expectTypeOf(resultWithOptions).toEqualTypeOf<UseSuspenseQueryResult<{ text: string }>>()
|
|
64
63
|
expectTypeOf(resultWithOptions.data).toEqualTypeOf<{ text: string }>()
|
|
65
|
-
expectTypeOf(resultWithOptions.status).toEqualTypeOf<'success'>()
|
|
64
|
+
expectTypeOf(resultWithOptions.status).toEqualTypeOf<'error' | 'success'>()
|
|
66
65
|
|
|
67
66
|
const selectedResultWithOptions = useSuspenseQuery({
|
|
68
67
|
...options,
|
|
@@ -70,6 +69,6 @@ describe('useSuspenseQuery', () => {
|
|
|
70
69
|
})
|
|
71
70
|
expectTypeOf(selectedResultWithOptions).toEqualTypeOf<UseSuspenseQueryResult<string>>()
|
|
72
71
|
expectTypeOf(selectedResultWithOptions.data).toEqualTypeOf<string>()
|
|
73
|
-
expectTypeOf(selectedResultWithOptions.status).toEqualTypeOf<'success'>()
|
|
72
|
+
expectTypeOf(selectedResultWithOptions.status).toEqualTypeOf<'error' | 'success'>()
|
|
74
73
|
})
|
|
75
74
|
})
|
package/src/useSuspenseQuery.ts
CHANGED
|
@@ -1,37 +1,38 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
type UseSuspenseQueryOptions as original_UseSuspenseQueryOptions,
|
|
3
|
+
type UseSuspenseQueryResult as original_UseSuspenseQueryResult,
|
|
4
|
+
useSuspenseQuery as original_useSuspenseQuery,
|
|
5
|
+
} from '@tanstack/react-query'
|
|
3
6
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
9
|
+
* @deprecated Use `UseSuspenseQueryOptions` from \@tanstack/react-query@^4.40.0
|
|
10
|
+
* @example
|
|
11
|
+
* ```diff
|
|
12
|
+
* - import type { UseSuspenseQueryOptions } from '@suspensive/react-query'
|
|
13
|
+
* + import type { UseSuspenseQueryOptions } from '@tanstack/react-query'
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export type UseSuspenseQueryOptions = original_UseSuspenseQueryOptions
|
|
9
17
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
/**
|
|
19
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
20
|
+
* @deprecated Use `UseSuspenseQueryResult` from \@tanstack/react-query@^4.40.0
|
|
21
|
+
* @example
|
|
22
|
+
* ```diff
|
|
23
|
+
* - import type { UseSuspenseQueryResult } from '@suspensive/react-query'
|
|
24
|
+
* + import type { UseSuspenseQueryResult } from '@tanstack/react-query'
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export type UseSuspenseQueryResult = original_UseSuspenseQueryResult
|
|
19
28
|
|
|
20
29
|
/**
|
|
21
|
-
* This
|
|
22
|
-
* @
|
|
30
|
+
* This feature is officially supported in \@tanstack/react-query@^4.40.0, You can proceed with the migration.
|
|
31
|
+
* @deprecated Use `useSuspenseQuery` from \@tanstack/react-query@^4.40.0
|
|
32
|
+
* @example
|
|
33
|
+
* ```diff
|
|
34
|
+
* - import { useSuspenseQuery } from '@suspensive/react-query'
|
|
35
|
+
* + import { useSuspenseQuery } from '@tanstack/react-query'
|
|
36
|
+
* ```
|
|
23
37
|
*/
|
|
24
|
-
export
|
|
25
|
-
TQueryFnData = unknown,
|
|
26
|
-
TError = unknown,
|
|
27
|
-
TData = TQueryFnData,
|
|
28
|
-
TQueryKey extends QueryKey = QueryKey,
|
|
29
|
-
>(options: UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>) {
|
|
30
|
-
return useQuery<TQueryFnData, TError, TData, TQueryKey>({
|
|
31
|
-
...options,
|
|
32
|
-
enabled: true,
|
|
33
|
-
useErrorBoundary: true,
|
|
34
|
-
suspense: true,
|
|
35
|
-
networkMode: 'always',
|
|
36
|
-
}) as UseSuspenseQueryResult<TData, TError>
|
|
37
|
-
}
|
|
38
|
+
export const useSuspenseQuery = original_useSuspenseQuery
|