@trpc/react-query 10.43.0 → 11.0.0-next.92

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 (97) hide show
  1. package/dist/bundle-analysis.json +208 -0
  2. package/dist/createHooksInternal-3d8ebfcf.mjs +481 -0
  3. package/dist/createHooksInternal-dce6e141.js +435 -0
  4. package/dist/createHooksInternal-e2034194.js +490 -0
  5. package/dist/createTRPCReact.d.ts +46 -45
  6. package/dist/createTRPCReact.d.ts.map +1 -1
  7. package/dist/index.d.ts +0 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +8 -21
  10. package/dist/index.mjs +9 -21
  11. package/dist/internals/context.d.ts +42 -54
  12. package/dist/internals/context.d.ts.map +1 -1
  13. package/dist/internals/getClientArgs.d.ts +2 -1
  14. package/dist/internals/getClientArgs.d.ts.map +1 -1
  15. package/dist/internals/getQueryKey.d.ts +28 -13
  16. package/dist/internals/getQueryKey.d.ts.map +1 -1
  17. package/dist/internals/useQueries.d.ts +4 -4
  18. package/dist/internals/useQueries.d.ts.map +1 -1
  19. package/dist/server/index.d.ts +0 -6
  20. package/dist/server/index.d.ts.map +1 -1
  21. package/dist/server/index.js +52 -69
  22. package/dist/server/index.mjs +52 -69
  23. package/dist/server/ssgProxy.d.ts +23 -13
  24. package/dist/server/ssgProxy.d.ts.map +1 -1
  25. package/dist/shared/hooks/createHooksInternal.d.ts +35 -12
  26. package/dist/shared/hooks/createHooksInternal.d.ts.map +1 -1
  27. package/dist/shared/hooks/createRootHooks.d.ts +0 -5
  28. package/dist/shared/hooks/createRootHooks.d.ts.map +1 -1
  29. package/dist/shared/hooks/types.d.ts +33 -18
  30. package/dist/shared/hooks/types.d.ts.map +1 -1
  31. package/dist/shared/index.js +9 -9
  32. package/dist/shared/index.mjs +3 -3
  33. package/dist/shared/polymorphism/mutationLike.d.ts +5 -5
  34. package/dist/shared/polymorphism/mutationLike.d.ts.map +1 -1
  35. package/dist/shared/polymorphism/queryLike.d.ts +5 -5
  36. package/dist/shared/polymorphism/queryLike.d.ts.map +1 -1
  37. package/dist/shared/polymorphism/routerLike.d.ts +4 -3
  38. package/dist/shared/polymorphism/routerLike.d.ts.map +1 -1
  39. package/dist/shared/proxy/decorationProxy.d.ts +2 -2
  40. package/dist/shared/proxy/decorationProxy.d.ts.map +1 -1
  41. package/dist/shared/proxy/useQueriesProxy.d.ts +6 -6
  42. package/dist/shared/proxy/useQueriesProxy.d.ts.map +1 -1
  43. package/dist/shared/proxy/utilsProxy.d.ts +34 -31
  44. package/dist/shared/proxy/utilsProxy.d.ts.map +1 -1
  45. package/dist/shared/types.d.ts +0 -12
  46. package/dist/shared/types.d.ts.map +1 -1
  47. package/dist/utils/inferReactQueryProcedure.d.ts +7 -7
  48. package/dist/utils/inferReactQueryProcedure.d.ts.map +1 -1
  49. package/dist/utilsProxy-00894da2.mjs +121 -0
  50. package/dist/utilsProxy-27bd93c1.js +128 -0
  51. package/dist/utilsProxy-7e396600.js +114 -0
  52. package/package.json +8 -14
  53. package/src/createTRPCReact.tsx +156 -135
  54. package/src/index.ts +0 -1
  55. package/src/internals/context.tsx +93 -164
  56. package/src/internals/getClientArgs.ts +9 -4
  57. package/src/internals/getQueryKey.ts +53 -24
  58. package/src/internals/useQueries.ts +7 -10
  59. package/src/server/index.ts +0 -8
  60. package/src/server/ssgProxy.ts +179 -34
  61. package/src/shared/hooks/createHooksInternal.tsx +298 -207
  62. package/src/shared/hooks/createRootHooks.tsx +0 -6
  63. package/src/shared/hooks/types.ts +87 -36
  64. package/src/shared/polymorphism/mutationLike.ts +11 -8
  65. package/src/shared/polymorphism/queryLike.ts +17 -12
  66. package/src/shared/polymorphism/routerLike.ts +15 -9
  67. package/src/shared/proxy/decorationProxy.ts +9 -31
  68. package/src/shared/proxy/useQueriesProxy.ts +23 -37
  69. package/src/shared/proxy/utilsProxy.ts +121 -95
  70. package/src/shared/types.ts +0 -12
  71. package/src/utils/inferReactQueryProcedure.ts +28 -30
  72. package/dist/context-4557b3d3.js +0 -38
  73. package/dist/createHooksInternal-2e69c447.js +0 -582
  74. package/dist/createHooksInternal-37b068e0.js +0 -510
  75. package/dist/createHooksInternal-bdff7171.mjs +0 -568
  76. package/dist/getArrayQueryKey-4bdb5cc2.js +0 -36
  77. package/dist/getArrayQueryKey-86134f8b.mjs +0 -34
  78. package/dist/internals/getArrayQueryKey.d.ts +0 -25
  79. package/dist/internals/getArrayQueryKey.d.ts.map +0 -1
  80. package/dist/interop.d.ts +0 -11
  81. package/dist/interop.d.ts.map +0 -1
  82. package/dist/server/types.d.ts +0 -14
  83. package/dist/server/types.d.ts.map +0 -1
  84. package/dist/shared/hooks/deprecated/createHooksInternal.d.ts +0 -63
  85. package/dist/shared/hooks/deprecated/createHooksInternal.d.ts.map +0 -1
  86. package/dist/ssg/index.d.ts +0 -15
  87. package/dist/ssg/index.d.ts.map +0 -1
  88. package/dist/ssg/ssg.d.ts +0 -16
  89. package/dist/ssg/ssg.d.ts.map +0 -1
  90. package/src/internals/getArrayQueryKey.ts +0 -46
  91. package/src/interop.ts +0 -29
  92. package/src/server/types.ts +0 -29
  93. package/src/shared/hooks/deprecated/createHooksInternal.tsx +0 -641
  94. package/src/ssg/index.tsx +0 -16
  95. package/src/ssg/ssg.ts +0 -139
  96. package/ssg/index.d.ts +0 -1
  97. package/ssg/index.js +0 -1
@@ -1,15 +1,27 @@
1
1
  import {
2
+ dehydrate,
2
3
  DehydratedState,
3
4
  DehydrateOptions,
4
5
  InfiniteData,
5
6
  QueryClient,
6
7
  } from '@tanstack/react-query';
8
+ import {
9
+ getUntypedClient,
10
+ inferRouterClient,
11
+ TRPCClientError,
12
+ TRPCUntypedClient,
13
+ } from '@trpc/client';
7
14
  import {
8
15
  AnyProcedure,
9
16
  AnyQueryProcedure,
17
+ AnyRootConfig,
10
18
  AnyRouter,
19
+ callProcedure,
20
+ ClientDataTransformerOptions,
11
21
  Filter,
12
- inferHandlerInput,
22
+ inferProcedureInput,
23
+ inferRouterContext,
24
+ Maybe,
13
25
  ProtectedIntersection,
14
26
  } from '@trpc/server';
15
27
  import {
@@ -17,49 +29,103 @@ import {
17
29
  createRecursiveProxy,
18
30
  inferTransformedProcedureOutput,
19
31
  } from '@trpc/server/shared';
20
- import { createSSGHelpers } from '../ssg/ssg';
21
- import { CreateServerSideHelpersOptions } from './types';
32
+ import { getQueryKeyInternal } from '../internals/getQueryKey';
33
+ import {
34
+ CreateTRPCReactQueryClientConfig,
35
+ ExtractCursorType,
36
+ getQueryClient,
37
+ getQueryType,
38
+ TRPCFetchInfiniteQueryOptions,
39
+ TRPCFetchQueryOptions,
40
+ } from '../shared';
22
41
 
23
- type DecorateProcedure<TProcedure extends AnyProcedure> = {
42
+ interface CreateSSGHelpersInternal<TRouter extends AnyRouter> {
43
+ router: TRouter;
44
+ ctx: inferRouterContext<TRouter>;
45
+ transformer?: ClientDataTransformerOptions;
46
+ }
47
+
48
+ interface CreateSSGHelpersExternal<TRouter extends AnyRouter> {
49
+ client: inferRouterClient<TRouter> | TRPCUntypedClient<TRouter>;
50
+ }
51
+
52
+ type CreateServerSideHelpersOptions<TRouter extends AnyRouter> =
53
+ CreateTRPCReactQueryClientConfig &
54
+ (CreateSSGHelpersExternal<TRouter> | CreateSSGHelpersInternal<TRouter>);
55
+
56
+ type DecorateProcedure<
57
+ TConfig extends AnyRootConfig,
58
+ TProcedure extends AnyProcedure,
59
+ > = {
24
60
  /**
25
- * @link https://tanstack.com/query/v4/docs/react/guides/prefetching
61
+ * @link https://tanstack.com/query/v5/docs/react/guides/prefetching
26
62
  */
27
63
  fetch(
28
- ...args: inferHandlerInput<TProcedure>
29
- ): Promise<inferTransformedProcedureOutput<TProcedure>>;
64
+ input: inferProcedureInput<TProcedure>,
65
+ opts?: TRPCFetchQueryOptions<
66
+ inferTransformedProcedureOutput<TConfig, TProcedure>,
67
+ TRPCClientError<TConfig>
68
+ >,
69
+ ): Promise<inferTransformedProcedureOutput<TConfig, TProcedure>>;
30
70
 
31
71
  /**
32
- * @link https://tanstack.com/query/v4/docs/react/guides/prefetching
72
+ * @link https://tanstack.com/query/v5/docs/react/guides/prefetching
33
73
  */
34
74
  fetchInfinite(
35
- ...args: inferHandlerInput<TProcedure>
36
- ): Promise<InfiniteData<inferTransformedProcedureOutput<TProcedure>>>;
75
+ input: inferProcedureInput<TProcedure>,
76
+ opts?: TRPCFetchInfiniteQueryOptions<
77
+ inferProcedureInput<TProcedure>,
78
+ inferTransformedProcedureOutput<TConfig, TProcedure>,
79
+ TRPCClientError<TConfig>
80
+ >,
81
+ ): Promise<
82
+ InfiniteData<
83
+ inferTransformedProcedureOutput<TConfig, TProcedure>,
84
+ NonNullable<ExtractCursorType<inferProcedureInput<TProcedure>>> | null
85
+ >
86
+ >;
37
87
 
38
88
  /**
39
- * @link https://tanstack.com/query/v4/docs/react/guides/prefetching
89
+ * @link https://tanstack.com/query/v5/docs/react/guides/prefetching
40
90
  */
41
- prefetch(...args: inferHandlerInput<TProcedure>): Promise<void>;
91
+ prefetch(
92
+ input: inferProcedureInput<TProcedure>,
93
+ opts?: TRPCFetchQueryOptions<
94
+ inferTransformedProcedureOutput<TConfig, TProcedure>,
95
+ TRPCClientError<TConfig>
96
+ >,
97
+ ): Promise<void>;
42
98
 
43
99
  /**
44
- * @link https://tanstack.com/query/v4/docs/react/guides/prefetching
100
+ * @link https://tanstack.com/query/v5/docs/react/guides/prefetching
45
101
  */
46
- prefetchInfinite(...args: inferHandlerInput<TProcedure>): Promise<void>;
102
+ prefetchInfinite(
103
+ input: inferProcedureInput<TProcedure>,
104
+ opts?: TRPCFetchInfiniteQueryOptions<
105
+ inferProcedureInput<TProcedure>,
106
+ inferTransformedProcedureOutput<TConfig, TProcedure>,
107
+ TRPCClientError<TConfig>
108
+ >,
109
+ ): Promise<void>;
47
110
  };
48
111
 
49
112
  /**
50
113
  * @internal
51
114
  */
52
- export type DecoratedProcedureSSGRecord<TRouter extends AnyRouter> = {
115
+ type DecoratedProcedureSSGRecord<TRouter extends AnyRouter> = {
53
116
  [TKey in keyof Filter<
54
117
  TRouter['_def']['record'],
55
118
  AnyQueryProcedure | AnyRouter
56
119
  >]: TRouter['_def']['record'][TKey] extends AnyRouter
57
120
  ? DecoratedProcedureSSGRecord<TRouter['_def']['record'][TKey]>
58
121
  : // utils only apply to queries
59
- DecorateProcedure<TRouter['_def']['record'][TKey]>;
122
+ DecorateProcedure<
123
+ TRouter['_def']['_config'],
124
+ TRouter['_def']['record'][TKey]
125
+ >;
60
126
  };
61
127
 
62
- type AnyDecoratedProcedure = DecorateProcedure<any>;
128
+ type AnyDecoratedProcedure = DecorateProcedure<any, any>;
63
129
 
64
130
  /**
65
131
  * Create functions you can use for server-side rendering / static generation
@@ -68,9 +134,57 @@ type AnyDecoratedProcedure = DecorateProcedure<any>;
68
134
  export function createServerSideHelpers<TRouter extends AnyRouter>(
69
135
  opts: CreateServerSideHelpersOptions<TRouter>,
70
136
  ) {
71
- const helpers = createSSGHelpers(opts);
137
+ const queryClient = getQueryClient(opts);
72
138
 
73
- type CreateServerSideHelpers = ProtectedIntersection<
139
+ const resolvedOpts: {
140
+ serialize: (obj: unknown) => any;
141
+ query: (queryOpts: { path: string; input: unknown }) => Promise<unknown>;
142
+ } = (() => {
143
+ if ('router' in opts) {
144
+ const { transformer, ctx, router } = opts;
145
+ return {
146
+ serialize: transformer
147
+ ? ('input' in transformer ? transformer.input : transformer).serialize
148
+ : (obj) => obj,
149
+ query: (queryOpts) => {
150
+ return callProcedure({
151
+ procedures: router._def.procedures,
152
+ path: queryOpts.path,
153
+ getRawInput: async () => queryOpts.input,
154
+ ctx,
155
+ type: 'query',
156
+ });
157
+ },
158
+ };
159
+ }
160
+
161
+ const { client } = opts;
162
+ const untypedClient =
163
+ client instanceof TRPCUntypedClient
164
+ ? client
165
+ : getUntypedClient(client as any);
166
+
167
+ return {
168
+ query: (queryOpts) =>
169
+ untypedClient.query(queryOpts.path, queryOpts.input),
170
+ serialize: (obj) => untypedClient.runtime.transformer.serialize(obj),
171
+ };
172
+ })();
173
+
174
+ function _dehydrate(
175
+ opts: DehydrateOptions = {
176
+ shouldDehydrateQuery() {
177
+ // makes sure to serialize errors
178
+ return true;
179
+ },
180
+ },
181
+ ): DehydratedState {
182
+ const before = dehydrate(queryClient, opts);
183
+ const after = resolvedOpts.serialize(before);
184
+ return after;
185
+ }
186
+
187
+ type CreateSSGHelpers = ProtectedIntersection<
74
188
  {
75
189
  queryClient: QueryClient;
76
190
  dehydrate: (opts?: DehydrateOptions) => DehydratedState;
@@ -78,28 +192,59 @@ export function createServerSideHelpers<TRouter extends AnyRouter>(
78
192
  DecoratedProcedureSSGRecord<TRouter>
79
193
  >;
80
194
 
81
- return createFlatProxy<CreateServerSideHelpers>((key) => {
82
- if (key === 'queryClient') {
83
- return helpers.queryClient;
84
- }
195
+ return createFlatProxy<CreateSSGHelpers>((key) => {
196
+ if (key === 'queryClient') return queryClient;
197
+ if (key === 'dehydrate') return _dehydrate;
85
198
 
86
- if (key === 'dehydrate') {
87
- return helpers.dehydrate;
88
- }
89
199
  return createRecursiveProxy((opts) => {
90
200
  const args = opts.args;
201
+ const input = args[0];
202
+ const arrayPath = [key, ...opts.path];
203
+ const utilName = arrayPath.pop() as keyof AnyDecoratedProcedure;
91
204
 
92
- const pathCopy = [key, ...opts.path];
93
-
94
- const utilName = pathCopy.pop() as keyof AnyDecoratedProcedure;
205
+ const queryFn = () =>
206
+ resolvedOpts.query({ path: arrayPath.join('.'), input });
95
207
 
96
- const fullPath = pathCopy.join('.');
208
+ const queryKey = getQueryKeyInternal(
209
+ arrayPath,
210
+ input,
211
+ getQueryType(utilName),
212
+ );
97
213
 
98
- const helperKey = `${utilName}Query` as const;
99
- // ^?
214
+ const helperMap: Record<keyof AnyDecoratedProcedure, () => unknown> = {
215
+ fetch: () => {
216
+ const args1 = args[1] as Maybe<TRPCFetchQueryOptions<any, any>>;
217
+ return queryClient.fetchQuery({ ...args1, queryKey, queryFn });
218
+ },
219
+ fetchInfinite: () => {
220
+ const args1 = args[1] as Maybe<
221
+ TRPCFetchInfiniteQueryOptions<any, any, any>
222
+ >;
223
+ return queryClient.fetchInfiniteQuery({
224
+ ...args1,
225
+ queryKey,
226
+ queryFn,
227
+ initialPageParam: args1?.initialCursor ?? null,
228
+ });
229
+ },
230
+ prefetch: () => {
231
+ const args1 = args[1] as Maybe<TRPCFetchQueryOptions<any, any>>;
232
+ return queryClient.prefetchQuery({ ...args1, queryKey, queryFn });
233
+ },
234
+ prefetchInfinite: () => {
235
+ const args1 = args[1] as Maybe<
236
+ TRPCFetchInfiniteQueryOptions<any, any, any>
237
+ >;
238
+ return queryClient.prefetchInfiniteQuery({
239
+ ...args1,
240
+ queryKey,
241
+ queryFn,
242
+ initialPageParam: args1?.initialCursor ?? null,
243
+ });
244
+ },
245
+ };
100
246
 
101
- const fn: (...args: any) => any = helpers[helperKey];
102
- return fn(fullPath, ...args);
247
+ return helperMap[utilName]();
103
248
  });
104
249
  });
105
250
  }