@trpc/react-query 10.0.0-alpha-exp-suspense-2022-11-07-23-41-14.8

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 (65) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +88 -0
  3. package/dist/createHooksInternal-9f58b9a0.mjs +414 -0
  4. package/dist/createHooksInternal-bf3d6e79.js +422 -0
  5. package/dist/createTRPCReact.d.ts +42 -0
  6. package/dist/createTRPCReact.d.ts.map +1 -0
  7. package/dist/getArrayQueryKey-5ab807a3.js +21 -0
  8. package/dist/getArrayQueryKey-e56d8d64.mjs +19 -0
  9. package/dist/index.d.ts +4 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +58 -0
  12. package/dist/index.mjs +47 -0
  13. package/dist/internals/context.d.ts +102 -0
  14. package/dist/internals/context.d.ts.map +1 -0
  15. package/dist/internals/getArrayQueryKey.d.ts +9 -0
  16. package/dist/internals/getArrayQueryKey.d.ts.map +1 -0
  17. package/dist/internals/getQueryKey.d.ts +6 -0
  18. package/dist/internals/getQueryKey.d.ts.map +1 -0
  19. package/dist/interop.d.ts +11 -0
  20. package/dist/interop.d.ts.map +1 -0
  21. package/dist/queryClient-358a9a75.js +9 -0
  22. package/dist/queryClient-4d766c0c.mjs +7 -0
  23. package/dist/shared/hooks/createHooksInternal.d.ts +123 -0
  24. package/dist/shared/hooks/createHooksInternal.d.ts.map +1 -0
  25. package/dist/shared/index.d.ts +7 -0
  26. package/dist/shared/index.d.ts.map +1 -0
  27. package/dist/shared/index.js +18 -0
  28. package/dist/shared/index.mjs +7 -0
  29. package/dist/shared/proxy/decorationProxy.d.ts +8 -0
  30. package/dist/shared/proxy/decorationProxy.d.ts.map +1 -0
  31. package/dist/shared/proxy/utilsProxy.d.ts +79 -0
  32. package/dist/shared/proxy/utilsProxy.d.ts.map +1 -0
  33. package/dist/shared/queryClient.d.ts +16 -0
  34. package/dist/shared/queryClient.d.ts.map +1 -0
  35. package/dist/shared/types.d.ts +37 -0
  36. package/dist/shared/types.d.ts.map +1 -0
  37. package/dist/ssg/index.d.ts +5 -0
  38. package/dist/ssg/index.d.ts.map +1 -0
  39. package/dist/ssg/index.js +126 -0
  40. package/dist/ssg/index.mjs +121 -0
  41. package/dist/ssg/ssg.d.ts +23 -0
  42. package/dist/ssg/ssg.d.ts.map +1 -0
  43. package/dist/ssg/ssgProxy.d.ts +36 -0
  44. package/dist/ssg/ssgProxy.d.ts.map +1 -0
  45. package/package.json +80 -0
  46. package/shared/index.d.ts +1 -0
  47. package/shared/index.js +1 -0
  48. package/src/createTRPCReact.tsx +215 -0
  49. package/src/index.ts +4 -0
  50. package/src/internals/context.tsx +247 -0
  51. package/src/internals/getArrayQueryKey.test.ts +41 -0
  52. package/src/internals/getArrayQueryKey.ts +18 -0
  53. package/src/internals/getQueryKey.ts +10 -0
  54. package/src/interop.ts +29 -0
  55. package/src/shared/hooks/createHooksInternal.tsx +684 -0
  56. package/src/shared/index.ts +9 -0
  57. package/src/shared/proxy/decorationProxy.ts +43 -0
  58. package/src/shared/proxy/utilsProxy.ts +260 -0
  59. package/src/shared/queryClient.ts +20 -0
  60. package/src/shared/types.ts +38 -0
  61. package/src/ssg/index.ts +4 -0
  62. package/src/ssg/ssg.ts +138 -0
  63. package/src/ssg/ssgProxy.ts +105 -0
  64. package/ssg/index.d.ts +1 -0
  65. package/ssg/index.js +1 -0
@@ -0,0 +1,422 @@
1
+ 'use strict';
2
+
3
+ var shared = require('@trpc/server/shared');
4
+ var client = require('@trpc/client');
5
+ var reactQuery = require('@tanstack/react-query');
6
+ var React = require('react');
7
+ var getArrayQueryKey = require('./getArrayQueryKey-5ab807a3.js');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
+
13
+ /**
14
+ * We treat `undefined` as an input the same as omitting an `input`
15
+ * https://github.com/trpc/trpc/issues/2290
16
+ */ function getQueryKey(path, input) {
17
+ return input === undefined ? [
18
+ path
19
+ ] : [
20
+ path,
21
+ input
22
+ ];
23
+ }
24
+
25
+ /**
26
+ * Create proxy for decorating procedures
27
+ * @internal
28
+ */ function createReactProxyDecoration(name, hooks) {
29
+ return shared.createRecursiveProxy((opts)=>{
30
+ const args = opts.args;
31
+ const pathCopy = [
32
+ name,
33
+ ...opts.path
34
+ ];
35
+ // The last arg is for instance `.useMutation` or `.useQuery()`
36
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
37
+ const lastArg = pathCopy.pop();
38
+ // The `path` ends up being something like `post.byId`
39
+ const path = pathCopy.join('.');
40
+ if (lastArg === 'useMutation') {
41
+ return hooks[lastArg](path, ...args);
42
+ }
43
+ const [input, ...rest] = args;
44
+ const queryKey = getQueryKey(path, input);
45
+ if (lastArg.startsWith('useSuspense')) {
46
+ const opts1 = rest[0] || {};
47
+ const fn = lastArg === 'useSuspenseQuery' ? 'useQuery' : 'useInfiniteQuery';
48
+ return hooks[fn](queryKey, {
49
+ ...opts1,
50
+ suspense: true,
51
+ enabled: true
52
+ });
53
+ }
54
+ return hooks[lastArg](queryKey, ...rest);
55
+ });
56
+ }
57
+
58
+ const contextProps = [
59
+ 'client',
60
+ 'ssrContext',
61
+ 'ssrState',
62
+ 'abortOnUnmount'
63
+ ];
64
+ const TRPCContext = /*#__PURE__*/ React.createContext(null);
65
+
66
+ /**
67
+ * @internal
68
+ */ function createReactQueryUtilsProxy(context) {
69
+ return shared.createFlatProxy((key)=>{
70
+ const contextName = key;
71
+ if (contextName === 'client') {
72
+ return client.createTRPCClientProxy(context.client);
73
+ }
74
+ if (contextProps.includes(contextName)) {
75
+ return context[contextName];
76
+ }
77
+ return shared.createRecursiveProxy(({ path , args })=>{
78
+ const pathCopy = [
79
+ key,
80
+ ...path
81
+ ];
82
+ const utilName = pathCopy.pop();
83
+ const fullPath = pathCopy.join('.');
84
+ const getOpts = (name)=>{
85
+ if ([
86
+ 'setData',
87
+ 'setInfiniteData'
88
+ ].includes(name)) {
89
+ const [input, updater, ...rest] = args;
90
+ const queryKey = getQueryKey(fullPath, input);
91
+ return {
92
+ queryKey,
93
+ updater,
94
+ rest
95
+ };
96
+ }
97
+ const [input1, ...rest1] = args;
98
+ const queryKey1 = getQueryKey(fullPath, input1);
99
+ return {
100
+ queryKey: queryKey1,
101
+ rest: rest1
102
+ };
103
+ };
104
+ const { queryKey , rest , updater } = getOpts(utilName);
105
+ const contextMap = {
106
+ fetch: ()=>context.fetchQuery(queryKey, ...rest),
107
+ fetchInfinite: ()=>context.fetchInfiniteQuery(queryKey, ...rest),
108
+ prefetch: ()=>context.prefetchQuery(queryKey, ...rest),
109
+ prefetchInfinite: ()=>context.prefetchInfiniteQuery(queryKey, ...rest),
110
+ invalidate: ()=>context.invalidateQueries(queryKey, ...rest),
111
+ refetch: ()=>context.refetchQueries(queryKey, ...rest),
112
+ cancel: ()=>context.cancelQuery(queryKey, ...rest),
113
+ setData: ()=>context.setQueryData(queryKey, updater, ...rest),
114
+ setInfiniteData: ()=>context.setInfiniteQueryData(queryKey, updater, ...rest),
115
+ getData: ()=>context.getQueryData(queryKey),
116
+ getInfiniteData: ()=>context.getInfiniteQueryData(queryKey)
117
+ };
118
+ return contextMap[utilName]();
119
+ });
120
+ });
121
+ }
122
+
123
+ function getClientArgs(pathAndInput, opts) {
124
+ const [path, input] = pathAndInput;
125
+ return [
126
+ path,
127
+ input,
128
+ opts?.trpc
129
+ ];
130
+ }
131
+ /**
132
+ * Makes a stable reference of the `trpc` prop
133
+ */ function useHookResult(value) {
134
+ const ref = React.useRef(value);
135
+ ref.current.path = value.path;
136
+ return ref.current;
137
+ }
138
+ /**
139
+ * Create strongly typed react hooks
140
+ * @internal
141
+ */ function createHooksInternal(config) {
142
+ const mutationSuccessOverride = config?.unstable_overrides?.useMutation?.onSuccess ?? ((options)=>options.originalFn());
143
+ const Context = config?.context ?? TRPCContext;
144
+ const ReactQueryContext = config?.reactQueryContext;
145
+ const createClient = (opts)=>{
146
+ return client.createTRPCClient(opts);
147
+ };
148
+ const TRPCProvider = (props)=>{
149
+ const { abortOnUnmount =false , client , queryClient , ssrContext } = props;
150
+ const [ssrState, setSSRState] = React.useState(props.ssrState ?? false);
151
+ React.useEffect(()=>{
152
+ // Only updating state to `mounted` if we are using SSR.
153
+ // This makes it so we don't have an unnecessary re-render when opting out of SSR.
154
+ setSSRState((state)=>state ? 'mounted' : false);
155
+ }, []);
156
+ return /*#__PURE__*/ React__default["default"].createElement(Context.Provider, {
157
+ value: {
158
+ abortOnUnmount,
159
+ queryClient,
160
+ client,
161
+ ssrContext: ssrContext || null,
162
+ ssrState,
163
+ fetchQuery: React.useCallback((pathAndInput, opts)=>{
164
+ return queryClient.fetchQuery(getArrayQueryKey.getArrayQueryKey(pathAndInput), ()=>client.query(...getClientArgs(pathAndInput, opts)), opts);
165
+ }, [
166
+ client,
167
+ queryClient
168
+ ]),
169
+ fetchInfiniteQuery: React.useCallback((pathAndInput, opts)=>{
170
+ return queryClient.fetchInfiniteQuery(getArrayQueryKey.getArrayQueryKey(pathAndInput), ({ pageParam })=>{
171
+ const [path, input] = pathAndInput;
172
+ const actualInput = {
173
+ ...input,
174
+ cursor: pageParam
175
+ };
176
+ return client.query(...getClientArgs([
177
+ path,
178
+ actualInput
179
+ ], opts));
180
+ }, opts);
181
+ }, [
182
+ client,
183
+ queryClient
184
+ ]),
185
+ prefetchQuery: React.useCallback((pathAndInput, opts)=>{
186
+ return queryClient.prefetchQuery(getArrayQueryKey.getArrayQueryKey(pathAndInput), ()=>client.query(...getClientArgs(pathAndInput, opts)), opts);
187
+ }, [
188
+ client,
189
+ queryClient
190
+ ]),
191
+ prefetchInfiniteQuery: React.useCallback((pathAndInput, opts)=>{
192
+ return queryClient.prefetchInfiniteQuery(getArrayQueryKey.getArrayQueryKey(pathAndInput), ({ pageParam })=>{
193
+ const [path, input] = pathAndInput;
194
+ const actualInput = {
195
+ ...input,
196
+ cursor: pageParam
197
+ };
198
+ return client.query(...getClientArgs([
199
+ path,
200
+ actualInput
201
+ ], opts));
202
+ }, opts);
203
+ }, [
204
+ client,
205
+ queryClient
206
+ ]),
207
+ invalidateQueries: React.useCallback((...args)=>{
208
+ const [queryKey, ...rest] = args;
209
+ return queryClient.invalidateQueries(getArrayQueryKey.getArrayQueryKey(queryKey), ...rest);
210
+ }, [
211
+ queryClient
212
+ ]),
213
+ refetchQueries: React.useCallback((...args)=>{
214
+ const [queryKey, ...rest] = args;
215
+ return queryClient.refetchQueries(getArrayQueryKey.getArrayQueryKey(queryKey), ...rest);
216
+ }, [
217
+ queryClient
218
+ ]),
219
+ cancelQuery: React.useCallback((pathAndInput)=>{
220
+ return queryClient.cancelQueries(getArrayQueryKey.getArrayQueryKey(pathAndInput));
221
+ }, [
222
+ queryClient
223
+ ]),
224
+ setQueryData: React.useCallback((...args)=>{
225
+ const [queryKey, ...rest] = args;
226
+ return queryClient.setQueryData(getArrayQueryKey.getArrayQueryKey(queryKey), ...rest);
227
+ }, [
228
+ queryClient
229
+ ]),
230
+ getQueryData: React.useCallback((...args)=>{
231
+ const [queryKey, ...rest] = args;
232
+ return queryClient.getQueryData(getArrayQueryKey.getArrayQueryKey(queryKey), ...rest);
233
+ }, [
234
+ queryClient
235
+ ]),
236
+ setInfiniteQueryData: React.useCallback((...args)=>{
237
+ const [queryKey, ...rest] = args;
238
+ return queryClient.setQueryData(getArrayQueryKey.getArrayQueryKey(queryKey), ...rest);
239
+ }, [
240
+ queryClient
241
+ ]),
242
+ getInfiniteQueryData: React.useCallback((...args)=>{
243
+ const [queryKey, ...rest] = args;
244
+ return queryClient.getQueryData(getArrayQueryKey.getArrayQueryKey(queryKey), ...rest);
245
+ }, [
246
+ queryClient
247
+ ])
248
+ }
249
+ }, props.children);
250
+ };
251
+ function useContext() {
252
+ return React__default["default"].useContext(Context);
253
+ }
254
+ /**
255
+ * Hack to make sure errors return `status`='error` when doing SSR
256
+ * @link https://github.com/trpc/trpc/pull/1645
257
+ */ function useSSRQueryOptionsIfNeeded(pathAndInput, opts) {
258
+ const { queryClient , ssrState } = useContext();
259
+ return ssrState && ssrState !== 'mounted' && queryClient.getQueryCache().find(getArrayQueryKey.getArrayQueryKey(pathAndInput))?.state.status === 'error' ? {
260
+ retryOnMount: false,
261
+ ...opts
262
+ } : opts;
263
+ }
264
+ function useQuery(pathAndInput, opts) {
265
+ const { abortOnUnmount , client , ssrState , queryClient , prefetchQuery } = useContext();
266
+ if (typeof window === 'undefined' && ssrState === 'prepass' && opts?.trpc?.ssr !== false && opts?.enabled !== false && !queryClient.getQueryCache().find(getArrayQueryKey.getArrayQueryKey(pathAndInput))) {
267
+ void prefetchQuery(pathAndInput, opts);
268
+ }
269
+ const ssrOpts = useSSRQueryOptionsIfNeeded(pathAndInput, opts);
270
+ // request option should take priority over global
271
+ const shouldAbortOnUnmount = opts?.trpc?.abortOnUnmount ?? abortOnUnmount;
272
+ const hook = reactQuery.useQuery(getArrayQueryKey.getArrayQueryKey(pathAndInput), (queryFunctionContext)=>{
273
+ const actualOpts = {
274
+ ...ssrOpts,
275
+ trpc: {
276
+ ...ssrOpts?.trpc,
277
+ ...shouldAbortOnUnmount ? {
278
+ signal: queryFunctionContext.signal
279
+ } : {}
280
+ }
281
+ };
282
+ return client.query(...getClientArgs(pathAndInput, actualOpts));
283
+ }, {
284
+ context: ReactQueryContext,
285
+ ...ssrOpts
286
+ });
287
+ hook.trpc = useHookResult({
288
+ path: pathAndInput[0]
289
+ });
290
+ return hook;
291
+ }
292
+ function useMutation(path, opts) {
293
+ const { client } = useContext();
294
+ const queryClient = reactQuery.useQueryClient({
295
+ context: ReactQueryContext
296
+ });
297
+ const hook = reactQuery.useMutation((input)=>{
298
+ const actualPath = Array.isArray(path) ? path[0] : path;
299
+ return client.mutation(...getClientArgs([
300
+ actualPath,
301
+ input
302
+ ], opts));
303
+ }, {
304
+ context: ReactQueryContext,
305
+ ...opts,
306
+ onSuccess (...args) {
307
+ const originalFn = ()=>opts?.onSuccess?.(...args);
308
+ return mutationSuccessOverride({
309
+ originalFn,
310
+ queryClient
311
+ });
312
+ }
313
+ });
314
+ hook.trpc = useHookResult({
315
+ path: Array.isArray(path) ? path[0] : path
316
+ });
317
+ return hook;
318
+ }
319
+ /* istanbul ignore next */ /**
320
+ * ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
321
+ * **Experimental.** API might change without major version bump
322
+ * ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠
323
+ */ function useSubscription(pathAndInput, opts) {
324
+ const enabled = opts?.enabled ?? true;
325
+ const queryKey = reactQuery.hashQueryKey(pathAndInput);
326
+ const { client } = useContext();
327
+ return React.useEffect(()=>{
328
+ if (!enabled) {
329
+ return;
330
+ }
331
+ const [path, input] = pathAndInput;
332
+ let isStopped = false;
333
+ const subscription = client.subscription(path, input ?? undefined, {
334
+ onStarted: ()=>{
335
+ if (!isStopped) {
336
+ opts.onStarted?.();
337
+ }
338
+ },
339
+ onData: (data)=>{
340
+ if (!isStopped) {
341
+ opts.onData(data);
342
+ }
343
+ },
344
+ onError: (err)=>{
345
+ if (!isStopped) {
346
+ opts.onError?.(err);
347
+ }
348
+ }
349
+ });
350
+ return ()=>{
351
+ isStopped = true;
352
+ subscription.unsubscribe();
353
+ };
354
+ // eslint-disable-next-line react-hooks/exhaustive-deps
355
+ }, [
356
+ queryKey,
357
+ enabled
358
+ ]);
359
+ }
360
+ function useInfiniteQuery(pathAndInput, opts) {
361
+ const [path, input] = pathAndInput;
362
+ const { client , ssrState , prefetchInfiniteQuery , queryClient , abortOnUnmount , } = useContext();
363
+ if (typeof window === 'undefined' && ssrState === 'prepass' && opts?.trpc?.ssr !== false && opts?.enabled !== false && !queryClient.getQueryCache().find(getArrayQueryKey.getArrayQueryKey(pathAndInput))) {
364
+ void prefetchInfiniteQuery(pathAndInput, opts);
365
+ }
366
+ const ssrOpts = useSSRQueryOptionsIfNeeded(pathAndInput, opts);
367
+ // request option should take priority over global
368
+ const shouldAbortOnUnmount = opts?.trpc?.abortOnUnmount ?? abortOnUnmount;
369
+ const hook = reactQuery.useInfiniteQuery(getArrayQueryKey.getArrayQueryKey(pathAndInput), (queryFunctionContext)=>{
370
+ const actualOpts = {
371
+ ...ssrOpts,
372
+ trpc: {
373
+ ...ssrOpts?.trpc,
374
+ ...shouldAbortOnUnmount ? {
375
+ signal: queryFunctionContext.signal
376
+ } : {}
377
+ }
378
+ };
379
+ const actualInput = {
380
+ ...input ?? {},
381
+ cursor: queryFunctionContext.pageParam
382
+ };
383
+ return client.query(...getClientArgs([
384
+ path,
385
+ actualInput
386
+ ], actualOpts));
387
+ }, {
388
+ context: ReactQueryContext,
389
+ ...ssrOpts
390
+ });
391
+ hook.trpc = useHookResult({
392
+ path
393
+ });
394
+ return hook;
395
+ }
396
+ const useDehydratedState = (client, trpcState)=>{
397
+ const transformed = React.useMemo(()=>{
398
+ if (!trpcState) {
399
+ return trpcState;
400
+ }
401
+ return client.runtime.transformer.deserialize(trpcState);
402
+ }, [
403
+ trpcState,
404
+ client
405
+ ]);
406
+ return transformed;
407
+ };
408
+ return {
409
+ Provider: TRPCProvider,
410
+ createClient,
411
+ useContext,
412
+ useQuery,
413
+ useMutation,
414
+ useSubscription,
415
+ useDehydratedState,
416
+ useInfiniteQuery
417
+ };
418
+ }
419
+
420
+ exports.createHooksInternal = createHooksInternal;
421
+ exports.createReactProxyDecoration = createReactProxyDecoration;
422
+ exports.createReactQueryUtilsProxy = createReactQueryUtilsProxy;
@@ -0,0 +1,42 @@
1
+ import { TRPCClientErrorLike } from '@trpc/client';
2
+ import { AnyMutationProcedure, AnyProcedure, AnyQueryProcedure, AnyRouter, AnySubscriptionProcedure, ProcedureRouterRecord, inferProcedureInput, inferProcedureOutput } from '@trpc/server';
3
+ import { inferObservableValue } from '@trpc/server/observable';
4
+ import { CreateReactUtilsProxy } from './shared';
5
+ import { CreateClient, CreateReactQueryHooks, TRPCProvider, UseDehydratedState, UseTRPCInfiniteQueryOptions, UseTRPCInfiniteQueryResult, UseTRPCInfiniteQuerySuccessResult, UseTRPCMutationOptions, UseTRPCMutationResult, UseTRPCQueryOptions, UseTRPCQueryResult, UseTRPCQuerySuccessResult, UseTRPCSubscriptionOptions } from './shared/hooks/createHooksInternal';
6
+ import { CreateTRPCReactOptions } from './shared/types';
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare type DecorateProcedure<TProcedure extends AnyProcedure, TFlags, TPath extends string> = TProcedure extends AnyQueryProcedure ? {
11
+ useQuery: <TQueryFnData = inferProcedureOutput<TProcedure>, TData = inferProcedureOutput<TProcedure>>(input: inferProcedureInput<TProcedure>, opts?: UseTRPCQueryOptions<TPath, inferProcedureInput<TProcedure>, TQueryFnData, TData, TRPCClientErrorLike<TProcedure>>) => UseTRPCQueryResult<TData, TRPCClientErrorLike<TProcedure>>;
12
+ } & (inferProcedureInput<TProcedure> extends {
13
+ cursor?: any;
14
+ } ? {
15
+ useInfiniteQuery: <_TQueryFnData = inferProcedureOutput<TProcedure>, TData = inferProcedureOutput<TProcedure>>(input: Omit<inferProcedureInput<TProcedure>, 'cursor'>, opts?: UseTRPCInfiniteQueryOptions<TPath, inferProcedureInput<TProcedure>, TData, TRPCClientErrorLike<TProcedure>>) => UseTRPCInfiniteQueryResult<TData, TRPCClientErrorLike<TProcedure>>;
16
+ } & (TFlags extends 'ExperimentalSuspense' ? {
17
+ useSuspenseInfiniteQuery: <_TQueryFnData = inferProcedureOutput<TProcedure>, TData = inferProcedureOutput<TProcedure>>(input: Omit<inferProcedureInput<TProcedure>, 'cursor'>, opts?: Omit<UseTRPCInfiniteQueryOptions<TPath, inferProcedureInput<TProcedure>, TData, TRPCClientErrorLike<TProcedure>>, 'enabled' | 'suspense'>) => UseTRPCInfiniteQuerySuccessResult<TData, TRPCClientErrorLike<TProcedure>>;
18
+ } : {}) : {}) & (TFlags extends 'ExperimentalSuspense' ? {
19
+ useSuspenseQuery: <TQueryFnData = inferProcedureOutput<TProcedure>, TData = inferProcedureOutput<TProcedure>>(input: inferProcedureInput<TProcedure>, opts?: Omit<UseTRPCQueryOptions<TPath, inferProcedureInput<TProcedure>, TQueryFnData, TData, TRPCClientErrorLike<TProcedure>>, 'enabled' | 'suspense'>) => UseTRPCQuerySuccessResult<TData, TRPCClientErrorLike<TProcedure>>;
20
+ } : {}) : TProcedure extends AnyMutationProcedure ? {
21
+ useMutation: <TContext = unknown>(opts?: UseTRPCMutationOptions<inferProcedureInput<TProcedure>, TRPCClientErrorLike<TProcedure>, inferProcedureOutput<TProcedure>, TContext>) => UseTRPCMutationResult<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TProcedure>, inferProcedureInput<TProcedure>, TContext>;
22
+ } : TProcedure extends AnySubscriptionProcedure ? {
23
+ useSubscription: (input: inferProcedureInput<TProcedure>, opts?: UseTRPCSubscriptionOptions<inferObservableValue<inferProcedureOutput<TProcedure>>, TRPCClientErrorLike<TProcedure>>) => void;
24
+ } : never;
25
+ /**
26
+ * @internal
27
+ */
28
+ export declare type DecoratedProcedureRecord<TProcedures extends ProcedureRouterRecord, TFlags, TPath extends string = ''> = {
29
+ [TKey in keyof TProcedures]: TProcedures[TKey] extends AnyRouter ? DecoratedProcedureRecord<TProcedures[TKey]['_def']['record'], TFlags, `${TPath}${TKey & string}.`> : TProcedures[TKey] extends AnyProcedure ? DecorateProcedure<TProcedures[TKey], TFlags, `${TPath}${TKey & string}`> : never;
30
+ };
31
+ export declare type CreateTRPCReact<TRouter extends AnyRouter, TSSRContext, TFlags> = {
32
+ useContext(): CreateReactUtilsProxy<TRouter, TSSRContext>;
33
+ Provider: TRPCProvider<TRouter, TSSRContext>;
34
+ createClient: CreateClient<TRouter>;
35
+ useDehydratedState: UseDehydratedState<TRouter>;
36
+ } & DecoratedProcedureRecord<TRouter['_def']['record'], TFlags>;
37
+ /**
38
+ * @internal
39
+ */
40
+ export declare function createHooksInternalProxy<TRouter extends AnyRouter, TSSRContext = unknown, TFlags = null>(trpc: CreateReactQueryHooks<TRouter, TSSRContext>): CreateTRPCReact<TRouter, TSSRContext, TFlags>;
41
+ export declare function createTRPCReact<TRouter extends AnyRouter, TSSRContext = unknown, TFlags = null>(opts?: CreateTRPCReactOptions<TRouter>): CreateTRPCReact<TRouter, TSSRContext, TFlags>;
42
+ //# sourceMappingURL=createTRPCReact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createTRPCReact.d.ts","sourceRoot":"","sources":["../src/createTRPCReact.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * To allow easy interactions with groups of related queries, such as
5
+ * invalidating all queries of a router, we use an array as the path when
6
+ * storing in tanstack query. This function converts from the `.` separated
7
+ * path passed around internally by both the legacy and proxy implementation.
8
+ * https://github.com/trpc/trpc/issues/2611
9
+ */ function getArrayQueryKey(queryKey) {
10
+ const queryKeyArrayed = Array.isArray(queryKey) ? queryKey : [
11
+ queryKey
12
+ ];
13
+ const [path, ...input] = queryKeyArrayed;
14
+ const arrayPath = typeof path !== 'string' || path === '' ? [] : path.split('.');
15
+ return [
16
+ arrayPath,
17
+ ...input
18
+ ];
19
+ }
20
+
21
+ exports.getArrayQueryKey = getArrayQueryKey;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * To allow easy interactions with groups of related queries, such as
3
+ * invalidating all queries of a router, we use an array as the path when
4
+ * storing in tanstack query. This function converts from the `.` separated
5
+ * path passed around internally by both the legacy and proxy implementation.
6
+ * https://github.com/trpc/trpc/issues/2611
7
+ */ function getArrayQueryKey(queryKey) {
8
+ const queryKeyArrayed = Array.isArray(queryKey) ? queryKey : [
9
+ queryKey
10
+ ];
11
+ const [path, ...input] = queryKeyArrayed;
12
+ const arrayPath = typeof path !== 'string' || path === '' ? [] : path.split('.');
13
+ return [
14
+ arrayPath,
15
+ ...input
16
+ ];
17
+ }
18
+
19
+ export { getArrayQueryKey as g };
@@ -0,0 +1,4 @@
1
+ export * from '@trpc/client';
2
+ export { createTRPCReact, type CreateTRPCReact } from './createTRPCReact';
3
+ export { createReactQueryHooks } from './interop';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var client = require('@trpc/client');
6
+ var shared = require('@trpc/server/shared');
7
+ var React = require('react');
8
+ var createHooksInternal = require('./createHooksInternal-bf3d6e79.js');
9
+ require('@tanstack/react-query');
10
+ require('./getArrayQueryKey-5ab807a3.js');
11
+
12
+ /**
13
+ * @internal
14
+ */ function createHooksInternalProxy(trpc) {
15
+ return shared.createFlatProxy((key)=>{
16
+ if (key === 'useContext') {
17
+ return ()=>{
18
+ const context = trpc.useContext();
19
+ // create a stable reference of the utils context
20
+ return React.useMemo(()=>{
21
+ return createHooksInternal.createReactQueryUtilsProxy(context);
22
+ }, [
23
+ context
24
+ ]);
25
+ };
26
+ }
27
+ if (key in trpc) {
28
+ return trpc[key];
29
+ }
30
+ return createHooksInternal.createReactProxyDecoration(key, trpc);
31
+ });
32
+ }
33
+ function createTRPCReact(opts) {
34
+ const hooks = createHooksInternal.createHooksInternal(opts);
35
+ const proxy = createHooksInternalProxy(hooks);
36
+ return proxy;
37
+ }
38
+
39
+ // interop:
40
+ /**
41
+ * @deprecated use `createTRPCReact` instead
42
+ */ function createReactQueryHooks(opts) {
43
+ const trpc = createHooksInternal.createHooksInternal(opts);
44
+ const proxy = createHooksInternalProxy(trpc);
45
+ return {
46
+ ...trpc,
47
+ proxy
48
+ };
49
+ }
50
+
51
+ exports.createReactQueryHooks = createReactQueryHooks;
52
+ exports.createTRPCReact = createTRPCReact;
53
+ Object.keys(client).forEach(function (k) {
54
+ if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
55
+ enumerable: true,
56
+ get: function () { return client[k]; }
57
+ });
58
+ });
package/dist/index.mjs ADDED
@@ -0,0 +1,47 @@
1
+ export * from '@trpc/client';
2
+ import { createFlatProxy } from '@trpc/server/shared';
3
+ import { useMemo } from 'react';
4
+ import { c as createHooksInternal, a as createReactQueryUtilsProxy, b as createReactProxyDecoration } from './createHooksInternal-9f58b9a0.mjs';
5
+ import '@tanstack/react-query';
6
+ import './getArrayQueryKey-e56d8d64.mjs';
7
+
8
+ /**
9
+ * @internal
10
+ */ function createHooksInternalProxy(trpc) {
11
+ return createFlatProxy((key)=>{
12
+ if (key === 'useContext') {
13
+ return ()=>{
14
+ const context = trpc.useContext();
15
+ // create a stable reference of the utils context
16
+ return useMemo(()=>{
17
+ return createReactQueryUtilsProxy(context);
18
+ }, [
19
+ context
20
+ ]);
21
+ };
22
+ }
23
+ if (key in trpc) {
24
+ return trpc[key];
25
+ }
26
+ return createReactProxyDecoration(key, trpc);
27
+ });
28
+ }
29
+ function createTRPCReact(opts) {
30
+ const hooks = createHooksInternal(opts);
31
+ const proxy = createHooksInternalProxy(hooks);
32
+ return proxy;
33
+ }
34
+
35
+ // interop:
36
+ /**
37
+ * @deprecated use `createTRPCReact` instead
38
+ */ function createReactQueryHooks(opts) {
39
+ const trpc = createHooksInternal(opts);
40
+ const proxy = createHooksInternalProxy(trpc);
41
+ return {
42
+ ...trpc,
43
+ proxy
44
+ };
45
+ }
46
+
47
+ export { createReactQueryHooks, createTRPCReact };