@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.
Files changed (67) hide show
  1. package/dist/SuspenseQueries.cjs +1 -33
  2. package/dist/SuspenseQueries.cjs.map +1 -1
  3. package/dist/SuspenseQueries.d.cts +1 -4
  4. package/dist/SuspenseQueries.d.ts +1 -4
  5. package/dist/SuspenseQueries.js +1 -2
  6. package/dist/SuspenseQuery.cjs +1 -28
  7. package/dist/SuspenseQuery.cjs.map +1 -1
  8. package/dist/SuspenseQuery.d.cts +1 -3
  9. package/dist/SuspenseQuery.d.ts +1 -3
  10. package/dist/SuspenseQuery.js +1 -2
  11. package/dist/{chunk-MMV3JWIQ.js → chunk-7AETAPCD.js} +2 -4
  12. package/dist/chunk-7AETAPCD.js.map +1 -0
  13. package/dist/{chunk-3OKEPIW3.js → chunk-CCIJG25S.js} +1 -1
  14. package/dist/chunk-CCIJG25S.js.map +1 -0
  15. package/dist/{chunk-D5FKB2PY.js → chunk-QYGYB5UC.js} +4 -4
  16. package/dist/chunk-QYGYB5UC.js.map +1 -0
  17. package/dist/chunk-WCKC4M3O.js +12 -0
  18. package/dist/chunk-WCKC4M3O.js.map +1 -0
  19. package/dist/chunk-YFVQ7O2B.js +12 -0
  20. package/dist/chunk-YFVQ7O2B.js.map +1 -0
  21. package/dist/chunk-Z4ML33QN.js +10 -0
  22. package/dist/chunk-Z4ML33QN.js.map +1 -0
  23. package/dist/index.cjs +20 -36
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.js +10 -10
  26. package/dist/infiniteQueryOptions.cjs.map +1 -1
  27. package/dist/infiniteQueryOptions.d.cts +6 -0
  28. package/dist/infiniteQueryOptions.d.ts +6 -0
  29. package/dist/infiniteQueryOptions.js +1 -1
  30. package/dist/queryOptions.cjs +2 -3
  31. package/dist/queryOptions.cjs.map +1 -1
  32. package/dist/queryOptions.d.cts +15 -7
  33. package/dist/queryOptions.d.ts +15 -7
  34. package/dist/queryOptions.js +1 -1
  35. package/dist/useSuspenseQueries.cjs +1 -28
  36. package/dist/useSuspenseQueries.cjs.map +1 -1
  37. package/dist/useSuspenseQueries.d.cts +25 -46
  38. package/dist/useSuspenseQueries.d.ts +25 -46
  39. package/dist/useSuspenseQueries.js +1 -1
  40. package/dist/useSuspenseQuery.cjs +1 -25
  41. package/dist/useSuspenseQuery.cjs.map +1 -1
  42. package/dist/useSuspenseQuery.d.cts +29 -10
  43. package/dist/useSuspenseQuery.d.ts +29 -10
  44. package/dist/useSuspenseQuery.js +1 -1
  45. package/package.json +5 -5
  46. package/src/PrefetchQuery.test-d.tsx +1 -1
  47. package/src/SuspenseQueries.test-d.tsx +1 -3
  48. package/src/SuspenseQueries.tsx +1 -1
  49. package/src/SuspenseQuery.test-d.tsx +5 -6
  50. package/src/SuspenseQuery.tsx +6 -2
  51. package/src/infiniteQueryOptions.ts +6 -0
  52. package/src/queryOptions.test-d.tsx +25 -15
  53. package/src/queryOptions.ts +15 -26
  54. package/src/usePrefetchQuery.test-d.tsx +1 -1
  55. package/src/useSuspenseQueries.test-d.ts +4 -6
  56. package/src/useSuspenseQueries.ts +29 -114
  57. package/src/useSuspenseQuery.test-d.ts +5 -6
  58. package/src/useSuspenseQuery.ts +33 -32
  59. package/dist/chunk-3E4WCXHQ.js +0 -21
  60. package/dist/chunk-3E4WCXHQ.js.map +0 -1
  61. package/dist/chunk-3OKEPIW3.js.map +0 -1
  62. package/dist/chunk-D5FKB2PY.js.map +0 -1
  63. package/dist/chunk-MMV3JWIQ.js.map +0 -1
  64. package/dist/chunk-NIWB6JKL.js +0 -24
  65. package/dist/chunk-NIWB6JKL.js.map +0 -1
  66. package/dist/chunk-UVSCLLGR.js +0 -11
  67. package/dist/chunk-UVSCLLGR.js.map +0 -1
@@ -1,15 +1,34 @@
1
- import { QueryKey, UseQueryOptions, UseQueryResult } from '@tanstack/react-query';
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 hook is wrapping `useQuery` of `@tanstack/react-query` v4 with default suspense option.
11
- * @see {@link https://suspensive.org/docs/react-query/useSuspenseQuery Suspensive Docs}
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
- declare function useSuspenseQuery<TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseSuspenseQueryResult<TData, TError>;
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 };
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
  import {
3
3
  useSuspenseQuery
4
- } from "./chunk-3E4WCXHQ.js";
4
+ } from "./chunk-YFVQ7O2B.js";
5
5
  import "./chunk-QETBZSG5.js";
6
6
  export {
7
7
  useSuspenseQuery
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@suspensive/react-query-4",
3
- "version": "3.2.2",
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": "^4.36.1",
43
- "@types/react": "^19.1.2",
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 --coverage --typecheck",
61
+ "ci:test": "vitest run",
62
62
  "ci:type": "tsc --noEmit",
63
63
  "clean": "rimraf ./dist ./coverage ./node_modules",
64
- "test:ui": "vitest --ui --coverage --typecheck"
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,
@@ -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>
@@ -1,6 +1,10 @@
1
- import type { QueryKey } from '@tanstack/react-query'
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 { type UseQueryResult, useQueries, useQuery, useQueryClient } from '@tanstack/react-query'
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 [query1, query2, query3] = useQueries({
67
+ const [
68
+ query1,
69
+ query2,
70
+ // query3
71
+ ] = useQueries({
62
72
  queries: [
63
73
  query.options1(),
64
74
  { ...query.options2() },
65
- queryOptions({
66
- queryKey: [...queryKey, 4] as const,
67
- queryFn: () => Promise.resolve({ field: 'success' }),
68
- select: (data) => {
69
- expectTypeOf(data).toEqualTypeOf<{ field: string }>()
70
- return data.field
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({
@@ -1,6 +1,9 @@
1
- import type { QueryKey, UseQueryOptions } from '@tanstack/react-query'
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
- * Creates a reusable query options object that can be used across different query hooks.
62
- * Provides better type inference and easier query key management.
63
- *
64
- * @see {@link https://suspensive.org/docs/react-query/queryOptions Suspensive Docs}
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 function queryOptions<
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,4 +1,4 @@
1
- import { queryOptions } from './queryOptions'
1
+ import { queryOptions } from '@tanstack/react-query'
2
2
  import { queryFn, queryKey } from './test-utils'
3
3
  import { usePrefetchQuery } from './usePrefetchQuery'
4
4
 
@@ -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<`success`>()
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<`success`>()
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<`success`>()
75
+ expectTypeOf(selectedQueryByQueryOptions.status).toEqualTypeOf<'error' | 'success'>()
78
76
  expectTypeOf(selectedQueryByQueryOptions.data).toEqualTypeOf<string>()
79
77
  })
80
78
  })
@@ -1,131 +1,46 @@
1
- import { type QueryFunction, type UseQueryOptions, useQueries } from '@tanstack/react-query'
2
- import type { UseSuspenseQueryOptions, UseSuspenseQueryResult } from './useSuspenseQuery'
3
-
4
- // Avoid TS depth-limit error in case of large array literal
5
- type MAXIMUM_DEPTH = 20
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
- * SuspenseQueriesOptions reducer recursively unwraps function arguments to infer/enforce type param
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
- > = TDepth['length'] extends MAXIMUM_DEPTH
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
- * SuspenseQueriesResults reducer recursively maps type param to results
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
- > = TDepth['length'] extends MAXIMUM_DEPTH
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 hook is wrapping `useQueries` of `@tanstack/react-query` v4 with default suspense option.
114
- * @see {@link https://suspensive.org/docs/react-query/useSuspenseQueries Suspensive Docs}
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 function useSuspenseQueries<T extends any[]>({
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
  })
@@ -1,37 +1,38 @@
1
- import { type QueryKey, type UseQueryOptions, type UseQueryResult, useQuery } from '@tanstack/react-query'
2
- import type { OmitKeyof } from './utility-types'
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
- export interface UseSuspenseQueryResult<TData = unknown, TError = unknown>
5
- extends OmitKeyof<UseQueryResult<TData, TError>, keyof Pick<UseQueryResult, 'isPlaceholderData'>> {
6
- data: TData
7
- status: 'success'
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
- export type UseSuspenseQueryOptions<
11
- TQueryFnData = unknown,
12
- TError = unknown,
13
- TData = TQueryFnData,
14
- TQueryKey extends QueryKey = QueryKey,
15
- > = OmitKeyof<
16
- UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
17
- 'suspense' | 'useErrorBoundary' | 'enabled' | 'placeholderData' | 'networkMode'
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 hook is wrapping `useQuery` of `@tanstack/react-query` v4 with default suspense option.
22
- * @see {@link https://suspensive.org/docs/react-query/useSuspenseQuery Suspensive Docs}
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 function useSuspenseQuery<
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