@falcondev-oss/trpc-vue-query 0.5.0-rc.2 → 0.5.0-rc.20
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 +41 -15
- package/dist/index.d.cts +30 -18
- package/dist/index.d.ts +30 -18
- package/dist/index.mjs +39 -13
- package/package.json +40 -31
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
|
|
22
|
-
__export(
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
23
|
createTRPCVueQueryClient: () => createTRPCVueQueryClient
|
|
24
24
|
});
|
|
25
|
-
module.exports = __toCommonJS(
|
|
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,27 +58,52 @@ 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 }, { 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
|
+
);
|
|
73
|
+
return (0, import_vue_query.queryOptions)({
|
|
74
|
+
queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0, import_vue.toValue)(_input), type)),
|
|
75
|
+
queryFn,
|
|
76
|
+
...maybeToRefs(queryOptions)
|
|
77
|
+
});
|
|
78
|
+
}
|
|
61
79
|
if (prop === "useQuery") {
|
|
62
80
|
const { trpc: trpcOptions, ...queryOptions } = opts;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
81
|
+
const input = firstArg;
|
|
82
|
+
return (0, import_vue_query.useQuery)(createQuery(input, { trpcOptions, queryOptions }));
|
|
83
|
+
}
|
|
84
|
+
if (prop === "useQueries") {
|
|
85
|
+
const { trpc: trpcOptions, combine, shallow, ...queryOptions } = opts;
|
|
86
|
+
const inputs = firstArg;
|
|
87
|
+
return (0, import_vue_query.useQueries)({
|
|
88
|
+
queries: (0, import_vue.computed)(
|
|
89
|
+
() => (0, import_vue.toValue)(inputs).map(
|
|
90
|
+
(i) => createQuery(i, { trpcOptions, queryOptions }, { type: "queries" })
|
|
91
|
+
)
|
|
92
|
+
),
|
|
93
|
+
combine,
|
|
94
|
+
...maybeToRefs({ shallow })
|
|
70
95
|
});
|
|
71
96
|
}
|
|
72
97
|
if (prop === "invalidate") {
|
|
73
98
|
return queryClient.invalidateQueries({
|
|
74
|
-
queryKey: getQueryKey(path, (0,
|
|
99
|
+
queryKey: getQueryKey(path, (0, import_vue.toValue)(firstArg), "query")
|
|
75
100
|
});
|
|
76
101
|
}
|
|
77
102
|
if (prop === "setQueryData") {
|
|
78
|
-
return queryClient.setQueryData(getQueryKey(path, (0,
|
|
103
|
+
return queryClient.setQueryData(getQueryKey(path, (0, import_vue.toValue)(opts), "query"), firstArg);
|
|
79
104
|
}
|
|
80
105
|
if (prop === "key") {
|
|
81
|
-
return getQueryKey(path, (0,
|
|
106
|
+
return getQueryKey(path, (0, import_vue.toValue)(firstArg), "query");
|
|
82
107
|
}
|
|
83
108
|
if (prop === "mutate") {
|
|
84
109
|
return trpc.mutation(joinedPath, firstArg, opts);
|
|
@@ -102,6 +127,7 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
|
|
|
102
127
|
(0, import_vue.watch)(
|
|
103
128
|
inputData,
|
|
104
129
|
() => {
|
|
130
|
+
if (inputData.value === import_vue_query.skipToken) return;
|
|
105
131
|
subscription.value?.unsubscribe();
|
|
106
132
|
subscription.value = trpc.subscription(joinedPath, inputData.value, {
|
|
107
133
|
...opts
|
|
@@ -117,7 +143,7 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
|
|
|
117
143
|
if (prop === "useInfiniteQuery") {
|
|
118
144
|
const { trpc: trpcOptions, ...queryOptions } = opts;
|
|
119
145
|
return (0, import_vue_query.useInfiniteQuery)({
|
|
120
|
-
queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0,
|
|
146
|
+
queryKey: (0, import_vue.computed)(() => getQueryKey(path, (0, import_vue.toValue)(firstArg), "infinite")),
|
|
121
147
|
queryFn: async ({ queryKey, pageParam, signal }) => trpc.query(
|
|
122
148
|
joinedPath,
|
|
123
149
|
{
|
|
@@ -141,7 +167,7 @@ function createTRPCVueQueryClient({
|
|
|
141
167
|
}) {
|
|
142
168
|
const client = (0, import_client.createTRPCUntypedClient)(trpc);
|
|
143
169
|
const decoratedClient = (0, import_server.createTRPCFlatProxy)((key) => {
|
|
144
|
-
return createVueQueryProxyDecoration(key, client, queryClient);
|
|
170
|
+
return createVueQueryProxyDecoration(key.toString(), client, queryClient);
|
|
145
171
|
});
|
|
146
172
|
return decoratedClient;
|
|
147
173
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,46 +1,57 @@
|
|
|
1
|
-
import { QueryKey, UseQueryOptions, UseQueryReturnType, 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 {
|
|
6
|
-
import { MaybeRefOrGetter, UnwrapRef } from 'vue';
|
|
5
|
+
import { Ref, MaybeRefOrGetter, UnwrapRef } from 'vue';
|
|
7
6
|
|
|
7
|
+
type inferAsyncIterableYield<T> = T extends AsyncIterable<infer U> ? U : T;
|
|
8
8
|
type TRPCSubscriptionObserver<TValue, TError> = {
|
|
9
9
|
onStarted: (opts: {
|
|
10
10
|
context: OperationContext | undefined;
|
|
11
11
|
}) => void;
|
|
12
|
-
onData: (value: TValue) => void;
|
|
12
|
+
onData: (value: inferAsyncIterableYield<TValue>) => void;
|
|
13
13
|
onError: (err: TError) => void;
|
|
14
14
|
onStopped: () => void;
|
|
15
15
|
onComplete: () => void;
|
|
16
16
|
};
|
|
17
|
-
type
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
type ArrayElement<T> = T extends readonly unknown[] ? T[number] : never;
|
|
18
|
+
type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
19
|
+
type Exact<Shape, T extends Shape> = Shape extends Primitive ? Shape : Shape extends object ? {
|
|
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;
|
|
21
|
+
} : Shape;
|
|
20
22
|
type DecorateProcedure<TProcedure extends AnyTRPCProcedure, TRouter extends AnyTRPCRouter> = TProcedure extends AnyTRPCQueryProcedure ? {
|
|
21
|
-
useQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure
|
|
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'> & {
|
|
22
24
|
trpc?: TRPCRequestOptions;
|
|
23
25
|
queryKey?: TQueryKey;
|
|
24
26
|
}>) => UseQueryReturnType<TData, TError>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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'> & {
|
|
31
|
+
trpc?: TRPCRequestOptions;
|
|
32
|
+
queryKey?: never;
|
|
33
|
+
combine?: (result: UseQueriesResults<TQueries[]>) => TCombinedResult;
|
|
34
|
+
shallow?: boolean;
|
|
35
|
+
}>) => Readonly<Ref<TCombinedResult>>;
|
|
36
|
+
query: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
|
|
37
|
+
invalidate: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => Promise<void>;
|
|
38
|
+
setQueryData: <TInput extends inferProcedureInput<TProcedure>>(updater: inferTransformedProcedureOutput<TRouter, TProcedure>, input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => ReturnType<QueryClient['setQueryData']>;
|
|
39
|
+
key: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => QueryKey;
|
|
29
40
|
} & (TProcedure['_def']['$types']['input'] extends {
|
|
30
41
|
cursor?: infer CursorType;
|
|
31
42
|
} ? {
|
|
32
|
-
useInfiniteQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends InfiniteData<TQueryFnData>, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends Omit<inferProcedureInput<TProcedure>, 'cursor'>,
|
|
43
|
+
useInfiniteQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends InfiniteData<TQueryFnData>, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<Omit<inferProcedureInput<TProcedure>, 'cursor'>, TInput>>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>>, 'queryKey' | keyof InitialPageParam> & {
|
|
33
44
|
trpc?: TRPCRequestOptions;
|
|
34
45
|
queryKey?: TQueryKey;
|
|
35
46
|
} & (undefined extends TProcedure['_def']['$types']['input']['cursor'] ? Partial<InitialPageParam<CursorType>> : InitialPageParam<CursorType>)>) => UseInfiniteQueryReturnType<TData, TError>;
|
|
36
47
|
} : object) : TProcedure extends AnyTRPCMutationProcedure ? {
|
|
37
|
-
mutate: <TInput extends inferProcedureInput<TProcedure
|
|
48
|
+
mutate: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
|
|
38
49
|
useMutation: <TData = inferTransformedProcedureOutput<TRouter, TProcedure>, TError = TRPCClientErrorLike<TRouter>, TVariables = inferProcedureInput<TProcedure>, TContext = unknown>(opts?: MaybeRefOrGetter<UseMutationOptions<TData, TError, TVariables, TContext> & {
|
|
39
50
|
trpc?: TRPCRequestOptions;
|
|
40
51
|
}>) => UseMutationReturnType<TData, TError, TVariables, TContext>;
|
|
41
52
|
} : TProcedure extends AnyTRPCSubscriptionProcedure ? {
|
|
42
|
-
subscribe: <TInput extends inferProcedureInput<TProcedure
|
|
43
|
-
useSubscription: <TInput extends inferProcedureInput<TProcedure
|
|
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;
|
|
44
55
|
} : never;
|
|
45
56
|
/**
|
|
46
57
|
* @internal
|
|
@@ -49,14 +60,15 @@ type DecoratedProcedureRecord<TProcedures extends Record<string, any>, TRouter e
|
|
|
49
60
|
[K in keyof TProcedures]: TProcedures[K] extends AnyTRPCProcedure ? DecorateProcedure<TProcedures[K], TRouter> : DecoratedProcedureRecord<TProcedures[K], TRouter>;
|
|
50
61
|
};
|
|
51
62
|
|
|
52
|
-
type QueryType = 'query' | 'infinite';
|
|
63
|
+
type QueryType = 'query' | 'queries' | 'infinite';
|
|
53
64
|
type TRPCQueryKey = [readonly string[], {
|
|
54
65
|
input?: unknown;
|
|
55
66
|
type?: QueryType;
|
|
56
67
|
}?];
|
|
68
|
+
|
|
57
69
|
declare function createTRPCVueQueryClient<TRouter extends AnyTRPCRouter>({ trpc, queryClient, }: {
|
|
58
70
|
queryClient: QueryClient;
|
|
59
71
|
trpc: CreateTRPCClientOptions<TRouter>;
|
|
60
72
|
}): DecoratedProcedureRecord<TRouter["_def"]["record"], TRouter>;
|
|
61
73
|
|
|
62
|
-
export { type TRPCQueryKey, createTRPCVueQueryClient };
|
|
74
|
+
export { type Exact, type TRPCQueryKey, createTRPCVueQueryClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,46 +1,57 @@
|
|
|
1
|
-
import { QueryKey, UseQueryOptions, UseQueryReturnType, 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 {
|
|
6
|
-
import { MaybeRefOrGetter, UnwrapRef } from 'vue';
|
|
5
|
+
import { Ref, MaybeRefOrGetter, UnwrapRef } from 'vue';
|
|
7
6
|
|
|
7
|
+
type inferAsyncIterableYield<T> = T extends AsyncIterable<infer U> ? U : T;
|
|
8
8
|
type TRPCSubscriptionObserver<TValue, TError> = {
|
|
9
9
|
onStarted: (opts: {
|
|
10
10
|
context: OperationContext | undefined;
|
|
11
11
|
}) => void;
|
|
12
|
-
onData: (value: TValue) => void;
|
|
12
|
+
onData: (value: inferAsyncIterableYield<TValue>) => void;
|
|
13
13
|
onError: (err: TError) => void;
|
|
14
14
|
onStopped: () => void;
|
|
15
15
|
onComplete: () => void;
|
|
16
16
|
};
|
|
17
|
-
type
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
type ArrayElement<T> = T extends readonly unknown[] ? T[number] : never;
|
|
18
|
+
type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
19
|
+
type Exact<Shape, T extends Shape> = Shape extends Primitive ? Shape : Shape extends object ? {
|
|
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;
|
|
21
|
+
} : Shape;
|
|
20
22
|
type DecorateProcedure<TProcedure extends AnyTRPCProcedure, TRouter extends AnyTRPCRouter> = TProcedure extends AnyTRPCQueryProcedure ? {
|
|
21
|
-
useQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends TQueryFnData, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure
|
|
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'> & {
|
|
22
24
|
trpc?: TRPCRequestOptions;
|
|
23
25
|
queryKey?: TQueryKey;
|
|
24
26
|
}>) => UseQueryReturnType<TData, TError>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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'> & {
|
|
31
|
+
trpc?: TRPCRequestOptions;
|
|
32
|
+
queryKey?: never;
|
|
33
|
+
combine?: (result: UseQueriesResults<TQueries[]>) => TCombinedResult;
|
|
34
|
+
shallow?: boolean;
|
|
35
|
+
}>) => Readonly<Ref<TCombinedResult>>;
|
|
36
|
+
query: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
|
|
37
|
+
invalidate: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => Promise<void>;
|
|
38
|
+
setQueryData: <TInput extends inferProcedureInput<TProcedure>>(updater: inferTransformedProcedureOutput<TRouter, TProcedure>, input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => ReturnType<QueryClient['setQueryData']>;
|
|
39
|
+
key: <TInput extends inferProcedureInput<TProcedure>>(input?: MaybeRefOrGetter<Exact<inferProcedureInput<TProcedure>, TInput>>) => QueryKey;
|
|
29
40
|
} & (TProcedure['_def']['$types']['input'] extends {
|
|
30
41
|
cursor?: infer CursorType;
|
|
31
42
|
} ? {
|
|
32
|
-
useInfiniteQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends InfiniteData<TQueryFnData>, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends Omit<inferProcedureInput<TProcedure>, 'cursor'>,
|
|
43
|
+
useInfiniteQuery: <TQueryFnData extends inferTransformedProcedureOutput<TRouter, TProcedure>, TError extends TRPCClientErrorLike<TRouter>, TData extends InfiniteData<TQueryFnData>, TQueryData extends TQueryFnData, TQueryKey extends QueryKey, TInput extends inferProcedureInput<TProcedure>>(input: MaybeRefOrGetter<Exact<Omit<inferProcedureInput<TProcedure>, 'cursor'>, TInput>>, opts?: MaybeRefOrGetter<Omit<UnwrapRef<UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>>, 'queryKey' | keyof InitialPageParam> & {
|
|
33
44
|
trpc?: TRPCRequestOptions;
|
|
34
45
|
queryKey?: TQueryKey;
|
|
35
46
|
} & (undefined extends TProcedure['_def']['$types']['input']['cursor'] ? Partial<InitialPageParam<CursorType>> : InitialPageParam<CursorType>)>) => UseInfiniteQueryReturnType<TData, TError>;
|
|
36
47
|
} : object) : TProcedure extends AnyTRPCMutationProcedure ? {
|
|
37
|
-
mutate: <TInput extends inferProcedureInput<TProcedure
|
|
48
|
+
mutate: <TInput extends inferProcedureInput<TProcedure>>(input: Exact<inferProcedureInput<TProcedure>, TInput>, opts?: TRPCRequestOptions) => Promise<inferTransformedProcedureOutput<TRouter, TProcedure>>;
|
|
38
49
|
useMutation: <TData = inferTransformedProcedureOutput<TRouter, TProcedure>, TError = TRPCClientErrorLike<TRouter>, TVariables = inferProcedureInput<TProcedure>, TContext = unknown>(opts?: MaybeRefOrGetter<UseMutationOptions<TData, TError, TVariables, TContext> & {
|
|
39
50
|
trpc?: TRPCRequestOptions;
|
|
40
51
|
}>) => UseMutationReturnType<TData, TError, TVariables, TContext>;
|
|
41
52
|
} : TProcedure extends AnyTRPCSubscriptionProcedure ? {
|
|
42
|
-
subscribe: <TInput extends inferProcedureInput<TProcedure
|
|
43
|
-
useSubscription: <TInput extends inferProcedureInput<TProcedure
|
|
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;
|
|
44
55
|
} : never;
|
|
45
56
|
/**
|
|
46
57
|
* @internal
|
|
@@ -49,14 +60,15 @@ type DecoratedProcedureRecord<TProcedures extends Record<string, any>, TRouter e
|
|
|
49
60
|
[K in keyof TProcedures]: TProcedures[K] extends AnyTRPCProcedure ? DecorateProcedure<TProcedures[K], TRouter> : DecoratedProcedureRecord<TProcedures[K], TRouter>;
|
|
50
61
|
};
|
|
51
62
|
|
|
52
|
-
type QueryType = 'query' | 'infinite';
|
|
63
|
+
type QueryType = 'query' | 'queries' | 'infinite';
|
|
53
64
|
type TRPCQueryKey = [readonly string[], {
|
|
54
65
|
input?: unknown;
|
|
55
66
|
type?: QueryType;
|
|
56
67
|
}?];
|
|
68
|
+
|
|
57
69
|
declare function createTRPCVueQueryClient<TRouter extends AnyTRPCRouter>({ trpc, queryClient, }: {
|
|
58
70
|
queryClient: QueryClient;
|
|
59
71
|
trpc: CreateTRPCClientOptions<TRouter>;
|
|
60
72
|
}): DecoratedProcedureRecord<TRouter["_def"]["record"], TRouter>;
|
|
61
73
|
|
|
62
|
-
export { type TRPCQueryKey, createTRPCVueQueryClient };
|
|
74
|
+
export { type Exact, type TRPCQueryKey, createTRPCVueQueryClient };
|
package/dist/index.mjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
2
|
import {
|
|
3
|
+
queryOptions as defineQueryOptions,
|
|
3
4
|
skipToken,
|
|
4
5
|
useInfiniteQuery,
|
|
5
6
|
useMutation,
|
|
7
|
+
useQueries,
|
|
6
8
|
useQuery
|
|
7
9
|
} from "@tanstack/vue-query";
|
|
8
|
-
import {
|
|
9
|
-
createTRPCUntypedClient
|
|
10
|
-
} from "@trpc/client";
|
|
10
|
+
import { createTRPCUntypedClient } from "@trpc/client";
|
|
11
11
|
import { createTRPCFlatProxy } from "@trpc/server";
|
|
12
12
|
import { createRecursiveProxy } from "@trpc/server/unstable-core-do-not-import";
|
|
13
|
-
import { toRef, toRefs
|
|
14
|
-
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";
|
|
15
15
|
function getQueryKey(path, input, type) {
|
|
16
16
|
const splitPath = path.flatMap((part) => part.split("."));
|
|
17
17
|
if (input === void 0 && !type) {
|
|
@@ -41,15 +41,40 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
|
|
|
41
41
|
if (prop === "query") {
|
|
42
42
|
return trpc.query(joinedPath, firstArg, opts);
|
|
43
43
|
}
|
|
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
|
+
);
|
|
56
|
+
return defineQueryOptions({
|
|
57
|
+
queryKey: computed(() => getQueryKey(path, toValue(_input), type)),
|
|
58
|
+
queryFn,
|
|
59
|
+
...maybeToRefs(queryOptions)
|
|
60
|
+
});
|
|
61
|
+
}
|
|
44
62
|
if (prop === "useQuery") {
|
|
45
63
|
const { trpc: trpcOptions, ...queryOptions } = opts;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
const input = firstArg;
|
|
65
|
+
return useQuery(createQuery(input, { trpcOptions, queryOptions }));
|
|
66
|
+
}
|
|
67
|
+
if (prop === "useQueries") {
|
|
68
|
+
const { trpc: trpcOptions, combine, shallow, ...queryOptions } = opts;
|
|
69
|
+
const inputs = firstArg;
|
|
70
|
+
return useQueries({
|
|
71
|
+
queries: computed(
|
|
72
|
+
() => toValue(inputs).map(
|
|
73
|
+
(i) => createQuery(i, { trpcOptions, queryOptions }, { type: "queries" })
|
|
74
|
+
)
|
|
75
|
+
),
|
|
76
|
+
combine,
|
|
77
|
+
...maybeToRefs({ shallow })
|
|
53
78
|
});
|
|
54
79
|
}
|
|
55
80
|
if (prop === "invalidate") {
|
|
@@ -85,6 +110,7 @@ function createVueQueryProxyDecoration(name, trpc, queryClient) {
|
|
|
85
110
|
watch(
|
|
86
111
|
inputData,
|
|
87
112
|
() => {
|
|
113
|
+
if (inputData.value === skipToken) return;
|
|
88
114
|
subscription.value?.unsubscribe();
|
|
89
115
|
subscription.value = trpc.subscription(joinedPath, inputData.value, {
|
|
90
116
|
...opts
|
|
@@ -124,7 +150,7 @@ function createTRPCVueQueryClient({
|
|
|
124
150
|
}) {
|
|
125
151
|
const client = createTRPCUntypedClient(trpc);
|
|
126
152
|
const decoratedClient = createTRPCFlatProxy((key) => {
|
|
127
|
-
return createVueQueryProxyDecoration(key, client, queryClient);
|
|
153
|
+
return createVueQueryProxyDecoration(key.toString(), client, queryClient);
|
|
128
154
|
});
|
|
129
155
|
return decoratedClient;
|
|
130
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.
|
|
4
|
+
"version": "0.5.0-rc.20",
|
|
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": "
|
|
26
|
-
"pnpm": "
|
|
35
|
+
"node": "22",
|
|
36
|
+
"pnpm": "10"
|
|
27
37
|
},
|
|
28
38
|
"peerDependencies": {
|
|
29
39
|
"@tanstack/vue-query": "^5.22.2",
|
|
30
|
-
"@trpc/client": "11",
|
|
31
|
-
"@trpc/server": "11",
|
|
40
|
+
"@trpc/client": "^11",
|
|
41
|
+
"@trpc/server": "^11",
|
|
32
42
|
"vue": "^3.4.19"
|
|
33
43
|
},
|
|
34
44
|
"dependencies": {
|
|
35
|
-
"@vueuse/core": "^
|
|
45
|
+
"@vueuse/core": "^13.0.0"
|
|
36
46
|
},
|
|
37
47
|
"devDependencies": {
|
|
38
|
-
"@commitlint/cli": "^19.
|
|
39
|
-
"@eslint/eslintrc": "^3.1
|
|
40
|
-
"@louishaftmann/commitlint-config": "^4.0
|
|
41
|
-
"@louishaftmann/eslint-config": "^4.0
|
|
42
|
-
"@louishaftmann/lintstaged-config": "^4.0
|
|
43
|
-
"@louishaftmann/prettier-config": "^4.0
|
|
44
|
-
"@tanstack/vue-query": "^5.
|
|
45
|
-
"@trpc/client": "11.0.
|
|
46
|
-
"@trpc/server": "11.0.
|
|
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/
|
|
49
|
-
"@
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
"
|
|
62
|
-
"
|
|
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"
|