@trpc/tanstack-react-query 11.3.1 → 11.3.2-canary.4

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/index.cjs +465 -0
  2. package/dist/index.d.cts +420 -0
  3. package/dist/index.d.cts.map +1 -0
  4. package/dist/index.d.mts +420 -0
  5. package/dist/index.d.mts.map +1 -0
  6. package/dist/index.mjs +442 -3
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +21 -17
  9. package/dist/index.d.ts +0 -10
  10. package/dist/index.d.ts.map +0 -1
  11. package/dist/index.js +0 -11
  12. package/dist/internals/Context.d.ts +0 -21
  13. package/dist/internals/Context.d.ts.map +0 -1
  14. package/dist/internals/Context.js +0 -67
  15. package/dist/internals/Context.mjs +0 -46
  16. package/dist/internals/createOptionsProxy.d.ts +0 -161
  17. package/dist/internals/createOptionsProxy.d.ts.map +0 -1
  18. package/dist/internals/createOptionsProxy.js +0 -113
  19. package/dist/internals/createOptionsProxy.mjs +0 -111
  20. package/dist/internals/infiniteQueryOptions.d.ts +0 -61
  21. package/dist/internals/infiniteQueryOptions.d.ts.map +0 -1
  22. package/dist/internals/infiniteQueryOptions.js +0 -39
  23. package/dist/internals/infiniteQueryOptions.mjs +0 -37
  24. package/dist/internals/mutationOptions.d.ts +0 -43
  25. package/dist/internals/mutationOptions.d.ts.map +0 -1
  26. package/dist/internals/mutationOptions.js +0 -40
  27. package/dist/internals/mutationOptions.mjs +0 -38
  28. package/dist/internals/queryOptions.d.ts +0 -58
  29. package/dist/internals/queryOptions.d.ts.map +0 -1
  30. package/dist/internals/queryOptions.js +0 -43
  31. package/dist/internals/queryOptions.mjs +0 -41
  32. package/dist/internals/subscriptionOptions.d.ts +0 -73
  33. package/dist/internals/subscriptionOptions.d.ts.map +0 -1
  34. package/dist/internals/subscriptionOptions.js +0 -181
  35. package/dist/internals/subscriptionOptions.mjs +0 -159
  36. package/dist/internals/types.d.ts +0 -83
  37. package/dist/internals/types.d.ts.map +0 -1
  38. package/dist/internals/utils.d.ts +0 -36
  39. package/dist/internals/utils.d.ts.map +0 -1
  40. package/dist/internals/utils.js +0 -118
  41. package/dist/internals/utils.mjs +0 -111
package/dist/index.mjs CHANGED
@@ -1,3 +1,442 @@
1
- export { createTRPCContext } from './internals/Context.mjs';
2
- export { createTRPCOptionsProxy } from './internals/createOptionsProxy.mjs';
3
- export { useSubscription } from './internals/subscriptionOptions.mjs';
1
+ import * as React$1 from "react";
2
+ import * as React from "react";
3
+ import { TRPCUntypedClient, getUntypedClient } from "@trpc/client";
4
+ import { callTRPCProcedure, createTRPCRecursiveProxy } from "@trpc/server";
5
+ import { hashKey, infiniteQueryOptions, queryOptions, skipToken } from "@tanstack/react-query";
6
+ import { isAsyncIterable, isFunction, isObject } from "@trpc/server/unstable-core-do-not-import";
7
+ import { jsx } from "react/jsx-runtime";
8
+
9
+ //#region src/internals/utils.ts
10
+ /**
11
+ * @internal
12
+ */
13
+ function createTRPCOptionsResult(value) {
14
+ const path = value.path.join(".");
15
+ return { path };
16
+ }
17
+ /**
18
+ * @internal
19
+ */
20
+ function getClientArgs(queryKey, opts, infiniteParams) {
21
+ const path = queryKey[0];
22
+ let input = queryKey[1]?.input;
23
+ if (infiniteParams) input = {
24
+ ...input ?? {},
25
+ ...infiniteParams.pageParam !== void 0 ? { cursor: infiniteParams.pageParam } : {},
26
+ direction: infiniteParams.direction
27
+ };
28
+ return [
29
+ path.join("."),
30
+ input,
31
+ opts?.trpc
32
+ ];
33
+ }
34
+ /**
35
+ * @internal
36
+ */
37
+ async function buildQueryFromAsyncIterable(asyncIterable, queryClient, queryKey) {
38
+ const queryCache = queryClient.getQueryCache();
39
+ const query = queryCache.build(queryClient, { queryKey });
40
+ query.setState({
41
+ data: [],
42
+ status: "success"
43
+ });
44
+ const aggregate = [];
45
+ for await (const value of asyncIterable) {
46
+ aggregate.push(value);
47
+ query.setState({ data: [...aggregate] });
48
+ }
49
+ return aggregate;
50
+ }
51
+ /**
52
+ * To allow easy interactions with groups of related queries, such as
53
+ * invalidating all queries of a router, we use an array as the path when
54
+ * storing in tanstack query.
55
+ *
56
+ * @internal
57
+ */
58
+ function getQueryKeyInternal(path, input, type) {
59
+ const splitPath = path.flatMap((part) => part.split("."));
60
+ if (!input && (!type || type === "any")) return splitPath.length ? [splitPath] : [];
61
+ if (type === "infinite" && isObject(input) && ("direction" in input || "cursor" in input)) {
62
+ const { cursor: _, direction: __,...inputWithoutCursorAndDirection } = input;
63
+ return [splitPath, {
64
+ input: inputWithoutCursorAndDirection,
65
+ type: "infinite"
66
+ }];
67
+ }
68
+ return [splitPath, {
69
+ ...typeof input !== "undefined" && input !== skipToken && { input },
70
+ ...type && type !== "any" && { type }
71
+ }];
72
+ }
73
+ /**
74
+ * @internal
75
+ */
76
+ function getMutationKeyInternal(path) {
77
+ const splitPath = path.flatMap((part) => part.split("."));
78
+ return splitPath.length ? [splitPath] : [];
79
+ }
80
+ /**
81
+ * @internal
82
+ */
83
+ function unwrapLazyArg(valueOrLazy) {
84
+ return isFunction(valueOrLazy) ? valueOrLazy() : valueOrLazy;
85
+ }
86
+
87
+ //#endregion
88
+ //#region src/internals/infiniteQueryOptions.ts
89
+ function trpcInfiniteQueryOptions(args) {
90
+ const { input, query, path, queryKey, opts } = args;
91
+ const inputIsSkipToken = input === skipToken;
92
+ const queryFn = async (queryFnContext) => {
93
+ const actualOpts = {
94
+ ...opts,
95
+ trpc: {
96
+ ...opts?.trpc,
97
+ ...opts?.trpc?.abortOnUnmount ? { signal: queryFnContext.signal } : { signal: null }
98
+ }
99
+ };
100
+ const result = await query(...getClientArgs(queryKey, actualOpts, {
101
+ direction: queryFnContext.direction,
102
+ pageParam: queryFnContext.pageParam
103
+ }));
104
+ return result;
105
+ };
106
+ return Object.assign(infiniteQueryOptions({
107
+ ...opts,
108
+ queryKey,
109
+ queryFn: inputIsSkipToken ? skipToken : queryFn,
110
+ initialPageParam: opts?.initialCursor ?? input?.cursor
111
+ }), { trpc: createTRPCOptionsResult({ path }) });
112
+ }
113
+
114
+ //#endregion
115
+ //#region src/internals/mutationOptions.ts
116
+ /**
117
+ * @internal
118
+ */
119
+ function trpcMutationOptions(args) {
120
+ const { mutate, path, opts, overrides } = args;
121
+ const queryClient = unwrapLazyArg(args.queryClient);
122
+ const mutationKey = getMutationKeyInternal(path);
123
+ const defaultOpts = queryClient.defaultMutationOptions(queryClient.getMutationDefaults(mutationKey));
124
+ const mutationSuccessOverride = overrides?.onSuccess ?? ((options) => options.originalFn());
125
+ const mutationFn = async (input) => {
126
+ const result = await mutate(...getClientArgs([path, { input }], opts));
127
+ return result;
128
+ };
129
+ return {
130
+ ...opts,
131
+ mutationKey,
132
+ mutationFn,
133
+ onSuccess(...args$1) {
134
+ const originalFn = () => opts?.onSuccess?.(...args$1) ?? defaultOpts?.onSuccess?.(...args$1);
135
+ return mutationSuccessOverride({
136
+ originalFn,
137
+ queryClient,
138
+ meta: opts?.meta ?? defaultOpts?.meta ?? {}
139
+ });
140
+ },
141
+ trpc: createTRPCOptionsResult({ path })
142
+ };
143
+ }
144
+
145
+ //#endregion
146
+ //#region src/internals/queryOptions.ts
147
+ /**
148
+ * @internal
149
+ */
150
+ function trpcQueryOptions(args) {
151
+ const { input, query, path, queryKey, opts } = args;
152
+ const queryClient = unwrapLazyArg(args.queryClient);
153
+ const inputIsSkipToken = input === skipToken;
154
+ const queryFn = async (queryFnContext) => {
155
+ const actualOpts = {
156
+ ...opts,
157
+ trpc: {
158
+ ...opts?.trpc,
159
+ ...opts?.trpc?.abortOnUnmount ? { signal: queryFnContext.signal } : { signal: null }
160
+ }
161
+ };
162
+ const queryKey$1 = queryFnContext.queryKey;
163
+ const result = await query(...getClientArgs(queryKey$1, actualOpts));
164
+ if (isAsyncIterable(result)) return buildQueryFromAsyncIterable(result, queryClient, queryKey$1);
165
+ return result;
166
+ };
167
+ return Object.assign(queryOptions({
168
+ ...opts,
169
+ queryKey,
170
+ queryFn: inputIsSkipToken ? skipToken : queryFn
171
+ }), { trpc: createTRPCOptionsResult({ path }) });
172
+ }
173
+
174
+ //#endregion
175
+ //#region src/internals/subscriptionOptions.ts
176
+ /**
177
+ * @internal
178
+ */
179
+ const trpcSubscriptionOptions = (args) => {
180
+ const { subscribe, path, queryKey, opts = {} } = args;
181
+ const input = queryKey[1]?.input;
182
+ const enabled = "enabled" in opts ? !!opts.enabled : input !== skipToken;
183
+ const _subscribe = (innerOpts) => {
184
+ return subscribe(path.join("."), input ?? void 0, innerOpts);
185
+ };
186
+ return {
187
+ ...opts,
188
+ enabled,
189
+ subscribe: _subscribe,
190
+ queryKey,
191
+ trpc: createTRPCOptionsResult({ path })
192
+ };
193
+ };
194
+ function useSubscription(opts) {
195
+ const optsRef = React$1.useRef(opts);
196
+ optsRef.current = opts;
197
+ const trackedProps = React$1.useRef(new Set([]));
198
+ const addTrackedProp = React$1.useCallback((key) => {
199
+ trackedProps.current.add(key);
200
+ }, []);
201
+ const currentSubscriptionRef = React$1.useRef(() => {});
202
+ const reset = React$1.useCallback(() => {
203
+ currentSubscriptionRef.current?.();
204
+ updateState(getInitialState);
205
+ if (!opts.enabled) return;
206
+ const subscription = opts.subscribe({
207
+ onStarted: () => {
208
+ optsRef.current.onStarted?.();
209
+ updateState((prev) => ({
210
+ ...prev,
211
+ status: "pending",
212
+ error: null
213
+ }));
214
+ },
215
+ onData: (data) => {
216
+ optsRef.current.onData?.(data);
217
+ updateState((prev) => ({
218
+ ...prev,
219
+ status: "pending",
220
+ data,
221
+ error: null
222
+ }));
223
+ },
224
+ onError: (error) => {
225
+ optsRef.current.onError?.(error);
226
+ updateState((prev) => ({
227
+ ...prev,
228
+ status: "error",
229
+ error
230
+ }));
231
+ },
232
+ onConnectionStateChange: (result) => {
233
+ optsRef.current.onConnectionStateChange?.(result);
234
+ updateState((prev) => {
235
+ switch (result.state) {
236
+ case "connecting": return {
237
+ ...prev,
238
+ status: "connecting",
239
+ error: result.error
240
+ };
241
+ case "pending": return prev;
242
+ case "idle": return {
243
+ ...prev,
244
+ status: "idle",
245
+ data: void 0,
246
+ error: null
247
+ };
248
+ }
249
+ });
250
+ }
251
+ });
252
+ currentSubscriptionRef.current = () => {
253
+ subscription.unsubscribe();
254
+ };
255
+ }, [hashKey(opts.queryKey), opts.enabled]);
256
+ const getInitialState = React$1.useCallback(() => {
257
+ return opts.enabled ? {
258
+ data: void 0,
259
+ error: null,
260
+ status: "connecting",
261
+ reset
262
+ } : {
263
+ data: void 0,
264
+ error: null,
265
+ status: "idle",
266
+ reset
267
+ };
268
+ }, [opts.enabled, reset]);
269
+ const resultRef = React$1.useRef(getInitialState());
270
+ const [state, setState] = React$1.useState(trackResult(resultRef.current, addTrackedProp));
271
+ state.reset = reset;
272
+ const updateState = React$1.useCallback((callback) => {
273
+ const prev = resultRef.current;
274
+ const next = resultRef.current = callback(prev);
275
+ let shouldUpdate = false;
276
+ for (const key of trackedProps.current) if (prev[key] !== next[key]) {
277
+ shouldUpdate = true;
278
+ break;
279
+ }
280
+ if (shouldUpdate) setState(trackResult(next, addTrackedProp));
281
+ }, [addTrackedProp]);
282
+ React$1.useEffect(() => {
283
+ if (!opts.enabled) return;
284
+ reset();
285
+ return () => {
286
+ currentSubscriptionRef.current?.();
287
+ };
288
+ }, [reset, opts.enabled]);
289
+ return state;
290
+ }
291
+ function trackResult(result, onTrackResult) {
292
+ const trackedResult = new Proxy(result, { get(target, prop) {
293
+ onTrackResult(prop);
294
+ return target[prop];
295
+ } });
296
+ return trackedResult;
297
+ }
298
+
299
+ //#endregion
300
+ //#region src/internals/createOptionsProxy.ts
301
+ /**
302
+ * Create a typed proxy from your router types. Can also be used on the server.
303
+ *
304
+ * @see https://trpc.io/docs/client/tanstack-react-query/setup#3b-setup-without-react-context
305
+ * @see https://trpc.io/docs/client/tanstack-react-query/server-components#5-create-a-trpc-caller-for-server-components
306
+ */
307
+ function createTRPCOptionsProxy(opts) {
308
+ const callIt = (type) => {
309
+ return (path, input, trpcOpts) => {
310
+ if ("router" in opts) return Promise.resolve(unwrapLazyArg(opts.ctx)).then((ctx) => callTRPCProcedure({
311
+ router: opts.router,
312
+ path,
313
+ getRawInput: async () => input,
314
+ ctx,
315
+ type,
316
+ signal: void 0
317
+ }));
318
+ const untypedClient = opts.client instanceof TRPCUntypedClient ? opts.client : getUntypedClient(opts.client);
319
+ return untypedClient[type](path, input, trpcOpts);
320
+ };
321
+ };
322
+ return createTRPCRecursiveProxy(({ args, path: _path }) => {
323
+ const path = [..._path];
324
+ const utilName = path.pop();
325
+ const [arg1, arg2] = args;
326
+ const contextMap = {
327
+ "~types": void 0,
328
+ pathKey: () => {
329
+ return getQueryKeyInternal(path);
330
+ },
331
+ pathFilter: () => {
332
+ return {
333
+ ...arg1,
334
+ queryKey: getQueryKeyInternal(path)
335
+ };
336
+ },
337
+ queryOptions: () => {
338
+ return trpcQueryOptions({
339
+ input: arg1,
340
+ opts: arg2,
341
+ path,
342
+ queryClient: opts.queryClient,
343
+ queryKey: getQueryKeyInternal(path, arg1, "query"),
344
+ query: callIt("query")
345
+ });
346
+ },
347
+ queryKey: () => {
348
+ return getQueryKeyInternal(path, arg1, "query");
349
+ },
350
+ queryFilter: () => {
351
+ return {
352
+ ...arg2,
353
+ queryKey: getQueryKeyInternal(path, arg1, "query")
354
+ };
355
+ },
356
+ infiniteQueryOptions: () => {
357
+ return trpcInfiniteQueryOptions({
358
+ input: arg1,
359
+ opts: arg2,
360
+ path,
361
+ queryClient: opts.queryClient,
362
+ queryKey: getQueryKeyInternal(path, arg1, "infinite"),
363
+ query: callIt("query")
364
+ });
365
+ },
366
+ infiniteQueryKey: () => {
367
+ return getQueryKeyInternal(path, arg1, "infinite");
368
+ },
369
+ infiniteQueryFilter: () => {
370
+ return {
371
+ ...arg2,
372
+ queryKey: getQueryKeyInternal(path, arg1, "infinite")
373
+ };
374
+ },
375
+ mutationOptions: () => {
376
+ return trpcMutationOptions({
377
+ opts: arg1,
378
+ path,
379
+ queryClient: opts.queryClient,
380
+ mutate: callIt("mutation"),
381
+ overrides: opts.overrides?.mutations
382
+ });
383
+ },
384
+ mutationKey: () => {
385
+ return getMutationKeyInternal(path);
386
+ },
387
+ subscriptionOptions: () => {
388
+ return trpcSubscriptionOptions({
389
+ opts: arg2,
390
+ path,
391
+ queryKey: getQueryKeyInternal(path, arg1, "any"),
392
+ subscribe: callIt("subscription")
393
+ });
394
+ }
395
+ };
396
+ return contextMap[utilName]();
397
+ });
398
+ }
399
+
400
+ //#endregion
401
+ //#region src/internals/Context.tsx
402
+ /**
403
+ * Create a set of type-safe provider-consumers
404
+ *
405
+ * @see https://trpc.io/docs/client/tanstack-react-query/setup#3a-setup-the-trpc-context-provider
406
+ */
407
+ function createTRPCContext() {
408
+ const TRPCClientContext = React.createContext(null);
409
+ const TRPCContext = React.createContext(null);
410
+ function TRPCProvider(props) {
411
+ const value = React.useMemo(() => createTRPCOptionsProxy({
412
+ client: props.trpcClient,
413
+ queryClient: props.queryClient
414
+ }), [props.trpcClient, props.queryClient]);
415
+ return /* @__PURE__ */ jsx(TRPCClientContext.Provider, {
416
+ value: props.trpcClient,
417
+ children: /* @__PURE__ */ jsx(TRPCContext.Provider, {
418
+ value,
419
+ children: props.children
420
+ })
421
+ });
422
+ }
423
+ function useTRPC() {
424
+ const utils = React.useContext(TRPCContext);
425
+ if (!utils) throw new Error("useTRPC() can only be used inside of a <TRPCProvider>");
426
+ return utils;
427
+ }
428
+ function useTRPCClient() {
429
+ const client = React.useContext(TRPCClientContext);
430
+ if (!client) throw new Error("useTRPCClient() can only be used inside of a <TRPCProvider>");
431
+ return client;
432
+ }
433
+ return {
434
+ TRPCProvider,
435
+ useTRPC,
436
+ useTRPCClient
437
+ };
438
+ }
439
+
440
+ //#endregion
441
+ export { createTRPCContext, createTRPCOptionsProxy, useSubscription };
442
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["value: {\n path: readonly string[];\n}","queryKey: TRPCQueryKey","opts: TOptions","infiniteParams?: {\n pageParam: any;\n direction: 'forward' | 'backward';\n }","asyncIterable: AsyncIterable<unknown>","queryClient: QueryClient","aggregate: unknown[]","path: readonly string[]","input?: unknown","type?: QueryType","valueOrLazy: T | (() => T)","args: {\n input: unknown;\n query: typeof TRPCUntypedClient.prototype.query;\n queryClient: QueryClient | (() => QueryClient);\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts: AnyTRPCInfiniteQueryOptionsIn;\n}","queryFn: QueryFunction<unknown, TRPCQueryKey, unknown>","args: {\n mutate: typeof TRPCUntypedClient.prototype.mutation;\n queryClient: QueryClient | (() => QueryClient);\n path: readonly string[];\n opts: AnyTRPCMutationOptionsIn;\n overrides: MutationOptionsOverride | undefined;\n}","mutationSuccessOverride: MutationOptionsOverride['onSuccess']","mutationFn: MutationFunction","args","args: {\n input: unknown;\n query: typeof TRPCUntypedClient.prototype.query;\n queryClient: QueryClient | (() => QueryClient);\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts: AnyTRPCQueryOptionsIn;\n}","queryFn: QueryFunction<unknown, TRPCQueryKey>","queryKey","args: {\n subscribe: typeof TRPCUntypedClient.prototype.subscription;\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts?: AnyTRPCSubscriptionOptionsIn;\n}","_subscribe: ReturnType<TRPCSubscriptionOptions<any>>['subscribe']","opts: TRPCSubscriptionOptionsOut<TOutput, TError>","key: keyof $Result","callback: (prevState: $Result) => $Result","result: T","onTrackResult: (key: keyof T) => void","opts: TRPCOptionsProxyOptions<TRouter>","type: TRPCProcedureType","path: string","input: unknown","trpcOpts: TRPCRequestOptions","contextMap: Record<UtilsMethods, () => unknown>","props: Readonly<{\n children: React.ReactNode;\n queryClient: QueryClient;\n trpcClient: TRPCClient<TRouter>;\n }>"],"sources":["../src/internals/utils.ts","../src/internals/infiniteQueryOptions.ts","../src/internals/mutationOptions.ts","../src/internals/queryOptions.ts","../src/internals/subscriptionOptions.ts","../src/internals/createOptionsProxy.ts","../src/internals/Context.tsx"],"sourcesContent":["import { skipToken, type QueryClient } from '@tanstack/react-query';\nimport { isFunction, isObject } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n QueryType,\n TRPCMutationKey,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\n\n/**\n * @internal\n */\nexport function createTRPCOptionsResult(value: {\n path: readonly string[];\n}): TRPCQueryOptionsResult['trpc'] {\n const path = value.path.join('.');\n\n return {\n path,\n };\n}\n\n/**\n * @internal\n */\nexport function getClientArgs<TOptions>(\n queryKey: TRPCQueryKey,\n opts: TOptions,\n infiniteParams?: {\n pageParam: any;\n direction: 'forward' | 'backward';\n },\n) {\n const path = queryKey[0];\n let input = queryKey[1]?.input;\n if (infiniteParams) {\n input = {\n ...(input ?? {}),\n ...(infiniteParams.pageParam !== undefined\n ? { cursor: infiniteParams.pageParam }\n : {}),\n direction: infiniteParams.direction,\n };\n }\n return [path.join('.'), input, (opts as any)?.trpc] as const;\n}\n\n/**\n * @internal\n */\nexport async function buildQueryFromAsyncIterable(\n asyncIterable: AsyncIterable<unknown>,\n queryClient: QueryClient,\n queryKey: TRPCQueryKey,\n) {\n const queryCache = queryClient.getQueryCache();\n\n const query = queryCache.build(queryClient, {\n queryKey,\n });\n\n query.setState({\n data: [],\n status: 'success',\n });\n\n const aggregate: unknown[] = [];\n for await (const value of asyncIterable) {\n aggregate.push(value);\n\n query.setState({\n data: [...aggregate],\n });\n }\n return aggregate;\n}\n\n/**\n * To allow easy interactions with groups of related queries, such as\n * invalidating all queries of a router, we use an array as the path when\n * storing in tanstack query.\n *\n * @internal\n */\nexport function getQueryKeyInternal(\n path: readonly string[],\n input?: unknown,\n type?: QueryType,\n): TRPCQueryKey {\n // Construct a query key that is easy to destructure and flexible for\n // partial selecting etc.\n // https://github.com/trpc/trpc/issues/3128\n\n // some parts of the path may be dot-separated, split them up\n const splitPath = path.flatMap((part) => part.split('.'));\n\n if (!input && (!type || type === 'any')) {\n // this matches also all mutations (see `getMutationKeyInternal`)\n\n // for `utils.invalidate()` to match all queries (including vanilla react-query)\n // we don't want nested array if path is empty, i.e. `[]` instead of `[[]]`\n return splitPath.length ? [splitPath] : ([] as unknown as TRPCQueryKey);\n }\n\n if (\n type === 'infinite' &&\n isObject(input) &&\n ('direction' in input || 'cursor' in input)\n ) {\n const {\n cursor: _,\n direction: __,\n ...inputWithoutCursorAndDirection\n } = input;\n return [\n splitPath,\n {\n input: inputWithoutCursorAndDirection,\n type: 'infinite',\n },\n ];\n }\n\n return [\n splitPath,\n {\n ...(typeof input !== 'undefined' &&\n input !== skipToken && { input: input }),\n ...(type && type !== 'any' && { type: type }),\n },\n ];\n}\n\n/**\n * @internal\n */\nexport function getMutationKeyInternal(\n path: readonly string[],\n): TRPCMutationKey {\n // some parts of the path may be dot-separated, split them up\n const splitPath = path.flatMap((part) => part.split('.'));\n\n return splitPath.length ? [splitPath] : ([] as unknown as TRPCMutationKey);\n}\n\n/**\n * @internal\n */\nexport function unwrapLazyArg<T>(valueOrLazy: T | (() => T)): T {\n return (isFunction(valueOrLazy) ? valueOrLazy() : valueOrLazy) as T;\n}\n","import type {\n DataTag,\n DefinedInitialDataInfiniteOptions,\n QueryClient,\n QueryFunction,\n SkipToken,\n UndefinedInitialDataInfiniteOptions,\n UnusedSkipTokenInfiniteOptions,\n} from '@tanstack/react-query';\nimport { infiniteQueryOptions, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type { DistributiveOmit } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n ExtractCursorType,\n ResolverDef,\n TRPCInfiniteData,\n TRPCQueryBaseOptions,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport { createTRPCOptionsResult, getClientArgs } from './utils';\n\ntype ReservedOptions =\n | 'queryKey'\n | 'queryFn'\n | 'queryHashFn'\n | 'queryHash'\n | 'initialPageParam';\n\ninterface UndefinedTRPCInfiniteQueryOptionsIn<\n TInput,\n TQueryFnData,\n TData,\n TError,\n> extends DistributiveOmit<\n UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {\n initialCursor?: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface UndefinedTRPCInfiniteQueryOptionsOut<\n TInput,\n TQueryFnData,\n TData,\n TError,\n> extends DistributiveOmit<\n UndefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n 'initialPageParam'\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<TRPCQueryKey, TRPCInfiniteData<TInput, TData>, TError>;\n initialPageParam: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface DefinedTRPCInfiniteQueryOptionsIn<TInput, TQueryFnData, TData, TError>\n extends DistributiveOmit<\n DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {\n initialCursor?: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface DefinedTRPCInfiniteQueryOptionsOut<\n TInput,\n TQueryFnData,\n TData,\n TError,\n> extends DistributiveOmit<\n DefinedInitialDataInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n 'initialPageParam'\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<TRPCQueryKey, TRPCInfiniteData<TInput, TData>, TError>;\n initialPageParam: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface UnusedSkipTokenTRPCInfiniteQueryOptionsIn<\n TInput,\n TQueryFnData,\n TData,\n TError,\n> extends DistributiveOmit<\n UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {\n initialCursor?: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\ninterface UnusedSkipTokenTRPCInfiniteQueryOptionsOut<\n TInput,\n TQueryFnData,\n TData,\n TError,\n> extends DistributiveOmit<\n UnusedSkipTokenInfiniteOptions<\n TQueryFnData,\n TError,\n TRPCInfiniteData<TInput, TData>,\n TRPCQueryKey,\n NonNullable<ExtractCursorType<TInput>> | null\n >,\n 'initialPageParam'\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<TRPCQueryKey, TRPCInfiniteData<TInput, TData>, TError>;\n initialPageParam: NonNullable<ExtractCursorType<TInput>> | null;\n}\n\nexport interface TRPCInfiniteQueryOptions<TDef extends ResolverDef> {\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts: DefinedTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >,\n ): DefinedTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'],\n opts: UnusedSkipTokenTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >,\n ): UnusedSkipTokenTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts?: UndefinedTRPCInfiniteQueryOptionsIn<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >,\n ): UndefinedTRPCInfiniteQueryOptionsOut<\n TDef['input'],\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n}\n\ntype AnyTRPCInfiniteQueryOptionsIn =\n | DefinedTRPCInfiniteQueryOptionsIn<any, any, any, any>\n | UnusedSkipTokenTRPCInfiniteQueryOptionsIn<any, any, any, any>\n | UndefinedTRPCInfiniteQueryOptionsIn<any, any, any, any>;\n\ntype AnyTRPCInfiniteQueryOptionsOut =\n | DefinedTRPCInfiniteQueryOptionsOut<any, any, any, any>\n | UnusedSkipTokenTRPCInfiniteQueryOptionsOut<any, any, any, any>\n | UndefinedTRPCInfiniteQueryOptionsOut<any, any, any, any>;\n\nexport function trpcInfiniteQueryOptions(args: {\n input: unknown;\n query: typeof TRPCUntypedClient.prototype.query;\n queryClient: QueryClient | (() => QueryClient);\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts: AnyTRPCInfiniteQueryOptionsIn;\n}): AnyTRPCInfiniteQueryOptionsOut {\n const { input, query, path, queryKey, opts } = args;\n const inputIsSkipToken = input === skipToken;\n\n const queryFn: QueryFunction<unknown, TRPCQueryKey, unknown> = async (\n queryFnContext,\n ) => {\n const actualOpts = {\n ...opts,\n trpc: {\n ...opts?.trpc,\n ...(opts?.trpc?.abortOnUnmount\n ? { signal: queryFnContext.signal }\n : { signal: null }),\n },\n };\n\n const result = await query(\n ...getClientArgs(queryKey, actualOpts, {\n direction: queryFnContext.direction,\n pageParam: queryFnContext.pageParam,\n }),\n );\n\n return result;\n };\n\n return Object.assign(\n infiniteQueryOptions({\n ...opts,\n queryKey,\n queryFn: inputIsSkipToken ? skipToken : queryFn,\n initialPageParam: opts?.initialCursor ?? (input as any)?.cursor,\n }),\n { trpc: createTRPCOptionsResult({ path }) },\n );\n}\n","import type {\n MutationFunction,\n QueryClient,\n UseMutationOptions,\n} from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type {\n DistributiveOmit,\n MaybePromise,\n} from '@trpc/server/unstable-core-do-not-import';\nimport type {\n ResolverDef,\n TRPCMutationKey,\n TRPCQueryBaseOptions,\n TRPCQueryOptionsResult,\n} from './types';\nimport {\n createTRPCOptionsResult,\n getClientArgs,\n getMutationKeyInternal,\n unwrapLazyArg,\n} from './utils';\n\ntype ReservedOptions = 'mutationKey' | 'mutationFn';\n\ninterface TRPCMutationOptionsIn<TInput, TError, TOutput, TContext>\n extends DistributiveOmit<\n UseMutationOptions<TOutput, TError, TInput, TContext>,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\ninterface TRPCMutationOptionsOut<TInput, TError, TOutput, TContext>\n extends UseMutationOptions<TOutput, TError, TInput, TContext>,\n TRPCQueryOptionsResult {\n mutationKey: TRPCMutationKey;\n}\n\nexport interface TRPCMutationOptions<TDef extends ResolverDef> {\n <TContext = unknown>(\n opts?: TRPCMutationOptionsIn<\n TDef['input'],\n TRPCClientErrorLike<TDef>,\n TDef['output'],\n TContext\n >,\n ): TRPCMutationOptionsOut<\n TDef['input'],\n TRPCClientErrorLike<TDef>,\n TDef['output'],\n TContext\n >;\n}\n\n/**\n * @internal\n */\nexport interface MutationOptionsOverride {\n onSuccess: (opts: {\n /**\n * Calls the original function that was defined in the query's `onSuccess` option\n */\n originalFn: () => MaybePromise<void>;\n queryClient: QueryClient;\n /**\n * Meta data passed in from the `useMutation()` hook\n */\n meta: Record<string, unknown>;\n }) => MaybePromise<void>;\n}\n\ntype AnyTRPCMutationOptionsIn = TRPCMutationOptionsIn<\n unknown,\n unknown,\n unknown,\n unknown\n>;\n\ntype AnyTRPCMutationOptionsOut = TRPCMutationOptionsOut<\n unknown,\n unknown,\n unknown,\n unknown\n>;\n\n/**\n * @internal\n */\nexport function trpcMutationOptions(args: {\n mutate: typeof TRPCUntypedClient.prototype.mutation;\n queryClient: QueryClient | (() => QueryClient);\n path: readonly string[];\n opts: AnyTRPCMutationOptionsIn;\n overrides: MutationOptionsOverride | undefined;\n}): AnyTRPCMutationOptionsOut {\n const { mutate, path, opts, overrides } = args;\n const queryClient = unwrapLazyArg(args.queryClient);\n\n const mutationKey = getMutationKeyInternal(path);\n\n const defaultOpts = queryClient.defaultMutationOptions(\n queryClient.getMutationDefaults(mutationKey),\n );\n\n const mutationSuccessOverride: MutationOptionsOverride['onSuccess'] =\n overrides?.onSuccess ?? ((options) => options.originalFn());\n\n const mutationFn: MutationFunction = async (input) => {\n const result = await mutate(...getClientArgs([path, { input }], opts));\n\n return result;\n };\n\n return {\n ...opts,\n mutationKey: mutationKey,\n mutationFn,\n onSuccess(...args) {\n const originalFn = () =>\n opts?.onSuccess?.(...args) ?? defaultOpts?.onSuccess?.(...args);\n\n return mutationSuccessOverride({\n originalFn,\n queryClient,\n meta: opts?.meta ?? defaultOpts?.meta ?? {},\n });\n },\n trpc: createTRPCOptionsResult({ path }),\n };\n}\n","import type {\n DataTag,\n DefinedInitialDataOptions,\n QueryClient,\n QueryFunction,\n SkipToken,\n UndefinedInitialDataOptions,\n UnusedSkipTokenOptions,\n} from '@tanstack/react-query';\nimport { queryOptions, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type {\n coerceAsyncIterableToArray,\n DistributiveOmit,\n} from '@trpc/server/unstable-core-do-not-import';\nimport { isAsyncIterable } from '@trpc/server/unstable-core-do-not-import';\nimport type {\n ResolverDef,\n TRPCQueryBaseOptions,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport {\n buildQueryFromAsyncIterable,\n createTRPCOptionsResult,\n getClientArgs,\n unwrapLazyArg,\n} from './utils';\n\ntype ReservedOptions = 'queryKey' | 'queryFn' | 'queryHashFn' | 'queryHash';\n\ninterface UndefinedTRPCQueryOptionsIn<TQueryFnData, TData, TError>\n extends DistributiveOmit<\n UndefinedInitialDataOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\ninterface UndefinedTRPCQueryOptionsOut<TQueryFnData, TOutput, TError>\n extends UndefinedInitialDataOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TOutput>,\n TRPCQueryKey\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<TRPCQueryKey, coerceAsyncIterableToArray<TOutput>, TError>;\n}\n\ninterface DefinedTRPCQueryOptionsIn<TQueryFnData, TData, TError>\n extends DistributiveOmit<\n DefinedInitialDataOptions<\n coerceAsyncIterableToArray<NoInfer<TQueryFnData>>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\ninterface DefinedTRPCQueryOptionsOut<TQueryFnData, TData, TError>\n extends DefinedInitialDataOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<TRPCQueryKey, coerceAsyncIterableToArray<TData>, TError>;\n}\n\ninterface UnusedSkipTokenTRPCQueryOptionsIn<TQueryFnData, TData, TError>\n extends DistributiveOmit<\n UnusedSkipTokenOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TData>,\n TRPCQueryKey\n >,\n ReservedOptions\n >,\n TRPCQueryBaseOptions {}\n\ninterface UnusedSkipTokenTRPCQueryOptionsOut<TQueryFnData, TOutput, TError>\n extends UnusedSkipTokenOptions<\n coerceAsyncIterableToArray<TQueryFnData>,\n TError,\n coerceAsyncIterableToArray<TOutput>,\n TRPCQueryKey\n >,\n TRPCQueryOptionsResult {\n queryKey: DataTag<TRPCQueryKey, coerceAsyncIterableToArray<TOutput>, TError>;\n}\n\nexport interface TRPCQueryOptions<TDef extends ResolverDef> {\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts: DefinedTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >,\n ): DefinedTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'],\n opts?: UnusedSkipTokenTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >,\n ): UnusedSkipTokenTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n <TQueryFnData extends TDef['output'], TData = TQueryFnData>(\n input: TDef['input'] | SkipToken,\n opts?: UndefinedTRPCQueryOptionsIn<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >,\n ): UndefinedTRPCQueryOptionsOut<\n TQueryFnData,\n TData,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n}\n\ntype AnyTRPCQueryOptionsIn =\n | DefinedTRPCQueryOptionsIn<unknown, unknown, unknown>\n | UnusedSkipTokenTRPCQueryOptionsIn<unknown, unknown, unknown>\n | UndefinedTRPCQueryOptionsIn<unknown, unknown, unknown>;\n\ntype AnyTRPCQueryOptionsOut =\n | DefinedTRPCQueryOptionsOut<unknown, unknown, unknown>\n | UnusedSkipTokenTRPCQueryOptionsOut<unknown, unknown, unknown>\n | UndefinedTRPCQueryOptionsOut<unknown, unknown, unknown>;\n\n/**\n * @internal\n */\nexport function trpcQueryOptions(args: {\n input: unknown;\n query: typeof TRPCUntypedClient.prototype.query;\n queryClient: QueryClient | (() => QueryClient);\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts: AnyTRPCQueryOptionsIn;\n}): AnyTRPCQueryOptionsOut {\n const { input, query, path, queryKey, opts } = args;\n const queryClient = unwrapLazyArg(args.queryClient);\n\n const inputIsSkipToken = input === skipToken;\n\n const queryFn: QueryFunction<unknown, TRPCQueryKey> = async (\n queryFnContext,\n ) => {\n const actualOpts = {\n ...opts,\n trpc: {\n ...opts?.trpc,\n ...(opts?.trpc?.abortOnUnmount\n ? { signal: queryFnContext.signal }\n : { signal: null }),\n },\n };\n const queryKey = queryFnContext.queryKey;\n\n const result = await query(...getClientArgs(queryKey, actualOpts));\n\n if (isAsyncIterable(result)) {\n return buildQueryFromAsyncIterable(result, queryClient, queryKey);\n }\n\n return result;\n };\n\n return Object.assign(\n queryOptions({\n ...opts,\n queryKey,\n queryFn: inputIsSkipToken ? skipToken : queryFn,\n }),\n { trpc: createTRPCOptionsResult({ path }) },\n );\n}\n","import type { SkipToken } from '@tanstack/react-query';\nimport { hashKey, skipToken } from '@tanstack/react-query';\nimport type { TRPCClientErrorLike, TRPCUntypedClient } from '@trpc/client';\nimport type { TRPCConnectionState } from '@trpc/client/unstable-internals';\nimport type { Unsubscribable } from '@trpc/server/observable';\nimport type { inferAsyncIterableYield } from '@trpc/server/unstable-core-do-not-import';\nimport * as React from 'react';\nimport type {\n ResolverDef,\n TRPCQueryKey,\n TRPCQueryOptionsResult,\n} from './types';\nimport { createTRPCOptionsResult } from './utils';\n\ninterface BaseTRPCSubscriptionOptionsIn<TOutput, TError> {\n enabled?: boolean;\n onStarted?: () => void;\n onData?: (data: inferAsyncIterableYield<TOutput>) => void;\n onError?: (err: TError) => void;\n onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;\n}\n\ninterface UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError> {\n onStarted?: () => void;\n onData?: (data: inferAsyncIterableYield<TOutput>) => void;\n onError?: (err: TError) => void;\n onConnectionStateChange?: (state: TRPCConnectionState<TError>) => void;\n}\n\ninterface TRPCSubscriptionOptionsOut<TOutput, TError>\n extends UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>,\n TRPCQueryOptionsResult {\n enabled: boolean;\n queryKey: TRPCQueryKey;\n subscribe: (\n innerOpts: UnusedSkipTokenTRPCSubscriptionOptionsIn<TOutput, TError>,\n ) => Unsubscribable;\n}\n\nexport interface TRPCSubscriptionOptions<TDef extends ResolverDef> {\n (\n input: TDef['input'],\n opts?: UnusedSkipTokenTRPCSubscriptionOptionsIn<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >,\n ): TRPCSubscriptionOptionsOut<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >;\n (\n input: TDef['input'] | SkipToken,\n opts?: BaseTRPCSubscriptionOptionsIn<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >,\n ): TRPCSubscriptionOptionsOut<\n inferAsyncIterableYield<TDef['output']>,\n TRPCClientErrorLike<TDef>\n >;\n}\nexport type TRPCSubscriptionStatus =\n | 'idle'\n | 'connecting'\n | 'pending'\n | 'error';\n\nexport interface TRPCSubscriptionBaseResult<TOutput, TError> {\n status: TRPCSubscriptionStatus;\n data: undefined | TOutput;\n error: null | TError;\n /**\n * Reset the subscription\n */\n reset: () => void;\n}\n\nexport interface TRPCSubscriptionIdleResult<TOutput>\n extends TRPCSubscriptionBaseResult<TOutput, null> {\n status: 'idle';\n data: undefined;\n error: null;\n}\n\nexport interface TRPCSubscriptionConnectingResult<TOutput, TError>\n extends TRPCSubscriptionBaseResult<TOutput, TError> {\n status: 'connecting';\n data: undefined | TOutput;\n error: TError | null;\n}\n\nexport interface TRPCSubscriptionPendingResult<TOutput>\n extends TRPCSubscriptionBaseResult<TOutput, undefined> {\n status: 'pending';\n data: TOutput | undefined;\n error: null;\n}\n\nexport interface TRPCSubscriptionErrorResult<TOutput, TError>\n extends TRPCSubscriptionBaseResult<TOutput, TError> {\n status: 'error';\n data: TOutput | undefined;\n error: TError;\n}\n\nexport type TRPCSubscriptionResult<TOutput, TError> =\n | TRPCSubscriptionIdleResult<TOutput>\n | TRPCSubscriptionConnectingResult<TOutput, TError>\n | TRPCSubscriptionErrorResult<TOutput, TError>\n | TRPCSubscriptionPendingResult<TOutput>;\n\ntype AnyTRPCSubscriptionOptionsIn =\n | BaseTRPCSubscriptionOptionsIn<unknown, unknown>\n | UnusedSkipTokenTRPCSubscriptionOptionsIn<unknown, unknown>;\n\ntype AnyTRPCSubscriptionOptionsOut = TRPCSubscriptionOptionsOut<\n unknown,\n unknown\n>;\n\n/**\n * @internal\n */\nexport const trpcSubscriptionOptions = (args: {\n subscribe: typeof TRPCUntypedClient.prototype.subscription;\n path: readonly string[];\n queryKey: TRPCQueryKey;\n opts?: AnyTRPCSubscriptionOptionsIn;\n}): AnyTRPCSubscriptionOptionsOut => {\n const { subscribe, path, queryKey, opts = {} } = args;\n const input = queryKey[1]?.input;\n const enabled = 'enabled' in opts ? !!opts.enabled : input !== skipToken;\n\n const _subscribe: ReturnType<TRPCSubscriptionOptions<any>>['subscribe'] = (\n innerOpts,\n ) => {\n return subscribe(path.join('.'), input ?? undefined, innerOpts);\n };\n\n return {\n ...opts,\n enabled,\n subscribe: _subscribe,\n queryKey,\n trpc: createTRPCOptionsResult({ path }),\n };\n};\n\nexport function useSubscription<TOutput, TError>(\n opts: TRPCSubscriptionOptionsOut<TOutput, TError>,\n): TRPCSubscriptionResult<TOutput, TError> {\n type $Result = TRPCSubscriptionResult<TOutput, TError>;\n\n const optsRef = React.useRef(opts);\n optsRef.current = opts;\n\n const trackedProps = React.useRef(new Set<keyof $Result>([]));\n\n const addTrackedProp = React.useCallback((key: keyof $Result) => {\n trackedProps.current.add(key);\n }, []);\n\n type Unsubscribe = () => void;\n const currentSubscriptionRef = React.useRef<Unsubscribe>(() => {\n // noop\n });\n\n const reset = React.useCallback((): void => {\n // unsubscribe from the previous subscription\n currentSubscriptionRef.current?.();\n\n updateState(getInitialState);\n if (!opts.enabled) {\n return;\n }\n const subscription = opts.subscribe({\n onStarted: () => {\n optsRef.current.onStarted?.();\n updateState((prev) => ({\n ...(prev as any),\n status: 'pending',\n error: null,\n }));\n },\n onData: (data) => {\n optsRef.current.onData?.(data);\n updateState((prev) => ({\n ...(prev as any),\n status: 'pending',\n data,\n error: null,\n }));\n },\n onError: (error) => {\n optsRef.current.onError?.(error);\n updateState((prev) => ({\n ...(prev as any),\n status: 'error',\n error,\n }));\n },\n onConnectionStateChange: (result) => {\n optsRef.current.onConnectionStateChange?.(result);\n updateState((prev) => {\n switch (result.state) {\n case 'connecting':\n return {\n ...prev,\n status: 'connecting',\n error: result.error,\n };\n case 'pending':\n // handled in onStarted\n return prev;\n case 'idle':\n return {\n ...prev,\n status: 'idle',\n data: undefined,\n error: null,\n };\n }\n });\n },\n });\n\n currentSubscriptionRef.current = () => {\n subscription.unsubscribe();\n };\n // eslint-disable-next-line react-hooks/react-compiler\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hashKey(opts.queryKey), opts.enabled]);\n\n const getInitialState = React.useCallback((): $Result => {\n return opts.enabled\n ? {\n data: undefined,\n error: null,\n status: 'connecting',\n reset,\n }\n : {\n data: undefined,\n error: null,\n status: 'idle',\n reset,\n };\n }, [opts.enabled, reset]);\n\n const resultRef = React.useRef<$Result>(getInitialState());\n\n const [state, setState] = React.useState<$Result>(\n trackResult(resultRef.current, addTrackedProp),\n );\n\n state.reset = reset;\n\n const updateState = React.useCallback(\n (callback: (prevState: $Result) => $Result) => {\n const prev = resultRef.current;\n const next = (resultRef.current = callback(prev));\n\n let shouldUpdate = false;\n for (const key of trackedProps.current) {\n if (prev[key] !== next[key]) {\n shouldUpdate = true;\n break;\n }\n }\n if (shouldUpdate) {\n setState(trackResult(next, addTrackedProp));\n }\n },\n [addTrackedProp],\n );\n\n React.useEffect(() => {\n if (!opts.enabled) {\n return;\n }\n reset();\n\n return () => {\n currentSubscriptionRef.current?.();\n };\n }, [reset, opts.enabled]);\n\n return state;\n}\n\nfunction trackResult<T extends object>(\n result: T,\n onTrackResult: (key: keyof T) => void,\n): T {\n const trackedResult = new Proxy(result, {\n get(target, prop) {\n onTrackResult(prop as keyof T);\n return target[prop as keyof T];\n },\n });\n\n return trackedResult;\n}\n","import type { DataTag, QueryClient, QueryFilters } from '@tanstack/react-query';\nimport type {\n TRPCClient,\n TRPCClientErrorLike,\n TRPCRequestOptions,\n} from '@trpc/client';\nimport { getUntypedClient, TRPCUntypedClient } from '@trpc/client';\nimport type {\n AnyTRPCProcedure,\n AnyTRPCRootTypes,\n AnyTRPCRouter,\n inferProcedureInput,\n inferRouterContext,\n inferTransformedProcedureOutput,\n TRPCProcedureType,\n TRPCRouterRecord,\n} from '@trpc/server';\nimport { callTRPCProcedure, createTRPCRecursiveProxy } from '@trpc/server';\nimport type { MaybePromise } from '@trpc/server/unstable-core-do-not-import';\nimport {\n trpcInfiniteQueryOptions,\n type TRPCInfiniteQueryOptions,\n} from './infiniteQueryOptions';\nimport type { MutationOptionsOverride } from './mutationOptions';\nimport {\n trpcMutationOptions,\n type TRPCMutationOptions,\n} from './mutationOptions';\nimport { trpcQueryOptions, type TRPCQueryOptions } from './queryOptions';\nimport {\n trpcSubscriptionOptions,\n type TRPCSubscriptionOptions,\n} from './subscriptionOptions';\nimport type {\n OptionalCursorInput,\n ResolverDef,\n TRPCInfiniteData,\n TRPCMutationKey,\n TRPCQueryKey,\n WithRequired,\n} from './types';\nimport {\n getMutationKeyInternal,\n getQueryKeyInternal,\n unwrapLazyArg,\n} from './utils';\n\nexport interface DecorateRouterKeyable {\n /**\n * Calculate the TanStack Query Key for any path, could be used to invalidate every procedure beneath this path\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-keys\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryKey\n */\n pathKey: () => TRPCQueryKey;\n\n /**\n * Calculate a TanStack Query Filter for any path, could be used to manipulate every procedure beneath this path\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/filters\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryFilter\n */\n pathFilter: (\n filters?: QueryFilters<TRPCQueryKey>,\n ) => WithRequired<QueryFilters<TRPCQueryKey>, 'queryKey'>;\n}\n\ninterface TypeHelper<TDef extends ResolverDef> {\n /**\n * @internal prefer using inferInput and inferOutput to access types\n */\n '~types': {\n input: TDef['input'];\n output: TDef['output'];\n errorShape: TDef['errorShape'];\n };\n}\n\nexport type inferInput<\n TProcedure extends\n | DecorateInfiniteQueryProcedure<any>\n | DecorateQueryProcedure<any>\n | DecorateMutationProcedure<any>,\n> = TProcedure['~types']['input'];\n\nexport type inferOutput<\n TProcedure extends\n | DecorateInfiniteQueryProcedure<any>\n | DecorateQueryProcedure<any>\n | DecorateMutationProcedure<any>,\n> = TProcedure['~types']['output'];\n\nexport interface DecorateInfiniteQueryProcedure<TDef extends ResolverDef>\n extends TypeHelper<TDef> {\n /**\n * Create a set of type-safe infinite query options that can be passed to `useInfiniteQuery`, `prefetchInfiniteQuery` etc.\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/reference/infiniteQueryOptions#infinitequeryoptions\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#infiniteQueryOptions\n */\n infiniteQueryOptions: TRPCInfiniteQueryOptions<TDef>;\n\n /**\n * Calculate the TanStack Query Key for a Infinite Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-keys\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryKey\n */\n infiniteQueryKey: (input?: Partial<TDef['input']>) => DataTag<\n TRPCQueryKey,\n TRPCInfiniteData<TDef['input'], TDef['output']>,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n\n /**\n * Calculate a TanStack Query Filter for a Infinite Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/filters\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryFilter\n */\n infiniteQueryFilter: (\n input?: Partial<TDef['input']>,\n filters?: QueryFilters<\n DataTag<\n TRPCQueryKey,\n TRPCInfiniteData<TDef['input'], TDef['output']>,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n ) => WithRequired<\n QueryFilters<\n DataTag<\n TRPCQueryKey,\n TRPCInfiniteData<TDef['input'], TDef['output']>,\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n 'queryKey'\n >;\n}\nexport interface DecorateQueryProcedure<TDef extends ResolverDef>\n extends TypeHelper<TDef>,\n DecorateRouterKeyable {\n /**\n * Create a set of type-safe query options that can be passed to `useQuery`, `prefetchQuery` etc.\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/reference/queryOptions#queryoptions\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryOptions\n */\n queryOptions: TRPCQueryOptions<TDef>;\n\n /**\n * Calculate the TanStack Query Key for a Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/query-keys\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryKey\n */\n queryKey: (input?: Partial<TDef['input']>) => DataTag<\n TRPCQueryKey,\n TDef['output'],\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >;\n\n /**\n * Calculate a TanStack Query Filter for a Query Procedure\n *\n * @see https://tanstack.com/query/latest/docs/framework/react/guides/filters\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#queryFilter\n */\n queryFilter: (\n input?: Partial<TDef['input']>,\n filters?: QueryFilters<\n DataTag<\n TRPCQueryKey,\n TDef['output'],\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n ) => WithRequired<\n QueryFilters<\n DataTag<\n TRPCQueryKey,\n TDef['output'],\n TRPCClientErrorLike<{\n transformer: TDef['transformer'];\n errorShape: TDef['errorShape'];\n }>\n >\n >,\n 'queryKey'\n >;\n}\n\nexport interface DecorateMutationProcedure<TDef extends ResolverDef>\n extends TypeHelper<TDef> {\n /**\n * Create a set of type-safe mutation options that can be passed to `useMutation`\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#mutationOptions\n */\n mutationOptions: TRPCMutationOptions<TDef>;\n\n /**\n * Calculate the TanStack Mutation Key for a Mutation Procedure\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#mutationKey\n */\n mutationKey: () => TRPCMutationKey;\n}\n\nexport interface DecorateSubscriptionProcedure<TDef extends ResolverDef> {\n /**\n * Create a set of type-safe subscription options that can be passed to `useSubscription`\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/usage#subscriptionOptions\n */\n subscriptionOptions: TRPCSubscriptionOptions<TDef>;\n}\n\nexport type DecorateProcedure<\n TType extends TRPCProcedureType,\n TDef extends ResolverDef,\n> = TType extends 'query'\n ? DecorateQueryProcedure<TDef> &\n (TDef['input'] extends OptionalCursorInput\n ? DecorateInfiniteQueryProcedure<TDef>\n : Record<string, never>)\n : TType extends 'mutation'\n ? DecorateMutationProcedure<TDef>\n : TType extends 'subscription'\n ? DecorateSubscriptionProcedure<TDef>\n : never;\n\n/**\n * @internal\n */\nexport type DecoratedRouterRecord<\n TRoot extends AnyTRPCRootTypes,\n TRecord extends TRPCRouterRecord,\n> = {\n [TKey in keyof TRecord]: TRecord[TKey] extends infer $Value\n ? $Value extends TRPCRouterRecord\n ? DecoratedRouterRecord<TRoot, $Value> & DecorateRouterKeyable\n : $Value extends AnyTRPCProcedure\n ? DecorateProcedure<\n $Value['_def']['type'],\n {\n input: inferProcedureInput<$Value>;\n output: inferTransformedProcedureOutput<TRoot, $Value>;\n transformer: TRoot['transformer'];\n errorShape: TRoot['errorShape'];\n }\n >\n : never\n : never;\n};\n\nexport type TRPCOptionsProxy<TRouter extends AnyTRPCRouter> =\n DecoratedRouterRecord<\n TRouter['_def']['_config']['$types'],\n TRouter['_def']['record']\n > &\n DecorateRouterKeyable;\n\nexport interface TRPCOptionsProxyOptionsBase {\n queryClient: QueryClient | (() => QueryClient);\n overrides?: {\n mutations?: MutationOptionsOverride;\n };\n}\n\nexport interface TRPCOptionsProxyOptionsInternal<\n TRouter extends AnyTRPCRouter,\n> {\n router: TRouter;\n ctx:\n | inferRouterContext<TRouter>\n | (() => MaybePromise<inferRouterContext<TRouter>>);\n}\n\nexport interface TRPCOptionsProxyOptionsExternal<\n TRouter extends AnyTRPCRouter,\n> {\n client: TRPCUntypedClient<TRouter> | TRPCClient<TRouter>;\n}\n\nexport type TRPCOptionsProxyOptions<TRouter extends AnyTRPCRouter> =\n TRPCOptionsProxyOptionsBase &\n (\n | TRPCOptionsProxyOptionsInternal<TRouter>\n | TRPCOptionsProxyOptionsExternal<TRouter>\n );\n\ntype UtilsMethods =\n | keyof DecorateQueryProcedure<any>\n | keyof DecorateInfiniteQueryProcedure<any>\n | keyof DecorateMutationProcedure<any>\n | keyof DecorateSubscriptionProcedure<any>\n | keyof DecorateRouterKeyable;\n\n/**\n * Create a typed proxy from your router types. Can also be used on the server.\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/setup#3b-setup-without-react-context\n * @see https://trpc.io/docs/client/tanstack-react-query/server-components#5-create-a-trpc-caller-for-server-components\n */\nexport function createTRPCOptionsProxy<TRouter extends AnyTRPCRouter>(\n opts: TRPCOptionsProxyOptions<TRouter>,\n): TRPCOptionsProxy<TRouter> {\n const callIt = (type: TRPCProcedureType): any => {\n return (path: string, input: unknown, trpcOpts: TRPCRequestOptions) => {\n if ('router' in opts) {\n return Promise.resolve(unwrapLazyArg(opts.ctx)).then((ctx) =>\n callTRPCProcedure({\n router: opts.router,\n path: path,\n getRawInput: async () => input,\n ctx: ctx,\n type: type,\n signal: undefined,\n }),\n );\n }\n\n const untypedClient =\n opts.client instanceof TRPCUntypedClient\n ? opts.client\n : getUntypedClient(opts.client);\n\n return untypedClient[type](path, input, trpcOpts);\n };\n };\n\n return createTRPCRecursiveProxy(({ args, path: _path }) => {\n const path = [..._path];\n const utilName = path.pop() as UtilsMethods;\n const [arg1, arg2] = args as any[];\n\n const contextMap: Record<UtilsMethods, () => unknown> = {\n '~types': undefined as any,\n\n pathKey: () => {\n return getQueryKeyInternal(path);\n },\n pathFilter: (): QueryFilters => {\n return {\n ...arg1,\n queryKey: getQueryKeyInternal(path),\n };\n },\n\n queryOptions: () => {\n return trpcQueryOptions({\n input: arg1,\n opts: arg2,\n path,\n queryClient: opts.queryClient,\n queryKey: getQueryKeyInternal(path, arg1, 'query'),\n query: callIt('query'),\n });\n },\n queryKey: () => {\n return getQueryKeyInternal(path, arg1, 'query');\n },\n queryFilter: (): QueryFilters => {\n return {\n ...arg2,\n queryKey: getQueryKeyInternal(path, arg1, 'query'),\n };\n },\n\n infiniteQueryOptions: () => {\n return trpcInfiniteQueryOptions({\n input: arg1,\n opts: arg2,\n path,\n queryClient: opts.queryClient,\n queryKey: getQueryKeyInternal(path, arg1, 'infinite'),\n query: callIt('query'),\n });\n },\n infiniteQueryKey: () => {\n return getQueryKeyInternal(path, arg1, 'infinite');\n },\n infiniteQueryFilter: (): QueryFilters => {\n return {\n ...arg2,\n queryKey: getQueryKeyInternal(path, arg1, 'infinite'),\n };\n },\n\n mutationOptions: () => {\n return trpcMutationOptions({\n opts: arg1,\n path,\n queryClient: opts.queryClient,\n mutate: callIt('mutation'),\n overrides: opts.overrides?.mutations,\n });\n },\n mutationKey: () => {\n return getMutationKeyInternal(path);\n },\n\n subscriptionOptions: () => {\n return trpcSubscriptionOptions({\n opts: arg2,\n path,\n queryKey: getQueryKeyInternal(path, arg1, 'any'),\n subscribe: callIt('subscription'),\n });\n },\n };\n\n return contextMap[utilName]();\n });\n}\n","import type { QueryClient } from '@tanstack/react-query';\nimport type { TRPCClient } from '@trpc/client';\nimport type { AnyTRPCRouter } from '@trpc/server';\nimport * as React from 'react';\nimport type { TRPCOptionsProxy } from './createOptionsProxy';\nimport { createTRPCOptionsProxy } from './createOptionsProxy';\n\nexport interface CreateTRPCContextResult<TRouter extends AnyTRPCRouter> {\n TRPCProvider: React.FC<{\n children: React.ReactNode;\n queryClient: QueryClient;\n trpcClient: TRPCClient<TRouter>;\n }>;\n useTRPC: () => TRPCOptionsProxy<TRouter>;\n useTRPCClient: () => TRPCClient<TRouter>;\n}\n/**\n * Create a set of type-safe provider-consumers\n *\n * @see https://trpc.io/docs/client/tanstack-react-query/setup#3a-setup-the-trpc-context-provider\n */\nexport function createTRPCContext<\n TRouter extends AnyTRPCRouter,\n>(): CreateTRPCContextResult<TRouter> {\n const TRPCClientContext = React.createContext<TRPCClient<TRouter> | null>(\n null,\n );\n const TRPCContext = React.createContext<TRPCOptionsProxy<TRouter> | null>(\n null,\n );\n\n function TRPCProvider(\n props: Readonly<{\n children: React.ReactNode;\n queryClient: QueryClient;\n trpcClient: TRPCClient<TRouter>;\n }>,\n ) {\n const value = React.useMemo(\n () =>\n createTRPCOptionsProxy({\n client: props.trpcClient,\n queryClient: props.queryClient,\n }),\n [props.trpcClient, props.queryClient],\n );\n return (\n <TRPCClientContext.Provider value={props.trpcClient}>\n <TRPCContext.Provider value={value}>\n {props.children}\n </TRPCContext.Provider>\n </TRPCClientContext.Provider>\n );\n }\n\n function useTRPC() {\n const utils = React.useContext(TRPCContext);\n if (!utils) {\n throw new Error('useTRPC() can only be used inside of a <TRPCProvider>');\n }\n return utils;\n }\n\n function useTRPCClient() {\n const client = React.useContext(TRPCClientContext);\n if (!client) {\n throw new Error(\n 'useTRPCClient() can only be used inside of a <TRPCProvider>',\n );\n }\n return client;\n }\n\n return { TRPCProvider, useTRPC, useTRPCClient };\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@trpc/tanstack-react-query",
3
- "version": "11.3.1",
3
+ "type": "module",
4
+ "version": "11.3.2-canary.4+e70e78413",
4
5
  "description": "TanStack React Query Integration for tRPC",
5
6
  "author": "juliusmarminge",
6
7
  "license": "MIT",
7
- "main": "dist/index.js",
8
- "module": "dist/index.mjs",
9
- "typings": "dist/index.d.ts",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.mjs",
10
+ "types": "./dist/index.d.cts",
10
11
  "homepage": "https://trpc.io/docs/client/tanstack-react-query/setup",
11
12
  "repository": {
12
13
  "type": "git",
@@ -14,9 +15,8 @@
14
15
  "directory": "packages/tanstack-react-query"
15
16
  },
16
17
  "scripts": {
17
- "build": "rollup --config rollup.config.ts --configPlugin rollup-plugin-swc3",
18
- "dev": "pnpm build --watch",
19
- "codegen-entrypoints": "tsx entrypoints.script.ts",
18
+ "build": "tsdown",
19
+ "dev": "tsdown --watch",
20
20
  "lint": "eslint --cache src",
21
21
  "test-run:tsc": "tsc --noEmit --pretty",
22
22
  "ts-watch": "tsc --watch"
@@ -24,9 +24,14 @@
24
24
  "exports": {
25
25
  "./package.json": "./package.json",
26
26
  ".": {
27
- "import": "./dist/index.mjs",
28
- "require": "./dist/index.js",
29
- "default": "./dist/index.js"
27
+ "import": {
28
+ "default": "./dist/index.mjs",
29
+ "types": "./dist/index.d.mts"
30
+ },
31
+ "require": {
32
+ "default": "./dist/index.cjs",
33
+ "types": "./dist/index.d.cts"
34
+ }
30
35
  }
31
36
  },
32
37
  "files": [
@@ -49,16 +54,16 @@
49
54
  },
50
55
  "peerDependencies": {
51
56
  "@tanstack/react-query": "^5.80.3",
52
- "@trpc/client": "11.3.1",
53
- "@trpc/server": "11.3.1",
57
+ "@trpc/client": "11.3.2-canary.4+e70e78413",
58
+ "@trpc/server": "11.3.2-canary.4+e70e78413",
54
59
  "react": ">=18.2.0",
55
60
  "react-dom": ">=18.2.0",
56
61
  "typescript": ">=5.7.2"
57
62
  },
58
63
  "devDependencies": {
59
64
  "@tanstack/react-query": "^5.80.3",
60
- "@trpc/client": "11.3.1",
61
- "@trpc/server": "11.3.1",
65
+ "@trpc/client": "11.3.2-canary.4+e70e78413",
66
+ "@trpc/server": "11.3.2-canary.4+e70e78413",
62
67
  "@types/node": "^22.13.5",
63
68
  "@types/react": "^19.1.0",
64
69
  "eslint": "^9.26.0",
@@ -66,8 +71,7 @@
66
71
  "konn": "^0.7.0",
67
72
  "react": "^19.1.0",
68
73
  "react-dom": "^19.1.0",
69
- "rollup": "^4.34.8",
70
- "tsx": "^4.19.3",
74
+ "tsdown": "0.12.7",
71
75
  "typescript": "^5.8.2",
72
76
  "vitest": "^3.1.2",
73
77
  "ws": "^8.0.0",
@@ -79,5 +83,5 @@
79
83
  "funding": [
80
84
  "https://trpc.io/sponsor"
81
85
  ],
82
- "gitHead": "c97573dd72086529c3f26dcc5e96d8152337b7f7"
86
+ "gitHead": "e70e78413d5a05447c29f8b1e60aaa330607888f"
83
87
  }
package/dist/index.d.ts DELETED
@@ -1,10 +0,0 @@
1
- export { createTRPCContext } from './internals/Context';
2
- export type { TRPCOptionsProxy, inferInput, inferOutput, DecorateMutationProcedure, DecorateProcedure, DecorateRouterKeyable, DecorateQueryProcedure, DecorateSubscriptionProcedure, } from './internals/createOptionsProxy';
3
- export type { TRPCQueryOptions } from './internals/queryOptions';
4
- export type { TRPCInfiniteQueryOptions } from './internals/infiniteQueryOptions';
5
- export type { TRPCMutationOptions } from './internals/mutationOptions';
6
- export type { TRPCSubscriptionOptions, TRPCSubscriptionStatus, TRPCSubscriptionConnectingResult, TRPCSubscriptionErrorResult, TRPCSubscriptionIdleResult, TRPCSubscriptionPendingResult, TRPCSubscriptionResult, } from './internals/subscriptionOptions';
7
- export { createTRPCOptionsProxy } from './internals/createOptionsProxy';
8
- export { useSubscription } from './internals/subscriptionOptions';
9
- export type * from './internals/types';
10
- //# sourceMappingURL=index.d.ts.map