@trpc/tanstack-react-query 11.0.0-rc.768 → 11.0.0-rc.781

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 (41) hide show
  1. package/dist/bundle-analysis.json +31 -31
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/internals/Context.d.ts +13 -7
  5. package/dist/internals/Context.d.ts.map +1 -1
  6. package/dist/internals/Context.js +5 -1
  7. package/dist/internals/Context.mjs +5 -1
  8. package/dist/internals/createOptionsProxy.d.ts +37 -15
  9. package/dist/internals/createOptionsProxy.d.ts.map +1 -1
  10. package/dist/internals/createOptionsProxy.js +9 -4
  11. package/dist/internals/createOptionsProxy.mjs +9 -4
  12. package/dist/internals/infiniteQueryOptions.d.ts +5 -15
  13. package/dist/internals/infiniteQueryOptions.d.ts.map +1 -1
  14. package/dist/internals/mutationOptions.d.ts +8 -3
  15. package/dist/internals/mutationOptions.d.ts.map +1 -1
  16. package/dist/internals/mutationOptions.js +3 -1
  17. package/dist/internals/mutationOptions.mjs +3 -1
  18. package/dist/internals/queryOptions.d.ts +8 -15
  19. package/dist/internals/queryOptions.d.ts.map +1 -1
  20. package/dist/internals/queryOptions.js +3 -1
  21. package/dist/internals/queryOptions.mjs +3 -1
  22. package/dist/internals/subscriptionOptions.d.ts +12 -16
  23. package/dist/internals/subscriptionOptions.d.ts.map +1 -1
  24. package/dist/internals/subscriptionOptions.js +7 -3
  25. package/dist/internals/subscriptionOptions.mjs +7 -3
  26. package/dist/internals/types.d.ts +24 -0
  27. package/dist/internals/types.d.ts.map +1 -1
  28. package/dist/internals/utils.d.ts +10 -2
  29. package/dist/internals/utils.d.ts.map +1 -1
  30. package/dist/internals/utils.js +9 -3
  31. package/dist/internals/utils.mjs +9 -3
  32. package/package.json +8 -8
  33. package/src/index.ts +1 -0
  34. package/src/internals/Context.tsx +20 -7
  35. package/src/internals/createOptionsProxy.ts +55 -39
  36. package/src/internals/infiniteQueryOptions.ts +25 -8
  37. package/src/internals/mutationOptions.ts +23 -6
  38. package/src/internals/queryOptions.ts +17 -3
  39. package/src/internals/subscriptionOptions.ts +24 -8
  40. package/src/internals/types.ts +24 -0
  41. package/src/internals/utils.ts +11 -2
@@ -2,16 +2,13 @@ import type {
2
2
  DataTag,
3
3
  DefinedInitialDataInfiniteOptions,
4
4
  InfiniteData,
5
+ QueryClient,
5
6
  QueryFunction,
7
+ SkipToken,
6
8
  UndefinedInitialDataInfiniteOptions,
7
9
  UnusedSkipTokenInfiniteOptions,
8
10
  } from '@tanstack/react-query';
9
- import {
10
- infiniteQueryOptions,
11
- skipToken,
12
- type QueryClient,
13
- type SkipToken,
14
- } from '@tanstack/react-query';
11
+ import { infiniteQueryOptions, skipToken } from '@tanstack/react-query';
15
12
  import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
16
13
  import type { DistributiveOmit } from '@trpc/server/unstable-core-do-not-import';
17
14
  import type {
@@ -188,13 +185,33 @@ export interface TRPCInfiniteQueryOptions<TDef extends ResolverDef> {
188
185
  >;
189
186
  }
190
187
 
188
+ type AnyTRPCInfiniteQueryOptionsIn =
189
+ | DefinedTRPCInfiniteQueryOptionsIn<unknown, unknown, unknown, unknown>
190
+ | UnusedSkipTokenTRPCInfiniteQueryOptionsIn<
191
+ unknown,
192
+ unknown,
193
+ unknown,
194
+ unknown
195
+ >
196
+ | UndefinedTRPCInfiniteQueryOptionsIn<unknown, unknown, unknown, unknown>;
197
+
198
+ type AnyTRPCInfiniteQueryOptionsOut =
199
+ | DefinedTRPCInfiniteQueryOptionsOut<unknown, unknown, unknown, unknown>
200
+ | UnusedSkipTokenTRPCInfiniteQueryOptionsOut<
201
+ unknown,
202
+ unknown,
203
+ unknown,
204
+ unknown
205
+ >
206
+ | UndefinedTRPCInfiniteQueryOptionsOut<unknown, unknown, unknown, unknown>;
207
+
191
208
  export function trpcInfiniteQueryOptions(args: {
192
209
  query: typeof TRPCUntypedClient.prototype.query;
193
210
  queryClient: QueryClient | (() => QueryClient);
194
211
  path: readonly string[];
195
212
  queryKey: TRPCQueryKey;
196
- opts: UndefinedTRPCInfiniteQueryOptionsIn<unknown, unknown, unknown, unknown>;
197
- }) {
213
+ opts: AnyTRPCInfiniteQueryOptionsIn;
214
+ }): AnyTRPCInfiniteQueryOptionsOut {
198
215
  const { query, path, queryKey, opts } = args;
199
216
  const inputIsSkipToken = queryKey[1]?.input === skipToken;
200
217
 
@@ -1,7 +1,7 @@
1
- import type { MutationFunction } from '@tanstack/react-query';
2
- import {
3
- type QueryClient,
4
- type UseMutationOptions,
1
+ import type {
2
+ MutationFunction,
3
+ QueryClient,
4
+ UseMutationOptions,
5
5
  } from '@tanstack/react-query';
6
6
  import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
7
7
  import type {
@@ -69,13 +69,30 @@ export interface MutationOptionsOverride {
69
69
  }) => MaybePromise<unknown>;
70
70
  }
71
71
 
72
+ type AnyTRPCMutationOptionsIn = TRPCMutationOptionsIn<
73
+ unknown,
74
+ unknown,
75
+ unknown,
76
+ unknown
77
+ >;
78
+
79
+ type AnyTRPCMutationOptionsOut = TRPCMutationOptionsOut<
80
+ unknown,
81
+ unknown,
82
+ unknown,
83
+ unknown
84
+ >;
85
+
86
+ /**
87
+ * @internal
88
+ */
72
89
  export function trpcMutationOptions(args: {
73
90
  mutate: typeof TRPCUntypedClient.prototype.mutation;
74
91
  queryClient: QueryClient | (() => QueryClient);
75
92
  path: readonly string[];
76
- opts: TRPCMutationOptionsIn<unknown, unknown, unknown, unknown> | undefined;
93
+ opts: AnyTRPCMutationOptionsIn;
77
94
  overrides: MutationOptionsOverride | undefined;
78
- }): TRPCMutationOptionsOut<unknown, unknown, unknown, unknown> {
95
+ }): AnyTRPCMutationOptionsOut {
79
96
  const { mutate, path, opts, overrides } = args;
80
97
  const queryClient = unwrapLazyArg(args.queryClient);
81
98
 
@@ -3,10 +3,11 @@ import type {
3
3
  DefinedInitialDataOptions,
4
4
  QueryClient,
5
5
  QueryFunction,
6
+ SkipToken,
6
7
  UndefinedInitialDataOptions,
7
8
  UnusedSkipTokenOptions,
8
9
  } from '@tanstack/react-query';
9
- import { queryOptions, skipToken, type SkipToken } from '@tanstack/react-query';
10
+ import { queryOptions, skipToken } from '@tanstack/react-query';
10
11
  import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
11
12
  import type {
12
13
  coerceAsyncIterableToArray,
@@ -154,13 +155,26 @@ export interface TRPCQueryOptions<TDef extends ResolverDef> {
154
155
  >;
155
156
  }
156
157
 
158
+ type AnyTRPCQueryOptionsIn =
159
+ | DefinedTRPCQueryOptionsIn<unknown, unknown, unknown>
160
+ | UnusedSkipTokenTRPCQueryOptionsIn<unknown, unknown, unknown>
161
+ | UndefinedTRPCQueryOptionsIn<unknown, unknown, unknown>;
162
+
163
+ type AnyTRPCQueryOptionsOut =
164
+ | DefinedTRPCQueryOptionsOut<unknown, unknown, unknown>
165
+ | UnusedSkipTokenTRPCQueryOptionsOut<unknown, unknown, unknown>
166
+ | UndefinedTRPCQueryOptionsOut<unknown, unknown, unknown>;
167
+
168
+ /**
169
+ * @internal
170
+ */
157
171
  export function trpcQueryOptions(args: {
158
172
  query: typeof TRPCUntypedClient.prototype.query;
159
173
  queryClient: QueryClient | (() => QueryClient);
160
174
  path: readonly string[];
161
175
  queryKey: TRPCQueryKey;
162
- opts: UndefinedTRPCQueryOptionsIn<unknown, unknown, unknown>;
163
- }) {
176
+ opts: AnyTRPCQueryOptionsIn;
177
+ }): AnyTRPCQueryOptionsOut {
164
178
  const { query, path, queryKey, opts } = args;
165
179
  const queryClient = unwrapLazyArg(args.queryClient);
166
180
 
@@ -1,4 +1,5 @@
1
- import { hashKey, skipToken, type SkipToken } from '@tanstack/react-query';
1
+ import type { SkipToken } from '@tanstack/react-query';
2
+ import { hashKey, skipToken } from '@tanstack/react-query';
2
3
  import type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';
3
4
  import type { TRPCConnectionState } from '@trpc/client/unstable-internals';
4
5
  import type { Unsubscribable } from '@trpc/server/observable';
@@ -14,15 +15,16 @@ import { createTRPCOptionsResult } from './utils';
14
15
  interface BaseTRPCSubscriptionOptionsIn<TOutput, TError> {
15
16
  enabled?: boolean;
16
17
  onStarted?: () => void;
17
- onData: (data: inferAsyncIterableYield<TOutput>) => void;
18
+ onData?: (data: inferAsyncIterableYield<TOutput>) => void;
18
19
  onError?: (err: TError) => void;
20
+ onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;
19
21
  }
20
22
 
21
23
  interface UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError> {
22
24
  onStarted?: () => void;
23
- onData: (data: inferAsyncIterableYield<TOutput>) => void;
25
+ onData?: (data: inferAsyncIterableYield<TOutput>) => void;
24
26
  onError?: (err: TError) => void;
25
- onConnectionStateChange: (state: TRPCConnectionState<TError>) => void;
27
+ onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;
26
28
  }
27
29
 
28
30
  interface TRPCSubscriptionOptionsOut<TOutput, TError>
@@ -107,15 +109,27 @@ export type TRPCSubscriptionResult<TOutput, TError> =
107
109
  | TRPCSubscriptionErrorResult<TOutput, TError>
108
110
  | TRPCSubscriptionPendingResult<TOutput>;
109
111
 
112
+ type AnyTRPCSubscriptionOptionsIn =
113
+ | BaseTRPCSubscriptionOptionsIn<unknown, unknown>
114
+ | UnusedSkipTokenTRPCSubscriptionOptionsIn<unknown, unknown>;
115
+
116
+ type AnyTRPCSubscriptionOptionsOut = TRPCSubscriptionOptionsOut<
117
+ unknown,
118
+ unknown
119
+ >;
120
+
121
+ /**
122
+ * @internal
123
+ */
110
124
  export const trpcSubscriptionOptions = (args: {
111
125
  subscribe: typeof TRPCUntypedClient.prototype.subscription;
112
126
  path: readonly string[];
113
127
  queryKey: TRPCQueryKey;
114
- opts: BaseTRPCSubscriptionOptionsIn<unknown, unknown> | undefined;
115
- }) => {
128
+ opts: AnyTRPCSubscriptionOptionsIn;
129
+ }): AnyTRPCSubscriptionOptionsOut => {
116
130
  const { subscribe, path, queryKey, opts } = args;
117
131
  const input = queryKey[1]?.input;
118
- const enabled = opts?.enabled ?? input !== skipToken;
132
+ const enabled = 'enabled' in opts ? !!opts.enabled : input !== skipToken;
119
133
 
120
134
  const _subscribe: ReturnType<TRPCSubscriptionOptions<any>>['subscribe'] = (
121
135
  innerOpts,
@@ -147,7 +161,9 @@ export function useSubscription<TOutput, TError>(
147
161
  }, []);
148
162
 
149
163
  type Unsubscribe = () => void;
150
- const currentSubscriptionRef = React.useRef<Unsubscribe>();
164
+ const currentSubscriptionRef = React.useRef<Unsubscribe>(() => {
165
+ // noop
166
+ });
151
167
 
152
168
  const reset = React.useCallback((): void => {
153
169
  // unsubscribe from the previous subscription
@@ -1,5 +1,8 @@
1
1
  import type { TRPCRequestOptions } from '@trpc/client';
2
2
 
3
+ /**
4
+ * @internal
5
+ */
3
6
  export type ResolverDef = {
4
7
  input: any;
5
8
  output: any;
@@ -7,10 +10,16 @@ export type ResolverDef = {
7
10
  errorShape: any;
8
11
  };
9
12
 
13
+ /**
14
+ * @internal
15
+ */
10
16
  export type ExtractCursorType<TInput> = TInput extends { cursor?: any }
11
17
  ? TInput['cursor']
12
18
  : unknown;
13
19
 
20
+ /**
21
+ * @public
22
+ */
14
23
  export interface TRPCReactRequestOptions
15
24
  // For RQ, we use their internal AbortSignals instead of letting the user pass their own
16
25
  extends Omit<TRPCRequestOptions, 'signal'> {
@@ -24,6 +33,9 @@ export interface TRPCReactRequestOptions
24
33
  abortOnUnmount?: boolean;
25
34
  }
26
35
 
36
+ /**
37
+ * @public
38
+ */
27
39
  export interface TRPCQueryBaseOptions {
28
40
  /**
29
41
  * tRPC-related options
@@ -31,17 +43,29 @@ export interface TRPCQueryBaseOptions {
31
43
  trpc?: TRPCReactRequestOptions;
32
44
  }
33
45
 
46
+ /**
47
+ * @public
48
+ */
34
49
  export interface TRPCQueryOptionsResult {
35
50
  trpc: {
36
51
  path: string;
37
52
  };
38
53
  }
39
54
 
55
+ /**
56
+ * @public
57
+ */
40
58
  export type QueryType = 'any' | 'infinite' | 'query';
41
59
 
60
+ /**
61
+ * @public
62
+ */
42
63
  export type TRPCQueryKey = [
43
64
  readonly string[],
44
65
  { input?: unknown; type?: Exclude<QueryType, 'any'> }?,
45
66
  ];
46
67
 
68
+ /**
69
+ * @public
70
+ */
47
71
  export type TRPCMutationKey = [readonly string[]]; // = [TRPCQueryKey[0]]
@@ -1,4 +1,5 @@
1
- import { skipToken, type QueryClient } from '@tanstack/react-query';
1
+ import type { QueryClient } from '@tanstack/react-query';
2
+ import { skipToken } from '@tanstack/react-query';
2
3
  import { isFunction, isObject } from '@trpc/server/unstable-core-do-not-import';
3
4
  import type {
4
5
  QueryType,
@@ -77,7 +78,9 @@ export async function buildQueryFromAsyncIterable(
77
78
  * To allow easy interactions with groups of related queries, such as
78
79
  * invalidating all queries of a router, we use an array as the path when
79
80
  * storing in tanstack query.
80
- **/
81
+ *
82
+ * @internal
83
+ */
81
84
  export function getQueryKeyInternal(
82
85
  path: readonly string[],
83
86
  input: unknown,
@@ -126,6 +129,9 @@ export function getQueryKeyInternal(
126
129
  ];
127
130
  }
128
131
 
132
+ /**
133
+ * @internal
134
+ */
129
135
  export function getMutationKeyInternal(
130
136
  path: readonly string[],
131
137
  ): TRPCMutationKey {
@@ -135,6 +141,9 @@ export function getMutationKeyInternal(
135
141
  return splitPath.length ? [splitPath] : ([] as unknown as TRPCMutationKey);
136
142
  }
137
143
 
144
+ /**
145
+ * @internal
146
+ */
138
147
  export function unwrapLazyArg<T>(valueOrLazy: T | (() => T)): T {
139
148
  return (isFunction(valueOrLazy) ? valueOrLazy() : valueOrLazy) as T;
140
149
  }