@falcondev-oss/trpc-vue-query 0.5.0-rc.8 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -18,11 +18,11 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
20
  // src/index.ts
21
- var src_exports = {};
22
- __export(src_exports, {
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
23
  createTRPCVueQueryClient: () => createTRPCVueQueryClient
24
24
  });
25
- module.exports = __toCommonJS(src_exports);
25
+ module.exports = __toCommonJS(index_exports);
26
26
  var import_vue_query = require("@tanstack/vue-query");
27
27
  var import_client = require("@trpc/client");
28
28
  var import_server = require("@trpc/server");
@@ -58,13 +58,21 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
58
58
  if (prop === "query") {
59
59
  return trpc.query(joinedPath, firstArg, opts);
60
60
  }
61
- function createQuery(input, { trpcOptions, queryOptions }) {
61
+ function createQuery(_input, { trpcOptions, queryOptions }, { type = "query" } = {}) {
62
+ const queryFn = (0, import_vue.computed)(
63
+ () => (0, import_vue.toValue)(_input) === import_vue_query.skipToken ? import_vue_query.skipToken : async ({ signal }) => {
64
+ const input = (0, import_vue.toValue)(_input);
65
+ const output = await trpc.query(joinedPath, input, {
66
+ signal,
67
+ ...trpcOptions
68
+ });
69
+ if (type === "queries") return { output, input };
70
+ return output;
71
+ }
72
+ );
62
73
  return (0, import_vue_query.queryOptions)({
63
- queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0, import_core.toValue)(input), "query")),
64
- queryFn: async ({ queryKey, signal }) => trpc.query(joinedPath, queryKey[1]?.input, {
65
- signal,
66
- ...trpcOptions
67
- }),
74
+ queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0, import_vue.toValue)(_input), type)),
75
+ queryFn,
68
76
  ...maybeToRefs(queryOptions)
69
77
  });
70
78
  }
@@ -78,7 +86,9 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
78
86
  const inputs = firstArg;
79
87
  return (0, import_vue_query.useQueries)({
80
88
  queries: (0, import_vue.computed)(
81
- () => (0, import_core.toValue)(inputs).map((i) => createQuery(i, { trpcOptions, queryOptions }))
89
+ () => (0, import_vue.toValue)(inputs).map(
90
+ (i) => createQuery(i, { trpcOptions, queryOptions }, { type: "queries" })
91
+ )
82
92
  ),
83
93
  combine,
84
94
  ...maybeToRefs({ shallow })
@@ -86,14 +96,14 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
86
96
  }
87
97
  if (prop === "invalidate") {
88
98
  return queryClient.invalidateQueries({
89
- queryKey: getQueryKey(path, (0, import_core.toValue)(firstArg), "query")
99
+ queryKey: getQueryKey(path, (0, import_vue.toValue)(firstArg), "query")
90
100
  });
91
101
  }
92
102
  if (prop === "setQueryData") {
93
- return queryClient.setQueryData(getQueryKey(path, (0, import_core.toValue)(opts), "query"), firstArg);
103
+ return queryClient.setQueryData(getQueryKey(path, (0, import_vue.toValue)(opts), "query"), firstArg);
94
104
  }
95
105
  if (prop === "key") {
96
- return getQueryKey(path, (0, import_core.toValue)(firstArg), "query");
106
+ return getQueryKey(path, (0, import_vue.toValue)(firstArg), "query");
97
107
  }
98
108
  if (prop === "mutate") {
99
109
  return trpc.mutation(joinedPath, firstArg, opts);
@@ -117,6 +127,7 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
117
127
  (0, import_vue.watch)(
118
128
  inputData,
119
129
  () => {
130
+ if (inputData.value === import_vue_query.skipToken) return;
120
131
  subscription.value?.unsubscribe();
121
132
  subscription.value = trpc.subscription(joinedPath, inputData.value, {
122
133
  ...opts
@@ -132,7 +143,7 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
132
143
  if (prop === "useInfiniteQuery") {
133
144
  const { trpc: trpcOptions, ...queryOptions } = opts;
134
145
  return (0, import_vue_query.useInfiniteQuery)({
135
- queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0, import_core.toValue)(firstArg), "infinite")),
146
+ queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0, import_vue.toValue)(firstArg), "infinite")),
136
147
  queryFn: async ({ queryKey, pageParam, signal }) => trpc.query(
137
148
  joinedPath,
138
149
  {
@@ -156,7 +167,7 @@ function createTRPCVueQueryClient({
156
167
  }) {
157
168
  const client = (0, import_client.createTRPCUntypedClient)(trpc);
158
169
  const decoratedClient = (0, import_server.createTRPCFlatProxy)((key) => {
159
- return createVueQueryProxyDecoration(key, client, queryClient);
170
+ return createVueQueryProxyDecoration(key.toString(), client, queryClient);
160
171
  });
161
172
  return decoratedClient;
162
173
  }
package/dist/index.d.cts CHANGED
@@ -1,9 +1,8 @@
1
- import { QueryKey, UseQueryOptions, UseQueryReturnType, UseQueriesResults, QueryClient, InfiniteData, UseInfiniteQueryOptions, InitialPageParam, UseInfiniteQueryReturnType, UseMutationOptions, UseMutationReturnType } from '@tanstack/vue-query';
1
+ import { QueryKey, SkipToken, UseQueryOptions, UseQueryReturnType, UseQueriesResults, QueryClient, InfiniteData, UseInfiniteQueryOptions, InitialPageParam, UseInfiniteQueryReturnType, UseMutationOptions, UseMutationReturnType } from '@tanstack/vue-query';
2
2
  import { TRPCClientErrorLike, TRPCRequestOptions, OperationContext, CreateTRPCClientOptions } from '@trpc/client';
3
3
  import { AnyTRPCRouter, AnyTRPCProcedure, AnyTRPCQueryProcedure, inferTransformedProcedureOutput, inferProcedureInput, AnyTRPCMutationProcedure, AnyTRPCSubscriptionProcedure, inferProcedureOutput } from '@trpc/server';
4
4
  import { Unsubscribable } from '@trpc/server/observable';
5
- import { ProcedureOptions } from '@trpc/server/unstable-core-do-not-import';
6
- import { MaybeRefOrGetter, UnwrapRef, Ref } from 'vue';
5
+ import { Ref, MaybeRefOrGetter, UnwrapRef } from 'vue';
7
6
 
8
7
  type inferAsyncIterableYield<T> = T extends AsyncIterable<infer U> ? U : T;
9
8
  type TRPCSubscriptionObserver<TValue, TError> = {
@@ -21,17 +20,20 @@ type Exact<Shape, T extends Shape> = Shape extends Primitive ? Shape : Shape ext
21
20
  [Key in keyof T]: Key extends keyof Shape ? T[Key] extends Date ? T[Key] : T[Key] extends unknown[] ? Array<Exact<ArrayElement<Shape[Key]>, ArrayElement<T[Key]>>> : T[Key] extends readonly unknown[] ? ReadonlyArray<Exact<ArrayElement<Shape[Key]>, ArrayElement<T[Key]>>> : T[Key] extends object ? Exact<Shape[Key], T[Key]> : T[Key] : never;
22
21
  } : Shape;
23
22
  type DecorateProcedure<TProcedure extends AnyTRPCProcedure, TRouter extends AnyTRPCRouter> = TProcedure extends AnyTRPCQueryProcedure ? {
24
- useQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>>, 'queryKey'> & {
23
+ useQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>>(input: inferProcedureInput<TProcedure> extends void ? inferProcedureInput<TProcedure> : Ref<Exact<inferProcedureInput<TProcedure>, TInput> | SkipToken> | (() => Exact<inferProcedureInput<TProcedure>, TInput> | SkipToken), opts?: MaybeRefOrGetter<Omit<UnwrapRef<UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>>, 'queryKey'> & {
25
24
  trpc?: TRPCRequestOptions;
26
25
  queryKey?: TQueryKey;
27
26
  }>) => UseQueryReturnType<TData, TError>;
28
- useQueries: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>, TQueries extends UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, TCombinedResult = UseQueriesResults<TQueries[]>>(inputs: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>[]>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<TQueries>, 'queryKey'> & {
27
+ useQueries: <TQueryFnData extends {
28
+ output: inferTransformedProcedureOutput<TRouter, TProcedure>;
29
+ input: inferProcedureInput<TProcedure>;
30
+ }, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>, TQueries extends UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, TCombinedResult = UseQueriesResults<TQueries[]>>(inputs: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>[]>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<TQueries>, 'queryKey'> & {
29
31
  trpc?: TRPCRequestOptions;
30
32
  queryKey?: never;
31
33
  combine?: (result: UseQueriesResults<TQueries[]>) => TCombinedResult;
32
34
  shallow?: boolean;
33
35
  }>) => Readonly<Ref<TCombinedResult>>;
34
- query: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: ProcedureOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
36
+ query: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
35
37
  invalidate: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => Promise<void>;
36
38
  setQueryData: <TInput extends inferProcedureInput<TProcedure>>(updater: inferTransformedProcedureOutput<TRouter, TProcedure>, input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => ReturnType<QueryClient['setQueryData']>;
37
39
  key: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => QueryKey;
@@ -43,13 +45,13 @@ type DecorateProcedure<TProcedure extends AnyTRPCProcedure, TRouter extends AnyT
43
45
  queryKey?: TQueryKey;
44
46
  } & (undefined extends TProcedure['_def']['$types']['input']['cursor'] ? Partial<InitialPageParam<CursorType>> : InitialPageParam<CursorType>)>) => UseInfiniteQueryReturnType<TData, TError>;
45
47
  } : object) : TProcedure extends AnyTRPCMutationProcedure ? {
46
- mutate: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: ProcedureOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
48
+ mutate: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
47
49
  useMutation: <TData = inferTransformedProcedureOutput<TRouter, TProcedure>, TError = TRPCClientErrorLike<TRouter>, TVariables = inferProcedureInput<TProcedure>, TContext = unknown>(opts?: MaybeRefOrGetter<UseMutationOptions<TData, TError, TVariables, TContext> & {
48
50
  trpc?: TRPCRequestOptions;
49
51
  }>) => UseMutationReturnType<TData, TError, TVariables, TContext>;
50
52
  } : TProcedure extends AnyTRPCSubscriptionProcedure ? {
51
- subscribe: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts: ProcedureOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
52
- useSubscription: <TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>, opts: ProcedureOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
53
+ subscribe: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts: TRPCRequestOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
54
+ useSubscription: <TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>, opts: TRPCRequestOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
53
55
  } : never;
54
56
  /**
55
57
  * @internal
@@ -58,7 +60,7 @@ type DecoratedProcedureRecord<TProcedures extends Record<string, any>, TRouter e
58
60
  [K in keyof TProcedures]: TProcedures[K] extends AnyTRPCProcedure ? DecorateProcedure<TProcedures[K], TRouter> : DecoratedProcedureRecord<TProcedures[K], TRouter>;
59
61
  };
60
62
 
61
- type QueryType = 'query' | 'infinite';
63
+ type QueryType = 'query' | 'queries' | 'infinite';
62
64
  type TRPCQueryKey = [readonly string[], {
63
65
  input?: unknown;
64
66
  type?: QueryType;
package/dist/index.d.ts CHANGED
@@ -1,9 +1,8 @@
1
- import { QueryKey, UseQueryOptions, UseQueryReturnType, UseQueriesResults, QueryClient, InfiniteData, UseInfiniteQueryOptions, InitialPageParam, UseInfiniteQueryReturnType, UseMutationOptions, UseMutationReturnType } from '@tanstack/vue-query';
1
+ import { QueryKey, SkipToken, UseQueryOptions, UseQueryReturnType, UseQueriesResults, QueryClient, InfiniteData, UseInfiniteQueryOptions, InitialPageParam, UseInfiniteQueryReturnType, UseMutationOptions, UseMutationReturnType } from '@tanstack/vue-query';
2
2
  import { TRPCClientErrorLike, TRPCRequestOptions, OperationContext, CreateTRPCClientOptions } from '@trpc/client';
3
3
  import { AnyTRPCRouter, AnyTRPCProcedure, AnyTRPCQueryProcedure, inferTransformedProcedureOutput, inferProcedureInput, AnyTRPCMutationProcedure, AnyTRPCSubscriptionProcedure, inferProcedureOutput } from '@trpc/server';
4
4
  import { Unsubscribable } from '@trpc/server/observable';
5
- import { ProcedureOptions } from '@trpc/server/unstable-core-do-not-import';
6
- import { MaybeRefOrGetter, UnwrapRef, Ref } from 'vue';
5
+ import { Ref, MaybeRefOrGetter, UnwrapRef } from 'vue';
7
6
 
8
7
  type inferAsyncIterableYield<T> = T extends AsyncIterable<infer U> ? U : T;
9
8
  type TRPCSubscriptionObserver<TValue, TError> = {
@@ -21,17 +20,20 @@ type Exact<Shape, T extends Shape> = Shape extends Primitive ? Shape : Shape ext
21
20
  [Key in keyof T]: Key extends keyof Shape ? T[Key] extends Date ? T[Key] : T[Key] extends unknown[] ? Array<Exact<ArrayElement<Shape[Key]>, ArrayElement<T[Key]>>> : T[Key] extends readonly unknown[] ? ReadonlyArray<Exact<ArrayElement<Shape[Key]>, ArrayElement<T[Key]>>> : T[Key] extends object ? Exact<Shape[Key], T[Key]> : T[Key] : never;
22
21
  } : Shape;
23
22
  type DecorateProcedure<TProcedure extends AnyTRPCProcedure, TRouter extends AnyTRPCRouter> = TProcedure extends AnyTRPCQueryProcedure ? {
24
- useQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>>, 'queryKey'> & {
23
+ useQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>>(input: inferProcedureInput<TProcedure> extends void ? inferProcedureInput<TProcedure> : Ref<Exact<inferProcedureInput<TProcedure>, TInput> | SkipToken> | (() => Exact<inferProcedureInput<TProcedure>, TInput> | SkipToken), opts?: MaybeRefOrGetter<Omit<UnwrapRef<UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>>, 'queryKey'> & {
25
24
  trpc?: TRPCRequestOptions;
26
25
  queryKey?: TQueryKey;
27
26
  }>) => UseQueryReturnType<TData, TError>;
28
- useQueries: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>, TQueries extends UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, TCombinedResult = UseQueriesResults<TQueries[]>>(inputs: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>[]>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<TQueries>, 'queryKey'> & {
27
+ useQueries: <TQueryFnData extends {
28
+ output: inferTransformedProcedureOutput<TRouter, TProcedure>;
29
+ input: inferProcedureInput<TProcedure>;
30
+ }, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>, TQueries extends UseQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>, TCombinedResult = UseQueriesResults<TQueries[]>>(inputs: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>[]>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<TQueries>, 'queryKey'> & {
29
31
  trpc?: TRPCRequestOptions;
30
32
  queryKey?: never;
31
33
  combine?: (result: UseQueriesResults<TQueries[]>) => TCombinedResult;
32
34
  shallow?: boolean;
33
35
  }>) => Readonly<Ref<TCombinedResult>>;
34
- query: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: ProcedureOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
36
+ query: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
35
37
  invalidate: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => Promise<void>;
36
38
  setQueryData: <TInput extends inferProcedureInput<TProcedure>>(updater: inferTransformedProcedureOutput<TRouter, TProcedure>, input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => ReturnType<QueryClient['setQueryData']>;
37
39
  key: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => QueryKey;
@@ -43,13 +45,13 @@ type DecorateProcedure<TProcedure extends AnyTRPCProcedure, TRouter extends AnyT
43
45
  queryKey?: TQueryKey;
44
46
  } & (undefined extends TProcedure['_def']['$types']['input']['cursor'] ? Partial<InitialPageParam<CursorType>> : InitialPageParam<CursorType>)>) => UseInfiniteQueryReturnType<TData, TError>;
45
47
  } : object) : TProcedure extends AnyTRPCMutationProcedure ? {
46
- mutate: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: ProcedureOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
48
+ mutate: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
47
49
  useMutation: <TData = inferTransformedProcedureOutput<TRouter, TProcedure>, TError = TRPCClientErrorLike<TRouter>, TVariables = inferProcedureInput<TProcedure>, TContext = unknown>(opts?: MaybeRefOrGetter<UseMutationOptions<TData, TError, TVariables, TContext> & {
48
50
  trpc?: TRPCRequestOptions;
49
51
  }>) => UseMutationReturnType<TData, TError, TVariables, TContext>;
50
52
  } : TProcedure extends AnyTRPCSubscriptionProcedure ? {
51
- subscribe: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts: ProcedureOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
52
- useSubscription: <TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>, opts: ProcedureOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
53
+ subscribe: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts: TRPCRequestOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
54
+ useSubscription: <TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>, opts: TRPCRequestOptions & Partial<TRPCSubscriptionObserver<inferProcedureOutput<TProcedure>, TRPCClientErrorLike<TRouter>>>) => Unsubscribable;
53
55
  } : never;
54
56
  /**
55
57
  * @internal
@@ -58,7 +60,7 @@ type DecoratedProcedureRecord<TProcedures extends Record<string, any>, TRouter e
58
60
  [K in keyof TProcedures]: TProcedures[K] extends AnyTRPCProcedure ? DecorateProcedure<TProcedures[K], TRouter> : DecoratedProcedureRecord<TProcedures[K], TRouter>;
59
61
  };
60
62
 
61
- type QueryType = 'query' | 'infinite';
63
+ type QueryType = 'query' | 'queries' | 'infinite';
62
64
  type TRPCQueryKey = [readonly string[], {
63
65
  input?: unknown;
64
66
  type?: QueryType;
package/dist/index.mjs CHANGED
@@ -7,13 +7,11 @@ import {
7
7
  useQueries,
8
8
  useQuery
9
9
  } from "@tanstack/vue-query";
10
- import {
11
- createTRPCUntypedClient
12
- } from "@trpc/client";
10
+ import { createTRPCUntypedClient } from "@trpc/client";
13
11
  import { createTRPCFlatProxy } from "@trpc/server";
14
12
  import { createRecursiveProxy } from "@trpc/server/unstable-core-do-not-import";
15
- import { toRef, toRefs, toValue } from "@vueuse/core";
16
- import { computed, isReactive, onScopeDispose, shallowRef, watch } from "vue";
13
+ import { toRef, toRefs } from "@vueuse/core";
14
+ import { computed, isReactive, onScopeDispose, shallowRef, toValue, watch } from "vue";
17
15
  function getQueryKey(path, input, type) {
18
16
  const splitPath = path.flatMap((part) => part.split("."));
19
17
  if (input === void 0 && !type) {
@@ -43,13 +41,21 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
43
41
  if (prop === "query") {
44
42
  return trpc.query(joinedPath, firstArg, opts);
45
43
  }
46
- function createQuery(input, { trpcOptions, queryOptions }) {
44
+ function createQuery(_input, { trpcOptions, queryOptions }, { type = "query" } = {}) {
45
+ const queryFn = computed(
46
+ () => toValue(_input) === skipToken ? skipToken : async ({ signal }) => {
47
+ const input = toValue(_input);
48
+ const output = await trpc.query(joinedPath, input, {
49
+ signal,
50
+ ...trpcOptions
51
+ });
52
+ if (type === "queries") return { output, input };
53
+ return output;
54
+ }
55
+ );
47
56
  return defineQueryOptions({
48
- queryKey: computed(() => getQueryKey(path, toValue(input), "query")),
49
- queryFn: async ({ queryKey, signal }) => trpc.query(joinedPath, queryKey[1]?.input, {
50
- signal,
51
- ...trpcOptions
52
- }),
57
+ queryKey: computed(() => getQueryKey(path, toValue(_input), type)),
58
+ queryFn,
53
59
  ...maybeToRefs(queryOptions)
54
60
  });
55
61
  }
@@ -63,7 +69,9 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
63
69
  const inputs = firstArg;
64
70
  return useQueries({
65
71
  queries: computed(
66
- () => toValue(inputs).map((i) => createQuery(i, { trpcOptions, queryOptions }))
72
+ () => toValue(inputs).map(
73
+ (i) => createQuery(i, { trpcOptions, queryOptions }, { type: "queries" })
74
+ )
67
75
  ),
68
76
  combine,
69
77
  ...maybeToRefs({ shallow })
@@ -102,6 +110,7 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
102
110
  watch(
103
111
  inputData,
104
112
  () => {
113
+ if (inputData.value === skipToken) return;
105
114
  subscription.value?.unsubscribe();
106
115
  subscription.value = trpc.subscription(joinedPath, inputData.value, {
107
116
  ...opts
@@ -141,7 +150,7 @@ function createTRPCVueQueryClient({
141
150
  }) {
142
151
  const client = createTRPCUntypedClient(trpc);
143
152
  const decoratedClient = createTRPCFlatProxy((key) => {
144
- return createVueQueryProxyDecoration(key, client, queryClient);
153
+ return createVueQueryProxyDecoration(key.toString(), client, queryClient);
145
154
  });
146
155
  return decoratedClient;
147
156
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@falcondev-oss/trpc-vue-query",
3
3
  "type": "module",
4
- "version": "0.5.0-rc.8",
4
+ "version": "0.5.0",
5
5
  "description": "A tRPC wrapper around '@tanstack/vue-query'",
6
6
  "license": "MIT",
7
7
  "repository": "github:falcondev-oss/trpc-vue-query",
@@ -15,6 +15,16 @@
15
15
  "tanstack-query",
16
16
  "typescript"
17
17
  ],
18
+ "exports": {
19
+ "import": {
20
+ "types": "./dist/index.d.ts",
21
+ "default": "./dist/index.mjs"
22
+ },
23
+ "require": {
24
+ "types": "./dist/index.d.cts",
25
+ "default": "./dist/index.cjs"
26
+ }
27
+ },
18
28
  "main": "dist/index.cjs",
19
29
  "module": "dist/index.mjs",
20
30
  "types": "dist/index.d.ts",
@@ -22,45 +32,44 @@
22
32
  "dist"
23
33
  ],
24
34
  "engines": {
25
- "node": "20",
26
- "pnpm": "9"
35
+ "node": "22",
36
+ "pnpm": "10"
27
37
  },
28
38
  "peerDependencies": {
29
39
  "@tanstack/vue-query": "^5.22.2",
30
- "@trpc/client": "next",
31
- "@trpc/server": "next",
40
+ "@trpc/client": "^11",
41
+ "@trpc/server": "^11",
32
42
  "vue": "^3.4.19"
33
43
  },
34
44
  "dependencies": {
35
- "@vueuse/core": "^11.1.0"
45
+ "@vueuse/core": "^13.0.0"
36
46
  },
37
47
  "devDependencies": {
38
- "@commitlint/cli": "^19.5.0",
39
- "@eslint/eslintrc": "^3.1.0",
40
- "@louishaftmann/commitlint-config": "^4.0.3",
41
- "@louishaftmann/eslint-config": "^4.0.3",
42
- "@louishaftmann/lintstaged-config": "^4.0.3",
43
- "@louishaftmann/prettier-config": "^4.0.3",
44
- "@tanstack/vue-query": "^5.59.6",
45
- "@trpc/client": "11.0.0-rc.566",
46
- "@trpc/server": "11.0.0-rc.566",
48
+ "@commitlint/cli": "^19.8.0",
49
+ "@eslint/eslintrc": "^3.3.1",
50
+ "@louishaftmann/commitlint-config": "^4.2.0",
51
+ "@louishaftmann/eslint-config": "^4.2.0",
52
+ "@louishaftmann/lintstaged-config": "^4.2.0",
53
+ "@louishaftmann/prettier-config": "^4.2.0",
54
+ "@tanstack/vue-query": "^5.71.10",
55
+ "@trpc/client": "11.0.2",
56
+ "@trpc/server": "11.0.2",
47
57
  "@types/eslint": "^9.6.1",
48
- "@types/eslint__eslintrc": "^2.1.2",
49
- "@types/ws": "^8.5.12",
50
- "@vitest/ui": "^2.1.2",
51
- "eslint": "^9.12.0",
52
- "husky": "^9.1.6",
53
- "lint-staged": "^15.2.10",
54
- "prettier": "^3.3.3",
55
- "start-server-and-test": "^2.0.8",
56
- "tsup": "^8.3.0",
57
- "tsx": "^4.19.1",
58
- "type-fest": "^4.26.1",
59
- "typescript": "^5.6.3",
60
- "vitest": "^2.1.2",
61
- "vue": "^3.5.11",
62
- "ws": "^8.18.0",
63
- "zod": "^3.23.8"
58
+ "@types/ws": "^8.18.1",
59
+ "@vitest/ui": "^3.1.1",
60
+ "eslint": "^9.24.0",
61
+ "husky": "^9.1.7",
62
+ "lint-staged": "^15.5.0",
63
+ "prettier": "^3.5.3",
64
+ "start-server-and-test": "^2.0.11",
65
+ "tsup": "^8.4.0",
66
+ "tsx": "^4.19.3",
67
+ "type-fest": "^4.39.1",
68
+ "typescript": "^5.8.3",
69
+ "vitest": "^3.1.1",
70
+ "vue": "^3.5.13",
71
+ "ws": "^8.18.1",
72
+ "zod": "^3.24.2"
64
73
  },
65
74
  "changelogithub": {
66
75
  "extends": "gh:falcondev-it/configs/changelogithub"